|
52216
|
orbital by @ttyChud | Stardance
|
ttyChud
|
1
|
56.0
|
993
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-02T04:23:11Z", "hours": 56.0, "multiplier": 17.6, "payout": 993, "blessing": "neutral", "text": "This is Orbit Lens, a real-time 3D satellite tracking website built using vanilla JavaScript and Three.js. It tracks over 16,000 live space objects around earth using real-time data from CelesTrak. It has many features including 3d and 2d orbit tracking, 3d models of select satellites (ISS, Terra, HST, and Aqua). It also includes a filtering feature where you can filter satellites based on specific categories Before testing this project, it is important to know some stuff: You will have the best experience if you access this through a laptop or desktop Sometimes, the api maybe down or is not responding to requests so please keep in mind that if you see an alert saying API not responding, it is out of the website’s hands and it an error outside of my control. That’s it. Thank you for testing this project and hope you like it :)", "repo": "https://github.com/Himanshu121865/orbital", "demo": "https://orbital-sandy.vercel.app/"}]...
|
[{"post_id": 60029, "ts": "202 [{"post_id": 60029, "ts": "2026-09-02T04:19:17Z", "hours": 0.5989, "text": "OrbitLens Devlog #13: fixing deployment bugs 😭😭 Before i continue with this devlog, let me start by saying that modern security rules are the worst. Like istg, why do they have to be so strict? Anyway, you’ll see what i mean by that down below. THis session was all about fixing the deployment bugs. I was almost done and then these f bugs ruined it. This devlog has only abt 30 mins logged because i had the help of ai to fix this because this was way way out of my expertise. Here are the changes. I used ai for this devlog though cus i didn’t understand what it did (but i only used it for htis devlog): Problem 1: The [UNSUPPORTED_FEATURE] Vite Crash My very first Vercel build crashed immediately with a “Top-level await is currently not supported with the ‘iife’ output format” error. Apparently, the satellite.js library I use for SGP4 orbital propagation runs heavy calculations using Web Workers and WebAssembly. By default, Vite tries to bundle everything into an older iife format for maximum browser compatibility, which completely choked on the newer await feature inside the worker file. I fixed this (with the help of ai) by explicitly telling Vite’s internal bundler (Rolldown) to output modern ES modules for both the main thread and the background workers. I created a vite.config.js file and updated the configuration (see vite.config.js in the github repo) Problem 2: 404 Missing 3D Models After fixing the build, the site successfully deployed, but my 3D models (like the ISS and Hubble) and Earth textures threw 404 Not Found errors in the console. Because I was loading these assets while the app was running in my Three.js code using string paths (e.g., ‘/models/iss.glb’), Vite didn’t know they existed and simply excluded them from the final production build. I moved my models and textures folders into Vite’s public directory. Anything placed in the public folder gets copied exactly as is to the root of the final build. This bug wasn’t too bad but the next one was absolute hell. Problem 3: API, Cloudflare and CORS block This was the hardest part. Orbit Lens fetches live Two-Line Element (TLE) data for over 16,000 satellites directly from CelesTrak. It worked perfectly when i hosted it locally, but on Vercel, the browser instantly threw a 403 Forbidden error. CelesTrak uses Cloudflare to prevent automated scraping. When Cloudflare saw an Origin header coming from a deployed Vercel frontend instead of an normaly IP like my computer’s, it blocked the connection. Attempts to use public proxies (like allorigins) resulted in 408 Request Timeout errors because the multiple mb big satellite data took too long to transfer. To fix this, I used Vercel’s Native Rewrites (i have no idea how to use this so i asked ai to do it for me). “I” ;) created a vercel.json file in the root directory to act as a silent backend proxy. By fetching from my own local route (/api/celestrak), the browser doesn’t trigger CORS security. Vercel’s backend intercepts the request, strips the frontend Origin header that was triggering the firewall, and routes the raw data back to the application. This worked! And the website is finally live and i am about to ship the project!"}, {"post_id": 60005, "ts": "2026-09-02T03:10:06Z", "hours": 1.5539, "text": "OrbitLens Devlog #12: Added README.md and ARCHITECTURE.md In this session, i added the README and ARCHITECTURE.md. The README.md highlights the basic features of the website, the tech stack used and how to run this project locally. The ARCHITECTURE.md goes deeper into how the code itself works so anyone perusing it can get a better idea on how i built this project."}, {"post_id": 59764, "ts": "2026-09-01T18:10:36Z", "hours": 2.1944, "text": "OrbitLens Devlog #11: Semi-final changes In this session, i focused on finding small aspects that need to be improved and improved them. Change 1: Firstly, i realised that the dropdown i had implemented was the default dropdown and it didn’t rlly fare well when there were 16000 items to choose from. So i made a custom dropdown, which looks much better than the default one, and made a funciton along with it that shows like the first 200 items matching the search query or, if nothing in being searched, the first 200 items in the list that the API gave. This made the entire experiene so much better because the default dropdown looked kinda ugly cus it took the whole length of the screen. Normally, this wouldnt take too long but i accidentally deleted the wrong eventListeners multiple times because satFilter and satSearch were so similar. So i spent like a good amount of time trying ot find the problem, and it turned out that i justmodified or deleted the wrong thing. Change 2: I found a problem with the filtering system, more specifically in filtering the space stations. Previously, i just had all the satellites with ISS or CSS in their names classified as space station because there are only two space statoins in space right now (ISS and Tiangong) so i filtered any satellites with those two names. But i failed to take into account that other satellites might also have ISS or CSS in their names so instead of two satellites showin up, 16 satellites were avaialbe in that filter. And these were not space stations but rather other statellits which had like ISS or CSS in their names (e.g. Swisscube). So i changed the filter to filter the space stations by their respective NoradIDs, which worked. Change 3: This change wasnt too big; i modified the expanded map layout becaues how it was before led to it having a lot of blank space and probalby wouldnt have looked good in differnet devices."}, {"post_id": 59360, "ts": "2026-09-01T03:31:31Z", "hours": 4.2022, "text": "OrbitLens Devlog #10: mobile layout implementation + better loading screen I am nearing the first ship of this project so this session were just about the final aspects that needed to be improved Change 1: I completely changed the loading screen. Firstly, it now displays the loading percentage that accurately shows the real time progress. Secondly, overall it just looks much better. Thirdly, i also implemented an error notification in the main dashboard in case the API doesnt work and so the website doesnt look like it’s broken Change 2: I added a mobile layout option. by that i mean that if the user is accessing this website on a mobile, it won’t be completely botched (hopefully) p.s. i know this devlog isnt that detailed as my previous ones and that’s because there isn’t much to talk about in this session cus the main changes were in the styles.css (and i’m hella tired)"}, {"post_id": 58733, "ts": "2026-08-31T08:54:43Z", "hours": 6.5158, "text": "OrbitLens Devlog #9: implemented satellite filtering + earth connecting line and complete UI overhaul Now that the website has a proper engine and everything was working well, i decided to add some more stuff. I had two goals for this session. One was to add a satellite filtering option where the user can filter categories of satellites. The other is to change the ui because there were many imprefectoins. Here is a breakdown of what i changed and the challenges i faced: Change 1: I added a global filtering system to fiter satellites by categories. To do this i first built a string-matching engine directly into the TLE parsing loop. As the engine downloads the TLE data from the API, it scans the satellite names and tags them each with categories. I didn’t really know what to categorise them so i thought of some categories and i asked ai to think of some categories. These are the categories: StarlinkOnewebCommsNavigationWeatherand Other/Miscallaneous (which i impemented later; read below) I then wired the HTML dropdown directly into the WebGL gpu loop. Instead of deleting unselected satellites (which would take up too much gpu memory), the gpu simply multiplies their matrix scale to 0, 0, 0, which would just hide them. But there was a challenge that i faced, though it wasn’t a big one. When i first implemented the filter, I noticed that the total satellite count dropped to around 12,000. It turned out that all the satellites that didnt fit into any cateogry were not shown at all so i expanded the categories to include an OTHER category. I also had to make some changes in the raycaster or the users would accidentally be clicking on the hidden satellites. Change 2: I also added a line connecting the selected satellite directly to its exact spot on the Earth’s surface directly beneath it. I did this by first pre-allocating a THREE.BufferGeometry with exactly two vertices. Inside the animation loop, i then took the satellite’s live 3D coordinates and use a .normalize() math function. Because the Earth has a radius of exactly 1, normalizing the 3d coordinates perfectly attaches the bottom of the line to the planet’s surface. But, i ran into a bug where the line would randomly disappear depending on the camera angle. After some research (ai) i found out that this was caused by Three.js’s “Frustum Culling.” The code calculated the line bounding box once when the websited started up and when the camera moved away from that initial box, the gpu assumed the line was out of sight and stopped rendering it to save memory. So i just added a line of code (frustumCulled = false) that just overrode that. Change 3: Lastly, i essentially completely rewrote the styles.css to change how the ui looked cus i didn’t relaly like how it looked before. So this was the third change."}, {"post_id": 57886, "ts": "2026-08-30T06:40:40Z", "hours": 6.5181, "text": "OrbitLens Devlog #8: Scaling the 3d globe and some other stuff In the last update, i finally implemented the 2d map so this time i want to take this website a step further since the foundation is stable enough. I decided to go from tracking 5 hardcoded satellites to over 16,000 space objects. Here is what i changed, how i changed it and the challenges i faced: Change 1: Originally, i just added the starlink satellites to what i already had which was my initial goal. but the thing was, i was requesting the API for thousands of satellites, which did work once and all of them were stored in localStorage but for ‘testing purposes’ (i was just stupif), i cleared the localStorage and re-requested the TLE which it then instantly rejected cus of its ‘anti-bot firewalls’ and i got ip banned for like a couple of hours and it gave a 403 error aswell. To fix this, i read some CelesTrak documentation and i realised that there is a way to ismply request all the satellite (every satellite that it had) data in one request. Apparently there was a special search query (‘active’) that i could’ve used but instead i individually fetched everything. So once i used that query, i got all of the satellitse (a bit more than 16000) rendered on the earth but it was laggy, which leads to my second change. Change 2 To fix this massive lag caused by the 16000+ satellites, I completely replaced the standard 3D mesh pipeline with THREE.InstancedMesh so that instead of creating 16,000 individual sphere objects (which would like instantly crashes the browser), i can feed the GPU a single geometry and material, along with an array of 16,000 matrixes. That means now the gpu like renders everything in one go. But, I hit a massive 5-second freeze whenever a user clicked the ISS (which makes sense cus this was a 4k extremely detailed 3d model). The thing was, WebGL delays uploading heavy 3D textures to the GPU until an object is actually rendered on screen. And because the ISS model was hidden on startup, the compiler skipped it, so the website was stuck trying to render it when i selected the ISS. I solved this by forcing the renderer to draw one “dummy frame” with all models visible during the loading screen, which, in a sense, ‘warmed up’ the GPU. Change 3: The lag was better but it was still there and i realised the problem was that each of the dots representing a satellite were smoothly moving in space. This smooth-moving physics applied to over 16000 dots was what slowed down the website. To fix this, I rewrote the loop that propogates the satellite dots so physics calculations wouldn’t choke the main JavaScript thread. To do this i built a system to process the satellites in batches of 4,000 satellites per frame instead of all 16,000. Second, i scrapped geodetic trigonometry (latitude/longitude conversions; see one of the earlier devlogs) and replaced it with direct Earth-Centered, Earth-Fixed (ECEF) 3D vector rotation. Initially, our batches were too small, causing satellites to visually ‘teleport’ instead of smoothly gliding, which looked really glitchy. But by upgrading to matrix rotation, i managed to get a huge increase in speed. This allowed me to crank the batch size up and get that smooth motion across the entire thing. Change(s) 4: There were still some small bugs in the visual aspects like the dots disappearing or the transition jump (see previous devlog(s) to understand) and stuff but i took care of them."}, {"post_id": 56499, "ts": "2026-08-28T09:22:18Z", "hours": 3.8858, "text": "OrbitLens Devlog #7: Implementing a 2D orbit map To expand the functinality of the website, i wanted to add a 2D world map that has the 3d orbit projected on to it. Here is a breakdown of what i built, how i built it and the challenge i faced. What I Built: I made a 2D projection of the 3d globe using the HTML5 Canvas API that runs at the same time with the WebGL 3D engine. The map automatically appears when a satellite is selected, and fetches live telemetry to draw exactly one full orbital period (half past, half future). The orbit line looks like how it does on the 3d globe with a yellow line representing the past trail and a dotted blue line representing the predicted future track. I also built an “EXPAND” toggle that expands the map to fill most of the screen if the user wants to take a close look. Challenges: If a satellite flies east across the Pacific Ocean (where the International Date Line is), its longitude coordinates suddenly jump from +179deg to -179deg. I originally didnt take this into account and it had like this massive, horizontal glitch streak entirely across the screen cus of the sudden coordinate shift. To fix this, I programmed a strict mathematical distance gate into the drawing loop. If the engine detects that the X-coordinate has jumped by more than half the width of the canvas, it forces the renderer to break the current stroke (mapCtx.stroke()), lift the ‘pen’, and begin a completely new path on the opposite edge of the map (mapCtx.beginPath()). When plotting a full 90-minute orbit, the beginning of the yellow line and the end of the cyan line do not connect perfectly, leaving a massive gap. I originally thought this was a problem and tried for quite a while to fix this and i double checked the math formulas again and again. But i realised this isnt a math error, it’s just physics. While the satellite flies in a continuous circle, the Earth is physically rotating underneath it. By the time the satellite completes one lap, the ground has shifted roughly 22.5 degrees to the east, pushing the satellite’s relative ground track to the west. So i just left it like that to accurately represent the Earth’s rotation. This was the biggest problem and took the most time to fix. Three.js orbital camera controls are incredibly aggressive about capturing mouse events. The 3D engine was always suppressing the HTML ‘click’ events, making the “EXPAND” button not work. Not only that, the standard inline CSS was pushing the 3D canvas down the page, which misaligned everything and didnt allow me to select the satellites at all. To fix this, fisrt, i locked the 3D canvas to a fixed background layer (z-index: -1) to completely isolate it from the UI layout. Second, i bypassed the WebGL event interceptors entirely and connected the code that handles the expansion directly to a global window function (window.toggleMap) and just injected the button with the HTML onclick attribute. This fixed everything and now it works really great."}, {"post_id": 55587, "ts": "2026-08-27T15:15:22Z", "hours": 6.2028, "text": "OrbitLens Devlog #6: Implemented Sun and the day night cycles + camera panning improvements The core engine was working smoothly, so this session was focused on the ui and aesthetics and realism. Here are the changes i made, how i made them, and the challenges i faced: Change 1: Implemented the Sun The first major goal was replacing the static and boring lighting the 3D earth originally had with a Sun. To do this, I wrote a custom Solar Ephemeris algorithm. Using the current Julian date, it calculates the sun’s exact Right Ascension, Declination, and Earth’s Greenwich Mean Sidereal Time (GMST) to pinpoint the real-time subsolar vector. Since this was some complicated math, i had to use some ai for this. But in a WebGL engine, lights are purely mathematical vectors and there is no physical object in the sky. So when i first added a solid white sphere, it literally looked like a flat plastic toy and looked really ugly. To fix this, I abandoned the 3D ball and built a 2D Sprite using the HTML5 Canvas API to generate a radial gradient. By using Additive Blending to the material, I forced it to mathematically layer the light over the space, which created like this blinding, light that looked like the sun, which was good. Change 2: The Day/Night City lights cycle: To make the globe even more realistic, I wanted the night side of the Earth to have like the night time city lights rather than just a dark shadow. To build this, I added an 8k night-map texture (from Solar System Scope) and implemented a WebGL fragment shader into the Three.js’s native MeshPhongMaterial using a compiler hook. But there was a problem, the free night map that i implemented had this blue tint to it, and when i tried to correct it, it literally turned to this muddy, polluted yellow. To fix this, I programmed the shader to intercept the texture data, remove the color tint by calculating luminance, and pass it through a smoothstep noise gate. Anything below a 10% threshold was forced to pitch black, while populated areas were recolored with a warm golden orange hue. And it worked great! Change 3: More camera improvements Despite the previous session having to do with correcting the camera engine, there were still some stuff that i fixed here. The problem was since i removed OrbitControls in the last session (read previous devlog), once i had like hte earth upside, it was very hard to make it upright again. like at one point, i had the entire europe upside down and Africa was at the top of the globe but i couldnt get it back to normal. To fix this I changed the code so that the panning controls thing swaps between OrbitControls (for the 3D globe) and TrackballControls (for the satellites/spacecrafts). But there were some more challenges: When a zoom-in animation (read previous devlogs) finished (after selecting e.g. a satellite), the camera would like glitch backward into a less zoomed in position which was kinds uncomfortable to look at. Because the satellites were moving a static transition speed couldn’t catch them before the animation finished, so the final frame was a bit glitchy and the screen like jumped a bit. To fix all of these problems, I first made sure that disabled camera controls are completely turned off so they can’t fight the active zoom animations. I also made it that instead of moving at a steady speed, I added a speed-up effect as the camera gets closer to the target. This ensures that the camera glides smoothly into place right on time without any jerky jumps."}, {"post_id": 55313, "ts": "2026-08-27T01:49:10Z", "hours": 7.3289, "text": "OrbitLens Devlog #5: Camera panning improvements and performance updates After the changes from Devlog #4, all the math and the 3d models were all working but i faced some problems in other aspects of the website. Here are soe of the changes i made: Change 1: Correct orientation This was a small change, but i noticed that some satellites were a bit too big (like Aqua) and were positioned wrongly, so i just chaged teh scale and the rotation to make it a bit more realistic Changes 2, 3, and 4: The camera improvements I faced a lots of problems with the camera and how it worked. Before, i couldn’t rotated in all directions around the earth or the satellites because they were using OrbitControls so i swapped that out with TrackballControls, which allows for 360deg panninh There was also like a rubber band effect where the camera, when the camera lock was selected as satellite, zoomed in towards a satellite, i couldn’t interact with the satellite at all. THis was because as the satellite’s moving, the camera is also actuvely trying to catch up so it never actually ‘ended’ its animation so i was blocked from interacting with the satellite. To fix this i implemented delta tracking. The engine now calculates the exact mathematical vector the satellite moves every frame and shifts the camera’s physical position by that exact same amount, which worked. Previously, switching targets caused the camera to travel in a straight line, clipping through the Earth, which looked kinda unprofessional so I engineered a custom transition that separates the camera’s direction from its altitude. Now, when you select a new satellite, the camera zooms out, tracels in a an arc over the globe, and zooms in to the destination satellite. The animation still needs a lot of improvement cus some parts are still a bit glitchy, but i’m happy for now. Change 5: I implemented it that the TLEs are now stored in the actual localStorage for like 6 hours and then fetch new TLEs. So the user will always have the latest TLEs cus they update evey 12hrs."}, {"post_id": 54315, "ts": "2026-08-25T08:17:16Z", "hours": 5.8253, "text": "OrbitLens Devlog #4: Adding multiple satellites In my last update, I finally got a 3D model of the ISS rendering on the globe with a basic UI dashboard. It looked cool, but I wanted to scale it up. I wanted to add multiple famous satellites on top of the ISS: The Hubble Space Telescope (HST)NASA’s AquaNASA’s TerraTiangongISS (which already exists) At least for now. Maybe in later stages, I can add Starlink satellites or sth. Here is waht I built, how I built it, and the challenges I faced. Change/Challenge 1: the orbit that looked like a slinky I hardcoded a 90-minute orbit line (the ISS orbit time). But other satellites have different orbital periods, so 90 mins fell short. Increasing it to a 12-hour calculation made the ISS orbit look like a massive slinky wrapping around the Earth cus its orbit is only 90mins. I fixed this by dynamically calculating the exact total orbit time using the satellite’s math: const periodMinutes = Math.ceil((2 * Math.PI) / satrec.no); const halfPeriod = Math.floor(periodMinutes / 2); Change/Challenge 2: IP ban (again) The JS fetch() doesn’t consider a ‘429 too many requests’ (i got this cus vite reloaded the page every time i saved something) response as a network error, so it tried calculating the HTML error page as orbital math and crashed. I fixed this by manually checking the response.ok HTTP status. If the API blocks me, the code redirects to an “Offline Fallback Mode”—loading a hardcoded string of ISS TLE math so the app survives. Change/Challenge 3: improper API request After like 4 hours, I realized I still wasn’t getting a proper API response even though the IP ban would have worn off. I looked at the code and realized I was pulling data for all five satellites in one go by just comma-separating the values in the URL like this: …/gp.php?CATNR=25544,20580,48274&FORMAT=tle (each number references to a satellite) But after CelesTrak’s documentation, it strictly dictated that the CATNR parameter only accepts a single catalog number. The server rejected the request, my code assumed 0 satellites, and the engine crashed. The fix: Writing five separate fetch() blocks is messy, and implementing an await fetch() in a for-loop creates a slow “waterfall” effect (waiting for one to finish before starting the next). I fixed this with JavaScript’s Promise.all. I created an array of the exact NORAD IDs, mapped over it to generate separate, perfectly formatted fetch requests, and Promise.all fires them all at the exact same time. Change/Challenge 4: I wanted 3D models for all of these. I found Aqua and HST easily from NASA. I found Terra, but it was fetching some other incompatible file I didn’t have, so I just scratched the Terra model. Tiangong was the biggest pain—everywhere I looked was either paid or on Sketchfab, and I cant create a Sketchfab account cus of some stupid Epic Games restriction. Implementing the files I did have was the next issue. Hardcoding multiple GLTFLoader blocks would turn the code into spaghetti. Plus, 3D models from the internet aren’t scaled equally—my Hubble was massive, and my Aqua model was tiny. The fix: I built a central Model Registry object. It maps a satellite’s NORAD ID to its file path and a specific scale multiplier. Even better, I implemented a fallback for satellites I done have a model for. If I track a satellite (like Tiangong) but leave the file path as null, the code detects this and dynamically generates a glowing cyan sphere using Three.js math to take its place. Changes 5 and 6: I updated the dashboard to include a dropdown to select the satellite and the telemetry updates accordingly. I also added a camera toggle feature where the user can lock the camera to follow the satellite or stay locked on the Earth. Lastly, I implemented a custom loading screen while the models load. P.S.Lots of info is compressed cus i crossed the 4000 char limit."}, {"post_id": 53856, "ts": "2026-08-24T15:41:08Z", "hours": 5.4819, "text": "OrbitLens Devlog #3: Adding a dashboard + ISS 3d model implementation I had two goals in my mind in this session. One was to add a dashboard which displays some stats of the ISS and the other is to replace the red dot with a 3d model of the ISS. Here is what and how I implemented these stuff and the challenges i faced: Change/Problem 1: Before I even got started on the new stuff i wanted to add, i faced a big problem. While testing the physics code and other stuff, my build tool (Vite) was auto-refreshing the browser every time I hit save. This I spammed CelesTrak’s public API with dozens of requests per minute. This lead to me kinda getting IP blocked temporarily, at least that’s what i think happend because it always returned an HTML error page instead of a TLE string. My engine tried to calculate stuff with that empty TLE and just crashed the engine The fix: It is important to know that a TLE is not like a live GPS broadcast that gets transmitted every second. It’s literally like a mathematical snapshot of a ton of stuff of the ISS like its position and its orbit and NORAD only updates these TLEs like twice a day or sth. So I fixed this api problem by making it such that the localStorage caches the TLE once and uses it for the calculation for the next 12 hours and then updates the TLE after that. Change 2: Dashboard implementation I implemented a dashboard that shows up on the top left of the screen and shows the following stuff abotu the ISS: Longitude: the method i used to calculate this is in one of my previous devlogs (i think my last one). But here is a quick summary: To find coordinates I first calculated the Greenwich Mean Sidereal Time (gmst), which gives me the exact rotational angle of the Earth at that specific millisecond. I passed the ECI position (one of the previosu devlogs) and gmst into satellite.eciToGeodetic(), which projects the point onto the spinning globe in radians. I then multiplied those values by 180/pi to convert the radians into standard degrees latitude: same as longitude -altitude: The eciToGeodetic() function also calculates the distance from the satellite’s coordinates down to the mathematical surface of the Earth (the WGS84 or the ‘World Geodetic System 1984’ ellipsoid which is like a mathematical reference representation of the earth that is used in calculatoin and stuff). It outputs this directly as height in kilometers, which I then simply rounded to two dp. -velocity: The propagate() function outputs the satellite’s speed broken into X, Y, and Z axes (measured in km/s). To get a single speed, I calculated the magnitude of that 3D vector using the 3D Pythagorean theorem: v = squareroot(x^2 + y^2 + z^2) Change 3: To implement a 3d model, i first needed that 3d image. I wanted the highest quality NASA model available (Model D - IGOAL). I downloaded the official .fbx, converted it to a .glb, and ended up with a 255mb file. Which is really bad because shoving a 255mb file into a web browser would just crash the entire thing. So i just ran that through a draco compression and a texture compression (WebP 1024x1024) which brought the size to about 18mb which was much better. To render this, I used Three.js’s GLTFLoader with a dedicated Google WebAssembly DRACOLoader to decode the compressed math. The next couple of changes were just to make it more realistic: i changed the scale from 0.02 (where it was the size of a continent) to 0.001 (which made it a good size) the direction the ISS faced was not accurate at all so I wanted to rotate until its in the correct position. But because the animate() loop was actively using math to point the model forward 60 times a second, it kept overriding my manual rotation. So I wrapped the ISS in a THREE.Group, rotated the mesh 90 degrees inside that container, and then applied the math."}, {"post_id": 52416, "ts": "2026-08-22T15:23:19Z", "hours": 3.9075, "text": "OrbitLens Devlog #2: Adding ISS + Orbit This session was mainly focused on implementing the ISS first to the satellite tracker. Here are the changes I made: Satellite Data Extraction and ISS Positioning To understand what I did in this session, it is important to know how I can get the ‘live’ location of the ISS works: firstly, satellites don’t broadcast live GPS coordinates to the internet. Instead, radars track them and publish Two-Line Element (TLE) sets. A TLE is like a raw string that “acts as a mathematical variable of an orbit’s shape at a specific moment.” I got these TLE from a non-profit API called CelesTrak. these TLEs are kinda useless so I used the satellite.js library to parse te TLEs. This js engine also allows you to run what is known as SGP4 models (Simplified General Perturbations 4) which is a mathematical model used to predict an orbit. Using this, TLEs are then converted to what’s known as Earth-Centered Inertial (ECI) vectors which is a “non-rotating 3D coordinate system anchored to the center of the Earth with its axes fixed relative to the stars, allowing you to calculate a satellite’s absolute mathematical position in space independent of the Earth spinning beneath it.” The ECI is still not useful so I passed it through satellite.eciToGeodetic which converted the eci to geodetic coordinates (longitude, latitude and altitude) But there’s one more step before the data is useful. The thing is Three.js only understands Cartesian coordinates (x, y, z) so the geodetic coordinates need to be converted to catesian. I did that using these mathematical formulas: x = r * cos(lat) * cos(lon) y = r * sin(lat) z = -r * cos(lat) * sin(lon) Orbit Implementation Satellites do not orbit in perfect circles; they follow complex trajectories that shift as the Earth rotates underneath them. The ISS takes roughly 92 minutes to complete one full orbit around the Earth. I captured this entire window by running two separate for loops. For these loops, i created 92 differed Date objects spaced exactly 1 second apart. here are the loops and how they work in a small nutshell: The Past: I looped backward from -46 minutes up to 0 (the current moment) and inputted the X, Y, and Z coordinates in each loop into THREE.BufferGeometry to draw a solid yellow LineBasicMaterial. The Future: I looped forward from 0 to +46 minutes. In every single iteration of those loops, and did the same thing. Challenges: the hemisphere and orbit were originally flipped or were completely false so i had to wrack my brain and dind the cause. I spent more than an hour debugging this. Turns out the formula was wrong and i used sin instaed of cos. In te end, I also double checked my orbit and position with official ISS trackers, and they matched!"}, {"post_id": 51593, "ts": "2026-08-21T11:15:14Z", "hours": 2.2086, "text": "OrbitLens Devlog #1: Rendering the Earth 3D I just kick started this project, Orbit Lens, and my aim is to build a fully free, real-time 3D satellite tracker from scratch using Three.js and maybe some other libraries. Today was all about creating the core 3D arch. You can’t track a satellite without a planet to orbit, so Phase 1 was focused on rendering the Earth and setting up the Three.js environment. What I accomplished in Phase 1: Set up my environment with ViteBuilt the Three.js scene, camera, and render loop.Rendered a 3D Earth utilizing maps from solar system scope.Enabled OrbitControls to enable camera panning This is just the basic foundations of the project so there’ll be much more development in the future."}]...
|
Title: orbital by @ttyChud | Stardance
Devlogs:
O Title: orbital by @ttyChud | Stardance
Devlogs:
OrbitLens Devlog #1: Rendering the Earth 3D I just kick started this project, Orbit Lens, and my aim is to build a fully free, real-time 3D satellite tracker from scratch using Three.js and maybe some other libraries. Today was all about creating the core 3D arch. You can’t track a satellite without a planet to orbit, so Phase 1 was focused on rendering the Earth and setting up the Three.js environment. What I accomplished in Phase 1: Set up my environment with ViteBuilt the Three.js scene, camera, and render loop.Rendered a 3D Earth utilizing maps from solar system scope.Enabled OrbitControls to enable camera panning This is just the basic foundations of the project so there’ll be much more development in the future.
OrbitLens Devlog #2: Adding ISS + Orbit This session was mainly focused on implementing the ISS first to the satellite tracker. Here are the changes I made: Satellite Data Extraction and ISS Positioning To understand what I did in this session, it is important to know how I can get the ‘live’ location of the ISS works: firstly, satellites don’t broadcast live GPS coordinates to the internet. Instead, radars track them and publish Two-Line Element (TLE) sets. A TLE is like a raw string that “acts as a mathematical variable of an orbit’s shape at a specific moment.” I got these TLE from a non-profit API called CelesTrak. these TLEs are kinda useless so I used the satellite.js library to parse te TLEs. This js engine also allows you to run what is known as SGP4 models (Simplified General Perturbations 4) which is a mathematical model used to predict an orbit. Using this, TLEs are then converted to what’s known as Earth-Centered Inertial (ECI) vectors which is a “non-rotating 3D coordinate system anchored to the center of the Earth with its axes fixed relative to the stars, allowing you to calculate a satellite’s absolute mathematical position in space independent of the Earth spinning beneath it.” The ECI is still not useful so I passed it through satellite.eciToGeodetic which converted the eci to geodetic coordinates (longitude, latitude and altitude) But there’s one more step before the data is useful. The thing is Three.js only understands Cartesian coordinates (x, y, z) so the geodetic coordinates need to be converted to catesian. I did that using these mathematical formulas: x = r * cos(lat) * cos(lon) y = r * sin(lat) z = -r * cos(lat) * sin(lon) Orbit Implementation Satellites do not orbit in perfect circles; they follow complex trajectories that shift as the Earth rotates underneath them. The ISS takes roughly 92 minutes to complete one full orbit around the Earth. I captured this entire window by running two separate for loops. For these loops, i created 92 differed Date objects spaced exactly 1 second apart. here are the loops and how they work in a small nutshell: The Past: I looped backward from -46 minutes up to 0 (the current moment) and inputted the X, Y, and Z coordinates in each loop into THREE.BufferGeometry to draw a solid yellow LineBasicMaterial. The Future: I looped forward from 0 to +46 minutes. In every single iteration of those loops, and did the same thing. Challenges: the hemisphere and orbit were originally flipped or were completely false so i had to wrack my brain and dind the cause. I spent more than an hour debugging this. Turns out the formula was wrong and i used sin instaed of cos. In te end, I also double checked my orbit and position with official ISS trackers, and they matched!
OrbitLens Devlog #3: Adding a dashboard + ISS 3d model implementation I had two goals in my mind in this session. One was to add a dashboard which displays some stats of the ISS and the other is to replace the red dot with a 3d model of the ISS. Here is what and how I implemented these stuff and the challenges i faced: Change/Problem 1: Before I even got started on the new stuff i wanted to add, i faced a big problem. While testing the physics code and other stuff, my build tool (Vite) was auto-refreshing the browser every time I hit save. This I spammed CelesTrak’s public API with dozens of requests per minute. This lead to me kinda getting IP blocked temporarily, at least that’s what i think happend because it always returned an HTML error page instead of a TLE string. My engine tried to calculate stuff with that empty TLE and just crashed the engine The fix: It is important to know that a TLE is not like a live GPS broadcast that gets transmitted every second. It’s literally like a mathematical snapshot of a ton of stuff of the ISS like its position and its orbit and NORAD only updates these TLEs like twice a day or sth. So I fixed this api problem by making it such that the localStorage caches the TLE once and uses it for the calculation for the next 12 hours and then updates the TLE after that. Change 2: Dashboard implementation I implemented a dashboard that shows up on the top left of the screen and shows the following stuff abotu the ISS: Longitude: the method i used to calculate this is in one of my previous devlogs (i think my last one). But here is a quick summary: To find coordinates I first calculated the Greenwich Mean Sidereal Time (gmst), which gives me the exact rotational angle of the Earth at that specific millisecond. I passed the ECI position (one of the previosu devlogs) and gmst into satellite.eciToGeodetic(), which projects the point onto the spinning globe in radians. I then multiplied those values by 180/pi to convert the radians into standard degrees latitude: same as longitude -altitude: The eciToGeodetic() function also calculates the distance from the satellite’s coordinates down to the mathematical surface of the Earth (the WGS84 or the ‘World Geodetic System 1984’ ellipsoid which is like a mathematical reference representation of the earth that is used in calculatoin and stuff). It outputs this directly as height in kilometers, which I then simply rounded to two dp. -velocity: The propagate() function outputs the satellite’s speed broken into X, Y, and Z axes (measured in km/s). To get a single speed, I calculated the magnitude of that 3D vector using the 3D Pythagorean theorem: v = squareroot(x^2 + y^2 + z^2) Change 3: To implement a 3d model, i first needed that 3d image. I wanted the highest quality NASA model available (Model D - IGOAL). I downloaded the official .fbx, converted it to a .glb, and ended up with a 255mb file. Which is really bad because shoving a 255mb file into a web browser would just crash the entire thing. So i just ran that through a draco compression and a texture compression (WebP 1024x1024) which brought the size to about 18mb which was much better. To render this, I used Three.js’s GLTFLoader with a dedicated Google WebAssembly DRACOLoader to decode the compressed math. The next couple of changes were just to make it more realistic: i changed the scale from 0.02 (where it was the size of a continent) to 0.001 (which made it a good size) the direction the ISS faced was not accurate at all so I wanted to rotate until its in the correct position. But because the animate() loop was actively using math to point the model forward 60 times a second, it kept overriding my manual rotation. So I wrapped the ISS in a THREE.Group, rotated the mesh 90 degrees inside that container, and then applied the math.
OrbitLens Devlog #4: Adding multiple satellites In my last update, I finally got a 3D model of the ISS rendering on the globe with a basic UI dashboard. It looked cool, but I wanted to scale it up. I wanted to add multiple famous satellites on top of the ISS: The Hubble Space Telescope (HST)NASA’s AquaNASA’s TerraTiangongISS (which already exists) At least for now. Maybe in later stages, I can add Starlink satellites or sth. Here is waht I built, how I built it, and the challenges I faced. Change/Challenge 1: the orbit that looked like a slinky I hardcoded a 90-minute orbit line (the ISS orbit time). But other satellites have different orbital periods, so 90 mins fell short. Increasing it to a 12-hour calculation made the ISS orbit look like a massive slinky wrapping around the Earth cus its orbit is only 90mins. I fixed this by dynamically calculating the exact total orbit time using the satellite’s math: const periodMinutes = Math.ceil((2 * Math.PI) / satrec.no); const halfPeriod = Math.floor(periodMinutes / 2); Change/Challenge 2: IP ban (again) The JS fetch() doesn’t consider a ‘429 too many requests’ (i got this cus vite reloaded the page every time i saved something) response as a network error, so it tried calculating the HTML error page as orbital math and crashed. I fixed this by manually checking the response.ok HTTP status. If the API blocks me, the code redirects to an “Offline Fallback Mode”—loading a hardcoded string of ISS TLE math so the app survives. Change/Challenge 3: improper API request After like 4 hours, I realized I still wasn’t getting a proper API response even though the IP ban would have worn off. I looked at the code and realized I was pulling data for all five satellites in one go by just comma-separating the values in the URL like this: …/gp.php?CATNR=25544,20580,48274&FORMAT=tle (each number references to a satellite) But after CelesTrak’s documentation, it strictly dictated that the CATNR parameter only accepts a single catalog number. The server rejected the request, my code assumed 0 satellites, and the engine crashed. The fix: Writing five separate fetch() blocks is messy, and implementing an await fetch() in a for-loop creates a slow “waterfall” effect (waiting for one to finish before starting the next). I fixed this with JavaScript’s Promise.all. I created an array of the exact NORAD IDs, mapped over it to generate separate, perfectly formatted fetch requests, and Promise.all fires them all at the exact same time. Change/Challenge 4: I wanted 3D models for all of these. I found Aqua and HST easily from NASA. I found Terra, but it was fetching some other incompatible file I didn’t have, so I just scratched the Terra model. Tiangong was the biggest pain—everywhere I looked was either paid or on Sketchfab, and I cant create a Sketchfab account cus of some stupid Epic Games restriction. Implementing the files I did have was the next issue. Hardcoding multiple GLTFLoader blocks would turn the code into spaghetti. Plus, 3D models from the internet aren’t scaled equally—my Hubble was massive, and my Aqua model was tiny. The fix: I built a central Model Registry object. It maps a satellite’s NORAD ID to its file path and a specific scale multiplier. Even better, I implemented a fallback for satellites I done have a model for. If I track a satellite (like Tiangong) but leave the file path as null, the code detects this and dynamically generates a glowing cyan sphere using Three.js math to take its place. Changes 5 and 6: I updated the dashboard to include a dropdown to select the satellite and the telemetry updates accordingly. I also added a camera toggle feature where the user can lock the camera to follow the satellite or stay locked on the Earth. Lastly, I implemented a custom loading screen while the models load. P.S.Lots of info is compressed cus i crossed the 4000 char limit.
OrbitLens Devlog #5: Camera panning improvements and performance updates After the changes from Devlog #4, all the math and the 3d models were all working but i faced some problems in other aspects of the website. Here are soe of the changes i made: Change 1: Correct orientation This was a small change, but i noticed that some satellites were a bit too big (like Aqua) and were positioned wrongly, so i just chaged teh scale and the rotation to make it a bit more realistic Changes 2, 3, and 4: The camera improvements I faced a lots of problems with the camera and how it worked. Before, i couldn’t rotated in all directions around the earth or the satellites because they were using OrbitControls so i swapped that out with TrackballControls, which allows for 360deg panninh There was also like a rubber band effect where the camera, when the camera lock was selected as satellite, zoomed in towards a satellite, i couldn’t interact with the satellite at all. THis was because as the satellite’s moving, the camera is also actuvely trying to catch up so it never actually ‘ended’ its animation so i was blocked from interacting with the satellite. To fix this i implemented delta tracking. The engine now calculates the exact mathematical vector the satellite moves every frame and shifts the camera’s physical position by that exact same amount, which worked. Previously, switching targets caused the camera to travel in a straight line, clipping through the Earth, which looked kinda unprofessional so I engineered a custom transition that separates the camera’s direction from its altitude. Now, when you select a new satellite, the camera zooms out, tracels in a an arc over the globe, and zooms in to the destination satellite. The animation still needs a lot of improvement cus some parts are still a bit glitchy, but i’m happy for now. Change 5: I implemented it that the TLEs are now stored in the actual localStorage for like 6 hours and then fetch new TLEs. So the user will always have the latest TLEs cus they update evey 12hrs.
OrbitLens Devlog #6: Implemented Sun and the day night cycles + camera panning improvements The core engine was working smoothly, so this session was focused on the ui and aesthetics and realism. Here are the changes i made, how i made them, and the challenges i faced: Change 1: Implemented the Sun The first major goal was replacing the static and boring lighting the 3D earth originally had with a Sun. To do this, I wrote a custom Solar Ephemeris algorithm. Using the current Julian date, it calculates the sun’s exact Right Ascension, Declination, and Earth’s Greenwich Mean Sidereal Time (GMST) to pinpoint the real-time subsolar vector. Since this was some complicated math, i had to use some ai for this. But in a WebGL engine, lights are purely mathematical vectors and there is no physical object in the sky. So when i first added a solid white sphere, it literally looked like a flat plastic toy and looked really ugly. To fix this, I abandoned the 3D ball and built a 2D Sprite using the HTML5 Canvas API to generate a radial gradient. By using Additive Blending to the material, I forced it to mathematically layer the light over the space, which created like this blinding, light that looked like the sun, which was good. Change 2: The Day/Night City lights cycle: To make the globe even more realistic, I wanted the night side of the Earth to have like the night time city lights rather than just a dark shadow. To build this, I added an 8k night-map texture (from Solar System Scope) and implemented a WebGL fragment shader into the Three.js’s native MeshPhongMaterial using a compiler hook. But there was a problem, the free night map that i implemented had this blue tint to it, and when i tried to correct it, it literally turned to this muddy, polluted yellow. To fix this, I programmed the shader to intercept the texture data, remove the color tint by calculating luminance, and pass it through a smoothstep noise gate. Anything below a 10% threshold was forced to pitch black, while populated areas were recolored with a warm golden orange hue. And it worked great! Change 3: More camera improvements Despite the previous session having to do with correcting the camera engine, there were still some stuff that i fixed here. The problem was since i removed OrbitControls in the last session (read previous devlog), once i had like hte earth upside, it was very hard to make it upright again. like at one point, i had the entire europe upside down and Africa was at the top of the globe but i couldnt get it back to normal. To fix this I changed the code so that the panning controls thing swaps between OrbitControls (for the 3D globe) and TrackballControls (for the satellites/spacecrafts). But there were some more challenges: When a zoom-in animation (read previous devlogs) finished (after selecting e.g. a satellite), the camera would like glitch backward into a less zoomed in position which was kinds uncomfortable to look at. Because the satellites were moving a static transition speed couldn’t catch them before the animation finished, so the final frame was a bit glitchy and the screen like jumped a bit. To fix all of these problems, I first made sure that disabled camera controls are completely turned off so they can’t fight the active zoom animations. I also made it that instead of moving at a steady speed, I added a speed-up effect as the camera gets closer to the target. This ensures that the camera glides smoothly into place right on time without any jerky jumps.
OrbitLens Devlog #7: Implementing a 2D orbit map To expand the functinality of the website, i wanted to add a 2D world map that has the 3d orbit projected on to it. Here is a breakdown of what i built, how i built it and the challenge i faced. What I Built: I made a 2D projection of the 3d globe using the HTML5 Canvas API that runs at the same time with the WebGL 3D engine. The map automatically appears when a satellite is selected, and fetches live telemetry to draw exactly one full orbital period (half past, half future). The orbit line looks like how it does on the 3d globe with a yellow line representing the past trail and a dotted blue line representing the predicted future track. I also built an “EXPAND” toggle that expands the map to fill most of the screen if the user wants to take a close look. Challenges: If a satellite flies east across the Pacific Ocean (where the International Date Line is), its longitude coordinates suddenly jump from +179deg to -179deg. I originally didnt take this into account and it had like this massive, horizontal glitch streak entirely across the screen cus of the sudden coordinate shift. To fix this, I programmed a strict mathematical distance gate into the drawing loop. If the engine detects that the X-coordinate has jumped by more than half the width of the canvas, it forces the renderer to break the current stroke (mapCtx.stroke()), lift the ‘pen’, and begin a completely new path on the opposite edge of the map (mapCtx.beginPath()). When plotting a full 90-minute orbit, the beginning of the yellow line and the end of the cyan line do not connect perfectly, leaving a massive gap. I originally thought this was a problem and tried for quite a while to fix this and i double checked the math formulas again and again. But i realised this isnt a math error, it’s just physics. While the satellite flies in a continuous circle, the Earth is physically rotating underneath it. By the time the satellite completes one lap, the ground has shifted roughly 22.5 degrees to the east, pushing the satellite’s relative ground track to the west. So i just left it like that to accurately represent the Earth’s rotation. This was the biggest problem and took the most time to fix. Three.js orbital camera controls are incredibly aggressive about capturing mouse events. The 3D engine was always suppressing the HTML ‘click’ events, making the “EXPAND” button not work. Not only that, the standard inline CSS was pushing the 3D canvas down the page, which misaligned everything and didnt allow me to select the satellites at all. To fix this, fisrt, i locked the 3D canvas to a fixed background layer (z-index: -1) to completely isolate it from the UI layout. Second, i bypassed the WebGL event interceptors entirely and connected the code that handles the expansion directly to a global window function (window.toggleMap) and just injected the button with the HTML onclick attribute. This fixed everything and now it works really great.
OrbitLens Devlog #8: Scaling the 3d globe and some other stuff In the last update, i finally implemented the 2d map so this time i want to take this website a step further since the foundation is stable enough. I decided to go from tracking 5 hardcoded satellites to over 16,000 space objects. Here is what i changed, how i changed it and the challenges i faced: Change 1: Originally, i just added the starlink satellites to what i already had which was my initial goal. but the thing was, i was requesting the API for thousands of satellites, which did work once and all of them were stored in localStorage but for ‘testing purposes’ (i was just stupif), i cleared the localStorage and re-requested the TLE which it then instantly rejected cus of its ‘anti-bot firewalls’ and i got ip banned for like a couple of hours and it gave a 403 error aswell. To fix this, i read some CelesTrak documentation and i realised that there is a way to ismply request all the satellite (every satellite that it had) data in one request. Apparently there was a special search query (‘active’) that i could’ve used but instead i individually fetched everything. So once i used that query, i got all of the satellitse (a bit more than 16000) rendered on the earth but it was laggy, which leads to my second change. Change 2 To fix this massive lag caused by the 16000+ satellites, I completely replaced the standard 3D mesh pipeline with THREE.InstancedMesh so that instead of creating 16,000 individual sphere objects (which would like instantly crashes the browser), i can feed the GPU a single geometry and material, along with an array of 16,000 matrixes. That means now the gpu like renders everything in one go. But, I hit a massive 5-second freeze whenever a user clicked the ISS (which makes sense cus this was a 4k extremely detailed 3d model). The thing was, WebGL delays uploading heavy 3D textures to the GPU until an object is actually rendered on screen. And because the ISS model was hidden on startup, the compiler skipped it, so the website was stuck trying to render it when i selected the ISS. I solved this by forcing the renderer to draw one “dummy frame” with all models visible during the loading screen, which, in a sense, ‘warmed up’ the GPU. Change 3: The lag was better but it was still there and i realised the problem was that each of the dots representing a satellite were smoothly moving in space. This smooth-moving physics applied to over 16000 dots was what slowed down the website. To fix this, I rewrote the loop that propogates the satellite dots so physics calculations wouldn’t choke the main JavaScript thread. To do this i built a system to process the satellites in batches of 4,000 satellites per frame instead of all 16,000. Second, i scrapped geodetic trigonometry (latitude/longitude conversions; see one of the earlier devlogs) and replaced it with direct Earth-Centered, Earth-Fixed (ECEF) 3D vector rotation. Initially, our batches were too small, causing satellites to visually ‘teleport’ instead of smoothly gliding, which looked really glitchy. But by upgrading to matrix rotation, i managed to get a huge increase in speed. This allowed me to crank the batch size up and get that smooth motion across the entire thing. Change(s) 4: There were still some small bugs in the visual aspects like the dots disappearing or the transition jump (see previous devlog(s) to understand) and stuff but i took care of them.
OrbitLens Devlog #9: implemented satellite filtering + earth connecting line and complete UI overhaul Now that the website has a proper engine and everything was working well, i decided to add some more stuff. I had two goals for this session. One was to add a satellite filtering option where the user can filter categories of satellites. The other is to change the ui because there were many imprefectoins. Here is a breakdown of what i changed and the challenges i faced: Change 1: I added a global filtering system to fiter satellites by categories. To do this i first built a string-matching engine directly into the TLE parsing loop. As the engine downloads the TLE data from the API, it scans the satellite names and tags them each with categories. I didn’t really know what to categorise them so i thought of some categories and i asked ai to think of some categories. These are the categories: StarlinkOnewebCommsNavigationWeatherand Other/Miscallaneous (which i impemented later; read below) I then wired the HTML dropdown directly into the WebGL gpu loop. Instead of deleting unselected satellites (which would take up too much gpu memory), the gpu simply multiplies their matrix scale to 0, 0, 0, which would just hide them. But there was a challenge that i faced, though it wasn’t a big one. When i first implemented the filter, I noticed that the total satellite count dropped to around 12,000. It turned out that all the satellites that didnt fit into any cateogry were not shown at all so i expanded the categories to include an OTHER category. I also had to make some changes in the raycaster or the users would accidentally be clicking on the hidden satellites. Change 2: I also added a line connecting the selected satellite directly to its exact spot on the Earth’s surface directly beneath it. I did this by first pre-allocating a THREE.BufferGeometry with exactly two vertices. Inside the animation loop, i then took the satellite’s live 3D coordinates and use a .normalize() math function. Because the Earth has a radius of exactly 1, normalizing the 3d coordinates perfectly attaches the bottom of the line to the planet’s surface. But, i ran into a bug where the line would randomly disappear depending on the camera angle. After some research (ai) i found out that this was caused by Three.js’s “Frustum Culling.” The code calculated the line bounding box once when the websited started up and when the camera moved away from that initial box, the gpu assumed the line was out of sight and stopped rendering it to save memory. So i just added a line of code (frustumCulled = false) that just overrode that. Change 3: Lastly, i essentially completely rewrote the styles.css to change how the ui looked cus i didn’t relaly like how it looked before. So this was the third change.
OrbitLens Devlog #10: mobile layout implementation + better loading screen I am nearing the first ship of this project so this session were just about the final aspects that needed to be improved Change 1: I completely changed the loading screen. Firstly, it now displays the loading percentage that accurately shows the real time progress. Secondly, overall it just looks much better. Thirdly, i also implemented an error notification in the main dashboard in case the API doesnt work and so the website doesnt look like it’s broken Change 2: I added a mobile layout option. by that i mean that if the user is accessing this website on a mobile, it won’t be completely botched (hopefully) p.s. i know this devlog isnt that detailed as my previous ones and that’s because there isn’t much to talk about in this session cus the main changes were in the styles.css (and i’m hella tired)
OrbitLens Devlog #11: Semi-final changes In this session, i focused on finding small aspects that need to be improved and improved them. Change 1: Firstly, i realised that the dropdown i had implemented was the default dropdown and it didn’t rlly fare well when there were 16000 items to choose from. So i made a custom dropdown, which looks much better than the default one, and made a funciton along with it that shows like the first 200 items matching the search query or, if nothing in being searched, the first 200 items in the list that the API gave. This made the entire experiene so much better because the default dropdown looked kinda ugly cus it took the whole length of the screen. Normally, this wouldnt take too long but i accidentally deleted the wrong eventListeners multiple times because satFilter and satSearch were so similar. So i spent like a good amount of time trying ot find the problem, and it turned out that i justmodified or deleted the wrong thing. Change 2: I found a problem with the filtering system, more specifically in filtering the space stations. Previously, i just had all the satellites with ISS or CSS in their names classified as space station because there are only two space statoins in space right now (ISS and Tiangong) so i filtered any satellites with those two names. But i failed to take into account that other satellites might also have ISS or CSS in their names so instead of two satellites showin up, 16 satellites were avaialbe in that filter. And these were not space stations but rather other statellits which had like ISS or CSS in their names (e.g. Swisscube). So i changed the filter to filter the space stations by their respective NoradIDs, which worked. Change 3: This change wasnt too big; i modified the expanded map layout becaues how it was before led to it having a lot of blank space and probalby wouldnt have looked good in differnet devices.
OrbitLens Devlog #12: Added README.md and ARCHITECTURE.md In this session, i added the README and ARCHITECTURE.md. The README.md highlights the basic features of the website, the tech stack used and how to run this project locally. The ARCHITECTURE.md goes deeper into how the code itself works so anyone perusing it can get a better idea on how i built this project.
OrbitLens Devlog #13: fixing deployment bugs 😭😭 Before i continue with this devlog, let me start by saying that modern security rules are the worst. Like istg, why do they have to be so strict? Anyway, you’ll see what i mean by that down below. THis session was all about fixing the deployment bugs. I was almost done and then these f bugs ruined it. This devlog has only abt 30 mins logged because i had the help of ai to fix this because this was way way out of my expertise. Here are the changes. I used ai for this devlog though cus i didn’t understand what it did (but i only used it for htis devlog): Problem 1: The [UNSUPPORTED_FEATURE] Vite Crash My very first Vercel build crashed immediately with a “Top-level await is currently not supported with the ‘iife’ output format” error. Apparently, the satellite.js library I use for SGP4 orbital propagation runs heavy calculations using Web Workers and WebAssembly. By default, Vite tries to bundle everything into an older iife format for maximum browser compatibility, which completely choked on the newer await feature inside the worker file. I fixed this (with the help of ai) by explicitly telling Vite’s internal bundler (Rolldown) to output modern ES modules for both the main thread and the background workers. I created a vite.config.js file and updated the configuration (see vite.config.js in the github repo) Problem 2: 404 Missing 3D Models After fixing the build, the site successfully deployed, but my 3D models (like the ISS and Hubble) and Earth textures threw 404 Not Found errors in the console. Because I was loading these assets while the app was running in my Three.js code using string paths (e.g., ‘/models/iss.glb’), Vite didn’t know they existed and simply excluded them from the final production build. I moved my models and textures folders into Vite’s public directory. Anything placed in the public folder gets copied exactly as is to the root of the final build. This bug wasn’t too bad but the next one was absolute hell. Problem 3: API, Cloudflare and CORS block This was the hardest part. Orbit Lens fetches live Two-Line Element (TLE) data for over 16,000 satellites directly from CelesTrak. It worked perfectly when i hosted it locally, but on Vercel, the browser instantly threw a 403 Forbidden error. CelesTrak uses Cloudflare to prevent automated scraping. When Cloudflare saw an Origin header coming from a deployed Vercel frontend instead of an normaly IP like my computer’s, it blocked the connection. Attempts to use public proxies (like allorigins) resulted in 408 Request Timeout errors because the multiple mb big satellite data took too long to transfer. To fix this, I used Vercel’s Native Rewrites (i have no idea how to use this so i asked ai to do it for me). “I” ;) created a vercel.json file in the root directory to act as a silent backend proxy. By fetching from my own local route (/api/celestrak), the browser doesn’t trigger CORS security. Vercel’s backend intercepts the request, strips the frontend Origin header that was triggering the firewall, and routes the raw data back to the application. This worked! And the website is finally live and i am about to ship the project!
Ships:
This is Orbit Lens, a real-time 3D satellite tracking website built using vanilla JavaScript and Three.js. It tracks over 16,000 live space objects around earth using real-time data from CelesTrak. It has many features including 3d and 2d orbit tracking, 3d models of select satellites (ISS, Terra, HST, and Aqua). It also includes a filtering feature where you can filter satellites based on specific categories Before testing this project, it is important to know some stuff: You will have the best experience if you access this through a laptop or desktop Sometimes, the api maybe down or is not responding to requests so please keep in mind that if you see an alert saying API not responding, it is out of the website’s hands and it an error outside of my control. That’s it. Thank you for testing this project and hope you like it :)...
|
1792878696.1561775
|
1793742696.1561775
|
|
19805
|
Tick Tock by @ryderklh | Stardance
|
ryderklh
|
5
|
85.0
|
988
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T12:39:47Z", "hours": 30.0, "multiplier": 12.69, "payout": 386, "blessing": "neutral", "text": "WHAT I MADE/THINK? I expanded TickTock from a single timer into a multi-tool station (Hub)! This time, I built a Timer and a Stopwatch. It was a huge challenge for me to handle standard browser behaviors, especially turning a single-page SPA into a structured Astro website with a homepage and sub-pages. It took lots of testing, but I feel so proud when everything finally aligned perfectly. Features Homepage Hub Dashboard Live Countdown Customizable Countdown Full mode / Days mode Change Target Date Edit Event Title automatically save in localStorage & url# Digital Clock 12-hour / 24-hour format 3 Font styles (Sans, Serif, Mono) Fullscreen mode (Header/Footer kept!) Smooth breathing colon animation automatically save in localStorage & url# ⭐Timer ⭐Mutiple timers at one page ⭐Keep going after refreshing website ⭐Circular progress bar ⭐Sortable timers ⭐Alarm and flash on completion ⭐Stopwatch ⭐Mutiple stopwatches at one page ⭐Keep going after refreshing website ⭐Sortable timers ⭐Able to lap and split ⭐Able to copy total time and laps info Time Progress Bar Export as image Switchable hide/show Pomodoro Timer Customable number of cycles Pause at any time Notification Sound Lightweight Light mode/Dark mode Quick link to other tools WHAT I LEARNT? A lot of new things about git How to write devlogs JS, Astro… TRY IT! TickTock Home Hub NC Finals Weekend Digital Clock (12H / Classic Serif) ⭐Timer ⭐Stopwatch Time Progress Pomodoro Timer ⭐means new features of the previous ship", "repo": "https://github.com/klhrd/TickTock", "demo": "https://klhrd.github.io/TickTock"}, {"ship_num": 2, "ts": "2026-08-02T07:51:47Z", "hours": 22.0, "multiplier": 15.66, "payout": 346, "blessing": "neutral", "text": "WHAT I MADE/THINK? I expanded TickTock from a single timer into a multi-tool station (Hub)! This time, I built a Pomodoro Timer and a Time Progress Displayer. It was a huge challenge for me to handle standard browser behaviors, especially turning a single-page SPA into a structured Astro website with a homepage and sub-pages. It took lots of testing, but I feel so proud when everything finally aligned perfectly. Features Homepage Hub Dashboard Live Countdown Customizable Countdown Full mode / Days mode Change Target Date Edit Event Title automatically save in localStorage & url# Digital Clock 12-hour / 24-hour format 3 Font styles (Sans, Serif, Mono) Fullscreen mode (Header/Footer kept!) Smooth breathing colon animation automatically save in localStorage & url# ⭐Time Progress Bar ⭐Export as image ⭐Switchable hide/show ⭐Pomodoro Timer ⭐Customable number of cycles ⭐Pause at any time ⭐Notification Sound Lightweight ⭐Light mode/Dark mode ⭐Quick link to other tools ⭐means new features of the previous ship WHAT I LEARNT? A lot of new things about git JS, Astro… TRY IT! TickTock Home Hub NC Finals Weekend Digital Clock (12H / Classic Serif) Time Progress Pomodoro Timer", "repo": "https://github.com/klhrd/TickTock", "demo": "https://klhrd.github.io/TickTock"}, {"ship_num": 3, "ts": "2026-07-15T07:24:47Z", "hours": 18.0, "multiplier": 7.76, "payout": 136, "blessing": "neutral", "text": "WHAT I MADE/THINK? I expanded TickTock from a single timer into a multi-tool station (Hub)! This time, I built a beautiful, highly customizable Digital Clock. It was a huge challenge for me to handle standard browser behaviors, especially turning a single-page SPA into a structured Astro website with a homepage and sub-pages. It took lots of testing, but I feel so proud when everything finally aligned perfectly. Features ⭐Homepage Hub Dashboard Live Countdown Customizable Countdown Full mode / Days mode Change Target Date Edit Event Title ⭐Digital Clock ⭐12-hour / 24-hour format ⭐3 Font styles (Sans, Serif, Mono) ⭐Fullscreen mode (Header/Footer kept!) ⭐Smooth breathing colon animation automatically save in localStorage & url# Lightweight ⭐means new features of the previous ship WHAT I LEARNT? A lot of new things about Astro and NodeJS How to structure routes for multiple tools (Refactoring files) Advanced CSS (using global variables to adjust layout gaps dynamicly) REPLIES Thank you so much for the 115 stardust and the amazing feedback! I read every single review from Ship #2, and they helped me make this update so much better. 1. ABOUT MORE FEATURES Many suggested adding more tools or events. I turned the website into a Hub and built the Digital Clock as our second official tool! 2. ABOUT THE SCREENSHOT IN README Two reviewers mentioned adding screenshots. I’ve updated the README with fresh screenshots so people skimming through can see the UI instantly. TRY IT! TickTock Home Hub NC Finals Weekend Digital Clock (12H / Classic Serif)", "repo": "https://github.com/klhrd/TickTock", "demo": "https://klhrd.github.io/TickTock"}, {"ship_num": 4, "ts": "2026-07-01T04:33:49Z", "hours": 13.0, "multiplier": 9.33, "payout": 115, "blessing": "neutral", "text": "WHAT I MADE/THINK? I made a long-term countdown timer for events. It’s really hard for me to build things in a way that is completely new to me. I’ve been stuck not only with programming languages but also with English. However, through this project (STARDANCE), though I didn’t create something really impressive, I think I learnt A LOT. Features Live Countdown Full mode ⭐Days mode Customizable ⭐Change Target Date ⭐Edit Event Title ⭐automatically save in localStorage & url# ⭐share btn Dark Mode UI ⭐means new features of the previous ship WHAT I LEARNT? basic GIT code basic HTML/CSS3/JS How to write DevLogs REPLIES I’ve read all the replies of the ship#1. And lots of them mentioned the same thing. Thanks to everyone who give me feedback. Hope there’s the better version of previous ships. 1. ABOUT CHANGEABLE TARGET Now you can pick any target date and even edit the event title right from the sidebar. 2. ABOUT LANGUAGE I’ve fully migrated the app to English now. 3. ABOUT DEVLOG I’ve leveled up my devlog game for this update—documented all the engineering details and bugs I fixed this time. TRY IT! 2027 New Year NC Finals Weekend US Open", "repo": "https://github.com/klhrd/TickTock", "demo": "https://klhrd.github.io/TickTock"}, {"ship_num": 5, "ts": "2026-06-16T15:10:14Z", "hours": 2.0, "multiplier": 2.98, "payout": 5, "blessing": "neutral", "text": "What I Made I made a Countdown Web App called “Tick Tock.” It shows the exact years, months, days, hours, minutes, and seconds left until January 1, 2027. What Was Challenging Calculating months and years was hard. Months have different days (28, 30, or 31), so I had to write smart JavaScript code to borrow days and keep the timer 100% accurate. What I Am Proud Of It Works!: Actually this is my first time using html to build a website. Clean Design: I fixed the layout bugs and made a dark-mode interface. How to Test It https://klhrd.github.io/TickTock/", "repo": "https://github.com/klhrd/TickTock", "demo": "https://klhrd.github.io/TickTock"}]...
|
[{"post_id": 64186, "ts": "202 [{"post_id": 64186, "ts": "2026-09-08T12:37:49Z", "hours": 0.7658, "text": "Devlog 52: GitHub Pages Audio Path Resolution Fixes Absolute Repository Subpath Hardcoding Replaced environment variable dynamic paths ( import.meta.env.BASE_URL ) with direct base-path URLs ( '/TickTock/sounds/alarm.wav' ) in playAlarm() . i have no idea why that happened"}, {"post_id": 62827, "ts": "2026-09-06T11:02:52Z", "hours": 0.4825, "text": "Devlog 51: Asset Migration Asset Directory Migration Moved audio assets ( alarm.wav and notif.wav ) from the static /public/sounds/ directory into the source-managed asset pipeline at src/assets/sounds/ . Module Import & Bundler Integration Replaced hardcoded absolute URL paths ( \"/public/sounds/...\" ) with explicit ES module imports ( import alarmSoundUrl from '../assets/sounds/alarm.wav' and import notifSoundUrl from '../assets/sounds/notif.wav' ) across timer.js and pomodoro.js ."}, {"post_id": 62807, "ts": "2026-09-06T10:16:06Z", "hours": 1.0094, "text": "Devlog 50 Layout Refactoring Scroll Restructuring Shifted .stopwatch-container layout from vertical wrapping ( flex-wrap: wrap ) to a single-row horizontal scroll track ( flex-wrap: nowrap with overflow-x: auto )."}, {"post_id": 62744, "ts": "2026-09-06T08:02:07Z", "hours": 2.8789, "text": "Devlog 49: Lap Data Export Plaintext Lap Data Serialization formatLapsOutput : a dedicated text formatter that converts active stopwatch data into structured tab-separated values (TSV) suitable for copying. Async Clipboard Copy Logic Implemented an async wrapper using navigator.clipboard.writeText() with built-in error handling ( try/catch ) and user alerts for unsupported environments or clipboard permission rejections. Interactive Copy Feedback UI Wired copyBtn click events to trigger text copying and dynamically update the button icon ( check or error ) and theme accent color."}, {"post_id": 60192, "ts": "2026-09-02T12:48:53Z", "hours": 1.0839, "text": "Devlog 48: DOM Selector Bugfixes & Homepage Quick Access DOM Query Selector & Reference Repairs Updated querySelector in updateListedStopwatch from target class .listed-stopwatch-demo to parent wrapper .listed-stopwatch[data-id=\"...\"] , resolving element lookup failures during live updates. Homepage Integrated direct links and dedicated preview cards for the Stopwatch application into index.astro and BaseLayout.astro ."}, {"post_id": 59556, "ts": "2026-09-01T13:21:58Z", "hours": 0.6392, "text": "Devlog 47: Pause Compensation Pause Duration Offset Implemented pauseDuration calculation Date.now() - pauseStartTime during resume actions status === \"paused\" . Shifted all existing lap timestamps lap.endTime += pauseDuration forward to subtract paused time intervals. State-Aware Timestamp Resolution Standardized timestamp evaluation across renderers handleLap , renderListedStopwatch , updateListedStopwatch , and updateCardUI using ternary state checks: const now = stopwatch . status === \" running \" ? Date . now () : stopwatch . pauseStartTime ;"}, {"post_id": 58906, "ts": "2026-08-31T13:58:04Z", "hours": 1.9278, "text": "Devlog 46: UI Fine-tuning & Timing Logic Optimization Lap Calculations -Replaced laps.forEach with for (let j = 0; j <= i; j++) to ensure cumulative total times ( totalMS ) strictly correspond to the current lap index. Layout Enhanced formatTime() rendering logic by applying inline styles width , transform: scaleX(0.8) , text-align: center to dynamic span elements, preventing font-width shifting during rapid ticker updates. Dynamic Rendering Integrated updateListedStopwatch() into the global interval loop, enabling sidebar preview labels to tick synchronously with active main cards. Optimized state updates to target individual time elements instead of triggering full list re-renders on every ticker frame. Added optional chaining laps?.[0]?.startTime across rendering pipelines to prevent runtime exceptions when initializing empty stopwatches."}, {"post_id": 57947, "ts": "2026-08-30T08:58:55Z", "hours": 3.6403, "text": "Devlog 45: Initial Stopwatch Logic & Dynamic State Scaffolding Core State & Lap Data Architecture Designed a stopwatch schema tracking dynamic state ( idle | running | paused ) and an array of individual lap records ( laps ). Streamlined time calculation to compute elapsed milliseconds dynamically directly using timestamps ( Date.now() - lap.startTime ), eliminating redundant accumulator fields like startTime or elapsedTime . Interactive Handlers & Lifecycle Operations Implemented core lifecycle handlers: handleStart , handlePause , handleReset , handleLap , and handleDelete . Integrated updateCardUI and updateCardBtns to reflect running, paused, and idle UI visual feedback dynamically. Built active DOM updates for lap histories inside updateCardLapGrid using index-based duration summation for lap and total times. Enabled global runtime updates via startGlobalTick() timer intervals and list reordering via handleMoveStopwatch() ."}, {"post_id": 57110, "ts": "2026-08-29T06:40:01Z", "hours": 1.7286, "text": "Devlog 44: Stopwatch Layout Template & Layout Migration Ported side-menu and main container structures from Timer to Stopwatch layout ( index.astro ). Structured sidebar elements: .stopwatch-adding-action-btn and .stopwatch-list-container for dynamic item injection. Added template placeholders ( #listed-stopwatch-template and #stopwatch-card-template ). Stopwatch Card & Lap Data Display Integrated core display components: .stopwatch-text and .stopwatch-text-sub . Created interactive control group ( .stopwatch-card-action-btn ) supporting Start, Pause, Replay, and Lap actions. Designed a 3-column CSS Grid table ( .stopwatch-lap-container ) to organize lap metrics ( i , lap , total )."}, {"post_id": 55411, "ts": "2026-08-27T06:58:34Z", "hours": 0.3914, "text": "Devlog 43: Timer Integration & Navigation Update Navigation & Home Page Integration Added Timer card entry to the main landing page ( tool-card layout with hourglass Material symbol). Added direct Timer link to the global navigation bar in BaseLayout.astro . Feature Branch Merge Merged feature/timer-main into main , bringing in the new /timer page route, timer.js logic, sound assets ( alarm.wav ), and updated layout components. YEAYYY"}, {"post_id": 55007, "ts": "2026-08-26T13:10:35Z", "hours": 1.7997, "text": "Devlog 42: Timer Reordering & List Re-Sorting Reordering UI Controls Added .sort-action control group with .sort-up and .sort-down arrow buttons to the template layout. Dynamic Array Mutation & Re-rendering Implemented handleMoveTimer(id, direction) to handle array element swapping with upper and lower boundary bounds checks. Bound click handlers in renderListedTimer() to execute reordering operations, trigger LocalStorage updates, and instantly re-render the UI layout via renderAll() ."}, {"post_id": 54924, "ts": "2026-08-26T04:43:44Z", "hours": 0.4733, "text": "Devlog 41: Dual-Text Display & Running Animation Sub-Text Total Duration Display Added .timer-text-sub element inside the ring container to preserve and display the initial totalSeconds value. Styled sub-text using lighter font weights and var(--text-muted) . Dynamic Running Visual Effects Added .is-running state toggle based on timer.status === \"running\" . Implemented @keyframes timer-text-flash pulsing animation to provide continuous visual feedback while countdown is active."}, {"post_id": 54897, "ts": "2026-08-26T03:33:47Z", "hours": 1.2658, "text": "Devlog 40: Alarm Audio & LocalStorage Independent Alarm Audio Handling new Audio() allowing each finished timer to play independent looping sound effects concurrently. Bound alarm termination directly to handleReset() and handleDelete() . LocalStorage Serialization Fixes Sanitized timer state object before serialization in saveTimers() by stripping transient DOM/Audio references ( alarmAudio ) to prevent JSON stringification crashes. Added type validation ( typeof alarmAudio.pause === \"function\" ) inside stopAlarm() to prevent runtime TypeError issues during state rehydration. Post-Reload Alarm & Visual Sync Updated renderAll() to resume alarm sound playback and background pulse animation for ended timers across page reloads. Cleared endTime correctly during timer reset to normalize state lifecycle. alarm.wav Using LMMS to create alarm.wav for the alarming when timer.status===\"ended\" ."}, {"post_id": 54221, "ts": "2026-08-25T03:40:02Z", "hours": 0.5936, "text": "Devlog 39: Smooth Action Button Transitions Button Collapse & Spacing Animate Added max-width , margin: 0 , and padding: 0 constraints to .is-hidden to smoothly collapse hidden buttons without leaving blank layout gaps. Expanded base state with explicit max-width boundary to allow width-based CSS transitions. much smoother ♪(´▽`)"}, {"post_id": 53651, "ts": "2026-08-24T09:46:13Z", "hours": 4.4989, "text": "Devlog 38: Multi-Timer Logic & Bug Fixes JS Managed multi-timer state using plain object arrays. Implemented saveTimers() and loadTimers() for LocalStorage persistence. Linked input fields with setupArrowBtns() to handle unit value increment and decrement bounds. Cloned <template> elements to dynamically generate sidebar list items and main cards via renderAll() . Added item deletion logic via handleDelete() to update state and UI. Established a startGlobalTick() loop running every 200ms using endTime offsets to prevent background tab drift. Calculated SVG circle strokeDashoffset dynamically based on remaining time ratios. Debugging & UI Patching Placing <template> tags inside slot=\"template-content\" . Adding missing id=\"timer-container\" . .textContent.textContent to .textContent Data.now() to Date.now() . timers.status to timer.status . finally got multi-timer state and progress rings syncing properly… bugs fixed and back to smooth sailing…"}, {"post_id": 52458, "ts": "2026-08-22T16:09:04Z", "hours": 7.2022, "text": "Devlog 37: Multi-Timer UI Layout & Input Controls Form Inputs & Adjustments Built HH/MM/SS number input boxes with range limits and zero-padding logic on blur. Implemented stepper adjustment buttons for quick time value tweaking. Sidebar Timer List Layout Added sidebar timer list container to preview user-created countdown items. Integrated quick action delete buttons for item removal. Main Dashboard Circular Timer Constructed countdown card layout featuring SVG dynamic progress ring. Centered time readout using tabular-nums formatting to eliminate number jitter. Action Control Group Laid out card control buttons including play, pause, and replay. the ui was so tiring… i DID remember to open a new branch (feature/timer-main) …"}, {"post_id": 39335, "ts": "2026-08-02T07:50:09Z", "hours": 0.4922, "text": "Devlog 36: Update Docs & Merge Update Docs Readme: Add the links of the new tools Ship#4: Write Ship#4.md Merge!!!!! Merge feature/pomodoro into main Fortunately no error poping out!"}, {"post_id": 39323, "ts": "2026-08-02T07:15:21Z", "hours": 0.8742, "text": "Devlog 35: Pomodoro State Transition & Auto-Loop Refactoring Core Logic & State Fixes Auto-Phase Transition Fix : Resolved state lock ( status: 'running' ) preventing automatic transition from Focus to Break. Added explicit status resetting in handlePhaseEnd before invoking startTimer . Timer Precision : Replaced Math.round with Math.ceil in countdown logic to eliminate early sound triggers caused by rounding errors. Timestamp Recalibration : Implemented dynamic endTime re-calculation when switching modes ( work ↔ break ) to maintain state consistency."}, {"post_id": 39287, "ts": "2026-08-02T05:00:19Z", "hours": 2.2125, "text": "Devlog 34: Pomodoro Core Timer & Segmented Timeline Integration Features Implemented static audio notification system via HTML5 Audio API targeting public/sounds/notification.mp3 . Architecture & State Management Implemented timestamp delta verification ( endTime - Date.now() ) to maintain countdown accuracy during background tab throttling or page reloads. Decoupled primary control actions across main page and sidebar controls ( #menu-start-btn , #cycles-input ). Bug Fixes & Refactoring Fixed ReferenceError during event initialization by enforcing state argument scoping within bindEvents . Refactored loadStateFromLocalStorage parsing logic to filter \"undefined\" string literals and clear corrupted cache gracefully."}, {"post_id": 37493, "ts": "2026-07-30T08:56:03Z", "hours": 4.0386, "text": "Devlog 33: Pomodoro Segmented Timeline & Layout Integration Segmented Timeline Layout Integrated BaseLayout slots for the new Pomodoro page, separating sidebar settings from the main dashboard. Built a visual segmented timeline ( .timeline-track ) with flex-proportional work/break segments and a dynamic progress pin ( .timeline-pin ). Core Logic & State Setup Refactored state object fields ( workDuration , breakDuration , timeRemaining ) to ensure clean state initialization. Added timestamp delta checking on startup to preserve accurate remaining time across page reloads or background tabs."}, {"post_id": 36218, "ts": "2026-07-28T04:48:53Z", "hours": 0.3056, "text": "Devlog 32: Dynamic Canvas Aspect Ratio Calculation Features & Refactoring Implemented dynamic aspect ratio calculation for PNG exports ( Height = 140 * Count + 180 ). Applied responsive auto-scaling for .export-canvas to ensure optimal vertical spacing regardless of selected cards count. Merged feature/export-image branch into main after verifying clean template rendering and correct node referencing."}, {"post_id": 36205, "ts": "2026-07-28T04:19:06Z", "hours": 2.29, "text": "Devlog 31: Template Canvas Architecture & Reference Refactoring Independent Canvas Architecture Replaced direct DOM manipulation of live dashboard elements with a dedicated, off-screen template canvas ( .export-canvas ). Cloned active .progress-card elements into an isolated container ( .export-cards-holder ), ensuring the on-screen UI remains completely untouched and non-flickering during image generation. Moved aspect ratio, high-resolution dimensions (600x600), padding, and font-scaling rules directly into CSS for clean separation of concerns. Error Fixes & Cleanup Fixed ReferenceError caused by leftover references to targetContainer and stampEl inside initExportImageFeature . Updated html2canvas target from main dashboard container to the temporary canvasEl . Streamlined fallback DOM cleanup logic inside the try...catch block to guarantee off-screen elements are properly garbage collected."}, {"post_id": 35003, "ts": "2026-07-26T04:47:24Z", "hours": 1.3903, "text": "Devlog 30: Image Export Feature & Template Refactoring Image Export Feature Integrated html2canvas library to enable one-click PNG image export of the active progress dashboard. Added an “Export as Image” button inside the custom sidebar menu with dedicated styling. Handled theme-aware background rendering by dynamically querying computed global CSS variables ( --bg-app ). DOM Template & Dynamic Watermark Refactored dynamic watermark creation using the HTML <template> element ( #export-watermark-template ), cleanly separating DOM structure from JavaScript execution logic. Configured dynamic timestamps using now.toLocaleString() to inject real-time snapshot dates and times into exported images. Added ignoreElements filtering in html2canvas to prevent unchecked/hidden .progress-card elements from creating top/bottom visual gaps in exported images. Bug Fixes & Refactor Fixed a TypeError on insertBefore / appendChild by referencing clone.firstElementChild to extract the correct Element Node from DocumentFragment . Resolved HTML/JS ID typos ( export-watermark-template ) and method call mismatches to ensure reliable script execution."}, {"post_id": 33941, "ts": "2026-07-24T08:29:42Z", "hours": 0.9675, "text": "Devlog 29: URL Hash Sync, LocalStorage Persistence & Universal Share Event URL & State Persistence Integrated URL Hash ( #year,month,... ) and localStorage synchronization into time-progress.js to preserve users’ toggle preferences across reloads and shares. Added a hashchange event listener to ensure UI check states dynamically update when users use browser navigation (Back/Forward). Centralized Layout Share Event Refactored the #share-menu-btn event listener into BaseLayout.astro , eliminating duplicate share logic across individual tool pages. Leveraged document.title dynamically to provide clean, contextual titles for native Web Share API and clipboard copy fallbacks."}, {"post_id": 33891, "ts": "2026-07-24T05:26:11Z", "hours": 1.0658, "text": "Devlog 28: Layout Overflow Fixes and UI Polish Layout & Scrollbar Stability Added scrollbar-gutter: stable to html in global.css to reserve vertical scrollbar space, preventing horizontal overflow caused by layout reflow. Applied overflow-x: hidden to main containers and .progress-card to prevent percentage tags and thumbs from clipping past container edges at 100%. CSS Rule Corrections Fixed CSS property error by setting .track width to 100% instead of unitless value. Fine-tuned progress bar wrapper styles to ensure smooth visual layout under both dark and light themes."}, {"post_id": 33283, "ts": "2026-07-23T02:15:39Z", "hours": 4.0661, "text": "Devlog 27: Time Progress Bar Feature Porting and JS Modular Refactoring Astro Slot Architecture & CSS Variable Integration Ported the standalone Time Progress Bar tool into the Astro layout system using designated slots ( #head , #header-content , #custom-menu , and #main-content ). Converted hardcoded hex colors into semantic global theme CSS variables ( --accent-color , --component-bg-standard , --text-heading ), ensuring native support for Dark and Light mode toggling. Replaced the dropdown filter with sidebar multi-select checkboxes for custom control over visible time progress units. JavaScript Modular Refactoring & Bug Fixes Decoupled single-script logic into dedicated, single-responsibility functions ( initSidebarToggles , calculateTimeProgress , updateTicksUI , updateProgressCardUI , and updateSingleCardUI ). Resolved JavaScript syntax errors, including missing function keywords, JS Automatic Semicolon Insertion (ASI) line-break issues on return statements, and uncalled Date method parentheses. Streamlined animation frame rendering by passing structured data from math calculations directly into UI updater functions."}, {"post_id": 32236, "ts": "2026-07-21T08:41:47Z", "hours": 0.8689, "text": "Devlog 26: Typo Correction and Expandable Directory Menu Typo Correction Fixed property naming error from –accent-contract-text to –accent-contrast-text in global CSS. Expandable Tools Directory Converted static directory links into a native component with smooth arrow rotation styling. Enabled server-side open status via open={isHomePage} in BaseLayout, defaulting to expanded on the home hub and collapsed on sub-tool pages."}, {"post_id": 31792, "ts": "2026-07-20T13:53:15Z", "hours": 1.3728, "text": "Devlog 25: Theme Toggle Implementation with Dark and Light Modes Light Theme Tokens Override Added :root[data-theme=“light”] in global.css to swap semantic theme variables for light background, borders, and high-contrast amber accents. Preserved existing component styles while smoothly transitioning body colors on theme switch. Sidebar Toggle Component and Logic Integrated a theme toggle button (#theme-toggle-btn) inside the BaseLayout header actions. Built persistent theme state logic using localStorage and system prefers-color-scheme detection. Used textContent on icon elements to dynamically switch between dark_mode and light_mode icons without type errors."}, {"post_id": 31215, "ts": "2026-07-19T13:11:06Z", "hours": 2.2447, "text": "Devlog 24: Color Architecture Refactoring with Design Tokens Two-Tier CSS Variables Global Tokens: Extracted hardcoded hex colors into primitive color names inside global.css. Theme Tokens: Created a semantic layer mapping elements like –bg-app and –accent-color directly to global tokens. Clean Codebase Update Component Styles: Replaced absolute colors across the layout, dashboard hub, countdown, and clock templates with var() variables. Script Alignment: Updated dynamic checkmark colors in JavaScript to read –accent-color instead of raw hex values. Future Scope: The design is now fully abstracted, meaning light mode implementation will only require token swapping without editing individual component code."}, {"post_id": 28755, "ts": "2026-07-15T06:57:18Z", "hours": 0.2736, "text": "Devlog 23: Global Branding Relocation and Logo Navigation Moving Title Label to BaseLayout Unifying the brand and improving UX Header Linkification : Refactored the main title-label (“TickTock”) out of individual page templates and integrated it directly into the global BaseLayout.astro . Back-to-Home UX : Wrapped the brand title in an <a> tag. Now, clicking the brand logo on any sub-tool instantly routes the user back to the home dashboard Hub, offering an intuitive, web-app-like navigation experience."}, {"post_id": 28732, "ts": "2026-07-15T05:22:01Z", "hours": 0.4186, "text": "Devlog 22: F11-Equivalent Fullscreen via Root Element Standardizing Fullscreen to document.documentElement Fixing disappearing layout elements The Pitfall : Previously, calling requestFullscreen() on the individual #clock-screen container caused the browser to isolate it from the DOM layout. This triggered default browser styling which rendered a pitch-black backdrop, and completely hid crucial layout parts like the header, footer, and side menu buttons. The Solution : We shifted the fullscreen API target from the sub-container directly to document.documentElement (the global <html> node). This aligns the button’s behavior perfectly with standard keyboard F11 fullscreen events. The Result : All global UI elements (header, footer, navigation) now scale smoothly and remain perfectly visible and interactive without any layout shifts or z-index clashing."}, {"post_id": 28188, "ts": "2026-07-14T09:57:23Z", "hours": 1.1836, "text": "Devlog 21: Architecture Normalization and Layout Fine-Tuning Directory Restructuring & Future-Proofing Preparing for scalability Digital Clock Renaming : To prevent future routing conflicts as the project scales, we successfully renamed clock.js to digital-clock.js and adjusted the main page path to /src/pages/digital-clock/ . This cleanly isolates this feature from upcoming modules like World Clock or Pomodoro Timer. Dependency Clean-up : Updated all asset paths and module script injections across the hub, fully standardizing the multi-tool routing structure under the /TickTock/ basePath. Layout Fixes with Global CSS Variables Resolving invalid CSS properties via JS injection Replacing Non-Standard Styles : Fixed a crucial layout issue where arbitrary if(...) conditions inside CSS were breaking colon component constraints. Dynamic Width Injection : Migrated the layout parameters directly into digital-clock.js using the standard document.documentElement.style.setProperty API. The .colon element now seamlessly reads the responsive --clock-colon-width CSS variable, adapting perfectly across Sans, Serif, and Mono configurations without any jumping side effects."}, {"post_id": 28133, "ts": "2026-07-14T07:16:36Z", "hours": 2.5658, "text": "Devlog 20: Settings Memory and Dynamic Sharing Adding Setting Memory and URL Sync Keeping your clock layout saved Persistent settings : The clock now remembers your favorite layout. Your choice of time format (12/24h) and font style is instantly saved directly to your browser’s local storage. URL sync : We linked these settings directly to the URL hash (like #12hr&mono ). When you refresh or load the page, your exact preferred theme loads up right away. Smart Sharing and Hub Integration Spreading the time and completing the hub Dynamic sharing : Added a share button that grabs your exact custom clock URL. It uses the Web Share API when available, and easily falls back to copying the link to your clipboard with a smooth checkmark animation on success. Connecting the dashboard : Linked the completed clock page to our homepage hub grid and updated the site layout, officially making TickTock a multi-tool station."}, {"post_id": 27501, "ts": "2026-07-13T03:45:40Z", "hours": 3.5772, "text": "Devlog 19: Building the Adaptable Digital Clock Implementing Native Date Formatting Problem : The clock header needed to show the full current date (e.g., “Sunday, July 12, 2026”) dynamically without taxing browser performance or importing heavy external date libraries. Solution : Added a #date-label placeholder to the template and used the native JavaScript toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }) inside the main runtime loop to render lightweight, perfectly formatted timestamps on every update. Creating Fluid Visual Oscillations via Math.sin() Problem : Traditional blinking colons look rigid and distracting, failing to deliver a premium, organic feel for an active time-management tool. Solution : Avoided simple CSS toggles and leveraged a true trigonometric formula inside a requestAnimationFrame loop. By mapping high-precision timestamps through Math.sin() , the opacity gracefully curves between 0.2 and 1.0 , producing a perfectly smooth, wave-like breathing animation. Binding Custom Display and Layout Controls Problem : The interface required instant controls for 12/24-hour formats, font adjustments, and a standalone full-screen view while managing layout side effects. Solution : Wired up event listeners to modify global runtime states and inline CSS font families on the fly. Integrated the HTML5 Fullscreen API onto the #clock-screen element, backed by a global fullscreenchange listener to seamlessly catch manual ESC escapes and keep the toggle button states perfectly in sync."}, {"post_id": 26388, "ts": "2026-07-11T04:39:33Z", "hours": 0.4408, "text": "Devlog 18: Adding Hub Sharing Functionality Integrating Client-Side Script Safely Implementing the Homepage Share Button Problem : The dashboard needed a simple button to share the current hub URL, but running browser APIs directly could break Astro’s static site generation (SSG) compiler. Solution : Added an inline <script is:inline> block to the index page. This bypasses the server-side build process and safely binds the sharing and clipboard logic only when the page loads in the user’s browser."}, {"post_id": 25792, "ts": "2026-07-10T07:52:27Z", "hours": 1.6289, "text": "Devlog 17: Project Hub and README Expansion Moving from a Single Page to a Tool Hub Goal : Transformed TickTock from a single countdown page into a comprehensive time-management utility hub powered by Astro. Implementation : Created a main dashboard page ( src/pages/index.astro ) to serve as the gateway for current and future time tools, using a shared layout for a consistent user experience. Adding Future Roadmap and Project Documentation Goal : Wrote a complete README.md to document the new project architecture, local testing steps, and automated GitHub Pages deployment. Future Vision : Updated the repository roadmap to announce upcoming tools built for the Hack Club Stardance event, including a Pomodoro Timer, World Clock Board, Minimalist Timer, and Time Progress Bars."}, {"post_id": 24763, "ts": "2026-07-08T15:29:37Z", "hours": 1.7703, "text": "Devlog 16: Dashboard Layout Fixes Fixing Layout and Compression Issues Compressed Card Icons Problem : The card icons shrank and deformed when the screen size changed. Solution : Added flex-shrink: 0; to the icon class to force them to keep their correct size. Cards Stacking Vertically Problem : The tool cards unexpectedly stacked into a narrow, single column right in the middle of the screen. Even though there was plenty of empty space on both sides of the desktop browser, the grid refused to expand horizontally and display the cards side-by-side. Troubleshooting : The grid’s layout formula was correctly set to repeat(auto-fit, minmax(250px, 1fr)) , which should have allowed multiple columns. However, the parent container ( .home-container ) was set to display: flex with align-items: center . In a vertical Flexbox layout, this alignment forces child elements like the grid to shrink to their absolute minimum width based on content, instead of filling the screen. To make matters worse, a strict max-width: 300px; was hardcoded onto the .tool-grid . Since two cards plus their gaps required at least 525px to sit side-by-side, the 300px restriction made it mathematically impossible for the browser to create a second column. Solution : Removed the restrictive max-width: 300px; from the grid and replaced it with a generous max-width: 1200px; to allow proper breathing room on large screens. Added width: 100%; to the grid class, forcing the grid container to break out of the Flexbox compression and stretch completely across the parent container. This allowed the responsive auto-fit engine to finally see the available width and cleanly arrange the cards into multiple columns. Fixing Grid Spacing and Syntax Errors Layout Breaking Off-Screen Problem : The grid expanded past the screen edges and cut off the card content. Solution : Added box-sizing: border-box; to the main container so that padding is counted inside the total width. Broken Units and Side Scrollbars Problem : An annoying horizontal scrollbar appeared at the bottom of the page. Solution : Fixed a typo where width: 100sww; was written instead of 100svw , and added body { margin: 0; } to clear default browser spaces."}, {"post_id": 24045, "ts": "2026-07-07T10:37:16Z", "hours": 5.7283, "text": "Devlog 15 Phase 1: Creating the Skeleton and Splitting Components Overextending the Style Files The project started as a single page where all HTML, CSS, and JS lived together. When I created the unified BaseLayout.astro , I kept the old global.css . However, that file had specific styles just for the countdown page, which broke the layout of the new homepage. Cleaning Up Style Pollution To fix this, I moved the countdown-specific CSS directly into the <style> tag of the countdown page ( index.astro ). Astro automatically confines these styles to their own page, ensuring they no longer mess up the homepage layout. Phase 2: Fixing Astro’s Route Misinterpretation Keeping Scripts in the Wrong Folder I originally placed the logic script ( script.js ) inside the src/pages/countdown/ folder to keep it close to the page. During local testing, Astro threw an error saying there was no API route handler for that JavaScript file. Moving Scripts to a Dedicated Folder I learned that Astro treats every file inside src/pages/ as a public URL or an API route. To fix this, I moved the file to a new src/scripts/ folder and renamed it countdown.js , keeping the pages folder strictly for actual web pages. Phase 3: Resolving Build Crashes from File Names Using Special Characters in Names Inside my documentation folder, I named a development note file ship#2.md . When I ran npm run build , the entire build process crashed immediately with a path error. Removing the Broken Characters The build tool (Vite) treats the # symbol as a URL anchor link, which breaks file path reading. I renamed the file to ship2.md , and the system was able to parse the path and build successfully. Phase 4: Overcoming the Environment Conflict (Server vs. Client) Running Browser Code on the Server This was the biggest challenge. When I imported countdown.js into the page, the build failed multiple times, throwing errors like window is not defined and document is not defined . Protecting the Code with Environment Guards Astro runs pages on the server to generate static HTML during the build step. Because Node.js does not have browser features like window or document , the script crashed. I fixed this with two steps: I imported the script using the ?url suffix in Astro so the server only records its path instead of running it. I wrapped all the browser-specific logic inside a typeof window !== \"undefined\" check. This ensures the script stays quiet during the server build and only runs once it reaches the user’s browser."}, {"post_id": 19753, "ts": "2026-07-01T04:23:10Z", "hours": 0.8367, "text": "Devlog 14: Localization Migration and Pre-Ship Consolidation UI Text Internationalization Migrated all hardcoded multi-byte interface character arrays across template structures ( index.html ) and operational state modules ( script.js ) into standardized Western European typography strings. Refactored semantic definitions within input control placeholders and baseline reference containers to achieve uniform structural layout scaling under single-byte font rendering constraints. Documentation and Release Management Compiled a foundational system architectural reference ( README.md ) specifying setup logic, reactive routing hooks, and custom persistence implementations. Executed full client-side behavior validations on state-tracking components ahead of the definitive production deployment pipeline for Ship #2."}, {"post_id": 19164, "ts": "2026-06-30T12:38:15Z", "hours": 2.1061, "text": "Devlog 13: Native Sharing Integration and Address Synchronization Control Native Sharing and Fallback Mechanics Integrated a social propagation module ( #share-menu-btn ) inside the header actions block, utilizing the Web Share API to access native mobile distribution panels. Engineered an automated asynchronous clip fallback sequence that overrides processing blocks on unsupported desktop environments, programmatically duplicating host URL hashes via the navigator clipboard asset pool. Applied stateful visual interaction hints onto the interactive sharing interface, dynamically toggling system icons to verify action fulfillment before returning properties to base states. Hash Serialization and Router Interdependency Fixes Resolved an critical structural validation bug inside the initial state loader ( loadInitialState ) where an premature execution return statement truncated processing flows, preventing state restorations. Re-architected data assignment flows inside initialization cycles ( initTimer ), deploying window.history.replaceState() to inject fully compiled variable string parameters back into empty browser URI paths. Secured total address compliance across baseline entries, guaranteeing structural data layers are available to secondary network nodes even when sharing operations occur prior to custom value updates."}, {"post_id": 18227, "ts": "2026-06-29T09:35:11Z", "hours": 0.5422, "text": "Devlog 12: Fluid Typography and Viewport-Adaptive Interface Spacing Viewport-Proportional Layout Calibration Implemented fluid layout scaling mechanics across the primary text blocks utilizing the CSS clamp() function, anchoring layout metrics dynamically between absolute pixel boundaries and relative viewport height units ( vh ). Re-architected spacing margins below the core header display ( #event-label ) to smoothly scale inside an adaptive range ( clamp(5px, 2vh, 30px) ), optimizing structural vertical padding on shifting device orientations. Calibrated upper layout boundaries for the structural footer element ( #target-label ) using fluid scaling boundaries ( clamp(15px, 3vh, 40px) ), ensuring consistent geometric clear space relative to adjacent countdown blocks. Text Alignment and Flow Refactoring Transformed the target calendar description layer ( #target-label ) from inline formatting definitions into explicit block layout models ( display: block ), stabilizing custom spacing calculations and forcing uniform horizontal element boundaries. Enforced complete cross-axis block isolation by assigning absolute width restrictions ( width: 100% ) onto trailing description elements, smoothly pushing metadata strings down beneath the dynamic flexible tracking container."}, {"post_id": 18207, "ts": "2026-06-29T08:34:16Z", "hours": 1.9631, "text": "Devlog 11: Modular Display Mode Architecture and Layout Jitter Resolution Feature Implementation & State Persistence Introduced a feature toggle layout inside the sidebar control node, offering real-time transitions between comprehensive chronological breakdowns and solitary metric configurations. Wired state persistence modules utilizing the local browser data subsystem ( localStorage ) to preserve client display configurations across session cycles and application reboots. Updated the data ingestion routing logic ( loadInitialState ) to safely aggregate user layout states without stepping over parameter strings delivered via URL fragment references. Precision Calculation & Dynamic Interface Masking Integrated an isolated decimal extraction calculation routine within the interval processing tree ( updateTimer ) dedicated to managing strict single-unit tracking parameters. Configured programmatic style visibility switches across atomic timer components, enforcing clean element masking on non-applicable duration counters when single-unit modes trigger. Typographic Stabilization & Layout Shifting Mitigation Corrected a severe layout jitter anomaly inside flexible grid clusters caused by variable font character dimensions shifting container boundaries during fast string state invalidations. Implemented font-variant-numeric: tabular-nums to enforce strict monospaced numeral allocation, keeping external box dimensions static regardless of structural text mutations. Introduced a dynamic responsive structural modifier block ( .mode-single ) to adjust component paddings, implement generous baseline tracking, and elevate text sizing bounds when processing simplified metrics."}, {"post_id": 17619, "ts": "2026-06-28T14:25:59Z", "hours": 1.4517, "text": "Devlog 10: Structural File Extraction and Modular Synchronization Stability Code Base Decomposition and Externalization Refactored the unified codebase by isolating inline design frameworks and layout scripts into dedicated style.css and script.js internal resources. Streamlined index.html structure down to essential structural markup definitions, using external linkages to boost source reading efficiency and code maintainability. Character Processing and Stability Verification Verified text encoding boundaries across external routing changes to preserve multibyte text inputs (“目標日”, “目標”) without producing character distortion issues. Maintained responsive flex alignments and layout fluid bounds on smaller screens while decoupling runtime system layers."}, {"post_id": 16999, "ts": "2026-06-27T16:08:49Z", "hours": 1.4744, "text": "Devlog 09: Synchronization Bug Fixes and URL Component Decoding Argument Reference and Logic Rectification Corrected a ReferenceError inside the titleInput listener by swapping an un-sanitized token ( newDate ) with the valid, persistent variable targetString . Fixed an assignment error where a single operator ( if(newTitle=\"\") ) muted intended comparison logic, replacing it with a strict equality check ( newTitle === \"\" ). URL Normalization and Component Decoding Integrated decodeURIComponent() into loadInitialState() and the hashchange observer to prevent percent-encoded character corruption. Resolved text distortion for multibyte layouts (e.g., Chinese characters), ensuring continuous string fidelity across shared links. Established a default text fallback (“目標”) to secure interface rendering stability during empty input states."}, {"post_id": 14154, "ts": "2026-06-23T04:14:30Z", "hours": 0.9578, "text": "Devlog 08: Viewport Configuration and Responsive Layout Calibration Viewport Meta Integration and RWD Layering Integrated the standard responsive configuration tag <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"> into the document structure header. Resolved a layout compression behavior where mobile rendering engines applied fallback desktop scaling parameters (typically a virtual width of 980px), forcing severe global downscaling on compact displays. Enabled native device pixel scale translations, forcing media container thresholds to evaluate against true hardware dimensions rather than high-density viewport projections. Fluid Grid and Token-Based Scaling Fixed an interface clipping issue where structural boundaries failed to dynamically contract on viewport widths below 600px. Activated the custom @media (max-width: 600px) breakpoint directives, downscaling internal flex container gaps from 15px to 10px and adjusting modular countdown component nodes for enhanced display symmetry. Re-calibrated proportional font metrics across mobile layouts, mapping secondary tracking units down to a structured 1.6rem baseline and bringing the primary title signature to an optimized 2rem boundary. Cross-Platform Interface Layout Fixes Restructured flex-wrap component mechanics within the core visualization container to smoothly adapt from unified desktop rows into multi-line mobile block grids. Eliminated persistent scrollbar overheads on handheld viewports by normalizing absolute coordinate assets and applying elastic percentage constraints across core elements."}, {"post_id": 13621, "ts": "2026-06-22T10:22:17Z", "hours": 0.3853, "text": "Devlog 07: URL Hash Routing Priority and Timer Encapsulation Debugging Feature and Priority Cascading Extended the state management architecture to support deep-linking properties using URL fragments (window.location.hash). Established a strict target resolution cascading hierarchy where URL fragment inputs take precedence over local user configuration memory, which in turn overrides the default fallback value (URL Hash > LocalStorage > “2027-01-01”). Implemented a regex filter pattern ( /^\\d{4}-\\d{2}-\\d{2}$/ ) to sanitize incoming window location string tokens prior to committing them to the execution state. Refactoring and State Synchronization Modularized individual timer logic fragments into a single initialization routine initTimer() . This routine synchronously updates text container parameters, binds default input values, clears residual interval clocks, and re-allocates tracking loops. Modified input element state transformation bindings to mirror newly elected target values into the URL fragment row (window.location.hash) concurrently with local system memory blocks. Resolution of Block Scope Diagnostics Scope Overlap Fix: Corrected a critical runtime ReferenceError located inside the initTimer() wrapper where repeating the let primitive on the timerId reference allocated a local block-scope variable that collided with pre-initialization clear routines. Removing the redundant declarative keyword reinstated proper execution. -Missing Invocation Fix: Appended an initial entry point declaration initTimer(targetString) to successfully boot up active countdown cycles on fresh page load sequences."}, {"post_id": 13112, "ts": "2026-06-21T13:27:59Z", "hours": 0.9197, "text": "Devlog 06: Sidebar Menu and Persistent LocalStorage Integration Requirements and Architecture Adopted the HTML5 semantic element to create a dedicated, off-screen sidebar panel for user controls, separating configuration options from the main countdown content. Integrated Google Material Icons stylesheet to render interactive trigger (“menu”) and dismissal (“close”) action elements. Implemented a native calendar interface using to capture target date modifications directly from the client view. Styling and Motion Mechanics Utilized fixed positioning (position: fixed) to pin the sidebar along the right viewport boundary, utilizing full height (100vh) to serve as a slide-out drawer. Applied transform: translateX(100%) to fully obscure the panel behind the right viewport edge by default, attaching a smooth CSS transition property (0.3s ease). Created a structural “.open” modifier class applied to the sidebar element (sidebar.open) that neutralizes the horizontal translation (translateX(0)) to bring the drawer into view upon click events. State Persistence via LocalStorage Refactored the global variable initialization to prioritize data retrieval from browser memory using localStorage.getItem(“targetDate”), ensuring fallback capability to the hardcoded default date string (“2027-01-01”) if empty. Bound a “change” event listener to the date input element. When a user updates the field, the new value is mirrored into localStorage under the unified key “targetDate”. Configured runtime updates where changing the input dynamically forces a complete recalculation of the timestamp integer and immediately restarts the global interval timer thread to prevent rendering stale countdown frames. Critical Bugs and Diagnostics Code Review Syntax Error Fix: Corrected an unescaped double-quote attribute typo inside the HTML element declaration where id=”“sidebar was breaking JavaScript’s DOM node selection lookup query. Selector Misalignment Fix: Resolved an animation breakdown where the “.open” conditional style rule was incorrectly targeted at the menu button instead of the sidebar wrapper element, preventing the slide-out sequence. Namespace Sync Fix: Addressed a string mismatch bug where initialization logic incorrectly requested the corrupted key string “targerDate” while event dispatchers stored mutations under “targetDate”, which consistently caused storage caching to break on reload."}, {"post_id": 13051, "ts": "2026-06-21T10:39:08Z", "hours": 0.5522, "text": "Devlog 05: Integrating Google Fonts Icons 1. Goal Implement a hamburger menu button by integrating Google Material Icons into the project. 2. Step 1 Implementation Added the Google Material Icons stylesheet link to the . Created a <button> containing a <span> with the material-icons class and the text “menu” to render the hamburger icon. Styled the button using CSS ( background: none , border: none ) to remove default browser styling and positioned it at the top-left corner using position: absolute ."}, {"post_id": 11692, "ts": "2026-06-19T01:41:54Z", "hours": 0.4172, "text": "Devlog 04: Dynamic Time Box VisibilityRequirement Hide time boxes that have a value of 0 to keep the UI clean, but prevent a box from hiding if a larger time unit still holds a value (e.g., if years > 0, months must not be hidden even if months == 0). Solution Implemented a cascading flag logic ( let hasValue = false ) executed from the largest unit (years) down to the smallest (minutes). Once any larger unit turns the flag true, all subsequent boxes remain visible regardless of their own value. Box elements are hidden dynamically using parentElement.style.display = \"none\" ."}, {"post_id": 10619, "ts": "2026-06-17T13:47:01Z", "hours": 0.6303, "text": "Devlog #2: Precision Countdown Algorithm Fixes Problem The previous countdown relied on dividing total seconds, which failed to calculate years and months accurately because real-world months have a variable number of days (28, 30, 31). Solution Shifted from pure division to a calendar-based object subtraction method. The system now calculates the differences for Y, M, D, H, M, S individually and applies a borrowing logic from the smallest unit up to the largest. It uses new Date(Y, M, 0).getDate() to dynamically fetch the exact number of days in the previous month when borrowing days. Logic Debunk: mo < 0 vs mo <= 0 The correct condition is mo < 0. The variable represents the difference between months. If mo equals 0, the target month and current month are the same, meaning no year needs to be borrowed. Using <= 0 would trigger a false borrow when months are identical, causing the month value to incorrectly jump by +12 and the year to decrease by 1. Bug Fixes Corrected the day borrowing condition from if (mo < 0) to if (d < 0). Fixed a typo where let m (minutes) was mistakenly subtracting now.getMonth() instead of now.getMinutes()."}, {"post_id": 10379, "ts": "2026-06-17T01:59:17Z", "hours": 0.3014, "text": "add some todos and changelog"}, {"post_id": 9955, "ts": "2026-06-16T14:11:15Z", "hours": 1.8083, "text": "the first project using html this year making a countdown timer"}]...
|
Title: Tick Tock by @ryderklh | Stardance
Devlogs Title: Tick Tock by @ryderklh | Stardance
Devlogs:
the first project using html this year making a countdown timer
add some todos and changelog
Devlog #2: Precision Countdown Algorithm Fixes Problem The previous countdown relied on dividing total seconds, which failed to calculate years and months accurately because real-world months have a variable number of days (28, 30, 31). Solution Shifted from pure division to a calendar-based object subtraction method. The system now calculates the differences for Y, M, D, H, M, S individually and applies a borrowing logic from the smallest unit up to the largest. It uses new Date(Y, M, 0).getDate() to dynamically fetch the exact number of days in the previous month when borrowing days. Logic Debunk: mo < 0 vs mo <= 0 The correct condition is mo < 0. The variable represents the difference between months. If mo equals 0, the target month and current month are the same, meaning no year needs to be borrowed. Using <= 0 would trigger a false borrow when months are identical, causing the month value to incorrectly jump by +12 and the year to decrease by 1. Bug Fixes Corrected the day borrowing condition from if (mo < 0) to if (d < 0). Fixed a typo where let m (minutes) was mistakenly subtracting now.getMonth() instead of now.getMinutes().
Devlog 04: Dynamic Time Box VisibilityRequirement Hide time boxes that have a value of 0 to keep the UI clean, but prevent a box from hiding if a larger time unit still holds a value (e.g., if years > 0, months must not be hidden even if months == 0). Solution Implemented a cascading flag logic ( let hasValue = false ) executed from the largest unit (years) down to the smallest (minutes). Once any larger unit turns the flag true, all subsequent boxes remain visible regardless of their own value. Box elements are hidden dynamically using parentElement.style.display = "none" .
Devlog 05: Integrating Google Fonts Icons 1. Goal Implement a hamburger menu button by integrating Google Material Icons into the project. 2. Step 1 Implementation Added the Google Material Icons stylesheet link to the . Created a <button> containing a <span> with the material-icons class and the text “menu” to render the hamburger icon. Styled the button using CSS ( background: none , border: none ) to remove default browser styling and positioned it at the top-left corner using position: absolute .
Devlog 06: Sidebar Menu and Persistent LocalStorage Integration Requirements and Architecture Adopted the HTML5 semantic element to create a dedicated, off-screen sidebar panel for user controls, separating configuration options from the main countdown content. Integrated Google Material Icons stylesheet to render interactive trigger (“menu”) and dismissal (“close”) action elements. Implemented a native calendar interface using to capture target date modifications directly from the client view. Styling and Motion Mechanics Utilized fixed positioning (position: fixed) to pin the sidebar along the right viewport boundary, utilizing full height (100vh) to serve as a slide-out drawer. Applied transform: translateX(100%) to fully obscure the panel behind the right viewport edge by default, attaching a smooth CSS transition property (0.3s ease). Created a structural “.open” modifier class applied to the sidebar element (sidebar.open) that neutralizes the horizontal translation (translateX(0)) to bring the drawer into view upon click events. State Persistence via LocalStorage Refactored the global variable initialization to prioritize data retrieval from browser memory using localStorage.getItem(“targetDate”), ensuring fallback capability to the hardcoded default date string (“2027-01-01”) if empty. Bound a “change” event listener to the date input element. When a user updates the field, the new value is mirrored into localStorage under the unified key “targetDate”. Configured runtime updates where changing the input dynamically forces a complete recalculation of the timestamp integer and immediately restarts the global interval timer thread to prevent rendering stale countdown frames. Critical Bugs and Diagnostics Code Review Syntax Error Fix: Corrected an unescaped double-quote attribute typo inside the HTML element declaration where id=”“sidebar was breaking JavaScript’s DOM node selection lookup query. Selector Misalignment Fix: Resolved an animation breakdown where the “.open” conditional style rule was incorrectly targeted at the menu button instead of the sidebar wrapper element, preventing the slide-out sequence. Namespace Sync Fix: Addressed a string mismatch bug where initialization logic incorrectly requested the corrupted key string “targerDate” while event dispatchers stored mutations under “targetDate”, which consistently caused storage caching to break on reload.
Devlog 07: URL Hash Routing Priority and Timer Encapsulation Debugging Feature and Priority Cascading Extended the state management architecture to support deep-linking properties using URL fragments (window.location.hash). Established a strict target resolution cascading hierarchy where URL fragment inputs take precedence over local user configuration memory, which in turn overrides the default fallback value (URL Hash > LocalStorage > “2027-01-01”). Implemented a regex filter pattern ( /^\d{4}-\d{2}-\d{2}$/ ) to sanitize incoming window location string tokens prior to committing them to the execution state. Refactoring and State Synchronization Modularized individual timer logic fragments into a single initialization routine initTimer() . This routine synchronously updates text container parameters, binds default input values, clears residual interval clocks, and re-allocates tracking loops. Modified input element state transformation bindings to mirror newly elected target values into the URL fragment row (window.location.hash) concurrently with local system memory blocks. Resolution of Block Scope Diagnostics Scope Overlap Fix: Corrected a critical runtime ReferenceError located inside the initTimer() wrapper where repeating the let primitive on the timerId reference allocated a local block-scope variable that collided with pre-initialization clear routines. Removing the redundant declarative keyword reinstated proper execution. -Missing Invocation Fix: Appended an initial entry point declaration initTimer(targetString) to successfully boot up active countdown cycles on fresh page load sequences.
Devlog 08: Viewport Configuration and Responsive Layout Calibration Viewport Meta Integration and RWD Layering Integrated the standard responsive configuration tag <meta name="viewport" content="width=device-width, initial-scale=1.0"> into the document structure header. Resolved a layout compression behavior where mobile rendering engines applied fallback desktop scaling parameters (typically a virtual width of 980px), forcing severe global downscaling on compact displays. Enabled native device pixel scale translations, forcing media container thresholds to evaluate against true hardware dimensions rather than high-density viewport projections. Fluid Grid and Token-Based Scaling Fixed an interface clipping issue where structural boundaries failed to dynamically contract on viewport widths below 600px. Activated the custom @media (max-width: 600px) breakpoint directives, downscaling internal flex container gaps from 15px to 10px and adjusting modular countdown component nodes for enhanced display symmetry. Re-calibrated proportional font metrics across mobile layouts, mapping secondary tracking units down to a structured 1.6rem baseline and bringing the primary title signature to an optimized 2rem boundary. Cross-Platform Interface Layout Fixes Restructured flex-wrap component mechanics within the core visualization container to smoothly adapt from unified desktop rows into multi-line mobile block grids. Eliminated persistent scrollbar overheads on handheld viewports by normalizing absolute coordinate assets and applying elastic percentage constraints across core elements.
Devlog 09: Synchronization Bug Fixes and URL Component Decoding Argument Reference and Logic Rectification Corrected a ReferenceError inside the titleInput listener by swapping an un-sanitized token ( newDate ) with the valid, persistent variable targetString . Fixed an assignment error where a single operator ( if(newTitle="") ) muted intended comparison logic, replacing it with a strict equality check ( newTitle === "" ). URL Normalization and Component Decoding Integrated decodeURIComponent() into loadInitialState() and the hashchange observer to prevent percent-encoded character corruption. Resolved text distortion for multibyte layouts (e.g., Chinese characters), ensuring continuous string fidelity across shared links. Established a default text fallback (“目標”) to secure interface rendering stability during empty input states.
Devlog 10: Structural File Extraction and Modular Synchronization Stability Code Base Decomposition and Externalization Refactored the unified codebase by isolating inline design frameworks and layout scripts into dedicated style.css and script.js internal resources. Streamlined index.html structure down to essential structural markup definitions, using external linkages to boost source reading efficiency and code maintainability. Character Processing and Stability Verification Verified text encoding boundaries across external routing changes to preserve multibyte text inputs (“目標日”, “目標”) without producing character distortion issues. Maintained responsive flex alignments and layout fluid bounds on smaller screens while decoupling runtime system layers.
Devlog 11: Modular Display Mode Architecture and Layout Jitter Resolution Feature Implementation & State Persistence Introduced a feature toggle layout inside the sidebar control node, offering real-time transitions between comprehensive chronological breakdowns and solitary metric configurations. Wired state persistence modules utilizing the local browser data subsystem ( localStorage ) to preserve client display configurations across session cycles and application reboots. Updated the data ingestion routing logic ( loadInitialState ) to safely aggregate user layout states without stepping over parameter strings delivered via URL fragment references. Precision Calculation & Dynamic Interface Masking Integrated an isolated decimal extraction calculation routine within the interval processing tree ( updateTimer ) dedicated to managing strict single-unit tracking parameters. Configured programmatic style visibility switches across atomic timer components, enforcing clean element masking on non-applicable duration counters when single-unit modes trigger. Typographic Stabilization & Layout Shifting Mitigation Corrected a severe layout jitter anomaly inside flexible grid clusters caused by variable font character dimensions shifting container boundaries during fast string state invalidations. Implemented font-variant-numeric: tabular-nums to enforce strict monospaced numeral allocation, keeping external box dimensions static regardless of structural text mutations. Introduced a dynamic responsive structural modifier block ( .mode-single ) to adjust component paddings, implement generous baseline tracking, and elevate text sizing bounds when processing simplified metrics.
Devlog 12: Fluid Typography and Viewport-Adaptive Interface Spacing Viewport-Proportional Layout Calibration Implemented fluid layout scaling mechanics across the primary text blocks utilizing the CSS clamp() function, anchoring layout metrics dynamically between absolute pixel boundaries and relative viewport height units ( vh ). Re-architected spacing margins below the core header display ( #event-label ) to smoothly scale inside an adaptive range ( clamp(5px, 2vh, 30px) ), optimizing structural vertical padding on shifting device orientations. Calibrated upper layout boundaries for the structural footer element ( #target-label ) using fluid scaling boundaries ( clamp(15px, 3vh, 40px) ), ensuring consistent geometric clear space relative to adjacent countdown blocks. Text Alignment and Flow Refactoring Transformed the target calendar description layer ( #target-label ) from inline formatting definitions into explicit block layout models ( display: block ), stabilizing custom spacing calculations and forcing uniform horizontal element boundaries. Enforced complete cross-axis block isolation by assigning absolute width restrictions ( width: 100% ) onto trailing description elements, smoothly pushing metadata strings down beneath the dynamic flexible tracking container.
Devlog 13: Native Sharing Integration and Address Synchronization Control Native Sharing and Fallback Mechanics Integrated a social propagation module ( #share-menu-btn ) inside the header actions block, utilizing the Web Share API to access native mobile distribution panels. Engineered an automated asynchronous clip fallback sequence that overrides processing blocks on unsupported desktop environments, programmatically duplicating host URL hashes via the navigator clipboard asset pool. Applied stateful visual interaction hints onto the interactive sharing interface, dynamically toggling system icons to verify action fulfillment before returning properties to base states. Hash Serialization and Router Interdependency Fixes Resolved an critical structural validation bug inside the initial state loader ( loadInitialState ) where an premature execution return statement truncated processing flows, preventing state restorations. Re-architected data assignment flows inside initialization cycles ( initTimer ), deploying window.history.replaceState() to inject fully compiled variable string parameters back into empty browser URI paths. Secured total address compliance across baseline entries, guaranteeing structural data layers are available to secondary network nodes even when sharing operations occur prior to custom value updates.
Devlog 14: Localization Migration and Pre-Ship Consolidation UI Text Internationalization Migrated all hardcoded multi-byte interface character arrays across template structures ( index.html ) and operational state modules ( script.js ) into standardized Western European typography strings. Refactored semantic definitions within input control placeholders and baseline reference containers to achieve uniform structural layout scaling under single-byte font rendering constraints. Documentation and Release Management Compiled a foundational system architectural reference ( README.md ) specifying setup logic, reactive routing hooks, and custom persistence implementations. Executed full client-side behavior validations on state-tracking components ahead of the definitive production deployment pipeline for Ship #2.
Devlog 15 Phase 1: Creating the Skeleton and Splitting Components Overextending the Style Files The project started as a single page where all HTML, CSS, and JS lived together. When I created the unified BaseLayout.astro , I kept the old global.css . However, that file had specific styles just for the countdown page, which broke the layout of the new homepage. Cleaning Up Style Pollution To fix this, I moved the countdown-specific CSS directly into the <style> tag of the countdown page ( index.astro ). Astro automatically confines these styles to their own page, ensuring they no longer mess up the homepage layout. Phase 2: Fixing Astro’s Route Misinterpretation Keeping Scripts in the Wrong Folder I originally placed the logic script ( script.js ) inside the src/pages/countdown/ folder to keep it close to the page. During local testing, Astro threw an error saying there was no API route handler for that JavaScript file. Moving Scripts to a Dedicated Folder I learned that Astro treats every file inside src/pages/ as a public URL or an API route. To fix this, I moved the file to a new src/scripts/ folder and renamed it countdown.js , keeping the pages folder strictly for actual web pages. Phase 3: Resolving Build Crashes from File Names Using Special Characters in Names Inside my documentation folder, I named a development note file ship#2.md . When I ran npm run build , the entire build process crashed immediately with a path error. Removing the Broken Characters The build tool (Vite) treats the # symbol as a URL anchor link, which breaks file path reading. I renamed the file to ship2.md , and the system was able to parse the path and build successfully. Phase 4: Overcoming the Environment Conflict (Server vs. Client) Running Browser Code on the Server This was the biggest challenge. When I imported countdown.js into the page, the build failed multiple times, throwing errors like window is not defined and document is not defined . Protecting the Code with Environment Guards Astro runs pages on the server to generate static HTML during the build step. Because Node.js does not have browser features like window or document , the script crashed. I fixed this with two steps: I imported the script using the ?url suffix in Astro so the server only records its path instead of running it. I wrapped all the browser-specific logic inside a typeof window !== "undefined" check. This ensures the script stays quiet during the server build and only runs once it reaches the user’s browser.
Devlog 16: Dashboard Layout Fixes Fixing Layout and Compression Issues Compressed Card Icons Problem : The card icons shrank and deformed when the screen size changed. Solution : Added flex-shrink: 0; to the icon class to force them to keep their correct size. Cards Stacking Vertically Problem : The tool cards unexpectedly stacked into a narrow, single column right in the middle of the screen. Even though there was plenty of empty space on both sides of the desktop browser, the grid refused to expand horizontally and display the cards side-by-side. Troubleshooting : The grid’s layout formula was correctly set to repeat(auto-fit, minmax(250px, 1fr)) , which should have allowed multiple columns. However, the parent container ( .home-container ) was set to display: flex with align-items: center . In a vertical Flexbox layout, this alignment forces child elements like the grid to shrink to their absolute minimum width based on content, instead of filling the screen. To make matters worse, a strict max-width: 300px; was hardcoded onto the .tool-grid . Since two cards plus their gaps required at least 525px to sit side-by-side, the 300px restriction made it mathematically impossible for the browser to create a second column. Solution : Removed the restrictive max-width: 300px; from the grid and replaced it with a generous max-width: 1200px; to allow proper breathing room on large screens. Added width: 100%; to the grid class, forcing the grid container to break out of the Flexbox compression and stretch completely across the parent container. This allowed the responsive auto-fit engine to finally see the available width and cleanly arrange the cards into multiple columns. Fixing Grid Spacing and Syntax Errors Layout Breaking Off-Screen Problem : The grid expanded past the screen edges and cut off the card content. Solution : Added box-sizing: border-box; to the main container so that padding is counted inside the total width. Broken Units and Side Scrollbars Problem : An annoying horizontal scrollbar appeared at the bottom of the page. Solution : Fixed a typo where width: 100sww; was written instead of 100svw , and added body { margin: 0; } to clear default browser spaces.
Devlog 17: Project Hub and README Expansion Moving from a Single Page to a Tool Hub Goal : Transformed TickTock from a single countdown page into a comprehensive time-management utility hub powered by Astro. Implementation : Created a main dashboard page ( src/pages/index.astro ) to serve as the gateway for current and future time tools, using a shared layout for a consistent user experience. Adding Future Roadmap and Project Documentation Goal : Wrote a complete README.md to document the new project architecture, local testing steps, and automated GitHub Pages deployment. Future Vision : Updated the repository roadmap to announce upcoming tools built for the Hack Club Stardance event, including a Pomodoro Timer, World Clock Board, Minimalist Timer, and Time Progress Bars.
Devlog 18: Adding Hub Sharing Functionality Integrating Client-Side Script Safely Implementing the Homepage Share Button Problem : The dashboard needed a simple button to share the current hub URL, but running browser APIs directly could break Astro’s static site generation (SSG) compiler. Solution : Added an inline <script is:inline> block to the index page. This bypasses the server-side build process and safely binds the sharing and clipboard logic only when the page loads in the user’s browser.
Devlog 19: Building the Adaptable Digital Clock Implementing Native Date Formatting Problem : The clock header needed to show the full current date (e.g., “Sunday, July 12, 2026”) dynamically without taxing browser performance or importing heavy external date libraries. Solution : Added a #date-label placeholder to the template and used the native JavaScript toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }) inside the main runtime loop to render lightweight, perfectly formatted timestamps on every update. Creating Fluid Visual Oscillations via Math.sin() Problem : Traditional blinking colons look rigid and distracting, failing to deliver a premium, organic feel for an active time-management tool. Solution : Avoided simple CSS toggles and leveraged a true trigonometric formula inside a requestAnimationFrame loop. By mapping high-precision timestamps through Math.sin() , the opacity gracefully curves between 0.2 and 1.0 , producing a perfectly smooth, wave-like breathing animation. Binding Custom Display and Layout Controls Problem : The interface required instant controls for 12/24-hour formats, font adjustments, and a standalone full-screen view while managing layout side effects. Solution : Wired up event listeners to modify global runtime states and inline CSS font families on the fly. Integrated the HTML5 Fullscreen API onto the #clock-screen element, backed by a global fullscreenchange listener to seamlessly catch manual ESC escapes and keep the toggle button states perfectly in sync.
Devlog 20: Settings Memory and Dynamic Sharing Adding Setting Memory and URL Sync Keeping your clock layout saved Persistent settings : The clock now remembers your favorite layout. Your choice of time format (12/24h) and font style is instantly saved directly to your browser’s local storage. URL sync : We linked these settings directly to the URL hash (like #12hr&mono ). When you refresh or load the page, your exact preferred theme loads up right away. Smart Sharing and Hub Integration Spreading the time and completing the hub Dynamic sharing : Added a share button that grabs your exact custom clock URL. It uses the Web Share API when available, and easily falls back to copying the link to your clipboard with a smooth checkmark animation on success. Connecting the dashboard : Linked the completed clock page to our homepage hub grid and updated the site layout, officially making TickTock a multi-tool station.
Devlog 21: Architecture Normalization and Layout Fine-Tuning Directory Restructuring & Future-Proofing Preparing for scalability Digital Clock Renaming : To prevent future routing conflicts as the project scales, we successfully renamed clock.js to digital-clock.js and adjusted the main page path to /src/pages/digital-clock/ . This cleanly isolates this feature from upcoming modules like World Clock or Pomodoro Timer. Dependency Clean-up : Updated all asset paths and module script injections across the hub, fully standardizing the multi-tool routing structure under the /TickTock/ basePath. Layout Fixes with Global CSS Variables Resolving invalid CSS properties via JS injection Replacing Non-Standard Styles : Fixed a crucial layout issue where arbitrary if(...) conditions inside CSS were breaking colon component constraints. Dynamic Width Injection : Migrated the layout parameters directly into digital-clock.js using the standard document.documentElement.style.setProperty API. The .colon element now seamlessly reads the responsive --clock-colon-width CSS variable, adapting perfectly across Sans, Serif, and Mono configurations without any jumping side effects.
Devlog 22: F11-Equivalent Fullscreen via Root Element Standardizing Fullscreen to document.documentElement Fixing disappearing layout elements The Pitfall : Previously, calling requestFullscreen() on the individual #clock-screen container caused the browser to isolate it from the DOM layout. This triggered default browser styling which rendered a pitch-black backdrop, and completely hid crucial layout parts like the header, footer, and side menu buttons. The Solution : We shifted the fullscreen API target from the sub-container directly to document.documentElement (the global <html> node). This aligns the button’s behavior perfectly with standard keyboard F11 fullscreen events. The Result : All global UI elements (header, footer, navigation) now scale smoothly and remain perfectly visible and interactive without any layout shifts or z-index clashing.
Devlog 23: Global Branding Relocation and Logo Navigation Moving Title Label to BaseLayout Unifying the brand and improving UX Header Linkification : Refactored the main title-label (“TickTock”) out of individual page templates and integrated it directly into the global BaseLayout.astro . Back-to-Home UX : Wrapped the brand title in an <a> tag. Now, clicking the brand logo on any sub-tool instantly routes the user back to the home dashboard Hub, offering an intuitive, web-app-like navigation experience.
Devlog 24: Color Architecture Refactoring with Design Tokens Two-Tier CSS Variables Global Tokens: Extracted hardcoded hex colors into primitive color names inside global.css. Theme Tokens: Created a semantic layer mapping elements like –bg-app and –accent-color directly to global tokens. Clean Codebase Update Component Styles: Replaced absolute colors across the layout, dashboard hub, countdown, and clock templates with var() variables. Script Alignment: Updated dynamic checkmark colors in JavaScript to read –accent-color instead of raw hex values. Future Scope: The design is now fully abstracted, meaning light mode implementation will only require token swapping without editing individual component code.
Devlog 25: Theme Toggle Implementation with Dark and Light Modes Light Theme Tokens Override Added :root[data-theme=“light”] in global.css to swap semantic theme variables for light background, borders, and high-contrast amber accents. Preserved existing component styles while smoothly transitioning body colors on theme switch. Sidebar Toggle Component and Logic Integrated a theme toggle button (#theme-toggle-btn) inside the BaseLayout header actions. Built persistent theme state logic using localStorage and system prefers-color-scheme detection. Used textContent on icon elements to dynamically switch between dark_mode and light_mode icons without type errors.
Devlog 26: Typo Correction and Expandable Directory Menu Typo Correction Fixed property naming error from –accent-contract-text to –accent-contrast-text in global CSS. Expandable Tools Directory Converted static directory links into a native component with smooth arrow rotation styling. Enabled server-side open status via open={isHomePage} in BaseLayout, defaulting to expanded on the home hub and collapsed on sub-tool pages.
Devlog 27: Time Progress Bar Feature Porting and JS Modular Refactoring Astro Slot Architecture & CSS Variable Integration Ported the standalone Time Progress Bar tool into the Astro layout system using designated slots ( #head , #header-content , #custom-menu , and #main-content ). Converted hardcoded hex colors into semantic global theme CSS variables ( --accent-color , --component-bg-standard , --text-heading ), ensuring native support for Dark and Light mode toggling. Replaced the dropdown filter with sidebar multi-select checkboxes for custom control over visible time progress units. JavaScript Modular Refactoring & Bug Fixes Decoupled single-script logic into dedicated, single-responsibility functions ( initSidebarToggles , calculateTimeProgress , updateTicksUI , updateProgressCardUI , and updateSingleCardUI ). Resolved JavaScript syntax errors, including missing function keywords, JS Automatic Semicolon Insertion (ASI) line-break issues on return statements, and uncalled Date method parentheses. Streamlined animation frame rendering by passing structured data from math calculations directly into UI updater functions.
Devlog 28: Layout Overflow Fixes and UI Polish Layout & Scrollbar Stability Added scrollbar-gutter: stable to html in global.css to reserve vertical scrollbar space, preventing horizontal overflow caused by layout reflow. Applied overflow-x: hidden to main containers and .progress-card to prevent percentage tags and thumbs from clipping past container edges at 100%. CSS Rule Corrections Fixed CSS property error by setting .track width to 100% instead of unitless value. Fine-tuned progress bar wrapper styles to ensure smooth visual layout under both dark and light themes.
Devlog 29: URL Hash Sync, LocalStorage Persistence & Universal Share Event URL & State Persistence Integrated URL Hash ( #year,month,... ) and localStorage synchronization into time-progress.js to preserve users’ toggle preferences across reloads and shares. Added a hashchange event listener to ensure UI check states dynamically update when users use browser navigation (Back/Forward). Centralized Layout Share Event Refactored the #share-menu-btn event listener into BaseLayout.astro , eliminating duplicate share logic across individual tool pages. Leveraged document.title dynamically to provide clean, contextual titles for native Web Share API and clipboard copy fallbacks.
Devlog 30: Image Export Feature & Template Refactoring Image Export Feature Integrated html2canvas library to enable one-click PNG image export of the active progress dashboard. Added an “Export as Image” button inside the custom sidebar menu with dedicated styling. Handled theme-aware background rendering by dynamically querying computed global CSS variables ( --bg-app ). DOM Template & Dynamic Watermark Refactored dynamic watermark creation using the HTML <template> element ( #export-watermark-template ), cleanly separating DOM structure from JavaScript execution logic. Configured dynamic timestamps using now.toLocaleString() to inject real-time snapshot dates and times into exported images. Added ignoreElements filtering in html2canvas to prevent unchecked/hidden .progress-card elements from creating top/bottom visual gaps in exported images. Bug Fixes & Refactor Fixed a TypeError on insertBefore / appendChild by referencing clone.firstElementChild to extract the correct Element Node from DocumentFragment . Resolved HTML/JS ID typos ( export-watermark-template ) and method call mismatches to ensure reliable script execution.
Devlog 31: Template Canvas Architecture & Reference Refactoring Independent Canvas Architecture Replaced direct DOM manipulation of live dashboard elements with a dedicated, off-screen template canvas ( .export-canvas ). Cloned active .progress-card elements into an isolated container ( .export-cards-holder ), ensuring the on-screen UI remains completely untouched and non-flickering during image generation. Moved aspect ratio, high-resolution dimensions (600x600), padding, and font-scaling rules directly into CSS for clean separation of concerns. Error Fixes & Cleanup Fixed ReferenceError caused by leftover references to targetContainer and stampEl inside initExportImageFeature . Updated html2canvas target from main dashboard container to the temporary canvasEl . Streamlined fallback DOM cleanup logic inside the try...catch block to guarantee off-screen elements are properly garbage collected.
Devlog 32: Dynamic Canvas Aspect Ratio Calculation Features & Refactoring Implemented dynamic aspect ratio calculation for PNG exports ( Height = 140 * Count + 180 ). Applied responsive auto-scaling for .export-canvas to ensure optimal vertical spacing regardless of selected cards count. Merged feature/export-image branch into main after verifying clean template rendering and correct node referencing.
Devlog 33: Pomodoro Segmented Timeline & Layout Integration Segmented Timeline Layout Integrated BaseLayout slots for the new Pomodoro page, separating sidebar settings from the main dashboard. Built a visual segmented timeline ( .timeline-track ) with flex-proportional work/break segments and a dynamic progress pin ( .timeline-pin ). Core Logic & State Setup Refactored state object fields ( workDuration , breakDuration , timeRemaining ) to ensure clean state initialization. Added timestamp delta checking on startup to preserve accurate remaining time across page reloads or background tabs.
Devlog 34: Pomodoro Core Timer & Segmented Timeline Integration Features Implemented static audio notification system via HTML5 Audio API targeting public/sounds/notification.mp3 . Architecture & State Management Implemented timestamp delta verification ( endTime - Date.now() ) to maintain countdown accuracy during background tab throttling or page reloads. Decoupled primary control actions across main page and sidebar controls ( #menu-start-btn , #cycles-input ). Bug Fixes & Refactoring Fixed ReferenceError during event initialization by enforcing state argument scoping within bindEvents . Refactored loadStateFromLocalStorage parsing logic to filter "undefined" string literals and clear corrupted cache gracefully.
Devlog 35: Pomodoro State Transition & Auto-Loop Refactoring Core Logic & State Fixes Auto-Phase Transition Fix : Resolved state lock ( status: 'running' ) preventing automatic transition from Focus to Break. Added explicit status resetting in handlePhaseEnd before invoking startTimer . Timer Precision : Replaced Math.round with Math.ceil in countdown logic to eliminate early sound triggers caused by rounding errors. Timestamp Recalibration : Implemented dynamic endTime re-calculation when switching modes ( work ↔ break ) to maintain state consistency.
Devlog 36: Update Docs & Merge Update Docs Readme: Add the links of the new tools Ship#4: Write Ship#4.md Merge!!!!! Merge feature/pomodoro into main Fortunately no error poping out!
Devlog 37: Multi-Timer UI Layout & Input Controls Form Inputs & Adjustments Built HH/MM/SS number input boxes with range limits and zero-padding logic on blur. Implemented stepper adjustment buttons for quick time value tweaking. Sidebar Timer List Layout Added sidebar timer list container to preview user-created countdown items. Integrated quick action delete buttons for item removal. Main Dashboard Circular Timer Constructed countdown card layout featuring SVG dynamic progress ring. Centered time readout using tabular-nums formatting to eliminate number jitter. Action Control Group Laid out card control buttons including play, pause, and replay. the ui was so tiring… i DID remember to open a new branch (feature/timer-main) …
Devlog 38: Multi-Timer Logic & Bug Fixes JS Managed multi-timer state using plain object arrays. Implemented saveTimers() and loadTimers() for LocalStorage persistence. Linked input fields with setupArrowBtns() to handle unit value increment and decrement bounds. Cloned <template> elements to dynamically generate sidebar list items and main cards via renderAll() . Added item deletion logic via handleDelete() to update state and UI. Established a startGlobalTick() loop running every 200ms using endTime offsets to prevent background tab drift. Calculated SVG circle strokeDashoffset dynamically based on remaining time ratios. Debugging & UI Patching Placing <template> tags inside slot="template-content" . Adding missing id="timer-container" . .textContent.textContent to .textContent Data.now() to Date.now() . timers.status to timer.status . finally got multi-timer state and progress rings syncing properly… bugs fixed and back to smooth sailing…
Devlog 39: Smooth Action Button Transitions Button Collapse & Spacing Animate Added max-width , margin: 0 , and padding: 0 constraints to .is-hidden to smoothly collapse hidden buttons without leaving blank layout gaps. Expanded base state with explicit max-width boundary to allow width-based CSS transitions. much smoother ♪(´▽`)
Devlog 40: Alarm Audio & LocalStorage Independent Alarm Audio Handling new Audio() allowing each finished timer to play independent looping sound effects concurrently. Bound alarm termination directly to handleReset() and handleDelete() . LocalStorage Serialization Fixes Sanitized timer state object before serialization in saveTimers() by stripping transient DOM/Audio references ( alarmAudio ) to prevent JSON stringification crashes. Added type validation ( typeof alarmAudio.pause === "function" ) inside stopAlarm() to prevent runtime TypeError issues during state rehydration. Post-Reload Alarm & Visual Sync Updated renderAll() to resume alarm sound playback and background pulse animation for ended timers across page reloads. Cleared endTime correctly during timer reset to normalize state lifecycle. alarm.wav Using LMMS to create alarm.wav for the alarming when timer.status==="ended" .
Devlog 41: Dual-Text Display & Running Animation Sub-Text Total Duration Display Added .timer-text-sub element inside the ring container to preserve and display the initial totalSeconds value. Styled sub-text using lighter font weights and var(--text-muted) . Dynamic Running Visual Effects Added .is-running state toggle based on timer.status === "running" . Implemented @keyframes timer-text-flash pulsing animation to provide continuous visual feedback while countdown is active.
Devlog 42: Timer Reordering & List Re-Sorting Reordering UI Controls Added .sort-action control group with .sort-up and .sort-down arrow buttons to the template layout. Dynamic Array Mutation & Re-rendering Implemented handleMoveTimer(id, direction) to handle array element swapping with upper and lower boundary bounds checks. Bound click handlers in renderListedTimer() to execute reordering operations, trigger LocalStorage updates, and instantly re-render the UI layout via renderAll() .
Devlog 43: Timer Integration & Navigation Update Navigation & Home Page Integration Added Timer card entry to the main landing page ( tool-card layout with hourglass Material symbol). Added direct Timer link to the global navigation bar in BaseLayout.astro . Feature Branch Merge Merged feature/timer-main into main , bringing in the new /timer page route, timer.js logic, sound assets ( alarm.wav ), and updated layout components. YEAYYY
Devlog 44: Stopwatch Layout Template & Layout Migration Ported side-menu and main container structures from Timer to Stopwatch layout ( index.astro ). Structured sidebar elements: .stopwatch-adding-action-btn and .stopwatch-list-container for dynamic item injection. Added template placeholders ( #listed-stopwatch-template and #stopwatch-card-template ). Stopwatch Card & Lap Data Display Integrated core display components: .stopwatch-text and .stopwatch-text-sub . Created interactive control group ( .stopwatch-card-action-btn ) supporting Start, Pause, Replay, and Lap actions. Designed a 3-column CSS Grid table ( .stopwatch-lap-container ) to organize lap metrics ( i , lap , total ).
Devlog 45: Initial Stopwatch Logic & Dynamic State Scaffolding Core State & Lap Data Architecture Designed a stopwatch schema tracking dynamic state ( idle | running | paused ) and an array of individual lap records ( laps ). Streamlined time calculation to compute elapsed milliseconds dynamically directly using timestamps ( Date.now() - lap.startTime ), eliminating redundant accumulator fields like startTime or elapsedTime . Interactive Handlers & Lifecycle Operations Implemented core lifecycle handlers: handleStart , handlePause , handleReset , handleLap , and handleDelete . Integrated updateCardUI and updateCardBtns to reflect running, paused, and idle UI visual feedback dynamically. Built active DOM updates for lap histories inside updateCardLapGrid using index-based duration summation for lap and total times. Enabled global runtime updates via startGlobalTick() timer intervals and list reordering via handleMoveStopwatch() .
Devlog 46: UI Fine-tuning & Timing Logic Optimization Lap Calculations -Replaced laps.forEach with for (let j = 0; j <= i; j++) to ensure cumulative total times ( totalMS ) strictly correspond to the current lap index. Layout Enhanced formatTime() rendering logic by applying inline styles width , transform: scaleX(0.8) , text-align: center to dynamic span elements, preventing font-width shifting during rapid ticker updates. Dynamic Rendering Integrated updateListedStopwatch() into the global interval loop, enabling sidebar preview labels to tick synchronously with active main cards. Optimized state updates to target individual time elements instead of triggering full list re-renders on every ticker frame. Added optional chaining laps?.[0]?.startTime across rendering pipelines to prevent runtime exceptions when initializing empty stopwatches.
Devlog 47: Pause Compensation Pause Duration Offset Implemented pauseDuration calculation Date.now() - pauseStartTime during resume actions status === "paused" . Shifted all existing lap timestamps lap.endTime += pauseDuration forward to subtract paused time intervals. State-Aware Timestamp Resolution Standardized timestamp evaluation across renderers handleLap , renderListedStopwatch , updateListedStopwatch , and updateCardUI using ternary state checks: const now = stopwatch . status === " running " ? Date . now () : stopwatch . pauseStartTime ;
Devlog 48: DOM Selector Bugfixes & Homepage Quick Access DOM Query Selector & Reference Repairs Updated querySelector in updateListedStopwatch from target class .listed-stopwatch-demo to parent wrapper .listed-stopwatch[data-id="..."] , resolving element lookup failures during live updates. Homepage Integrated direct links and dedicated preview cards for the Stopwatch application into index.astro and BaseLayout.astro .
Devlog 49: Lap Data Export Plaintext Lap Data Serialization formatLapsOutput : a dedicated text formatter that converts active stopwatch data into structured tab-separated values (TSV) suitable for copying. Async Clipboard Copy Logic Implemented an async wrapper using navigator.clipboard.writeText() with built-in error handling ( try/catch ) and user alerts for unsupported environments or clipboard permission rejections. Interactive Copy Feedback UI Wired copyBtn click events to trigger text copying and dynamically update the button icon ( check or error ) and theme accent color.
Devlog 50 Layout Refactoring Scroll Restructuring Shifted .stopwatch-container layout from vertical wrapping ( flex-wrap: wrap ) to a single-row horizontal scroll track ( flex-wrap: nowrap with overflow-x: auto ).
Devlog 51: Asset Migration Asset Directory Migration Moved audio assets ( alarm.wav and notif.wav ) from the static /public/sounds/ directory into the source-managed asset pipeline at src/assets/sounds/ . Module Import & Bundler Integration Replaced hardcoded absolute URL paths ( "/public/sounds/..." ) with explicit ES module imports ( import alarmSoundUrl from '../assets/sounds/alarm.wav' and import notifSoundUrl from '../assets/sounds/notif.wav' ) across timer.js and pomodoro.js .
Devlog 52: GitHub Pages Audio Path Resolution Fixes Absolute Repository Subpath Hardcoding Replaced environment variable dynamic paths ( import.meta.env.BASE_URL ) with direct base-path URLs ( '/TickTock/sounds/alarm.wav' ) in playAlarm() . i have no idea why that happened
Ships:
What I Made I made a Countdown Web App called “Tick Tock.” It shows the exact years, months, days, hours, minutes, and seconds left until January 1, 2027. What Was Challenging Calculating months and years was hard. Months have different days (28, 30, or 31), so I had to write smart JavaScript code to borrow days and keep the timer 100% accurate. What I Am Proud Of It Works!: Actually this is my first time using html to build a website. Clean Design: I fixed the layout bugs and made a dark-mode interface. How to Test It https://klhrd.github.io/TickTock/
WHAT I MADE/THINK? I made a long-term countdown timer for events. It’s really hard for me to build things in a way that is completely new to me. I’ve been stuck not only with programming languages but also with English. However, through this project (STARDANCE), though I didn’t create something really impressive, I think I learnt A LOT. Features Live Countdown Full mode ⭐Days mode Customizable ⭐Change Target Date ⭐Edit Event Title ⭐automatically save in localStorage & url# ⭐share btn Dark Mode UI ⭐means new features of the previous ship WHAT I LEARNT? basic GIT code basic HTML/CSS3/JS How to write DevLogs REPLIES I’ve read all the replies of the ship#1. And lots of them mentioned the same thing. Thanks to everyone who give me feedback. Hope there’s the better version of previous ships. 1. ABOUT CHANGEABLE TARGET Now you can pick any target date and even edit the event title right from the sidebar. 2. ABOUT LANGUAGE I’ve fully migrated the app to English now. 3. ABOUT DEVLOG I’ve leveled up my devlog game for this update—documented all the engineering details and bugs I fixed this time. TRY IT! 2027 New Year NC Finals Weekend US Open
WHAT I MADE/THINK? I expanded TickTock from a single timer into a multi-tool station (Hub)! This time, I built a beautiful, highly customizable Digital Clock. It was a huge challenge for me to handle standard browser behaviors, especially turning a single-page SPA into a structured Astro website with a homepage and sub-pages. It took lots of testing, but I feel so proud when everything finally aligned perfectly. Features ⭐Homepage Hub Dashboard Live Countdown Customizable Countdown Full mode / Days mode Change Target Date Edit Event Title ⭐Digital Clock ⭐12-hour / 24-hour format ⭐3 Font styles (Sans, Serif, Mono) ⭐Fullscreen mode (Header/Footer kept!) ⭐Smooth breathing colon animation automatically save in localStorage & url# Lightweight ⭐means new features of the previous ship WHAT I LEARNT? A lot of new things about Astro and NodeJS How to structure routes for multiple tools (Refactoring files) Advanced CSS (using global variables to adjust layout gaps dynamicly) REPLIES Thank you so much for the 115 stardust and the amazing feedback! I read every single review from Ship #2, and they helped me make this update so much better. 1. ABOUT MORE FEATURES Many suggested adding more tools or events. I turned the website into a Hub and built the Digital Clock as our second official tool! 2. ABOUT THE SCREENSHOT IN README Two reviewers mentioned adding screenshots. I’ve updated the README with fresh screenshots so people skimming through can see the UI instantly. TRY IT! TickTock Home Hub NC Finals Weekend Digital Clock (12H / Classic Serif)
WHAT I MADE/THINK? I expanded TickTock from a single timer into a multi-tool station (Hub)! This time, I built a Pomodoro Timer and a Time Progress Displayer. It was a huge challenge for me to handle standard browser behaviors, especially turning a single-page SPA into a structured Astro website with a homepage and sub-pages. It took lots of testing, but I feel so proud when everything finally aligned perfectly. Features Homepage Hub Dashboard Live Countdown Customizable Countdown Full mode / Days mode Change Target Date Edit Event Title automatically save in localStorage & url# Digital Clock 12-hour / 24-hour format 3 Font styles (Sans, Serif, Mono) Fullscreen mode (Header/Footer kept!) Smooth breathing colon animation automatically save in localStorage & url# ⭐Time Progress Bar ⭐Export as image ⭐Switchable hide/show ⭐Pomodoro Timer ⭐Customable number of cycles ⭐Pause at any time ⭐Notification Sound Lightweight ⭐Light mode/Dark mode ⭐Quick link to other tools ⭐means new features of the previous ship WHAT I LEARNT? A lot of new things about git JS, Astro… TRY IT! TickTock Home Hub NC Finals Weekend Digital Clock (12H / Classic Serif) Time Progress Pomodoro Timer
WHAT I MADE/THINK? I expanded TickTock from a single timer into a multi-tool station (Hub)! This time, I built a Timer and a Stopwatch. It was a huge challenge for me to handle standard browser behaviors, especially turning a single-page SPA into a structured Astro website with a homepage and sub-pages. It took lots of testing, but I feel so proud when everything finally aligned perfectly. Features Homepage Hub Dashboard Live Countdown Customizable Countdown Full mode / Days mode Change Target Date Edit Event Title automatically save in localStorage & url# Digital Clock 12-hour / 24-hour format 3 Font styles (Sans, Serif, Mono) Fullscreen mode (Header/Footer kept!) Smooth breathing colon animation automatically save in localStorage & url# ⭐Timer ⭐Mutiple timers at one page ⭐Keep going after refreshing website ⭐Circular progress bar ⭐Sortable timers ⭐Alarm and flash on completion ⭐Stopwatch ⭐Mutiple stopwatches at one page ⭐Keep going after refreshing website ⭐Sortable timers ⭐Able to lap and split ⭐Able to copy total time and laps info Time Progress Bar Export as image Switchable hide/show Pomodoro Timer Customable number of cycles Pause at any time Notification Sound Lightweight Light mode/Dark mode Quick link to other tools WHAT I LEARNT? A lot of new things about git How to write devlogs JS, Astro… TRY IT! TickTock Home Hub NC Finals Weekend Digital Clock (12H / Classic Serif) ⭐Timer ⭐Stopwatch Time Progress Pomodoro Timer ⭐means new features of the previous ship...
|
1792975723.4305775
|
1793062123.4305775
|
|
39451
|
Olympus Mons: The Voyage by @AfdalFavas | Stardanc Olympus Mons: The Voyage by @AfdalFavas | Stardance...
|
AfdalFavas
|
2
|
63.0
|
975
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-28T20:40:11Z", "hours": 3.0, "multiplier": 16.95, "payout": 55, "blessing": "neutral", "text": "This is ship 2, I have drastically improved the README.md file, improved the overall game optimization. This isn’t a big ship, everything was mostly bug-fixing and working on feedback, and also improving my README file. Here are the controls: WASD - Move Space Bar - Reset Rotation, you will use this a lot, the Mars environment is annoying Left Shift - Brake, Don’t try using S, that is for reversing only E - Open in-game menu If there is anything wrong with the game, please include that in the feedback specifically and which rating component was affected by it. README is in Github Repo To try the game click “Try Project” below, which will redirect you to tich.io, from there you can play it. It might load for some time.", "repo": "https://github.com/afdal-f/Olympus-Mons-The-Voyage", "demo": "https://afdal-f.itch.io/olympus-mons-the-voyage"}, {"ship_num": 2, "ts": "2026-08-23T10:45:50Z", "hours": 60.0, "multiplier": 15.88, "payout": 920, "blessing": "neutral", "text": "So this project is a project in which you drive a rover, attempt dodging rocks from your spawn to a checkpoint which is the Caldera of Olympus Mons. The game is set on Olympus Mons the Solar System’s largest mountain. There are four checkpoints with the last one being the final Point (Caldera). There are a few phenomena you will experience like dust devils, which are basically harmless mini tornadoes, and dust storms, which actually do have wind effects and you will need to drive through it. A dust storm is spawned where you are at the spawn, so you will have to struggle initially. Be fast too, otherwise a dust storm is spawned every…. about 500 seconds. Once you reach the final Point, your rank will be shown, which is calculated based on how quickly you reached the final point. WASD - Movement E - Open inventory C - Close inventory Space Bar - reset movement and rotation (you will find yourself using this a lot because of Mars’s gravity. Left Shift - Brake", "repo": "https://github.com/afdal-f/Olympus-Mons-The-Voyage", "demo": "https://afdal-f.itch.io/olympus-mons-the-voyage"}]...
|
[{"post_id": 56799, "ts": "202 [{"post_id": 56799, "ts": "2026-08-28T18:32:00Z", "hours": 3.2736, "text": "Devlog 10 v.1.1.0 So this is probably my last last devlog; this is the last devlog (I think) before my second ship. The second ship is essentially based on feedback from people who rated my first. Changes since v.1.0.0 Added settings for volume. Improved rover stability. Optimized performance. Things I was hoping to add More settings that edit a lot of the values available, like the amount of rocks being spawned; the rocks might get too annoying for some people. Multiplayer modes More feature-packed things I’m probably not going to add this to the project because after this I have exams, and then more exams, so yeah. Challenges I had to overcome Learning Unity by myself for the first time Learning Blender by myself for the first time Having to learn C#, though this was easier because I already know C++ Things I learnt Game development is NOT easy You can’t make Forza Horizon 5 in a month Things exist outside of school Thanks to everyone who rated my first ship. I didn’t realize how much people rated projects, and I was losing hope I’d get any good feedback, but the feedback I got was amazing, pointed out exactly what the problem was and how they would like it fixed, exactly what they liked about my project, etc. Below is the complete playthrough of the game, from getting out of that dust storm to getting to the final point and falling down the Caldera of Olympus Mons."}, {"post_id": 52960, "ts": "2026-08-23T10:39:36Z", "hours": 6.2783, "text": "Devlog 09 v.1.0.0 This is the last devlog for this project, and I did NOT have enough time because school came by way faster than i thought. But it is what is is"}, {"post_id": 51828, "ts": "2026-08-21T18:01:20Z", "hours": 11.9369, "text": "DUST STORMMSSSS Devlog 08 v.0.3.0 I’m gonna make this short… I added dust storms, Music, a way better UI, and better vehicle physics. I attempted a better camera movement feature and failed miserably. I added a cool in game menu:"}, {"post_id": 50197, "ts": "2026-08-19T10:23:55Z", "hours": 3.9958, "text": "Devlog 07 v.0.2.0 So the last devlog was v.0.1.0; this is just the less-buggy, actually normal-looking UI version. Anyway, I just realized I have only 2 days to finish my project because I am going back to the UAE. My summer vacay in India is over, and in the UAE I’ll be way too busy with school stuff. At least it was nice while it lasted. I’m gonna have to pull all-nighters smhw … But honestly, I’m happy about the project till now; for a first game, I think it looks gud. Changes since v.0.1.0 Added a smarter particle system. Added way better UI, all made in Canva. I lowk spent too much time on the credits. I added ambient music Things I need for v.0.3.0 or at least v.0.5.0 Actual land structures Dust dust devils Clouds"}, {"post_id": 48845, "ts": "2026-08-17T12:07:48Z", "hours": 10.4806, "text": "Devlog 06 So basically, this is probably going to be the alpha version of my project… It is very under-polished, especially the UI, but I hope it is good enough for playtesting! I want to upload it on itch.io for feedback before I start polishing and adding finishing touches and features. But I have no idea if uploading to itch.io is allowed. Changes: Added UI, including the main menu, credits, and HUD. Added particle effects to the rover. Added a better mesh I made in Blender. Added lights and a cool backlight when you click the brakes Added checkpoints; there are four of them, with the fourth being called the finalPoint. Added a pointer object that points you in the right direction for the next checkpoint. Things I need to add: The checkpoints being actually visible, instead of just boring nothingness. A way better UI; currently it’s just text and primitive white squares. Better particle effects More Mars phenomena, like land structures, dust devils, clouds (I need to research them first), etc. Add a lander next to the rover for the lore, which is explained below: Basically, the lore is just that the Lander messes up and lands on the wrong crater, so the rover has to go by itself from the crater to the actual mountain “opening” called the Caldera; the journey is shown in a picture below. The reason I chose to only make the journey from that crater to the caldera instead of the whole mountain is just that Olympus Mons is HUGE. 600km wide and 21km tall, so even in a slightly scaled down version of the mountain, it still is going to take way too long and be way too boring to be playable. But anyway, I am really happy that this has actually reached a stage where it can be considered a game… even if it is classified as “barebones”"}, {"post_id": 41939, "ts": "2026-08-06T13:57:47Z", "hours": 8.3486, "text": "Devlog 05 (I think… I lost count) The video below is the complete playthrough of the game till now, btw. So today I just optimised things, made the code better, etc etc. I added rock spawning, and some actual feel of speed by increasing the FOV with higher speeds. Here are all the changes I made and what I need to do: Changes I added a script that increases the FOV of the camera when the speed increases… I tried making the FOV increase with acceleration, but that ended up really bad I added a script that spawns rocks in a 1000 x 1000 area, so if you get to the edge of that spawned square of land, it spawns rocks at the next square. This is temporary because it gets very glitchy when you get to the edge of the spawned square, and you can see the rocks spawning, which isn’t very polished. I added way better suspension, but it still rolls over pretty fast… any Unity devs here know what to do? The vehicle is 1500 kg with 8 wheels… (ignore my out of context accomplishment but I am very proud of it) I defeated my cousin in badminton 7 - 3… Yeah, nothing else lol… That’s that… now let’s get into things I plan on doing Things I plan on doing: I got to get that rock spawning thing better… I’m thinking of slowly spawning a huge area when the game is loading… I just have to figure out how… I need a good skybox; the main objective of the game is to make people fall in love with Mars (currently they’ll just get pissed at it for the annoying rocks…) I need some actual UI; currently, it is really bare-bones I need to add particle effects I also need something to keep people from getting bored… driving around a crater is not gonna cut it… And yeah… That is what I have done till now. The stupid thing is that I had studied Unity specifically for this project… I only knew C++ and Unreal Engine would bake my pc alive… So I had to learn Unity from scratch (help)"}, {"post_id": 40863, "ts": "2026-08-04T17:38:44Z", "hours": 4.5983, "text": "Devlog 04: So this devlog has added VERY unstable features… You usually see devlogs where the features are perfect and polished, but I really need to sleep, so I’ll figure the bugs out tomorrow. Firstly, I made this rock spawner; previously, it was a plain land of absolute nothingness… You couldn’t really see anything, in fact; when you were driving fast, all you would be able to see was an almost flat landscape, so you genuinely had almost no idea whether you were going fast or just not moving at all… The rocks removed that; our brain needs something passing by to judge the speed… Secondly, I made this thing where the FOV increases based on the speed… It was a good addition except it was concerningly shaky… I tried to move it all into LateUpdate(), but that did absolutely nothing at all whatsoever;t it would be really cool once I get it to be smooth. Thirdly I TRIED to add a rock spawning mechanism where the rocks spawn based on your location… It worked but only when you are at the edge of the already spawned chunk of land… I tried to make it spawn a bit earlier… (That is what you can see based on the following video ) Anyway, I use a potato, so I hope the one frame per next Christmas video recording doesn’t irritate you."}, {"post_id": 40126, "ts": "2026-08-03T14:58:04Z", "hours": 1.1603, "text": "slightlyyyyyy crashed unity hehe"}, {"post_id": 39940, "ts": "2026-08-03T08:29:02Z", "hours": 4.7933, "text": "Devlog 03 So this was a headache… until now, everything was relatively easy. I had conveniently forgotten to save the project, so I had to recode the movement system. I added wheel colliders… (I gave up on using my own wheel models because you can barely see the wheels anyway; I thought it would be better to get some work done on other things…) I made an e-brake option and a reset option in case you get stuck… But now I am stuck with this weird bug… does anyone know how to make wheel meshes follow the wheel collider? Because whatever I did is messing up my wheels… Well, after this (after fixing this bug, I hope…) I’m going to be adding a soul to the mountain because currently it’s just a plane modified using a heightmap… I got some cool rocks from Sketchfab so I can add some roughness to the current plane mountain, and then I need to do some other things, which I will think about later… I also need to add the actual game other than the physical stuff (I hope ToT); I need to add the main menu, and a hell lot of stuff before this competition ends… (I’m fried) NOTE: I just realized how bad the video recording is, sorry guys"}, {"post_id": 37431, "ts": "2026-07-30T05:00:59Z", "hours": 1.1381, "text": "Devlog 02 So basically… Wheel colliders were way too scary, so I decided to make my own wheel colliders from scratch cuz I can (no I cant). Hope I can actually get this project done in time, but this wheel collider issue is NOT helping… I have an emergency plan but that involves a very boring looking wheel… Anyway if you want you can analyze the bug below… I call it ‘The dance of wheels’ (ill try smth more creative next time)"}, {"post_id": 37047, "ts": "2026-07-29T14:49:08Z", "hours": 7.6333, "text": "Devlog 01 So basically I am trying to create a small little simulator which allows people to experience driving in another planet, I first had to find a DEM somewhere. A DEM is just a heightmap of a place. I wanted the DEM of Olympus Mons, the mountain the game is set at. It was a headache but I found it at some USGS website, I went into websites way too sketchy for my liking but I found it. After that I had to import it into Blender and then turn it into an actual model. So that is over, what I am working on right now is the rover itself… I made the model in Blender, and to call the model low-poly is an overstatement, but I am proud of it (somewhat). I was focusing on physics anyway ;-; Now the goals I have for the game is getting the physics and wheels to work. Unity did have wheel colliders but after a few hours of the wheel colliders appearing always somewhere random except where its supposed to be itself, I decided to somehow make my own wheel system… Wish me luck! (im so fried…)"}]...
|
Title: Olympus Mons: The Voyage by @AfdalFavas | S Title: Olympus Mons: The Voyage by @AfdalFavas | Stardance
Devlogs:
Devlog 01 So basically I am trying to create a small little simulator which allows people to experience driving in another planet, I first had to find a DEM somewhere. A DEM is just a heightmap of a place. I wanted the DEM of Olympus Mons, the mountain the game is set at. It was a headache but I found it at some USGS website, I went into websites way too sketchy for my liking but I found it. After that I had to import it into Blender and then turn it into an actual model. So that is over, what I am working on right now is the rover itself… I made the model in Blender, and to call the model low-poly is an overstatement, but I am proud of it (somewhat). I was focusing on physics anyway ;-; Now the goals I have for the game is getting the physics and wheels to work. Unity did have wheel colliders but after a few hours of the wheel colliders appearing always somewhere random except where its supposed to be itself, I decided to somehow make my own wheel system… Wish me luck! (im so fried…)
Devlog 02 So basically… Wheel colliders were way too scary, so I decided to make my own wheel colliders from scratch cuz I can (no I cant). Hope I can actually get this project done in time, but this wheel collider issue is NOT helping… I have an emergency plan but that involves a very boring looking wheel… Anyway if you want you can analyze the bug below… I call it ‘The dance of wheels’ (ill try smth more creative next time)
Devlog 03 So this was a headache… until now, everything was relatively easy. I had conveniently forgotten to save the project, so I had to recode the movement system. I added wheel colliders… (I gave up on using my own wheel models because you can barely see the wheels anyway; I thought it would be better to get some work done on other things…) I made an e-brake option and a reset option in case you get stuck… But now I am stuck with this weird bug… does anyone know how to make wheel meshes follow the wheel collider? Because whatever I did is messing up my wheels… Well, after this (after fixing this bug, I hope…) I’m going to be adding a soul to the mountain because currently it’s just a plane modified using a heightmap… I got some cool rocks from Sketchfab so I can add some roughness to the current plane mountain, and then I need to do some other things, which I will think about later… I also need to add the actual game other than the physical stuff (I hope ToT); I need to add the main menu, and a hell lot of stuff before this competition ends… (I’m fried) NOTE: I just realized how bad the video recording is, sorry guys
slightlyyyyyy crashed unity hehe
Devlog 04: So this devlog has added VERY unstable features… You usually see devlogs where the features are perfect and polished, but I really need to sleep, so I’ll figure the bugs out tomorrow. Firstly, I made this rock spawner; previously, it was a plain land of absolute nothingness… You couldn’t really see anything, in fact; when you were driving fast, all you would be able to see was an almost flat landscape, so you genuinely had almost no idea whether you were going fast or just not moving at all… The rocks removed that; our brain needs something passing by to judge the speed… Secondly, I made this thing where the FOV increases based on the speed… It was a good addition except it was concerningly shaky… I tried to move it all into LateUpdate(), but that did absolutely nothing at all whatsoever;t it would be really cool once I get it to be smooth. Thirdly I TRIED to add a rock spawning mechanism where the rocks spawn based on your location… It worked but only when you are at the edge of the already spawned chunk of land… I tried to make it spawn a bit earlier… (That is what you can see based on the following video ) Anyway, I use a potato, so I hope the one frame per next Christmas video recording doesn’t irritate you.
Devlog 05 (I think… I lost count) The video below is the complete playthrough of the game till now, btw. So today I just optimised things, made the code better, etc etc. I added rock spawning, and some actual feel of speed by increasing the FOV with higher speeds. Here are all the changes I made and what I need to do: Changes I added a script that increases the FOV of the camera when the speed increases… I tried making the FOV increase with acceleration, but that ended up really bad I added a script that spawns rocks in a 1000 x 1000 area, so if you get to the edge of that spawned square of land, it spawns rocks at the next square. This is temporary because it gets very glitchy when you get to the edge of the spawned square, and you can see the rocks spawning, which isn’t very polished. I added way better suspension, but it still rolls over pretty fast… any Unity devs here know what to do? The vehicle is 1500 kg with 8 wheels… (ignore my out of context accomplishment but I am very proud of it) I defeated my cousin in badminton 7 - 3… Yeah, nothing else lol… That’s that… now let’s get into things I plan on doing Things I plan on doing: I got to get that rock spawning thing better… I’m thinking of slowly spawning a huge area when the game is loading… I just have to figure out how… I need a good skybox; the main objective of the game is to make people fall in love with Mars (currently they’ll just get pissed at it for the annoying rocks…) I need some actual UI; currently, it is really bare-bones I need to add particle effects I also need something to keep people from getting bored… driving around a crater is not gonna cut it… And yeah… That is what I have done till now. The stupid thing is that I had studied Unity specifically for this project… I only knew C++ and Unreal Engine would bake my pc alive… So I had to learn Unity from scratch (help)
Devlog 06 So basically, this is probably going to be the alpha version of my project… It is very under-polished, especially the UI, but I hope it is good enough for playtesting! I want to upload it on itch.io for feedback before I start polishing and adding finishing touches and features. But I have no idea if uploading to itch.io is allowed. Changes: Added UI, including the main menu, credits, and HUD. Added particle effects to the rover. Added a better mesh I made in Blender. Added lights and a cool backlight when you click the brakes Added checkpoints; there are four of them, with the fourth being called the finalPoint. Added a pointer object that points you in the right direction for the next checkpoint. Things I need to add: The checkpoints being actually visible, instead of just boring nothingness. A way better UI; currently it’s just text and primitive white squares. Better particle effects More Mars phenomena, like land structures, dust devils, clouds (I need to research them first), etc. Add a lander next to the rover for the lore, which is explained below: Basically, the lore is just that the Lander messes up and lands on the wrong crater, so the rover has to go by itself from the crater to the actual mountain “opening” called the Caldera; the journey is shown in a picture below. The reason I chose to only make the journey from that crater to the caldera instead of the whole mountain is just that Olympus Mons is HUGE. 600km wide and 21km tall, so even in a slightly scaled down version of the mountain, it still is going to take way too long and be way too boring to be playable. But anyway, I am really happy that this has actually reached a stage where it can be considered a game… even if it is classified as “barebones”
Devlog 07 v.0.2.0 So the last devlog was v.0.1.0; this is just the less-buggy, actually normal-looking UI version. Anyway, I just realized I have only 2 days to finish my project because I am going back to the UAE. My summer vacay in India is over, and in the UAE I’ll be way too busy with school stuff. At least it was nice while it lasted. I’m gonna have to pull all-nighters smhw … But honestly, I’m happy about the project till now; for a first game, I think it looks gud. Changes since v.0.1.0 Added a smarter particle system. Added way better UI, all made in Canva. I lowk spent too much time on the credits. I added ambient music Things I need for v.0.3.0 or at least v.0.5.0 Actual land structures Dust dust devils Clouds
DUST STORMMSSSS Devlog 08 v.0.3.0 I’m gonna make this short… I added dust storms, Music, a way better UI, and better vehicle physics. I attempted a better camera movement feature and failed miserably. I added a cool in game menu:
Devlog 09 v.1.0.0 This is the last devlog for this project, and I did NOT have enough time because school came by way faster than i thought. But it is what is is
Devlog 10 v.1.1.0 So this is probably my last last devlog; this is the last devlog (I think) before my second ship. The second ship is essentially based on feedback from people who rated my first. Changes since v.1.0.0 Added settings for volume. Improved rover stability. Optimized performance. Things I was hoping to add More settings that edit a lot of the values available, like the amount of rocks being spawned; the rocks might get too annoying for some people. Multiplayer modes More feature-packed things I’m probably not going to add this to the project because after this I have exams, and then more exams, so yeah. Challenges I had to overcome Learning Unity by myself for the first time Learning Blender by myself for the first time Having to learn C#, though this was easier because I already know C++ Things I learnt Game development is NOT easy You can’t make Forza Horizon 5 in a month Things exist outside of school Thanks to everyone who rated my first ship. I didn’t realize how much people rated projects, and I was losing hope I’d get any good feedback, but the feedback I got was amazing, pointed out exactly what the problem was and how they would like it fixed, exactly what they liked about my project, etc. Below is the complete playthrough of the game, from getting out of that dust storm to getting to the final point and falling down the Caldera of Olympus Mons.
Ships:
So this project is a project in which you drive a rover, attempt dodging rocks from your spawn to a checkpoint which is the Caldera of Olympus Mons. The game is set on Olympus Mons the Solar System’s largest mountain. There are four checkpoints with the last one being the final Point (Caldera). There are a few phenomena you will experience like dust devils, which are basically harmless mini tornadoes, and dust storms, which actually do have wind effects and you will need to drive through it. A dust storm is spawned where you are at the spawn, so you will have to struggle initially. Be fast too, otherwise a dust storm is spawned every…. about 500 seconds. Once you reach the final Point, your rank will be shown, which is calculated based on how quickly you reached the final point. WASD - Movement E - Open inventory C - Close inventory Space Bar - reset movement and rotation (you will find yourself using this a lot because of Mars’s gravity. Left Shift - Brake
This is ship 2, I have drastically improved the README.md file, improved the overall game optimization. This isn’t a big ship, everything was mostly bug-fixing and working on feedback, and also improving my README file. Here are the controls: WASD - Move Space Bar - Reset Rotation, you will use this a lot, the Mars environment is annoying Left Shift - Brake, Don’t try using S, that is for reversing only E - Open in-game menu If there is anything wrong with the game, please include that in the feedback specifically and which rating component was affected by it. README is in Github Repo To try the game click “Try Project” below, which will redirect you to tich.io, from there you can play it. It might load for some time....
|
1792990171.108571
|
1793076571.108571
|
|
30366
|
Aglang by @0xf1 | Stardance
|
0xf1
|
2
|
55.0
|
974
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-01T14:45:41Z", "hours": 26.0, "multiplier": 18.44, "payout": 473, "blessing": "neutral", "text": "hello! this is aglang, my own esoteric language made to be similar to assembly. it offers 13 operators, and with those (almost) anything is possible! you can try aglang by either downloading the cli (in the repo the “Source code” button links to) or by using the online interpreter (“Try project” button). if you’re confused and want to learn aglang, try the new interactive course, available on the website in the “learn” section: it will guide you through everything the language can do in only 10 short lessons and exercises. the cli includes an interpreter, a C transpiler and a compiler (note: the compiler needs GCC to be installed)! if you want to develop aglang programs more easily, we even have a vscode extension, with syntax highlighting and statement templates that said, go on and try aglang! its easier than you would expect", "repo": "https://github.com/0xF1dev/aglang", "demo": "https://aglang.0xf1.dev"}, {"ship_num": 2, "ts": "2026-07-15T16:48:54Z", "hours": 29.0, "multiplier": 17.01, "payout": 501, "blessing": "neutral", "text": "hello! this is Aglang , my own esoteric language. an esoteric language (or esolang) is a language made as a joke or to be hard to use , like brainf*ck. my language is made to be really basic: you only have two 8bit registers , and a stack ; there are only 18 valid characters in Aglang, easy to remember, right? in the cli, i implemented both an interpreter (works everywhere) and a compiler (only x86-64 linux); a guide on installation and usage is in its readme, but if you dont want to install it, you can try Aglang in the web interpreter. this project is split into two repositories: the cli at https://github.com/0xF1dev/aglang (main repo) the web interpreter at https://github.com/0xF1dev/aglang-website the website includes some examples and a link to both repos and the documentation. the “Try project” button is linked to the web interpreter (if the domain doesnt work, use https://aglang-website.vercel.app/ ), while the “See source code” takes to the cli’s repository. and now, go crazy and write some code!", "repo": "https://github.com/0xF1dev/aglang", "demo": "https://aglang.0xf1.dev"}]...
|
[{"post_id": 38917, "ts": "202 [{"post_id": 38917, "ts": "2026-08-01T14:43:23Z", "hours": 2.2408, "text": "NOTE FOR THE SHIP: you dont have to try everything! even just the online interpreter is fine, it includes examples! Aglang devlog #12 im ready for the ship! i completed the vscode extension, and (for the third time) I. HATE. MICROSOFT. this might sound excessive, but anyone that ever tried reading their docs can surely understand, right? right…? but finally, after like 2 hours, i made the most basic of extensions! it has syntax highlighting (the thing that i wanted most) and a simple statement templating snippet. and now, i can pretty confidently say that aglang is completed! surely i wont abandon the project, that would just be a waste of the 50 hours i spent on this, but i consider the project to be mostly finished. see ya soon!"}, {"post_id": 38820, "ts": "2026-08-01T11:53:08Z", "hours": 6.4056, "text": "Aglang devlog #11 why did i decide to do this lmao. lets go in order: first of all, i added transpiling! currently, only C is supported as target, but i plan on adding python soon. it actually wasnt that hard, especially considering i basically never wrote C in my life. but this was the least interesting part of this devlog, cause i managed to optimize the compiler a bit! now this… this was hard. but now, when printing many characters in a row (like in the hello world example), instead of printing each character one by one, the full string gets stored in the .text (or .data on windows) section of the assembly and gets printed once! this reduced the size of the hello world program from ~1kb down to 633b, almost half! needless to say that this needed a few attempts… now the project’s folder looks kinda full… but oh well! and i can AGAIN say that GOD I HATE WINDOWS: it took a while to get shadow allocations right, especially since pushing to the stack in aglang means pushing to the stack in assembly too, so i had to keep track of where the old and original pointers were before allocating it. i fully expect this optimization to have some bugs, since i dont really trust the logic i wrote. i didnt add it in the transpile feature, since i imagine that modern c compilers optimize it on their own. now i promise that ill get to writing the vscode extension!"}, {"post_id": 38186, "ts": "2026-07-31T13:34:25Z", "hours": 7.1647, "text": "Aglang devlog #10 well this took a while. so, i came to the conclusion that an lsp server is kinda overkill, so, to make up for it, i decided to make an interactive lesson system on the website, like svelte! and well i didnt expect it to take 7 hours… i have to admit, it came out pretty good! they have code challenges, too :D anyways, for the autocomplete feature, ill still make it into the vscode extension (if i dont give up on that too) oh and i added shareable code in the web interpreter!"}, {"post_id": 37137, "ts": "2026-07-29T16:56:44Z", "hours": 4.7731, "text": "Aglang devlog #9 the windows compiler is here! and i can finally say GOD I HATE WINDOWS why was it so simple in linux with just a syscall and in windows to not pull my hair out i have to link c with the executable lmao but, a wise man once said: the past is gone, think about the future… or something like that idk while i worked on that, i ended up even fixing some problems too, so thats good. and i made the cli a bit prettier too, with spinners! in the meanwhile i was looking at lsp servers too, and they look… overly complicated… yep i guess i already did enough today not gonna get into allthat! see ya tomorrow!"}, {"post_id": 36932, "ts": "2026-07-29T10:32:25Z", "hours": 2.2236, "text": "Aglang devlog #9 there now is a compare statement in aglang! i had this idea for a while, but i thought it would make the language too easy… but i ended up making it anyway! together with it, i made labels too! so if, for example, you wanted to skip a section of code if the number 2 is bigger than 1, you would write it like so: 10?1; $ compare 2 (10 in binary) and 1 (still 1 in binary) $ ^.; $ if 2 is bigger, jump to label . (labels are can only be named with dots, it would have been to easy otherwise :) ) $ (other code...) ~.; $ define label . $ (do more stuff...) and this makes the fibonacci example easier, since now, instead of using counters in the stack, you can simply check if the current number isnt 233 and go back to a previous label. i still have to implement it in the web interpreter, but i guess it shouldnt take long! next step: windows compiler! (note: will probably require mingw to be installed)"}, {"post_id": 36386, "ts": "2026-07-28T13:43:11Z", "hours": 2.83, "text": "Aglang devlog #8 the first ship is done! but before getting to the actual devlog, i want to respond to some of the best feedback i got: why spend 29 (now 32) hours on a joke?: well, you see… uhh… next question please you should see a psychiatrist: i know thanks lmao and now, back to aglang developments! the first version of aglang is finally completed! i want to thank everybody for the feedback i received, it even gave me some ideas, thanks! in these 3 hours, i improved the website, so now instead of just the compiler it even has a full homepage with downloads: this was on my checklist for a while, but first i wanted to ship a first version to get some initial thoughts. next up for this project, i have a two ideas: conditionals and labels: i want to add a way of comparing registers/stack values/literals, and jump to a label or part of the program if that condition is met; with that, aglang would basically be a basic assembly language with a few restrictions windows compiler: the thing thats missing the most in the cli is a windows compiler, and since probably there are quite a few people that use windows more than linux :| and a few other things if i have the time: a vscode extension: this could have themes and docs on the side, minor stuff (i dont think anyone will use aglang in vscode) but idk i wanted to do it an lsp server: for autocompletions, error checking, etc… it could be integrated in more ides too"}, {"post_id": 28961, "ts": "2026-07-15T16:05:27Z", "hours": 3.3708, "text": "Aglang devlog #7 whooo! the documentation is done! im officially ready to ship! i finished writing the documentation and the repo readmes, and im ready to release this into the wild! the docs are availabe in the cli’s repo, but they’re linked in the website too. this took a few days, since i was working on another personal project, but im finally back !"}, {"post_id": 26651, "ts": "2026-07-11T16:17:08Z", "hours": 7.9264, "text": "Aglang devlog #6 the web interpreter is done! after almost 1000 lines of svelte and 8 hours of boredom, im happy to announce that the js implementation of the aglang interpreter is completed! it is now available at https://aglang.0xf1.dev (the dns changes might take some time to fully propagate, so if it isnt loading, it probably will in a few hours…) it is basically a 1:1 copy of the rust code, but prettier! ahem… because of the ui, not the code… and i even designed a logo for it! in it are all the valid characters in aglang. in the meanwhile, i fixed and refactored the loop system in both the js and rust versions. the next steps are writing the docs , preparing a good readme and then i can finally ship the project! see ya then! and p.s. i havent optimized the website for mobile, but i imagine nobody uses stardance on a smartphone, right?"}, {"post_id": 23735, "ts": "2026-07-06T21:08:00Z", "hours": 6.8822, "text": "Aglang devlog #5 no yeah im officially going crazy so, after a bit, the compiler is DONE! now it spits valid x86-64 asm and even automatically compiles it to an executable with gcc! and i even managed to make a fibonacci sequence example program! (it only computes numbers up to 144 since its the highest fibonacci number in the unsigned 8bit integer limit) but to make that, i had to spend HOURS thinking about how to do it. the problem was that in Aglang, you have 2 registers and a stack, and for that fibonacci program i couldnt make it print random ascii characters, but instead the actual numbers in the decimal system: for that i tried making loops that converted a number into the digits that composed it, buuuuut you still need the 2 registers to keep the fibonacci numbers you have! i even surrendered and tried asking gemini, but it would go absolutely CRAZY: it would give really long responses and contradict itself in the code… a bit of like when you ask an ai to give you the seahorse emoji. so, the ultimate solution was to implement a “numeric value” parameter to the stdout argument. therefore, now, if you write something like 01000001>\\#; you would get the actual 65 number instead of the character ‘A’ and all the problems would go to the compiler and assembly! but i dont care now, cus its DONE!!! the next steps, i think, should be making a js interpreter, so that the language can be tried online without downloading anything, so ill work on that tomorrow…"}, {"post_id": 22847, "ts": "2026-07-05T13:48:12Z", "hours": 2.2458, "text": "Aglang devlog #4 it was the comments IT HAD ALWAYS BEEN THE COMMENTS i think im about to go crazy, cuz im trying to manually write assembly to know that the compiler should write, and trying the basic alphabet loop i couldnt get it to work, no matter what it was always printing ▒ . i tried everything, i even managed to get SATAN ITSELF to write my output (check attached image)… but finally… i tried deleting the comments i put with the original aglang line… and it worked. i found out that the stdout token in aglang (“ \\ ”, i even have to write it twice here in the post because stardance has the same problem lmao) was making nasm think that i was trying to escape the newline after the comment, thus making the next assembly line part of the comment. as you can see from the logged time it literally took over 2 hours of my life because of a single backslash."}, {"post_id": 22303, "ts": "2026-07-04T18:16:35Z", "hours": 1.4739, "text": "Aglang devlog #3 so i uhh… kinda refactored everything? i realized that to make the compiler i had 2 options: make a separate project (and repo) integrate it in the existing interpreter the latter option made more sense, because since the project is small i can just split into two commands. so, after 1.30hrs, i managed to split and reorganize the code! now to run the aglang interpreter you can run: aglang run ./main.ag the next step is building the compiler itself, but ill leave that to tomorrow. (and i think itll just support linux elf64 x86-64 architectures, sorry arm friends!) oh wait! i forgot to tell y’all why the name “Aglang”! nothing special actually, “Ag” just stands for “Ugly” lmao"}, {"post_id": 22121, "ts": "2026-07-04T12:36:09Z", "hours": 4.2497, "text": "Aglang devlog #2 the interpreter is done faster than i expected and after some issues i settled on the syntax. ive added comments (kinda hated working on them), changed the input structure a little bit (now the input gets directly stored on the stack). the next step is building a compiler to x86-64 assembly, i dont think i’ll make it for other architectures. i guess it shouldnt be that hard since the language’s features are pretty similar to how assembly works ( obvious foreshadowing ) this example outputs every uppercase letter in the alphabet: 01000001>''; $ move 65 (A char in ascii) to reg2 $ 11010>:; $ push alphabet counter (from A to Z) into stack $ [ $ loop (ends when first value in stack is 0) $ ''>\\; $ output the letter $ 1010>\\; $ newline $ ''+1; $ add 1 to the ascii value to go to the next letter $ :>'; $ move counter to reg1 $ :!; $ pop old counter $ '-1; $ remove 1 from the counter $ '>:; $ push the updated counter to the stack $ ] (the text between the $ are comments)"}, {"post_id": 21635, "ts": "2026-07-03T17:57:37Z", "hours": 3.3219, "text": "Aglang devlog #1 i’m finally building a language! Aglang is an esoteric language (like brainf*ck) with 15 possible characters (not including the 0’s and 1’s of binary literals) where you are given two 8-bit registers and a stack: their values can be moved and deleted and arithmetic operations can be done with their respective characters. i’m currently building an interpreter in Rust, but i hope once im done with that to start creating a compiler to x86-64 assembly. i’ve attached a scheme made in KDE Drawy (i changed it like 8 times already) describing the language (sorry it’s in italian and my writing sucks), an aglang snippet and the parsed output in the interpreter."}]...
|
Title: Aglang by @0xf1 | Stardance
Devlogs:
Aglan Title: Aglang by @0xf1 | Stardance
Devlogs:
Aglang devlog #1 i’m finally building a language! Aglang is an esoteric language (like brainf*ck) with 15 possible characters (not including the 0’s and 1’s of binary literals) where you are given two 8-bit registers and a stack: their values can be moved and deleted and arithmetic operations can be done with their respective characters. i’m currently building an interpreter in Rust, but i hope once im done with that to start creating a compiler to x86-64 assembly. i’ve attached a scheme made in KDE Drawy (i changed it like 8 times already) describing the language (sorry it’s in italian and my writing sucks), an aglang snippet and the parsed output in the interpreter.
Aglang devlog #2 the interpreter is done faster than i expected and after some issues i settled on the syntax. ive added comments (kinda hated working on them), changed the input structure a little bit (now the input gets directly stored on the stack). the next step is building a compiler to x86-64 assembly, i dont think i’ll make it for other architectures. i guess it shouldnt be that hard since the language’s features are pretty similar to how assembly works ( obvious foreshadowing ) this example outputs every uppercase letter in the alphabet: 01000001>''; $ move 65 (A char in ascii) to reg2 $ 11010>:; $ push alphabet counter (from A to Z) into stack $ [ $ loop (ends when first value in stack is 0) $ ''>\; $ output the letter $ 1010>\; $ newline $ ''+1; $ add 1 to the ascii value to go to the next letter $ :>'; $ move counter to reg1 $ :!; $ pop old counter $ '-1; $ remove 1 from the counter $ '>:; $ push the updated counter to the stack $ ] (the text between the $ are comments)
Aglang devlog #3 so i uhh… kinda refactored everything? i realized that to make the compiler i had 2 options: make a separate project (and repo) integrate it in the existing interpreter the latter option made more sense, because since the project is small i can just split into two commands. so, after 1.30hrs, i managed to split and reorganize the code! now to run the aglang interpreter you can run: aglang run ./main.ag the next step is building the compiler itself, but ill leave that to tomorrow. (and i think itll just support linux elf64 x86-64 architectures, sorry arm friends!) oh wait! i forgot to tell y’all why the name “Aglang”! nothing special actually, “Ag” just stands for “Ugly” lmao
Aglang devlog #4 it was the comments IT HAD ALWAYS BEEN THE COMMENTS i think im about to go crazy, cuz im trying to manually write assembly to know that the compiler should write, and trying the basic alphabet loop i couldnt get it to work, no matter what it was always printing ▒ . i tried everything, i even managed to get SATAN ITSELF to write my output (check attached image)… but finally… i tried deleting the comments i put with the original aglang line… and it worked. i found out that the stdout token in aglang (“ \ ”, i even have to write it twice here in the post because stardance has the same problem lmao) was making nasm think that i was trying to escape the newline after the comment, thus making the next assembly line part of the comment. as you can see from the logged time it literally took over 2 hours of my life because of a single backslash.
Aglang devlog #5 no yeah im officially going crazy so, after a bit, the compiler is DONE! now it spits valid x86-64 asm and even automatically compiles it to an executable with gcc! and i even managed to make a fibonacci sequence example program! (it only computes numbers up to 144 since its the highest fibonacci number in the unsigned 8bit integer limit) but to make that, i had to spend HOURS thinking about how to do it. the problem was that in Aglang, you have 2 registers and a stack, and for that fibonacci program i couldnt make it print random ascii characters, but instead the actual numbers in the decimal system: for that i tried making loops that converted a number into the digits that composed it, buuuuut you still need the 2 registers to keep the fibonacci numbers you have! i even surrendered and tried asking gemini, but it would go absolutely CRAZY: it would give really long responses and contradict itself in the code… a bit of like when you ask an ai to give you the seahorse emoji. so, the ultimate solution was to implement a “numeric value” parameter to the stdout argument. therefore, now, if you write something like 01000001>\#; you would get the actual 65 number instead of the character ‘A’ and all the problems would go to the compiler and assembly! but i dont care now, cus its DONE!!! the next steps, i think, should be making a js interpreter, so that the language can be tried online without downloading anything, so ill work on that tomorrow…
Aglang devlog #6 the web interpreter is done! after almost 1000 lines of svelte and 8 hours of boredom, im happy to announce that the js implementation of the aglang interpreter is completed! it is now available at https://aglang.0xf1.dev (the dns changes might take some time to fully propagate, so if it isnt loading, it probably will in a few hours…) it is basically a 1:1 copy of the rust code, but prettier! ahem… because of the ui, not the code… and i even designed a logo for it! in it are all the valid characters in aglang. in the meanwhile, i fixed and refactored the loop system in both the js and rust versions. the next steps are writing the docs , preparing a good readme and then i can finally ship the project! see ya then! and p.s. i havent optimized the website for mobile, but i imagine nobody uses stardance on a smartphone, right?
Aglang devlog #7 whooo! the documentation is done! im officially ready to ship! i finished writing the documentation and the repo readmes, and im ready to release this into the wild! the docs are availabe in the cli’s repo, but they’re linked in the website too. this took a few days, since i was working on another personal project, but im finally back !
Aglang devlog #8 the first ship is done! but before getting to the actual devlog, i want to respond to some of the best feedback i got: why spend 29 (now 32) hours on a joke?: well, you see… uhh… next question please you should see a psychiatrist: i know thanks lmao and now, back to aglang developments! the first version of aglang is finally completed! i want to thank everybody for the feedback i received, it even gave me some ideas, thanks! in these 3 hours, i improved the website, so now instead of just the compiler it even has a full homepage with downloads: this was on my checklist for a while, but first i wanted to ship a first version to get some initial thoughts. next up for this project, i have a two ideas: conditionals and labels: i want to add a way of comparing registers/stack values/literals, and jump to a label or part of the program if that condition is met; with that, aglang would basically be a basic assembly language with a few restrictions windows compiler: the thing thats missing the most in the cli is a windows compiler, and since probably there are quite a few people that use windows more than linux :| and a few other things if i have the time: a vscode extension: this could have themes and docs on the side, minor stuff (i dont think anyone will use aglang in vscode) but idk i wanted to do it an lsp server: for autocompletions, error checking, etc… it could be integrated in more ides too
Aglang devlog #9 there now is a compare statement in aglang! i had this idea for a while, but i thought it would make the language too easy… but i ended up making it anyway! together with it, i made labels too! so if, for example, you wanted to skip a section of code if the number 2 is bigger than 1, you would write it like so: 10?1; $ compare 2 (10 in binary) and 1 (still 1 in binary) $ ^.; $ if 2 is bigger, jump to label . (labels are can only be named with dots, it would have been to easy otherwise :) ) $ (other code...) ~.; $ define label . $ (do more stuff...) and this makes the fibonacci example easier, since now, instead of using counters in the stack, you can simply check if the current number isnt 233 and go back to a previous label. i still have to implement it in the web interpreter, but i guess it shouldnt take long! next step: windows compiler! (note: will probably require mingw to be installed)
Aglang devlog #9 the windows compiler is here! and i can finally say GOD I HATE WINDOWS why was it so simple in linux with just a syscall and in windows to not pull my hair out i have to link c with the executable lmao but, a wise man once said: the past is gone, think about the future… or something like that idk while i worked on that, i ended up even fixing some problems too, so thats good. and i made the cli a bit prettier too, with spinners! in the meanwhile i was looking at lsp servers too, and they look… overly complicated… yep i guess i already did enough today not gonna get into allthat! see ya tomorrow!
Aglang devlog #10 well this took a while. so, i came to the conclusion that an lsp server is kinda overkill, so, to make up for it, i decided to make an interactive lesson system on the website, like svelte! and well i didnt expect it to take 7 hours… i have to admit, it came out pretty good! they have code challenges, too :D anyways, for the autocomplete feature, ill still make it into the vscode extension (if i dont give up on that too) oh and i added shareable code in the web interpreter!
Aglang devlog #11 why did i decide to do this lmao. lets go in order: first of all, i added transpiling! currently, only C is supported as target, but i plan on adding python soon. it actually wasnt that hard, especially considering i basically never wrote C in my life. but this was the least interesting part of this devlog, cause i managed to optimize the compiler a bit! now this… this was hard. but now, when printing many characters in a row (like in the hello world example), instead of printing each character one by one, the full string gets stored in the .text (or .data on windows) section of the assembly and gets printed once! this reduced the size of the hello world program from ~1kb down to 633b, almost half! needless to say that this needed a few attempts… now the project’s folder looks kinda full… but oh well! and i can AGAIN say that GOD I HATE WINDOWS: it took a while to get shadow allocations right, especially since pushing to the stack in aglang means pushing to the stack in assembly too, so i had to keep track of where the old and original pointers were before allocating it. i fully expect this optimization to have some bugs, since i dont really trust the logic i wrote. i didnt add it in the transpile feature, since i imagine that modern c compilers optimize it on their own. now i promise that ill get to writing the vscode extension!
NOTE FOR THE SHIP: you dont have to try everything! even just the online interpreter is fine, it includes examples! Aglang devlog #12 im ready for the ship! i completed the vscode extension, and (for the third time) I. HATE. MICROSOFT. this might sound excessive, but anyone that ever tried reading their docs can surely understand, right? right…? but finally, after like 2 hours, i made the most basic of extensions! it has syntax highlighting (the thing that i wanted most) and a simple statement templating snippet. and now, i can pretty confidently say that aglang is completed! surely i wont abandon the project, that would just be a waste of the 50 hours i spent on this, but i consider the project to be mostly finished. see ya soon!
Ships:
hello! this is Aglang , my own esoteric language. an esoteric language (or esolang) is a language made as a joke or to be hard to use , like brainf*ck. my language is made to be really basic: you only have two 8bit registers , and a stack ; there are only 18 valid characters in Aglang, easy to remember, right? in the cli, i implemented both an interpreter (works everywhere) and a compiler (only x86-64 linux); a guide on installation and usage is in its readme, but if you dont want to install it, you can try Aglang in the web interpreter. this project is split into two repositories: the cli at https://github.com/0xF1dev/aglang (main repo) the web interpreter at https://github.com/0xF1dev/aglang-website the website includes some examples and a link to both repos and the documentation. the “Try project” button is linked to the web interpreter (if the domain doesnt work, use https://aglang-website.vercel.app/ ), while the “See source code” takes to the cli’s repository. and now, go crazy and write some code!
hello! this is aglang, my own esoteric language made to be similar to assembly. it offers 13 operators, and with those (almost) anything is possible! you can try aglang by either downloading the cli (in the repo the “Source code” button links to) or by using the online interpreter (“Try project” button). if you’re confused and want to learn aglang, try the new interactive course, available on the website in the “learn” section: it will guide you through everything the language can do in only 10 short lessons and exercises. the cli includes an interpreter, a C transpiler and a compiler (note: the compiler needs GCC to be installed)! if you want to develop aglang programs more easily, we even have a vscode extension, with syntax highlighting and statement templates that said, go on and try aglang! its easier than you would expect...
|
1792990565.3880165
|
1793076965.3880165
|
|
20070
|
Action Bar by @Joseph-T | Stardance
|
Joseph-T
|
2
|
69.6
|
970
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-18T19:12:56Z", "hours": 21.0, "multiplier": 13.84, "payout": 279, "blessing": "neutral", "text": "Version 2. What changed in Version 2: Safer extension marketplace Far better DDG search and app opening functionality Improved calculator Aliases Fixed a lot of small bugs Added the icon of the app you are opening ====================================== What is it? Action bar an application that more easily allows for quick actions and allows for users to open apps very easily. Challenges: I have never coded anything that people other than me actually use, so there is more pressure to sort out the small bugs and improve the UX How To Use: In order to open the application you can press Alt + Z a shortcut that can be configured. Or press the Icon in the bottom right corner. More information in the read me file.", "repo": "https://github.com/joseph-tighe/Action-Bar", "demo": "https://github.com/joseph-tighe/Action-Bar/releases"}, {"ship_num": 2, "ts": "2026-07-04T23:51:22Z", "hours": 43.0, "multiplier": 16.45, "payout": 691, "blessing": "neutral", "text": "What is it? Action bar an application that more easily allows for quick actions and allows for users to open apps very easily. Challenges: One of the hardest challenges was allowing the user to make their own extensions and to allow for them to share it with others in the end I managed to make an extension “marketplace” (a bit empty but it works). How To Use: In order to open the application you can press Alt + Z a shortcut that can be configured. Or press the Icon in the bottom right corner. More information in the read me file. Features: This application lets you: quickly open apps Run custom extensions Pipe extensions together.", "repo": "https://github.com/joseph-tighe/Action-Bar", "demo": "https://github.com/joseph-tighe/Action-Bar/releases"}]...
|
[{"post_id": 57679, "ts": "202 [{"post_id": 57679, "ts": "2026-08-29T22:15:28Z", "hours": 1.4392, "text": "Changes Made Added a confirmation modal for the extension marketplace, hid the users home path, and Fixed a bunch of bugs. Confirmation Modal I added a modal that warns users against downloading extensions that could be harmful. Hiding the users home directory In the scenario that the user is recording a video or something where they use this app their user name on their computer could have been revealed, which is not good to say the least. Now that is no longer an issue, because we obfuscate the home directory, replacing it with a tilde Bugs The Cancel button on the modal wouldn’t close it. Stuck in the download state when downloading an extension Extension marketplace still showed previously downloaded extensions"}, {"post_id": 44825, "ts": "2026-08-10T21:01:41Z", "hours": 1.2183, "text": "Changes Made I worked on fixing some bugs for linux, so it should now have support for Wayland. Wayland bug fixes Wayland is an API for accessing the user layer of a linux machine. Quite a few distro’s use Wayland for this however my code was not the most compatible with this so I needed to write a bunch of code so some components work with it. The biggest bug was that the global shortcuts were not registering. Sorry about the lack of video"}, {"post_id": 42007, "ts": "2026-08-06T15:29:30Z", "hours": 0.6931, "text": "Changes Made The app now allows for the user to select what extension they want to call using the mouse, it also has a better GitHub action yml, and finally npm tests Mouse selection Before the app was entirely keyboard driven their was nothing for the mouse to even interact with. I prefer it like this but their is now the option to select extensions with the mouse instead. GitHub actions yml The way I publish the app executable is with GitHub actions I will call an action that compiles the app and publishes the compiled app. But now it will also automatically update the version number so I don’t have to Tests I forgot to make tests for the longest time for this app and I finally realized it so I added them"}, {"post_id": 41621, "ts": "2026-08-05T22:49:42Z", "hours": 2.2536, "text": "Changes Made: I added a linux version, it should work on most distros. I also cleaned up the codebase. The linux version It may not work on all distros I only tested Fedora KDE, but from that test it looks like it functions almost fully however I still need to get the code for global shortcuts updated so that also works on linux. The file should download on most distro’s its an AppImage (the executable), not a .deb file I had one but switched to purely AppImage, soon afterwards, it should not affect the user. Cleaned up codebase All functions and classes now have docstrings, this way I can tell what I wrote the function to do later. I also removed some redundant checks."}, {"post_id": 30820, "ts": "2026-07-18T19:02:39Z", "hours": 5.6219, "text": "Changes Made Added an Icon to the app, fixed a hundred different bugs, added a fallback for the duckduckgo extension, and added the extension descriptions to the help menu The icon I added an icon its very simple, and definitely subject to change, but now it does not have the default electron icon in the task bar. Bugs Fixed Changed the codebase to made up of several modules instead of a few giant files (Should have done it a long time ago) Fixed the time formatter for the timer Changed the commit hash of the GitHub extension Changed Priority order Improved Duck duck go extension The duckduckgo extension uses their quick search API, which returns a JSON, in which the answer sometimes is in JSON.abstract and sometimes JSON.relatedTopics[0].text Now the extension looks in both places and returns the most relevant answer. Extension descriptions I recently added descriptions of the extensions in their metadata so now on the help tab you can get small descriptions of each one. Sorry about how their have been no videos but it has all been fixing a lot of small bugs most of which don’t even make it into the dev-log."}, {"post_id": 28479, "ts": "2026-07-14T18:56:43Z", "hours": 1.8217, "text": "Changes Made Added start on boot and safer extension marketplace. Start on boot The app will now set itself up so if in settings you enabled start on boot the app will automatically start itself when you boot up your computer. Safer extension marketplace The way extensions work is all the extensions listed have a GitHub repository linked so when the user downloads the extension they download it off the repository, but the developer can change the GitHub repo so after it is accepted as safe the developer can change that without any warning. So now we grab from a specific point on the git tree. However even still the Dev can change the history so we check that the commit hash matches the stored hash meaning the developer cannot change their extension after approval Sorry for the lack of videos again its really a backend change"}, {"post_id": 28098, "ts": "2026-07-14T04:26:24Z", "hours": 1.9806, "text": "Changes Made I added an auto update code and added metadata to extensions Auto update code Before I added this code a user would have to delete the current code, and reinstall the application from GitHub. However this code will automatically detect and update the app on the users machine. Added metadata to extensions This allows for extensions to give data about them to the extension marketplace giving users a better idea of what they are downloading. Sorry for the lack of videos, it was really a backend change"}, {"post_id": 27800, "ts": "2026-07-13T17:52:46Z", "hours": 2.0631, "text": "Changes Made I added aliases and Improved the search. Aliases Aliases are a user configurable feature that allows the user to type /<Shorthand> which will immediately be turned into some text. For example instead of writing “Google chrome” I can type /google which will be converted to Google Chrome Users can configure as many of these as they want. Improved search On the first ship I got complaints that the search did not always return an answer when asked questions. For example Where is Canada would return an invalid answer whilst Canada returned a valid answer. I added a fallback to make these scenarios less common."}, {"post_id": 26958, "ts": "2026-07-12T01:42:47Z", "hours": 4.9442, "text": "Changes Made Improved fonts and spacing, improved opening apps, shows the icon of the app. I also improved the calculator Improved fonts I was just using the default fonts earlier because I am not very creative, but I decided to change it to Inter and Consolas. Improved app opening Earlier to determine the apps the user has installed as a temporary solution I just scrapped their desktop. But that did not return everything, and I finally fixed it I tried a bunch but the that worked for me was using some commands through power shell. That gets all the apps that windows knows about. The icons Now the program will show the user the icon of the app they want to open. there are three different kinds of app Id’s in windows and I have to assess their photos differently for each, which added alot of complexity and is the whole reason this devlog took so long. Better calculator The calculator has a few improvements the first being it now has the constants pi and e baked into it. It can also now do square roots and trigonometric functions. The trigonometric functions are interesting because they can be done with radians or degrees if the user types sin(90deg) . It will use 90 degrees instead of the default being radians."}, {"post_id": 25475, "ts": "2026-07-09T19:28:27Z", "hours": 2.4711, "text": "Changes Made I added a list extensions feature, added extension specific settings, and removed a few nasty bugs. List all extensions feature All it does is when you press ? it will list all the extensions and you can just select the one you want from there. Extension Specific settings The settings page used to just have settings for the app now under the extensions tab will have extension specific settings that the dev of the extension can use. Bugs The implementation for removing the previous answers did not always remove all of the answers and sometimes left the user with answers that shouldn’t be there. I did a small rewrite which fixed the issue. The autocomplete feature did not like the list all expansions feature because the program will refuse to give answer past a certain amount of them to prevent 20 answers being given at once. But because the list all feature could expand to that point, the autocomplete feature thought there wasn’t enough room for it. But now I delete the previous answers before creating new ones for autocomplete."}, {"post_id": 25056, "ts": "2026-07-09T00:38:11Z", "hours": 1.5983, "text": "Changes made I made a far better readme.md file, and I added documentation for making your own extensions and pipelines Documentation I added very specific documentation for making your own extensions and pipelines. I don’t recommend making your own pipeline, because that is still in early development, but if you don’t have a stardance project yet I would absolutely recommend trying to make your own extension. It is difficult the first time but pretty easy afterwards."}, {"post_id": 22476, "ts": "2026-07-04T23:07:25Z", "hours": 0.8775, "text": "Changes Made I finalized details for easy install and using it for the first time. Simple things like improving the functionality with the tray (the bottom right icons). How to use Whenever you want to open it you can either press Alt + Z or open the tray and press the icon see the image below for an example."}, {"post_id": 21895, "ts": "2026-07-04T02:17:22Z", "hours": 11.1725, "text": "Changes Made I did a lot and forgot to make Dev logs. I allow for the user to download extensions made by anyone to add to the website. And added a feature called pipelines. Downloading Extensions Anyone can make an extension and post it on Github, following the correct format if their extension is not listed you can put the username/extension_name in the text box above. When you restart the app the extension should be downloaded. Pipelines Pipelines let users without any code pipe extensions together so If I have a google translate and a search extension I can pipe them together. so that the result of the search is then translated."}, {"post_id": 15281, "ts": "2026-06-24T20:27:38Z", "hours": 5.7508, "text": "Changes Made: Improved several answers a lot. Added selector for which answer the user wants to interact with. And added a simple settings screen. Settings screen: The settings screen is temporary, but allows users to quickly change and save app settings. Selector: When multiple answers are present one of the answers will be highlighted the user can change which one is highlighted simply using the arrow keys. And when pressing Enter or Tab. They will call that extension. Better multiple answers: The new implementations allows for extensions to better manipulate their specific answer. And gives users a better amount of control through settings over the apps functionality."}, {"post_id": 14421, "ts": "2026-06-23T15:24:46Z", "hours": 4.8994, "text": "Changes Made: I added a color picker and allowed for several tools to output at once. Color Picker Can use an eyedropper of the screen behind the interface or select from the color wheel. You can also just write out hex codes or RGB Multiple answers The main process can now handle and may call several extensions at once. The output order is determined by the order the main process calls the extensions, with an exception for asynchronous functions which get resolved upon completion. Still fixing small errors here and there in the system and may make a more intelligent main process"}, {"post_id": 12726, "ts": "2026-06-20T19:59:54Z", "hours": 3.3439, "text": "Changes Made: Added an image viewer into the file explorer, added a copy button and improved file explorer functionality File explorer The file explorer now will show a preview image if it the target file is an image. The file explorer can also now take in a folder in which the target file is in and uses a search that allows for skipping folder in case the user forgets a folder inbetween. Copy Btn It just copies the result text into the users clipboard"}, {"post_id": 12246, "ts": "2026-06-20T00:24:54Z", "hours": 0.9597, "text": "Changes Made Added autocomplete for which action should be completed and added a music player. All extensions are now properly formatted, and no exceptions are given out. Autocomplete I found it a little difficult to quickly remember and spell out the extensions names but now I only have to type the first few letters and the app will give options for what the extension could be. Music Player Just opens the requested song in YouTube music."}, {"post_id": 12097, "ts": "2026-06-19T18:59:07Z", "hours": 2.0411, "text": "Added a GitHub and Duckduckgo extension so search does not have to be based on Wikipedia. The GitHub extension is made to quickly search for repos and users, however the API used has somewhat strict rate limits, but for occasional searches it should work fine. The DuckDuckGo or the dgg extention is just a search feature"}, {"post_id": 11515, "ts": "2026-06-18T20:09:16Z", "hours": 5.0231, "text": "Added more settings, added an app opener and added a file explorer. The file explorer and app opener used to be separate but I made them the same to simplify the users experience because I think that is what the application will be used for the most. They both work pretty well the file explorer can only fetch files a limited range of files it can use files in downloads, desktop, documents, music, videos, etc, can’t look for system level files and whatnot though. Added way more settings so you can change what the default tool it should use is if it can’t find a good one to use. Updated the readme for proper credit, and a bunch of other small things. I also made it compatible with several screens."}, {"post_id": 10713, "ts": "2026-06-17T16:01:36Z", "hours": 1.6603, "text": "I switched to an extension based thing. So anyone can make their own extensions for the app. The picture is of a JSON that has the data for all the extensions at the moment. I tried making the frosted glass look by adding random noise but I was not able to make it work."}, {"post_id": 10368, "ts": "2026-06-17T01:32:39Z", "hours": 1.7442, "text": "Added settings.json, the ability to open apps, and continued to attempt a frosted glass look. Settings.json will now allow for more customization. The ability to open apps is kind of the whole point its to avoid windows weird search bar thing that’s slow and not great to use. And after doing more looking into the blur effect it looks like the only way to do it is to have some js take screenshots of whats behind the page and then save that png and load it under the transparent thing than use the blur filter but, it seems slow, complicated, and not great for cross platform, so I am still looking for other solutions"}, {"post_id": 10287, "ts": "2026-06-16T22:32:40Z", "hours": 0.8639, "text": "Added a search feature. The feature just looks up what is currently in the search bar. Unfortunately the search feature uses Wikipedia’s API, which does make it much faster, than a bot crawling through google. But is susceptible to misinformation. I don’t think this is a massive problem because I am only taking the first sentence of the article. But I may look into alternatives in the future."}, {"post_id": 10236, "ts": "2026-06-16T21:20:33Z", "hours": 0.7111, "text": "added a timer to the thing, you also can instead of relying on autodetect to figure out what action you want to take you can say @tool_name instead where tool_name is the tool you are calling"}, {"post_id": 10203, "ts": "2026-06-16T20:26:53Z", "hours": 1.2817, "text": "added conversions to the app and a global shortcut to open the app I decided on Alt+Z for the shortcut because I don’t have that mapped to anything right now and the two keys are physically close to each other. The conversion thing was interesting because there are a lot of different units for the same stuff, miles, inches, cm, km, etc. all measure length. I really did not want to make a table for every possible conversion, so I wrote a function that takes a table with enough conversions and uses that to fill out the blanks. For example if I know the conversion between ft and in and in and cm. I can solve for the conversion between ft and cm."}, {"post_id": 10134, "ts": "2026-06-16T18:55:13Z", "hours": 0.8756, "text": "I improved the looks slightly improved the functionality of the calculator. I tried for more than half this time to make the blur working unfortunately it does not appear to be possible maybe doing something with JS canvases. But if I have to use something like that the amount of compute time won’t be worth it. So I decided against doing it until there is an easy way to do that."}, {"post_id": 10092, "ts": "2026-06-16T17:55:54Z", "hours": 1.1422, "text": "Added glassy look and made a calculator app for the program. In the end I want an app that is completely transparent except for the results and search bar. Those should be tinted and blurred, but in electron the app I am using it is impossible to make a single element transparent through the apps behind it and blurred. I can do that for elements in my own app. Or the background for the entire app. So the search bar and results bar’s backgrounds are not blurred, which makes them hard to read over text."}, {"post_id": 10041, "ts": "2026-06-16T16:38:17Z", "hours": 0.9781, "text": "Made a basic looking search bar that opens when you click a little icon in the corner of the screen, doesn’t do anything besides sit there yet. I am using electron and node JS for it."}]...
|
Title: Action Bar by @Joseph-T | Stardance
Devlog Title: Action Bar by @Joseph-T | Stardance
Devlogs:
Made a basic looking search bar that opens when you click a little icon in the corner of the screen, doesn’t do anything besides sit there yet. I am using electron and node JS for it.
Added glassy look and made a calculator app for the program. In the end I want an app that is completely transparent except for the results and search bar. Those should be tinted and blurred, but in electron the app I am using it is impossible to make a single element transparent through the apps behind it and blurred. I can do that for elements in my own app. Or the background for the entire app. So the search bar and results bar’s backgrounds are not blurred, which makes them hard to read over text.
I improved the looks slightly improved the functionality of the calculator. I tried for more than half this time to make the blur working unfortunately it does not appear to be possible maybe doing something with JS canvases. But if I have to use something like that the amount of compute time won’t be worth it. So I decided against doing it until there is an easy way to do that.
added conversions to the app and a global shortcut to open the app I decided on Alt+Z for the shortcut because I don’t have that mapped to anything right now and the two keys are physically close to each other. The conversion thing was interesting because there are a lot of different units for the same stuff, miles, inches, cm, km, etc. all measure length. I really did not want to make a table for every possible conversion, so I wrote a function that takes a table with enough conversions and uses that to fill out the blanks. For example if I know the conversion between ft and in and in and cm. I can solve for the conversion between ft and cm.
added a timer to the thing, you also can instead of relying on autodetect to figure out what action you want to take you can say @tool_name instead where tool_name is the tool you are calling
Added a search feature. The feature just looks up what is currently in the search bar. Unfortunately the search feature uses Wikipedia’s API, which does make it much faster, than a bot crawling through google. But is susceptible to misinformation. I don’t think this is a massive problem because I am only taking the first sentence of the article. But I may look into alternatives in the future.
Added settings.json, the ability to open apps, and continued to attempt a frosted glass look. Settings.json will now allow for more customization. The ability to open apps is kind of the whole point its to avoid windows weird search bar thing that’s slow and not great to use. And after doing more looking into the blur effect it looks like the only way to do it is to have some js take screenshots of whats behind the page and then save that png and load it under the transparent thing than use the blur filter but, it seems slow, complicated, and not great for cross platform, so I am still looking for other solutions
I switched to an extension based thing. So anyone can make their own extensions for the app. The picture is of a JSON that has the data for all the extensions at the moment. I tried making the frosted glass look by adding random noise but I was not able to make it work.
Added more settings, added an app opener and added a file explorer. The file explorer and app opener used to be separate but I made them the same to simplify the users experience because I think that is what the application will be used for the most. They both work pretty well the file explorer can only fetch files a limited range of files it can use files in downloads, desktop, documents, music, videos, etc, can’t look for system level files and whatnot though. Added way more settings so you can change what the default tool it should use is if it can’t find a good one to use. Updated the readme for proper credit, and a bunch of other small things. I also made it compatible with several screens.
Added a GitHub and Duckduckgo extension so search does not have to be based on Wikipedia. The GitHub extension is made to quickly search for repos and users, however the API used has somewhat strict rate limits, but for occasional searches it should work fine. The DuckDuckGo or the dgg extention is just a search feature
Changes Made Added autocomplete for which action should be completed and added a music player. All extensions are now properly formatted, and no exceptions are given out. Autocomplete I found it a little difficult to quickly remember and spell out the extensions names but now I only have to type the first few letters and the app will give options for what the extension could be. Music Player Just opens the requested song in YouTube music.
Changes Made: Added an image viewer into the file explorer, added a copy button and improved file explorer functionality File explorer The file explorer now will show a preview image if it the target file is an image. The file explorer can also now take in a folder in which the target file is in and uses a search that allows for skipping folder in case the user forgets a folder inbetween. Copy Btn It just copies the result text into the users clipboard
Changes Made: I added a color picker and allowed for several tools to output at once. Color Picker Can use an eyedropper of the screen behind the interface or select from the color wheel. You can also just write out hex codes or RGB Multiple answers The main process can now handle and may call several extensions at once. The output order is determined by the order the main process calls the extensions, with an exception for asynchronous functions which get resolved upon completion. Still fixing small errors here and there in the system and may make a more intelligent main process
Changes Made: Improved several answers a lot. Added selector for which answer the user wants to interact with. And added a simple settings screen. Settings screen: The settings screen is temporary, but allows users to quickly change and save app settings. Selector: When multiple answers are present one of the answers will be highlighted the user can change which one is highlighted simply using the arrow keys. And when pressing Enter or Tab. They will call that extension. Better multiple answers: The new implementations allows for extensions to better manipulate their specific answer. And gives users a better amount of control through settings over the apps functionality.
Changes Made I did a lot and forgot to make Dev logs. I allow for the user to download extensions made by anyone to add to the website. And added a feature called pipelines. Downloading Extensions Anyone can make an extension and post it on Github, following the correct format if their extension is not listed you can put the username/extension_name in the text box above. When you restart the app the extension should be downloaded. Pipelines Pipelines let users without any code pipe extensions together so If I have a google translate and a search extension I can pipe them together. so that the result of the search is then translated.
Changes Made I finalized details for easy install and using it for the first time. Simple things like improving the functionality with the tray (the bottom right icons). How to use Whenever you want to open it you can either press Alt + Z or open the tray and press the icon see the image below for an example.
Changes made I made a far better readme.md file, and I added documentation for making your own extensions and pipelines Documentation I added very specific documentation for making your own extensions and pipelines. I don’t recommend making your own pipeline, because that is still in early development, but if you don’t have a stardance project yet I would absolutely recommend trying to make your own extension. It is difficult the first time but pretty easy afterwards.
Changes Made I added a list extensions feature, added extension specific settings, and removed a few nasty bugs. List all extensions feature All it does is when you press ? it will list all the extensions and you can just select the one you want from there. Extension Specific settings The settings page used to just have settings for the app now under the extensions tab will have extension specific settings that the dev of the extension can use. Bugs The implementation for removing the previous answers did not always remove all of the answers and sometimes left the user with answers that shouldn’t be there. I did a small rewrite which fixed the issue. The autocomplete feature did not like the list all expansions feature because the program will refuse to give answer past a certain amount of them to prevent 20 answers being given at once. But because the list all feature could expand to that point, the autocomplete feature thought there wasn’t enough room for it. But now I delete the previous answers before creating new ones for autocomplete.
Changes Made Improved fonts and spacing, improved opening apps, shows the icon of the app. I also improved the calculator Improved fonts I was just using the default fonts earlier because I am not very creative, but I decided to change it to Inter and Consolas. Improved app opening Earlier to determine the apps the user has installed as a temporary solution I just scrapped their desktop. But that did not return everything, and I finally fixed it I tried a bunch but the that worked for me was using some commands through power shell. That gets all the apps that windows knows about. The icons Now the program will show the user the icon of the app they want to open. there are three different kinds of app Id’s in windows and I have to assess their photos differently for each, which added alot of complexity and is the whole reason this devlog took so long. Better calculator The calculator has a few improvements the first being it now has the constants pi and e baked into it. It can also now do square roots and trigonometric functions. The trigonometric functions are interesting because they can be done with radians or degrees if the user types sin(90deg) . It will use 90 degrees instead of the default being radians.
Changes Made I added aliases and Improved the search. Aliases Aliases are a user configurable feature that allows the user to type /<Shorthand> which will immediately be turned into some text. For example instead of writing “Google chrome” I can type /google which will be converted to Google Chrome Users can configure as many of these as they want. Improved search On the first ship I got complaints that the search did not always return an answer when asked questions. For example Where is Canada would return an invalid answer whilst Canada returned a valid answer. I added a fallback to make these scenarios less common.
Changes Made I added an auto update code and added metadata to extensions Auto update code Before I added this code a user would have to delete the current code, and reinstall the application from GitHub. However this code will automatically detect and update the app on the users machine. Added metadata to extensions This allows for extensions to give data about them to the extension marketplace giving users a better idea of what they are downloading. Sorry for the lack of videos, it was really a backend change
Changes Made Added start on boot and safer extension marketplace. Start on boot The app will now set itself up so if in settings you enabled start on boot the app will automatically start itself when you boot up your computer. Safer extension marketplace The way extensions work is all the extensions listed have a GitHub repository linked so when the user downloads the extension they download it off the repository, but the developer can change the GitHub repo so after it is accepted as safe the developer can change that without any warning. So now we grab from a specific point on the git tree. However even still the Dev can change the history so we check that the commit hash matches the stored hash meaning the developer cannot change their extension after approval Sorry for the lack of videos again its really a backend change
Changes Made Added an Icon to the app, fixed a hundred different bugs, added a fallback for the duckduckgo extension, and added the extension descriptions to the help menu The icon I added an icon its very simple, and definitely subject to change, but now it does not have the default electron icon in the task bar. Bugs Fixed Changed the codebase to made up of several modules instead of a few giant files (Should have done it a long time ago) Fixed the time formatter for the timer Changed the commit hash of the GitHub extension Changed Priority order Improved Duck duck go extension The duckduckgo extension uses their quick search API, which returns a JSON, in which the answer sometimes is in JSON.abstract and sometimes JSON.relatedTopics[0].text Now the extension looks in both places and returns the most relevant answer. Extension descriptions I recently added descriptions of the extensions in their metadata so now on the help tab you can get small descriptions of each one. Sorry about how their have been no videos but it has all been fixing a lot of small bugs most of which don’t even make it into the dev-log.
Changes Made: I added a linux version, it should work on most distros. I also cleaned up the codebase. The linux version It may not work on all distros I only tested Fedora KDE, but from that test it looks like it functions almost fully however I still need to get the code for global shortcuts updated so that also works on linux. The file should download on most distro’s its an AppImage (the executable), not a .deb file I had one but switched to purely AppImage, soon afterwards, it should not affect the user. Cleaned up codebase All functions and classes now have docstrings, this way I can tell what I wrote the function to do later. I also removed some redundant checks.
Changes Made The app now allows for the user to select what extension they want to call using the mouse, it also has a better GitHub action yml, and finally npm tests Mouse selection Before the app was entirely keyboard driven their was nothing for the mouse to even interact with. I prefer it like this but their is now the option to select extensions with the mouse instead. GitHub actions yml The way I publish the app executable is with GitHub actions I will call an action that compiles the app and publishes the compiled app. But now it will also automatically update the version number so I don’t have to Tests I forgot to make tests for the longest time for this app and I finally realized it so I added them
Changes Made I worked on fixing some bugs for linux, so it should now have support for Wayland. Wayland bug fixes Wayland is an API for accessing the user layer of a linux machine. Quite a few distro’s use Wayland for this however my code was not the most compatible with this so I needed to write a bunch of code so some components work with it. The biggest bug was that the global shortcuts were not registering. Sorry about the lack of video
Changes Made Added a confirmation modal for the extension marketplace, hid the users home path, and Fixed a bunch of bugs. Confirmation Modal I added a modal that warns users against downloading extensions that could be harmful. Hiding the users home directory In the scenario that the user is recording a video or something where they use this app their user name on their computer could have been revealed, which is not good to say the least. Now that is no longer an issue, because we obfuscate the home directory, replacing it with a tilde Bugs The Cancel button on the modal wouldn’t close it. Stuck in the download state when downloading an extension Extension marketplace still showed previously downloaded extensions
Ships:
What is it? Action bar an application that more easily allows for quick actions and allows for users to open apps very easily. Challenges: One of the hardest challenges was allowing the user to make their own extensions and to allow for them to share it with others in the end I managed to make an extension “marketplace” (a bit empty but it works). How To Use: In order to open the application you can press Alt + Z a shortcut that can be configured. Or press the Icon in the bottom right corner. More information in the read me file. Features: This application lets you: quickly open apps Run custom extensions Pipe extensions together.
Version 2. What changed in Version 2: Safer extension marketplace Far better DDG search and app opening functionality Improved calculator Aliases Fixed a lot of small bugs Added the icon of the app you are opening ====================================== What is it? Action bar an application that more easily allows for quick actions and allows for users to open apps very easily. Challenges: I have never coded anything that people other than me actually use, so there is more pressure to sort out the small bugs and improve the UX How To Use: In order to open the application you can press Alt + Z a shortcut that can be configured. Or press the Icon in the bottom right corner. More information in the read me file....
|
1792983194.4225984
|
1793069594.4225984
|
|
33582
|
air by @dylankaru | Stardance
|
dylankaru
|
2
|
62.0
|
968
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-23T08:42:38Z", "hours": 25.0, "multiplier": 17.33, "payout": 426, "blessing": "neutral", "text": "air is a lightweight macOS dashboard that collapses your morning routine into one glance. There’s no more opening five different apps just to check the weather, news, and what’s on today. Genuinely made organising my day so much easier since now I have a place I can easily access to see what I have left in the day and just stats about the day in general. Version 2.0.0 is here. Yay! I’ve added a bunch of new cards, those being the list generator, world clock, unit converter, RNG generator, public IP viewer, and a QR code generator. I’ve also added a few new features, those being temporary cards which let you view a single card as a floating overlay without adding it permanently to your dashboard; and spaces which act as separate card lists which support different themes. It was pretty difficult doing figuring out the QR code generator but I eventually made it work well. Air v2 now supports a minimum of macOS Sonoma (14), which is earlier than previous versions so that’s a good thing too. A project demo video will be available to watch on the projects ReadMe if you can’t/don’t want to download it :)", "repo": "https://github.com/dylankaru/air", "demo": "https://github.com/dylankaru/air/releases/tag/v1.0.1"}, {"ship_num": 2, "ts": "2026-08-26T04:01:39Z", "hours": 37.0, "multiplier": 14.95, "payout": 542, "blessing": "neutral", "text": "air is a lightweight macOS dashboard that collapses your morning routine into one glance. There’s no more opening five different apps just to check the weather, news, and what’s on today. Genuinely made organising my day so much easier since now I have a place I can easily access to see what I have left in the day and just stats about the day in general. The audio player was definitely the hardest part, having to quickly rundown on AppleScript and then also learn how to interact with macOS’s Now Playing system. I ended up finding an external CLI tool called nowplaying-cli by Kirtan Shah and others to pull metadata from it. I’m very, very happy with how this entire project turned, this is to date the best Swift project I’ve ever made by far, but I only plan to improve from here. Air requires a computer running at least macOS 26 and using an arm processor (so Apple Silicon) to run. macOS may also show a security warning on first launch, if it does just right-click the app and choose open to get past it.", "repo": "https://github.com/dylankaru/air", "demo": "https://github.com/dylankaru/air/releases/tag/v1.0.1"}]...
|
[{"post_id": 72490, "ts": "202 [{"post_id": 72490, "ts": "2026-09-23T02:25:22Z", "hours": 2.6056, "text": "Ive finished spaces, which have configurable keybinds that let users navigate through different layouts of cards. Different spaces can have different names, use different themes and have different cards. Adding this actually let me fix a few bugs that I didn’t know I had, mainly with the keybind recorder where after a keybind was set, if a valid keybind was still typed on the keyboard (after the alleged recording state was over) it would rebind it anyway."}, {"post_id": 72116, "ts": "2026-09-22T06:15:24Z", "hours": 3.6028, "text": "I finally got around to adding things to air, since im also doing another ysws thing, but I’ve finally got around to making the temporary card system; it basically acts as a overlay over the normal UI and can be opened using Cmd + K . There’s a search bar to search thru all registered cards. I plan to add spaces either tonight and tomorrow, and then air will be ready to ship again :)"}, {"post_id": 68010, "ts": "2026-09-14T11:31:44Z", "hours": 3.9642, "text": "Ive added two new both pretty simple cards, an IP card that shows your public ipv4 (and 6 if available) and a qr code generator card for any reachable web address. It took a while to figure out how to generate the qr code but coreimage has a way to help me render it. I’m not really sure how else to add to the IP card, but the QR code card has a bunch of customisability features including changing the colour and style of elements in the qr code whilst still being readable. The card can also export the code as a png :)"}, {"post_id": 65198, "ts": "2026-09-10T05:02:34Z", "hours": 2.4389, "text": "So I’ve made new cards now, an RNG card because why not and a configurable world clock. Nothing really too hard with these, tbh they are very simple cards; but they are meant to be so that’s most likely gonna be good for a future update iykwim ;)"}, {"post_id": 64057, "ts": "2026-09-08T05:54:40Z", "hours": 1.1375, "text": "Hi I’ve created a unit conversion card. I initially created my own conversion system which I thought was alright but then I found out that Foundation has built in conversions so I remodelled it to just be a UI front."}, {"post_id": 62854, "ts": "2026-09-06T11:55:24Z", "hours": 1.0897, "text": "Hello I’ve added swipe and click gestures to the news card to make it possible to navigate thru the different news articles, which was a good feature that my friend suggested so thanks to him. I’ve also decided what I want to do for v1.2 and possibly even a v2 since it seems like a large enough deal to release a new version 😱 Here’s what i’m thinking: for v1.2: – unit converter – world clock – public ip – random number generator – countdown – calc – qr code generator/link shortener (maybe) – colour picker – word of the day so basically more cards, but theres a reason: for v2 – spaces, basically different layouts of cards that can have different cards – temporary cards, summoning and focusing cards for sort amounts of time and then dismissing them I think this might be a good roadmap for air. I hope you will enjoy using the new air app as much as I will enjoy making it :)"}, {"post_id": 62129, "ts": "2026-09-05T11:47:24Z", "hours": 5.3814, "text": "This one took a while. I made a list generator card because I needed a way to actually remember what exercises to do, but it can be generalised for any sort of random list generation that you may need to do consistently. The hard part was making rules, which basically tell the generator when to change the odds of any specific category or item in general. Initially I was going to make it so that the user would have to use Swift to do it themselves, but that would make it inaccessible to an extent so I decided to just add rules as block based components, though they are now much more restricted."}, {"post_id": 60202, "ts": "2026-09-02T13:00:08Z", "hours": 2.9028, "text": "I’ve gotten feedback from the ship (tysm for all the feedback) and based off it I’ve made some changes to air and am also planning to change more. First of alll the to do card is now called the notes card since you can add multiple pages for different kinds of notes you may want to quickly jot down, this was my own volition not any feedback. I think the most useful feedback I got was setting the minimum deployment too high i.e. macos 26, and yes that was just because I was too lazy to change all the glass elements, but it turns it was ez (adding themes was harder) so now the minimum deployment is probably 14, though idk how to actually test it on an older os. I just made a new modifier that checked the version once rather than running the check in every single instance of the glass elements.."}, {"post_id": 57344, "ts": "2026-08-29T13:53:47Z", "hours": 1.4575, "text": "After taking a day off, I took a look at air, which at the time I was very proud off, but now I realise that it’s horrenda(saurus rex, those who know).. Today I added a new velvet style (might change the colours of this one but I need a second opinion) and spent the rest of the time just fixed some padding inconsistencies, minor UX upgrades, and a few other bugs; mainly the eyesore caused by the lack of proper colouring of non-text elements using the text colour, dividers looking out of place and bad in general, and the bugs with the to do list, being that overflow extended the card and non-multiline entries. The reason I thought it was ready to ship is because I had no idea what else to put, but now I have many ideas to that will hopefully improve the UX of the app. In the coming days I’m thinking of added a few new cards, adding new features to existing cards to make them more useful, and fixing other bugs that I’ve noticed."}, {"post_id": 54886, "ts": "2026-08-26T03:07:20Z", "hours": 10.5944, "text": "Hi So finally I added resizing the cards with a draggable UI gesture, and added themes thanks to skue’s suggestion (ty kind soul 😁) and a system stats card as well as a website/app shortcuts card because I had no idea what else to add. I added a dark, green, brown, blue and pink theme which differ to the original light (which is technically beige) theme, my personal favourite is the brown."}, {"post_id": 52191, "ts": "2026-08-22T08:57:46Z", "hours": 5.1172, "text": "Well hello there Ive added a clipboard manager because my raycast beta broke and i cannot be bothered reinstalling, also this ones easier to access so imo its a lot better. I also revamped the calendar card and internet speed test. I am thinking of adding more the to speed test like ping, but idk what else to add in the space but its daijyoubu i will find something to put there. I also revamped the news card so the text wasnt cut off, a couple of my friends noticed it and told me. Idk if i mentioned this in the previous devlog but i also changed the settings view instantiation so that if someone (myself too) can have an easier time adding a settings page for a card, as they are passed through at the same time so ye. Thanks for reading"}, {"post_id": 49368, "ts": "2026-08-18T04:40:24Z", "hours": 5.6594, "text": "Hello I’ve added 3 new cards: a pomodoro style timer card with adjustable time lengths, a calendar access card that (after granting permission) retrieves your next closest event, and a network card that checks your internet speed. I plan to add a few more cards, but most importantly (to me at least) is adding two features: A layout customiser that lets you change the organisational layout of the cards A guide on how to (theoretically) add one’s own cards, granted said person knows basic SwiftUI Thanks for reading :)"}, {"post_id": 46918, "ts": "2026-08-14T13:51:06Z", "hours": 8.9567, "text": "Hello again I’ve added a few more features since last time so yay that’s good. I’ve created a settings page where configuration of the existing cards is possible, for example atm u can change the info the weather card shows, and settings to configure the streak (i nearly spelt it configurate lol). I’ll be honest, I’m mostly proud of the audio player, since that took a very long time and it was a suggestion from a friend. It’s actually kinda handy coz even if spotify/music isnt open it will still start playing from it, and it can also control video sources from youtube from your browser yk, that took a long time to figure out."}, {"post_id": 45042, "ts": "2026-08-11T08:54:20Z", "hours": 6.5256, "text": "Hello Hi, this is my first devlog, I don’t really know what to put here so I’ll be brief. I’ve finished setting up the basic infrastructure for the cards, so now all that’s left to do is make more cards and add customisation features. I’ve currently done a greeting panel that uses cards to do so, also a weather card, news card and to do card, though they all need improvement and polishing of the design. I’ve also set up a backend api on a server of mine to run all my api requests to groq (for greeting), weatherapi.com (for calculating the time, what else would i do with this 😡) and newsdata.io without exposing my api keys Thanks"}]...
|
Title: air by @dylankaru | Stardance
Devlogs:
Hel Title: air by @dylankaru | Stardance
Devlogs:
Hello Hi, this is my first devlog, I don’t really know what to put here so I’ll be brief. I’ve finished setting up the basic infrastructure for the cards, so now all that’s left to do is make more cards and add customisation features. I’ve currently done a greeting panel that uses cards to do so, also a weather card, news card and to do card, though they all need improvement and polishing of the design. I’ve also set up a backend api on a server of mine to run all my api requests to groq (for greeting), weatherapi.com (for calculating the time, what else would i do with this 😡) and newsdata.io without exposing my api keys Thanks
Hello again I’ve added a few more features since last time so yay that’s good. I’ve created a settings page where configuration of the existing cards is possible, for example atm u can change the info the weather card shows, and settings to configure the streak (i nearly spelt it configurate lol). I’ll be honest, I’m mostly proud of the audio player, since that took a very long time and it was a suggestion from a friend. It’s actually kinda handy coz even if spotify/music isnt open it will still start playing from it, and it can also control video sources from youtube from your browser yk, that took a long time to figure out.
Hello I’ve added 3 new cards: a pomodoro style timer card with adjustable time lengths, a calendar access card that (after granting permission) retrieves your next closest event, and a network card that checks your internet speed. I plan to add a few more cards, but most importantly (to me at least) is adding two features: A layout customiser that lets you change the organisational layout of the cards A guide on how to (theoretically) add one’s own cards, granted said person knows basic SwiftUI Thanks for reading :)
Well hello there Ive added a clipboard manager because my raycast beta broke and i cannot be bothered reinstalling, also this ones easier to access so imo its a lot better. I also revamped the calendar card and internet speed test. I am thinking of adding more the to speed test like ping, but idk what else to add in the space but its daijyoubu i will find something to put there. I also revamped the news card so the text wasnt cut off, a couple of my friends noticed it and told me. Idk if i mentioned this in the previous devlog but i also changed the settings view instantiation so that if someone (myself too) can have an easier time adding a settings page for a card, as they are passed through at the same time so ye. Thanks for reading
Hi So finally I added resizing the cards with a draggable UI gesture, and added themes thanks to skue’s suggestion (ty kind soul 😁) and a system stats card as well as a website/app shortcuts card because I had no idea what else to add. I added a dark, green, brown, blue and pink theme which differ to the original light (which is technically beige) theme, my personal favourite is the brown.
After taking a day off, I took a look at air, which at the time I was very proud off, but now I realise that it’s horrenda(saurus rex, those who know).. Today I added a new velvet style (might change the colours of this one but I need a second opinion) and spent the rest of the time just fixed some padding inconsistencies, minor UX upgrades, and a few other bugs; mainly the eyesore caused by the lack of proper colouring of non-text elements using the text colour, dividers looking out of place and bad in general, and the bugs with the to do list, being that overflow extended the card and non-multiline entries. The reason I thought it was ready to ship is because I had no idea what else to put, but now I have many ideas to that will hopefully improve the UX of the app. In the coming days I’m thinking of added a few new cards, adding new features to existing cards to make them more useful, and fixing other bugs that I’ve noticed.
I’ve gotten feedback from the ship (tysm for all the feedback) and based off it I’ve made some changes to air and am also planning to change more. First of alll the to do card is now called the notes card since you can add multiple pages for different kinds of notes you may want to quickly jot down, this was my own volition not any feedback. I think the most useful feedback I got was setting the minimum deployment too high i.e. macos 26, and yes that was just because I was too lazy to change all the glass elements, but it turns it was ez (adding themes was harder) so now the minimum deployment is probably 14, though idk how to actually test it on an older os. I just made a new modifier that checked the version once rather than running the check in every single instance of the glass elements..
This one took a while. I made a list generator card because I needed a way to actually remember what exercises to do, but it can be generalised for any sort of random list generation that you may need to do consistently. The hard part was making rules, which basically tell the generator when to change the odds of any specific category or item in general. Initially I was going to make it so that the user would have to use Swift to do it themselves, but that would make it inaccessible to an extent so I decided to just add rules as block based components, though they are now much more restricted.
Hello I’ve added swipe and click gestures to the news card to make it possible to navigate thru the different news articles, which was a good feature that my friend suggested so thanks to him. I’ve also decided what I want to do for v1.2 and possibly even a v2 since it seems like a large enough deal to release a new version 😱 Here’s what i’m thinking: for v1.2: – unit converter – world clock – public ip – random number generator – countdown – calc – qr code generator/link shortener (maybe) – colour picker – word of the day so basically more cards, but theres a reason: for v2 – spaces, basically different layouts of cards that can have different cards – temporary cards, summoning and focusing cards for sort amounts of time and then dismissing them I think this might be a good roadmap for air. I hope you will enjoy using the new air app as much as I will enjoy making it :)
Hi I’ve created a unit conversion card. I initially created my own conversion system which I thought was alright but then I found out that Foundation has built in conversions so I remodelled it to just be a UI front.
So I’ve made new cards now, an RNG card because why not and a configurable world clock. Nothing really too hard with these, tbh they are very simple cards; but they are meant to be so that’s most likely gonna be good for a future update iykwim ;)
Ive added two new both pretty simple cards, an IP card that shows your public ipv4 (and 6 if available) and a qr code generator card for any reachable web address. It took a while to figure out how to generate the qr code but coreimage has a way to help me render it. I’m not really sure how else to add to the IP card, but the QR code card has a bunch of customisability features including changing the colour and style of elements in the qr code whilst still being readable. The card can also export the code as a png :)
I finally got around to adding things to air, since im also doing another ysws thing, but I’ve finally got around to making the temporary card system; it basically acts as a overlay over the normal UI and can be opened using Cmd + K . There’s a search bar to search thru all registered cards. I plan to add spaces either tonight and tomorrow, and then air will be ready to ship again :)
Ive finished spaces, which have configurable keybinds that let users navigate through different layouts of cards. Different spaces can have different names, use different themes and have different cards. Adding this actually let me fix a few bugs that I didn’t know I had, mainly with the keybind recorder where after a keybind was set, if a valid keybind was still typed on the keyboard (after the alleged recording state was over) it would rebind it anyway.
Ships:
air is a lightweight macOS dashboard that collapses your morning routine into one glance. There’s no more opening five different apps just to check the weather, news, and what’s on today. Genuinely made organising my day so much easier since now I have a place I can easily access to see what I have left in the day and just stats about the day in general. The audio player was definitely the hardest part, having to quickly rundown on AppleScript and then also learn how to interact with macOS’s Now Playing system. I ended up finding an external CLI tool called nowplaying-cli by Kirtan Shah and others to pull metadata from it. I’m very, very happy with how this entire project turned, this is to date the best Swift project I’ve ever made by far, but I only plan to improve from here. Air requires a computer running at least macOS 26 and using an arm processor (so Apple Silicon) to run. macOS may also show a security warning on first launch, if it does just right-click the app and choose open to get past it.
air is a lightweight macOS dashboard that collapses your morning routine into one glance. There’s no more opening five different apps just to check the weather, news, and what’s on today. Genuinely made organising my day so much easier since now I have a place I can easily access to see what I have left in the day and just stats about the day in general. Version 2.0.0 is here. Yay! I’ve added a bunch of new cards, those being the list generator, world clock, unit converter, RNG generator, public IP viewer, and a QR code generator. I’ve also added a few new features, those being temporary cards which let you view a single card as a floating overlay without adding it permanently to your dashboard; and spaces which act as separate card lists which support different themes. It was pretty difficult doing figuring out the QR code generator but I eventually made it work well. Air v2 now supports a minimum of macOS Sonoma (14), which is earlier than previous versions so that’s a good thing too. A project demo video will be available to watch on the projects ReadMe if you can’t/don’t want to download it :)...
|
1792990486.9976816
|
1793076886.9976816
|
|
68
|
Chaira by @YouSafe | Stardance
|
YouSafe
|
1
|
95.0
|
967
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-17T17:40:42Z", "hours": 95.0, "multiplier": 15.62, "payout": 967, "blessing": "neutral", "text": "project is done :D i hope yall enjoy it, the ui is better than last time and the backend is faster than it was :3 but its running in a twinkpad so ig its not going to be a big factor", "repo": "https://github.com/Y0usaf3/chaira/tree/ui-design", "demo": "https://chaira.y0usaf3.top/dashboard"}]...
|
[{"post_id": 30227, "ts": "202 [{"post_id": 30227, "ts": "2026-07-17T17:16:53Z", "hours": 7.99, "text": "boom, worked on a user page, the table component got polished af and now the project is shippable enought i feel like i write very short devlogs for some reason"}, {"post_id": 27217, "ts": "2026-07-12T16:18:21Z", "hours": 6.4719, "text": "added some context menu :p and also fixed a few issues when updating the cell and now im close to finishing this"}, {"post_id": 22431, "ts": "2026-07-04T21:57:16Z", "hours": 28.9733, "text": "yippee finally made the table component, now you can add fields and add records, and edit stuff, well there is still dropdowns to do extra stuff with fields but its already gud trust!"}, {"post_id": 12497, "ts": "2026-06-20T12:31:38Z", "hours": 20.5597, "text": "ah yes, sorry for not posting devlogs, got a bit too busy, so here it is, the base page, and also fixed the deployement which prob took most of the time, i also worked on the dashboard, still too simple rn but it looks pretty good so far, i will make a simple table page now , not using websocket as supposed to do in my plan but for the sake of shipping now lol"}, {"post_id": 8118, "ts": "2026-06-13T15:31:48Z", "hours": 11.3353, "text": "finally finished most of the backend, now i started making the ui and overall design, im going to deploy this somewhere so ppl can see the updates and try it out :3"}, {"post_id": 3609, "ts": "2026-06-06T16:42:49Z", "hours": 7.9256, "text": "finally added convertion code between all those types, that was hell, but now we can totally rely on the core to handle the type convertion for us ;3"}, {"post_id": 1709, "ts": "2026-06-03T21:25:58Z", "hours": 1.5189, "text": "so i was coding the convertion strategy for SingleLine and LongText, but i was going to accidentally invoke a demon"}, {"post_id": 1068, "ts": "2026-06-02T21:39:25Z", "hours": 5.7936, "text": "was redesigning the Record/field system since it was poorly made, i made a trait for ValueTypes and a macro to easly write convertion code for each type (also hackatime wouldnt track all da time i spent writing on my note book 3:<)"}, {"post_id": 431, "ts": "2026-06-01T20:42:12Z", "hours": 3.8186, "text": "was working on the cache, but it wasnt fast enough so instead we store the sessions in memory in the server directly for a short amount of time, and we refresh from redis, just gonna make sure it actually saves the data :p oh and the speed seems to be very unstable for some reason XD"}, {"post_id": 96, "ts": "2026-05-31T18:13:31Z", "hours": 0.4222, "text": "working on the caching part using redis, its mostly working for the session logic, and will soon use it for other tasks"}]...
|
Title: Chaira by @YouSafe | Stardance
Devlogs:
wo Title: Chaira by @YouSafe | Stardance
Devlogs:
working on the caching part using redis, its mostly working for the session logic, and will soon use it for other tasks
was working on the cache, but it wasnt fast enough so instead we store the sessions in memory in the server directly for a short amount of time, and we refresh from redis, just gonna make sure it actually saves the data :p oh and the speed seems to be very unstable for some reason XD
was redesigning the Record/field system since it was poorly made, i made a trait for ValueTypes and a macro to easly write convertion code for each type (also hackatime wouldnt track all da time i spent writing on my note book 3:<)
so i was coding the convertion strategy for SingleLine and LongText, but i was going to accidentally invoke a demon
finally added convertion code between all those types, that was hell, but now we can totally rely on the core to handle the type convertion for us ;3
finally finished most of the backend, now i started making the ui and overall design, im going to deploy this somewhere so ppl can see the updates and try it out :3
ah yes, sorry for not posting devlogs, got a bit too busy, so here it is, the base page, and also fixed the deployement which prob took most of the time, i also worked on the dashboard, still too simple rn but it looks pretty good so far, i will make a simple table page now , not using websocket as supposed to do in my plan but for the sake of shipping now lol
yippee finally made the table component, now you can add fields and add records, and edit stuff, well there is still dropdowns to do extra stuff with fields but its already gud trust!
added some context menu :p and also fixed a few issues when updating the cell and now im close to finishing this
boom, worked on a user page, the table component got polished af and now the project is shippable enought i feel like i write very short devlogs for some reason
Ships:
project is done :D i hope yall enjoy it, the ui is better than last time and the backend is faster than it was :3 but its running in a twinkpad so ig its not going to be a big factor...
|
1792986922.478417
|
1793073322.478417
|
|
38499
|
FieldSim by @sircheetodust | Stardance
|
sircheetodust
|
1
|
53.13
|
959
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-08T00:10:33Z", "hours": 48.0, "multiplier": 16.79, "payout": 959, "blessing": "neutral", "text": "This is FieldSimulator(or for short FieldSim) It is a recreation of the FRC 2026 Rebuilt game in unity, heavily inspired by MoSimulator and xRC Simulator. It is fully open source and is made modular so people can make custom robots. The most difficult part about making this was probably getting the robot to intake and shoot well. This is my first time ever attempting a unity project this large so this was difficult. The robot would pop and sometimes just explode, so I abandoned a physics based hopper system and made a simple static hopper system where the ball would just be moved to a set position with collision disabled. Then when shooting, the balls collision would be reenabled and the ball would be shot from the robot. Here is the trailer for the game: https://www.youtube.com/watch?v=iRqO79tCtu4 Here is the download page for the game, if you are not familiar with the FRC rebuilt season, I would take a look at the docs. https://thecheetoman.github.io/FieldSim/", "repo": "https://github.com/thecheetoman/FieldSim", "demo": "https://thecheetoman.github.io/FieldSim/"}]...
|
[{"post_id": 60548, "ts": "202 [{"post_id": 60548, "ts": "2026-09-02T23:20:06Z", "hours": 2.4025, "text": "2658 Σ-Motion 85% completed! I had robotics yesterday, so I decided to work on this again. Everything such as the intake, ball system, turret, and drivetrain are set up. Audio remains as the final thing to be tweaked as it does sound like a very high pitched lawn mower ."}, {"post_id": 58367, "ts": "2026-08-30T19:28:29Z", "hours": 2.7294, "text": "Swerve and my own teams robot? Yep you read that right. I wrote a very bad swerve script that works. I also acquired the least broken cad of my FRC teams robot. I optimized from about 60 mil vertices to about 4.8 million(ty decimate modifier). Ill try my best to finish this robot, and add swerve to other robots(9126 and 9450)"}, {"post_id": 42980, "ts": "2026-08-08T00:00:20Z", "hours": 0.6333, "text": "Worked on trailer for shipping Heres a random part of the trailer"}, {"post_id": 42916, "ts": "2026-08-07T21:38:23Z", "hours": 1.3656, "text": "Fieldsim 1.0.0 is ready! The first version of this project is nearly ready. The download page is up to date and the modding documentation has been completed. Project will not be shipped yet as I will make a trailer. I did not compile for all OSs"}, {"post_id": 42798, "ts": "2026-08-07T18:17:05Z", "hours": 2.2897, "text": "#Website update! I made some modifications to the design on the home page to make it easier to see the text in the center. I wrote nearly half of the documentatoin for adding robots!"}, {"post_id": 42321, "ts": "2026-08-07T00:06:03Z", "hours": 1.3683, "text": "FieldSim documentation and guide website underway! I made a simple static html website inside a subfolder of the repo. Setting up github actions took about 30 minutes . Turns out github servers are slower than they used to be. I also made a simple documentation page and put in some basic info about this project. I kinda stole a lot of styling from a previous project."}, {"post_id": 42205, "ts": "2026-08-06T20:22:24Z", "hours": 0.5511, "text": "Final update to the game, onto the website! I finally finished the base for FieldSimulator. I am now going to work on a website with documentation for modding and a well made download page!"}, {"post_id": 42155, "ts": "2026-08-06T19:19:03Z", "hours": 0.5422, "text": "Minor update to Silver Hawks robot I added sound effects to it and a basic indexer sound effect system. I also fixed a major bug where sometimes fuel scored in the hub just disappears(i genuinely dont know how this even happened in the first place) The new indexer SFX system plays as long as the robot is enabled, and it gets a bit louder when you shoot. Added this to make silver hawks robot feel more alive."}, {"post_id": 42130, "ts": "2026-08-06T18:37:15Z", "hours": 3.1192, "text": "Main menu with settings credits and game launching! I finally undertook the process of making the menu. Unity makes it really easy to make UI but getting graphics settings to work took a while. When I first implemented changing graphics settings, the outcome is the complete opposite. If you choose the Horrendous preset, you get maxed out settings and vice versa. I fixed this by reordering options. I also added fullscreen as a toggle and a resolutions dropdown. I also modified the gamemanager and the menu to allow for loading a robot from the main menu. It works by saving your robot index to a playerprefs, and gamemanager loads that corresponding robot. The scripts for camera management and robot enabling and disabling are all modular, so everything works smoothly!"}, {"post_id": 41590, "ts": "2026-08-05T21:42:59Z", "hours": 2.8306, "text": "New robot! I added the SilverHawks, 9126. Adding this robot was kind of difficult. For starters, the CAD was too high fidelity, with every single screw and bolt set up. I had to remove all of them and I had to make my own bumpers for this.(which had flipped normals ). I also had to adjust the way turret and hood aiming worked. These were previously locked to only modify the z axis of the gameobjects. I had to write methods to choose a new axis. I also had to write a system for sliding hoppers. I am going to work on a menu, then make a website for this game. The website will have a simple robot tutorial."}, {"post_id": 41370, "ts": "2026-08-05T15:21:35Z", "hours": 1.0736, "text": "Illegal scoring penalties implemented I added a system in the gamemanager to detect if the player isnt in their alliance side. If they score while they aren’t, a heavy penalty is added to reds score."}, {"post_id": 41028, "ts": "2026-08-04T23:05:25Z", "hours": 2.6914, "text": "Turret robot nearly done! 9450 is almost done with its implementation into Fieldsim. I added a working automatic aligning turret and hood. This didn’t work initially, some values had to be fine tuned to ensure turret accuracy. The robot can shoot at the hub, and pass both left and right. This turned out pretty good and I hope to keep going Please put FRC team suggestions in comments(better if cad is released)"}, {"post_id": 40782, "ts": "2026-08-04T15:14:36Z", "hours": 1.8464, "text": "Another robot? yea! I decided to work on adding 9450. Their robot would be pretty easy to frankenstein on to a tank drive, which I did in blender. Currently it does absolutely nothing, so stay tuned!"}, {"post_id": 40385, "ts": "2026-08-03T21:06:15Z", "hours": 3.7106, "text": "Major Rebuilt progress! Devlog vid since it was too large: https://youtu.be/8LqqLZqSy14 I am almost done getting Rebuilt fully implemented! This took a lot longer than expected. I wrote scripts to handle scoring, hub lights, and heavily modified the gamemanager. i am so bad at driving 😭"}, {"post_id": 39689, "ts": "2026-08-02T20:32:39Z", "hours": 2.6922, "text": "“welcome to rebuilt, presented by haas” I finally finished implementing the real comp field! It is complete with fuel in the depot, and neutral zone(I haven’t decided what to do about the outpost yet). I set up the robot and all collision. All I need to do is program the actual robot game and UI, and this would be a good, somewhat functional game!"}, {"post_id": 39191, "ts": "2026-08-01T23:58:17Z", "hours": 1.0622, "text": "FMS implementation under way! I worked on modifying most of my scripts to work with the gamemanager. This allows robot enabling and disabling, which makes the game more realistic! I also made a script which actually makes the RSL(robot status light) strobe when the robot is deactivated, and stay on when the robot is activated! I am going to import normal rebuilt playing field soon so I can make the robot game work!"}, {"post_id": 39115, "ts": "2026-08-01T20:29:18Z", "hours": 1.3039, "text": "More audio and shooting improvements Quick update, I am gonna take it easy this weekend with working on this. I added sound effects for the drivetrain and when fuel hits the hub. I also added a QoL improvement. When you start shooting, the robot stops moving, making it easier to shoot and stay in place for accuracy."}, {"post_id": 38543, "ts": "2026-08-01T00:28:40Z", "hours": 2.6458, "text": "Audio, Camera follow, and new bumper! I added a dynamic audio system to the spinning shaft system. It plays audio from an audio source and adjusts its pitch based on the shaft’s rpm. In addition to this, I added events that can trigger functions in other scripts when the shaft reaches max speed and spools down. I also wrote a 3rd person camera follower, it uses tags on the player to make it easy to implement in other robots! I also remodeled the front bumper of the robot in blender. The original one looked kinda bad since the bevels were not matching with the rest of the bumpers.(screenshots included!)"}, {"post_id": 38359, "ts": "2026-07-31T18:16:16Z", "hours": 3.1653, "text": "Somewhat working kitbot! In the past 3 hrs of development, I wrote a not physics based intaking and hopper system. I also wrote a very simple shooting method. Intake The previous intake system I made(not devlogged), relied on a bunch of physics. The end result was pretty realistic, but buggy. When fuel was intaked, it would try to occupy the outtake zone of the robot, if there was already fuel there, the robot would “pop” and explode. This new system completly disables fuel physics and teleports fuel to preset positions. It isn’t as realistic, but its less buggy, and leads to less framerate drops! Shooting I added a basic shooter. It takes fuel from the 0th slot in the hopper, shoots it, and then cycles the fuel in the hopper. The shooting is pretty unrealistic compared to the real kitbot. It shoots too high and too far. With a bit of tuning though, this should be fixed. i still need to add collision to the field elements, i keep forgetting 😭"}, {"post_id": 37932, "ts": "2026-07-30T23:14:41Z", "hours": 0.6072, "text": "Quick materials update All of the materials from onshape look kinda dull(look at the field for reference). I updated the materials, might need to adjust bumper material since it is too strong."}, {"post_id": 37867, "ts": "2026-07-30T20:50:12Z", "hours": 2.7006, "text": "Drivable kitbot, Animated intake shafts, and Fuel! This devlog is gonna be a long one. I finished the tank drivetrain along with animated wheels. I also began to add spinning-ness to the intake. I also made the fuel. The drivetrain I finished writing the movement script and set up all of the wheels. I also spent some time tuning physics values to attempt to recreate a somewhat realistic tank drive. Animated spinny thingys I created an easy to implement script, which allows you to bind a key to shaft, and make it spin however fast you want it to! Fuel Added fuel some things still need collision, so dont mind me driving through the hub"}, {"post_id": 37688, "ts": "2026-07-30T16:11:25Z", "hours": 0.7639, "text": "ever seen a tank drive do wheelies? neither have i! Tank drive is working out way better, I didn’t even ask AI for help with this!"}, {"post_id": 37635, "ts": "2026-07-30T14:50:52Z", "hours": 2.1769, "text": "Quick announcement Swerve is beginning to be a problem. I am not that experience with unity so swerve ends up flying around most of the time. For this project, I think I might drop swerve entirely, and just make tank drive and throw the kitbot in. Sorry to have to announce this =("}, {"post_id": 37350, "ts": "2026-07-30T00:21:10Z", "hours": 1.3839, "text": "Dev log 2 of Fieldsim redo What did i do? I wrote a basic swerve controller, it allows you to drive the robot around and it even has field oriented driving! I also imported the test field that you might have seen at competitions for robot testing. Side notes: The old mesh for the robot was kinda(extremely) unoptimized. So i replaced it with cubes. Check the screenshot for wireframe view."}, {"post_id": 37252, "ts": "2026-07-29T20:23:28Z", "hours": 0.3333, "text": "i forgor to set up hackatime…. I forgot to set up hackatime, its been like an hr of getting this drivetrain parented properly. Now I can move on to writing a basic movement script. Then i can go through other FRC team’s swerve code and steal logic for wheel rotation. I also need to get a “gyro” working. welp, see ya next time!"}, {"post_id": 37192, "ts": "2026-07-29T18:39:35Z", "hours": 1.4667, "text": "Restarting field sim =( I feel kinda conflicted, with using mosimbuilder for this project. Im kinda stealing their work, so im going to write this from scratch now!"}, {"post_id": 35476, "ts": "2026-07-26T22:47:40Z", "hours": 1.5761, "text": "i made this lil guy, his name is greg"}, {"post_id": 34170, "ts": "2026-07-24T18:11:27Z", "hours": 1.2439, "text": "3128 added! Only took like 3 redos =D Has working intake, shooter, auto align. Not sure how climb worked, so I did not implement .t(didnt really see narwhals using it that much either)"}, {"post_id": 34104, "ts": "2026-07-24T16:11:59Z", "hours": 1.0, "text": "Dev Log #2 Today I tried doing a web build, which did not turn out great. You could not see anything, so I fixed that by adjusting MSAA settings. I am starting my first CAD robot. 3128(im doing the sd districts alliance) intake lookin a bit goofy. Still needs a lot of work before it the robot is finished. After this I plan to add 2102 Comment FRC team suggestions to see your robot added(cad would be rlly tuff)"}, {"post_id": 33642, "ts": "2026-07-23T18:33:43Z", "hours": 1.4303, "text": "Dev Log #1 Today i spent my time optimizing MoSimBuilder. Went from 9 fps -> 30 fps(my laptop kinda bad) I also added my team’s robot. Comment your team number if you want your robot added…"}]...
|
Title: FieldSim by @sircheetodust | Stardance
Dev Title: FieldSim by @sircheetodust | Stardance
Devlogs:
Dev Log #1 Today i spent my time optimizing MoSimBuilder. Went from 9 fps -> 30 fps(my laptop kinda bad) I also added my team’s robot. Comment your team number if you want your robot added…
Dev Log #2 Today I tried doing a web build, which did not turn out great. You could not see anything, so I fixed that by adjusting MSAA settings. I am starting my first CAD robot. 3128(im doing the sd districts alliance) intake lookin a bit goofy. Still needs a lot of work before it the robot is finished. After this I plan to add 2102 Comment FRC team suggestions to see your robot added(cad would be rlly tuff)
3128 added! Only took like 3 redos =D Has working intake, shooter, auto align. Not sure how climb worked, so I did not implement .t(didnt really see narwhals using it that much either)
i made this lil guy, his name is greg
Restarting field sim =( I feel kinda conflicted, with using mosimbuilder for this project. Im kinda stealing their work, so im going to write this from scratch now!
i forgor to set up hackatime…. I forgot to set up hackatime, its been like an hr of getting this drivetrain parented properly. Now I can move on to writing a basic movement script. Then i can go through other FRC team’s swerve code and steal logic for wheel rotation. I also need to get a “gyro” working. welp, see ya next time!
Dev log 2 of Fieldsim redo What did i do? I wrote a basic swerve controller, it allows you to drive the robot around and it even has field oriented driving! I also imported the test field that you might have seen at competitions for robot testing. Side notes: The old mesh for the robot was kinda(extremely) unoptimized. So i replaced it with cubes. Check the screenshot for wireframe view.
Quick announcement Swerve is beginning to be a problem. I am not that experience with unity so swerve ends up flying around most of the time. For this project, I think I might drop swerve entirely, and just make tank drive and throw the kitbot in. Sorry to have to announce this =(
ever seen a tank drive do wheelies? neither have i! Tank drive is working out way better, I didn’t even ask AI for help with this!
Drivable kitbot, Animated intake shafts, and Fuel! This devlog is gonna be a long one. I finished the tank drivetrain along with animated wheels. I also began to add spinning-ness to the intake. I also made the fuel. The drivetrain I finished writing the movement script and set up all of the wheels. I also spent some time tuning physics values to attempt to recreate a somewhat realistic tank drive. Animated spinny thingys I created an easy to implement script, which allows you to bind a key to shaft, and make it spin however fast you want it to! Fuel Added fuel some things still need collision, so dont mind me driving through the hub
Quick materials update All of the materials from onshape look kinda dull(look at the field for reference). I updated the materials, might need to adjust bumper material since it is too strong.
Somewhat working kitbot! In the past 3 hrs of development, I wrote a not physics based intaking and hopper system. I also wrote a very simple shooting method. Intake The previous intake system I made(not devlogged), relied on a bunch of physics. The end result was pretty realistic, but buggy. When fuel was intaked, it would try to occupy the outtake zone of the robot, if there was already fuel there, the robot would “pop” and explode. This new system completly disables fuel physics and teleports fuel to preset positions. It isn’t as realistic, but its less buggy, and leads to less framerate drops! Shooting I added a basic shooter. It takes fuel from the 0th slot in the hopper, shoots it, and then cycles the fuel in the hopper. The shooting is pretty unrealistic compared to the real kitbot. It shoots too high and too far. With a bit of tuning though, this should be fixed. i still need to add collision to the field elements, i keep forgetting 😭
Audio, Camera follow, and new bumper! I added a dynamic audio system to the spinning shaft system. It plays audio from an audio source and adjusts its pitch based on the shaft’s rpm. In addition to this, I added events that can trigger functions in other scripts when the shaft reaches max speed and spools down. I also wrote a 3rd person camera follower, it uses tags on the player to make it easy to implement in other robots! I also remodeled the front bumper of the robot in blender. The original one looked kinda bad since the bevels were not matching with the rest of the bumpers.(screenshots included!)
More audio and shooting improvements Quick update, I am gonna take it easy this weekend with working on this. I added sound effects for the drivetrain and when fuel hits the hub. I also added a QoL improvement. When you start shooting, the robot stops moving, making it easier to shoot and stay in place for accuracy.
FMS implementation under way! I worked on modifying most of my scripts to work with the gamemanager. This allows robot enabling and disabling, which makes the game more realistic! I also made a script which actually makes the RSL(robot status light) strobe when the robot is deactivated, and stay on when the robot is activated! I am going to import normal rebuilt playing field soon so I can make the robot game work!
“welcome to rebuilt, presented by haas” I finally finished implementing the real comp field! It is complete with fuel in the depot, and neutral zone(I haven’t decided what to do about the outpost yet). I set up the robot and all collision. All I need to do is program the actual robot game and UI, and this would be a good, somewhat functional game!
Major Rebuilt progress! Devlog vid since it was too large: https://youtu.be/8LqqLZqSy14 I am almost done getting Rebuilt fully implemented! This took a lot longer than expected. I wrote scripts to handle scoring, hub lights, and heavily modified the gamemanager. i am so bad at driving 😭
Another robot? yea! I decided to work on adding 9450. Their robot would be pretty easy to frankenstein on to a tank drive, which I did in blender. Currently it does absolutely nothing, so stay tuned!
Turret robot nearly done! 9450 is almost done with its implementation into Fieldsim. I added a working automatic aligning turret and hood. This didn’t work initially, some values had to be fine tuned to ensure turret accuracy. The robot can shoot at the hub, and pass both left and right. This turned out pretty good and I hope to keep going Please put FRC team suggestions in comments(better if cad is released)
Illegal scoring penalties implemented I added a system in the gamemanager to detect if the player isnt in their alliance side. If they score while they aren’t, a heavy penalty is added to reds score.
New robot! I added the SilverHawks, 9126. Adding this robot was kind of difficult. For starters, the CAD was too high fidelity, with every single screw and bolt set up. I had to remove all of them and I had to make my own bumpers for this.(which had flipped normals ). I also had to adjust the way turret and hood aiming worked. These were previously locked to only modify the z axis of the gameobjects. I had to write methods to choose a new axis. I also had to write a system for sliding hoppers. I am going to work on a menu, then make a website for this game. The website will have a simple robot tutorial.
Main menu with settings credits and game launching! I finally undertook the process of making the menu. Unity makes it really easy to make UI but getting graphics settings to work took a while. When I first implemented changing graphics settings, the outcome is the complete opposite. If you choose the Horrendous preset, you get maxed out settings and vice versa. I fixed this by reordering options. I also added fullscreen as a toggle and a resolutions dropdown. I also modified the gamemanager and the menu to allow for loading a robot from the main menu. It works by saving your robot index to a playerprefs, and gamemanager loads that corresponding robot. The scripts for camera management and robot enabling and disabling are all modular, so everything works smoothly!
Minor update to Silver Hawks robot I added sound effects to it and a basic indexer sound effect system. I also fixed a major bug where sometimes fuel scored in the hub just disappears(i genuinely dont know how this even happened in the first place) The new indexer SFX system plays as long as the robot is enabled, and it gets a bit louder when you shoot. Added this to make silver hawks robot feel more alive.
Final update to the game, onto the website! I finally finished the base for FieldSimulator. I am now going to work on a website with documentation for modding and a well made download page!
FieldSim documentation and guide website underway! I made a simple static html website inside a subfolder of the repo. Setting up github actions took about 30 minutes . Turns out github servers are slower than they used to be. I also made a simple documentation page and put in some basic info about this project. I kinda stole a lot of styling from a previous project.
#Website update! I made some modifications to the design on the home page to make it easier to see the text in the center. I wrote nearly half of the documentatoin for adding robots!
Fieldsim 1.0.0 is ready! The first version of this project is nearly ready. The download page is up to date and the modding documentation has been completed. Project will not be shipped yet as I will make a trailer. I did not compile for all OSs
Worked on trailer for shipping Heres a random part of the trailer
Swerve and my own teams robot? Yep you read that right. I wrote a very bad swerve script that works. I also acquired the least broken cad of my FRC teams robot. I optimized from about 60 mil vertices to about 4.8 million(ty decimate modifier). Ill try my best to finish this robot, and add swerve to other robots(9126 and 9450)
2658 Σ-Motion 85% completed! I had robotics yesterday, so I decided to work on this again. Everything such as the intake, ball system, turret, and drivetrain are set up. Audio remains as the final thing to be tweaked as it does sound like a very high pitched lawn mower .
Ships:
This is FieldSimulator(or for short FieldSim) It is a recreation of the FRC 2026 Rebuilt game in unity, heavily inspired by MoSimulator and xRC Simulator. It is fully open source and is made modular so people can make custom robots. The most difficult part about making this was probably getting the robot to intake and shoot well. This is my first time ever attempting a unity project this large so this was difficult. The robot would pop and sometimes just explode, so I abandoned a physics based hopper system and made a simple static hopper system where the ball would just be moved to a set position with collision disabled. Then when shooting, the balls collision would be reenabled and the ball would be shot from the robot. Here is the trailer for the game: https://www.youtube.com/watch?v=iRqO79tCtu4 Here is the download page for the game, if you are not familiar with the FRC rebuilt season, I would take a look at the docs. https://thecheetoman.github.io/FieldSim/...
|
1792972600.1050286
|
1793059000.1050286
|
|
50821
|
Emberfall by @janswca | Stardance
|
janswca
|
1
|
349.88
|
959
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-25T02:43:25Z", "hours": 101.0, "multiplier": 11.57, "payout": 959, "blessing": "neutral", "text": "emberfall is a game in a cave like dungeon where you have to find your way out and fight many enimies on the way", "repo": "https://github.com/janirusepa-design/emberfall", "demo": "https://janirusepa-design.github.io/emberfall/"}]...
|
[{"post_id": 65378, "ts": "202 [{"post_id": 65378, "ts": "2026-09-10T14:11:52Z", "hours": 12.3067, "text": "last playtests before shipping it soon, found some more inconsistencies and patched them, and the game is now mostly looking how i want it"}, {"post_id": 64792, "ts": "2026-09-09T13:35:57Z", "hours": 11.1, "text": "Noticed the sides of the screen were just permanently black, which is because the screen is twice as wide as it is tall, and the torch was a circle. Made the light an ellipse so it matches the screen shape. You now see about 14 tiles on either side of you instead of 7, and the top and bottom stay dark. Flaring fills the screen almost exactly, with the corners still falling off. Also made the torch something you can build up. There are four different upgrades now that extend it, so if you keep picking them, you finish the run seeing way more than you started with."}, {"post_id": 64516, "ts": "2026-09-08T23:48:34Z", "hours": 10.7667, "text": "worken on some new ablities and more, comming soon"}, {"post_id": 64182, "ts": "2026-09-08T12:28:17Z", "hours": 11.6667, "text": "Added elites enemy types this time, roughly one a room, with a ring around them so you can spot one coming and a guaranteed drop when it goes down."}, {"post_id": 63936, "ts": "2026-09-08T00:39:33Z", "hours": 10.3667, "text": "Most of the loot is still just numbers going up. 25 of the 29 affixes are a flat percentage, and only four of them do anything, so I want to turn a chunk of those into things with a verb in them, like your torch flaring on a kill or the first hit in a room always critting.After that, giving you a choice of two doors on the boss floors instead of the same 1 to 11 every single run."}, {"post_id": 63568, "ts": "2026-09-07T14:15:41Z", "hours": 8.5514, "text": "worked on some more minor improments so i can really get the best build out for the next ship"}, {"post_id": 63385, "ts": "2026-09-07T05:42:13Z", "hours": 10.4333, "text": "fixed the screen randomly going flat and bright, with no characters on it. Ashglass pickups were being made with a colour that doesn’t exist, which crashed the renderer mid-frame and killed all the lighting, and it looked random because ashglass only drops about one kill in twenty. Also, every floor generates differently instead of ten copies of the same dungeon in different colours, so the Cistern is flooded channels now and the Vault is six huge rooms. You can finally use abilities while flaring, since Shift turns the number row into a 1 to 5, which did nothing the whole time your torch was up. Toned the flare down; it used to light more than the whole screen. Plus the usual: stopped the hitching when you walk into new rooms, chest loot labels stack instead of piling on one spot, the Pyre was secretly two different affixes with the same name, and the help screen no longer lies about how many abilities you get."}, {"post_id": 62958, "ts": "2026-09-06T14:54:55Z", "hours": 13.2667, "text": "Still working right now, come back next devlog, havent finishet yet"}, {"post_id": 62555, "ts": "2026-09-06T00:25:54Z", "hours": 10.1333, "text": "It’s back. After the last batch of improvements, I played through again this morning, and the same glitch that happened a couple of days ago is back. Now, whenever I use my special abilities, the game goes grey, I can’t see my character or any enemies, and even though my attachments register, I can’t really play the game. But nevertheless i have fixed it again. Hopefully this time it stays fixed"}, {"post_id": 62226, "ts": "2026-09-05T14:16:47Z", "hours": 12.9, "text": "Did though playtests of the game and marked down some existing issues, and looked at ways to improve, optimised the code, and started ideating what new mechanics and features to add before shipping it again. In terms of shipping, I’ll probably end up shipping by the end of this week."}, {"post_id": 61849, "ts": "2026-09-04T23:42:12Z", "hours": 13.0667, "text": "worked on more minor things, especially the colours, they all look pretty much the same but I decided to make them more varied as you go throughout your run"}, {"post_id": 61412, "ts": "2026-09-04T09:52:39Z", "hours": 10.9333, "text": "Worked on improving the enemy encounter system. I found lots of glitches in it after making it for the first time. Sometimes, when you fough an enemny it woundnt update here and just many other problems but ive worked a lot the past 2 days working on fixing it and i think now it works, in my playtest, i havent found any more issues wth it. they update onto the list, maye in the future i could work on makeing this layout better i do think it it kind of lacking right now"}, {"post_id": 61160, "ts": "2026-09-03T22:56:03Z", "hours": 18.1333, "text": "worked on more minor things on the game"}, {"post_id": 60574, "ts": "2026-09-03T00:38:25Z", "hours": 10.3333, "text": "Just fixed a major glitch that caused this in the game, where you were stuck in this place and you just coudnt get out of it unless you resrated the game. likely due to the plethora of code changes I made. But this was"}, {"post_id": 60241, "ts": "2026-09-02T14:17:50Z", "hours": 5.1, "text": "Did it finally? Now the game saves to your browser cache. Now, as long as you keep playing in the same browser, you will not lose your progress, supposed to work though github as well but i havent tested that yet"}, {"post_id": 59980, "ts": "2026-09-02T02:04:30Z", "hours": 8.6333, "text": "SPOILERS ABOUT THE END OF THE GAME But i started thinking about what happens after you finsished all 11 floors and then i decided that you would be somone who got stranded on a lsland and fell into a cave and at the end you get the whole backstrory on what happend before the caves basicly you would go to a beacon that you set up and call for help, in not sure about the details just coded and make the draft of the story"}, {"post_id": 59448, "ts": "2026-09-01T09:37:30Z", "hours": 10.4333, "text": "Final floor looks like a whole ritual"}, {"post_id": 59264, "ts": "2026-08-31T23:11:16Z", "hours": 13.1333, "text": "Just finished the new upgrade system"}, {"post_id": 58755, "ts": "2026-08-31T10:00:51Z", "hours": 10.1, "text": "Worked on a list of enemies that you encounter, and as you progress, you will discover more and more. Also, worked on, and revamped the final floor to feel like a complete boss battle, which is more expansive and, for the first time, not as cramped have space to move around. Still to come a new and imporved upgrade system a first draft you can see in the ss here where you can stack up to 5 special abilities which you wil gain by section as you progress"}, {"post_id": 58503, "ts": "2026-08-30T22:45:09Z", "hours": 11.2667, "text": "Ok, the first batch of finished improvements is taking slightly longer than expected. I ran into quite a few issues while coding them, still troubleshooting"}, {"post_id": 58025, "ts": "2026-08-30T11:28:29Z", "hours": 4.4, "text": "Ok, im bout to begin incorporating the first batch of improvements, starting with the chaning the story"}, {"post_id": 57856, "ts": "2026-08-30T05:28:01Z", "hours": 12.5333, "text": "Fixed a bunch of stuff from the feedback, first make the tutorial larger and easier to read and understand, fixed sloppy and laggy mouse movement, increased the scaling, fixed the joystick and also reducsed screenshake when low on embers and getting damgaed added esc menu and a repo licenece also from your feedback im going to try being more detailed with my devlogs when i can. ill be ready to ship again soon, i going to try to find more way to imporve on top of this"}, {"post_id": 57381, "ts": "2026-08-29T14:47:16Z", "hours": 2.4256, "text": "Thanks for all the feedback im still working on incorporating all those changes and more in my game starting with a new and imporved better tutorial so o new players can understand all the controls of the game, how and when to use them"}, {"post_id": 57135, "ts": "2026-08-29T07:33:01Z", "hours": 6.9, "text": "Wored on some minor Improvents to the game"}, {"post_id": 53781, "ts": "2026-08-24T14:04:38Z", "hours": 7.6667, "text": "worked on some cool ememy designs"}, {"post_id": 53418, "ts": "2026-08-23T23:13:31Z", "hours": 10.2, "text": "Added on the totutorial and worked on imrpoving the game"}, {"post_id": 53038, "ts": "2026-08-23T13:01:04Z", "hours": 7.7281, "text": "Worked on adding a tutorial for new players"}, {"post_id": 52734, "ts": "2026-08-23T01:55:19Z", "hours": 19.2667, "text": "this game is almost finished, worked on a cool start screen"}, {"post_id": 52120, "ts": "2026-08-22T06:33:29Z", "hours": 16.6492, "text": "done a lot for the gameplay and mechanics of the game"}, {"post_id": 51665, "ts": "2026-08-21T13:52:37Z", "hours": 9.7667, "text": "Ok im very close to shipping this project, I’ve perfected the start screen, and now I just need to work on improving the gameplay, and then stabilizing and debugging the code"}, {"post_id": 51398, "ts": "2026-08-21T02:17:28Z", "hours": 9.1833, "text": "Made some good progress so far, but i think the code still needs work, and i keep runnning into errors about the game"}, {"post_id": 50862, "ts": "2026-08-20T09:45:14Z", "hours": 7.8786, "text": "I’ve gone pretty far but I’ve realized instead of making one big file for the game, I should just make a collection of files then an index.html file that runs off those ones, then much easier to run and to code"}, {"post_id": 50686, "ts": "2026-08-20T00:18:32Z", "hours": 12.4239, "text": "Just started working on my project put in about 12 hours at once"}, {"post_id": 50049, "ts": "2026-08-19T02:38:54Z", "hours": 0.6119, "text": "Just started working on a game its about being stuck in a cave and using a torch to find your way out and as you try to leave you have to face eminimies that try to attack you still in ideation"}]...
|
Title: Emberfall by @janswca | Stardance
Devlogs: Title: Emberfall by @janswca | Stardance
Devlogs:
Just started working on a game its about being stuck in a cave and using a torch to find your way out and as you try to leave you have to face eminimies that try to attack you still in ideation
Just started working on my project put in about 12 hours at once
I’ve gone pretty far but I’ve realized instead of making one big file for the game, I should just make a collection of files then an index.html file that runs off those ones, then much easier to run and to code
Made some good progress so far, but i think the code still needs work, and i keep runnning into errors about the game
Ok im very close to shipping this project, I’ve perfected the start screen, and now I just need to work on improving the gameplay, and then stabilizing and debugging the code
done a lot for the gameplay and mechanics of the game
this game is almost finished, worked on a cool start screen
Worked on adding a tutorial for new players
Added on the totutorial and worked on imrpoving the game
worked on some cool ememy designs
Wored on some minor Improvents to the game
Thanks for all the feedback im still working on incorporating all those changes and more in my game starting with a new and imporved better tutorial so o new players can understand all the controls of the game, how and when to use them
Fixed a bunch of stuff from the feedback, first make the tutorial larger and easier to read and understand, fixed sloppy and laggy mouse movement, increased the scaling, fixed the joystick and also reducsed screenshake when low on embers and getting damgaed added esc menu and a repo licenece also from your feedback im going to try being more detailed with my devlogs when i can. ill be ready to ship again soon, i going to try to find more way to imporve on top of this
Ok, im bout to begin incorporating the first batch of improvements, starting with the chaning the story
Ok, the first batch of finished improvements is taking slightly longer than expected. I ran into quite a few issues while coding them, still troubleshooting
Worked on a list of enemies that you encounter, and as you progress, you will discover more and more. Also, worked on, and revamped the final floor to feel like a complete boss battle, which is more expansive and, for the first time, not as cramped have space to move around. Still to come a new and imporved upgrade system a first draft you can see in the ss here where you can stack up to 5 special abilities which you wil gain by section as you progress
Just finished the new upgrade system
Final floor looks like a whole ritual
SPOILERS ABOUT THE END OF THE GAME But i started thinking about what happens after you finsished all 11 floors and then i decided that you would be somone who got stranded on a lsland and fell into a cave and at the end you get the whole backstrory on what happend before the caves basicly you would go to a beacon that you set up and call for help, in not sure about the details just coded and make the draft of the story
Did it finally? Now the game saves to your browser cache. Now, as long as you keep playing in the same browser, you will not lose your progress, supposed to work though github as well but i havent tested that yet
Just fixed a major glitch that caused this in the game, where you were stuck in this place and you just coudnt get out of it unless you resrated the game. likely due to the plethora of code changes I made. But this was
worked on more minor things on the game
Worked on improving the enemy encounter system. I found lots of glitches in it after making it for the first time. Sometimes, when you fough an enemny it woundnt update here and just many other problems but ive worked a lot the past 2 days working on fixing it and i think now it works, in my playtest, i havent found any more issues wth it. they update onto the list, maye in the future i could work on makeing this layout better i do think it it kind of lacking right now
worked on more minor things, especially the colours, they all look pretty much the same but I decided to make them more varied as you go throughout your run
Did though playtests of the game and marked down some existing issues, and looked at ways to improve, optimised the code, and started ideating what new mechanics and features to add before shipping it again. In terms of shipping, I’ll probably end up shipping by the end of this week.
It’s back. After the last batch of improvements, I played through again this morning, and the same glitch that happened a couple of days ago is back. Now, whenever I use my special abilities, the game goes grey, I can’t see my character or any enemies, and even though my attachments register, I can’t really play the game. But nevertheless i have fixed it again. Hopefully this time it stays fixed
Still working right now, come back next devlog, havent finishet yet
fixed the screen randomly going flat and bright, with no characters on it. Ashglass pickups were being made with a colour that doesn’t exist, which crashed the renderer mid-frame and killed all the lighting, and it looked random because ashglass only drops about one kill in twenty. Also, every floor generates differently instead of ten copies of the same dungeon in different colours, so the Cistern is flooded channels now and the Vault is six huge rooms. You can finally use abilities while flaring, since Shift turns the number row into a 1 to 5, which did nothing the whole time your torch was up. Toned the flare down; it used to light more than the whole screen. Plus the usual: stopped the hitching when you walk into new rooms, chest loot labels stack instead of piling on one spot, the Pyre was secretly two different affixes with the same name, and the help screen no longer lies about how many abilities you get.
worked on some more minor improments so i can really get the best build out for the next ship
Most of the loot is still just numbers going up. 25 of the 29 affixes are a flat percentage, and only four of them do anything, so I want to turn a chunk of those into things with a verb in them, like your torch flaring on a kill or the first hit in a room always critting.After that, giving you a choice of two doors on the boss floors instead of the same 1 to 11 every single run.
Added elites enemy types this time, roughly one a room, with a ring around them so you can spot one coming and a guaranteed drop when it goes down.
worken on some new ablities and more, comming soon
Noticed the sides of the screen were just permanently black, which is because the screen is twice as wide as it is tall, and the torch was a circle. Made the light an ellipse so it matches the screen shape. You now see about 14 tiles on either side of you instead of 7, and the top and bottom stay dark. Flaring fills the screen almost exactly, with the corners still falling off. Also made the torch something you can build up. There are four different upgrades now that extend it, so if you keep picking them, you finish the run seeing way more than you started with.
last playtests before shipping it soon, found some more inconsistencies and patched them, and the game is now mostly looking how i want it
Ships:
emberfall is a game in a cave like dungeon where you have to find your way out and fight many enimies on the way...
|
1792875220.036621
|
1793739220.036621
|
|
32702
|
Hardware Based SDP Solver by @brew | Stardance
|
brew
|
1
|
62.23
|
958
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-31T02:31:03Z", "hours": 50.0, "multiplier": 19.28, "payout": 958, "blessing": "neutral", "text": "I made a hardware implementation of Prange’s ISD algorithm. This algorithm is used in cryptanalysis of post-quantum cryptosystems (it can break something like HQC at extremely low parameters) or in some error correction algorithms (although these are not widely used). The hardest part about making this was designing the architecture. As my video demo shows, the math is not that hard. However, the architecture behind it required a software prototype, dozens of hours writing and debugging RTL, and accounting for deep memory access pipelines.", "repo": "https://github.com/0x62797465/isd", "demo": "https://youtu.be/89tWpNHTBE0"}]...
|
[{"post_id": 52677, "ts": "202 [{"post_id": 52677, "ts": "2026-08-22T22:59:53Z", "hours": 0.2883, "text": "made the codebase slightly more readable"}, {"post_id": 49043, "ts": "2026-08-17T17:07:26Z", "hours": 0.8281, "text": "Minor timing improvements; I realized that the multiplication path was poor for timing. However, I found out this only increased it to about 120mhz and that BRAM latency was the real killer."}, {"post_id": 41132, "ts": "2026-08-05T04:16:18Z", "hours": 6.9108, "text": "I wrote up the entire architecture updated my overall testbench. I do not know why this took so long."}, {"post_id": 39888, "ts": "2026-08-03T05:26:42Z", "hours": 3.0731, "text": "Cleaned up the codebase. The final thing I need to do before the technical write-up is make the overall test bench for a performance report & overall correctness."}, {"post_id": 38667, "ts": "2026-08-01T05:29:22Z", "hours": 1.13, "text": "Fixed the permutation testbench, which I didn’t even know was broken! Apparently it broke when I changed the memory access system to flatten the 2d array, it also exposed some other bugs that have been hiding."}, {"post_id": 37937, "ts": "2026-07-30T23:26:45Z", "hours": 0.8875, "text": "Well, I think this is it! I have some code hygiene to do, and I have to make the presentation video, but it’s done! I’ll be making a video presentation soon and pushing a release. Attached are some benchmark results; it’s pretty fast!"}, {"post_id": 37367, "ts": "2026-07-30T01:12:43Z", "hours": 2.0069, "text": "Finished the Gaussian elimination testbench! Only bugs I caught were in the testbench itself (which was expected, since I tested it in hardware before simulating). One complicated thing was to undo the row swaps, I had to scan the identity matrix."}, {"post_id": 37255, "ts": "2026-07-29T20:27:30Z", "hours": 2.2947, "text": "I’ve been running benchmarks. So far, the largest challenge I’ve been able to solve has an error length of 280 and a weight of 35, it took 13 hours and was externally verified."}, {"post_id": 36138, "ts": "2026-07-28T01:14:54Z", "hours": 2.8528, "text": "It’s done. This script receives, from UART, the columns needed for the error. However, due to the nature of the algorithm, it also contains non-error columns. With one RREF run on the permutated matrix we can recover the error vector. I have to clean the code up globally and finish the Gaussian elimination testbench before I start thinking about writing this up, benchmarking it, and publishing it."}, {"post_id": 35551, "ts": "2026-07-27T01:56:25Z", "hours": 2.9125, "text": "Implemented the UART logic, unfortunately there was a fire that led me to evacuate my house so I can not test it on my FPGA. Pictured is the top-level logic. (Each green block is a single unit, each unit contains one permutation unit and one Gaussian elimination unit)."}, {"post_id": 35209, "ts": "2026-07-26T14:25:31Z", "hours": 3.6583, "text": "Got it to synthesize and work, it’s faster than my CPU implementation!"}, {"post_id": 34383, "ts": "2026-07-25T01:41:47Z", "hours": 3.0183, "text": "Almost done rewriting the Gaussian elimination module. Today I worked on the elimination part and finished the selection part. It’s really hard because all memory accesses are pipelined, and what’s worse is that the depth is >4, making it complicated enough where I need to diagram. Below is the RTL view, you may notice some tall stuff, that’s free list access, but besides that it’s highly optimized. All that’s left for this module is bitcounting & stalling, which are both trivial, however the testbench is a different story."}, {"post_id": 33810, "ts": "2026-07-24T01:34:58Z", "hours": 2.5689, "text": "This is the new RTL view for the permutation! After changing some logic and fixing the testbench today I don’t think it will look much different in the future. The long thing is a 32 bit seed being used in the xorshift32 algorithm (a PRNG). Today I worked on the Gaussian elimination unit, there is a lot to do to move it into BRAM. First, I have to adapt it to receive the permutated matrix, which is the easy part. Everywhere else the architecture heavily diverges. I will be scanning the columns to build a list (in BRAM) of every row I need to eliminate, at the same time I will use a free list to prevent using an already-used row (which would break the algorithm) and select a row to use for elimination (and rename and allocate it to prevent re-use and actual swaps). During the elimination step, I will fetch the current word used for elimination, then eliminate every row in the list for the current word. I will repeat until it is done. Additionally, I’ll save some time by skipping unneeded words at the beginning (which should be all zero in our selected row by construction). The bit count implementation is pretty easy, all I need to do is read the new syndrome bits in many cycles, adding them together, then comparing against a constant. Most of this is not yet implemented, but progress is being made!"}, {"post_id": 33344, "ts": "2026-07-23T05:15:43Z", "hours": 2.8708, "text": "After an excessive amount of work, the permutation stage is now fully BRAM and the testbench is updated to match. This required renaming, state machines, multi-cycle delays, look ahead memory accesses, etc. I am very happy it is done, however the bigger beast (Gaussian elimination) is up next."}, {"post_id": 32714, "ts": "2026-07-22T01:23:27Z", "hours": 4.6639, "text": "Spent the entire day trying to refactor the permutation logic to use BRAM. So far, I was able to get the static matrix put into BRAM. I am currently working on getting the permutation matrix and snapshots put into BRAM. To prevent excessive logic or stale periods I am implementing a renaming system that allows for quick swaps of permutation matrixi. The testbench works for the static matrix in BRAM, but since the permutation logic is still being adapted to BRAM I am not near finished."}, {"post_id": 32098, "ts": "2026-07-21T00:55:21Z", "hours": 1.8475, "text": "RTL view or Factorio map? If you guessed RTL view, you would unfortunately be correct. My naive architecture was not a great idea! Pictured here is only 2% of the problem, the other 97% is the Gaussian elimination unit which doesn’t manage to load in RTL view even after an hour of waiting. Why? Muxes. I treated access into a 20k entry bitarray as cheap, which was not very smart, especially since I did multiple reads/writes in a single cycle (which duplicates logic). As a result, I am currently refactoring the codebase to store more things in BRAM. This will come at a heavy, heavy, heavy performance cost, but at least it’ll be synthesizable and the units may be duplicatable. This will require me to rewrite the permutation unit, the Gaussian unit, and both testbenches. Essentially 10 hours of work are down the drain."}, {"post_id": 31579, "ts": "2026-07-20T02:48:42Z", "hours": 1.3114, "text": "I am in the testing stage of the Prange implementation, simulation is really slow, so it will take a while. So far it has been running for an hour without a solution. However, other testbenches and results show that there likely will be a solution in some time."}, {"post_id": 31039, "ts": "2026-07-19T03:31:36Z", "hours": 2.4542, "text": "I wanted to one-up my time from yesterday so I continued working on my project. I implemented a fully randomized testbench of the new unit’s (responsible for gaussian elimination and hamming weight calculation) receiving protocol, hamming weight calculation, solution correctness, and more. Overall I found a few major bugs, but they’re all fixed now. My Prange implementation is nearly complete!"}, {"post_id": 30950, "ts": "2026-07-18T23:19:17Z", "hours": 3.2281, "text": "This has been an undertaking, I present to you, a very very tunable Gaussian elimination unit in GF(2). This is essentially a state machine that copies over a partial permutated matrix from the other permutation unit, then it finds a non-zero coordinate for the current column, swaps, eliminates, and repeats. Afterwards, it does a hamming weight calculation to see if it’s equal to our needed weight, if yes then it stalls, otherwise it requests another matrix and restarts. The hardest part of this was making every parameter tunable, because doing so allows us to later use something like an evolutionary algorithm to reach a theoretical optimal design for a given dimension."}, {"post_id": 30364, "ts": "2026-07-17T20:48:24Z", "hours": 3.4306, "text": "Major changes, the permutation generator now can transfer data to the Gaussian elimination units in blocks. I made sure this, and some other logic I’ve added, works via a large test bench (larger than the actual implementation!)."}, {"post_id": 29746, "ts": "2026-07-16T20:47:27Z", "hours": 2.4306, "text": "Small changes. I implemented the permutation generator in systemverilog and made a testbench for it (looks for frozen random values, zero random values (breaks xorshift), and for invalid permutation states (multiple entries point to the same thing)). I used the xorshift32 algorithm because of how cheap it is on hardware. I would have used xorshift16, but the larger state prevents exhaustion of search space. Pictured is incremental changes in simulation."}, {"post_id": 28641, "ts": "2026-07-15T00:43:09Z", "hours": 2.8442, "text": "I decided to take another look at my Prange implementation before committing it to hardware. It turns out that there was a lot of room for optimization. Originally, with full optimizations, the code solved an instance at 200 dimensions in 300 seconds. At that dimension, it is estimated to have a complexity of 2^21, which means that my code was not doing too well. First things first, I started storing bits in bit arrays rather than byte arrays. Since everything was in GF(2) it was much easier to simply use an array given that C had no high performance built-in bitarray. However, C++ did. So after migrating my code base and changing everything to bitarrays (and using the same random seed, meaning same solution and work) I got it solved in 150 seconds, which is a 2x improvement! After removing some repeated allocations, making my code take better advantage of boost’s high performance block operations (64 bits xored in a cycle rather than 1 (there’s some heavy nuance to this due to how modern processors work but there is an improvement)), and making the hamming weight calculator operate along with the Gaussian elimination rather than after it, I got a further 5x boost to 30 seconds (same randomness). I got another improvement to 10 seconds when I changed the randomness (so technically there is a different amount of work but the overall trend held for other tests) and permutation logic to prevent repeated allocations and to decrease the amount of swaps that were needed by partitioning two sections at the cost of some random uniformity. Overall, I achieved a 30x speedup and now I’m able to run higher dimensions in a reasonable time."}, {"post_id": 25473, "ts": "2026-07-09T19:16:54Z", "hours": 0.5122, "text": "Small updates, I fixed memory leakages and got the algorithm working at 170 dimensions instead of just 100. The next algorithm I will be prototyping will be the final one used in-hardware. In the screenshot, part of the matrix with partial RREF is shown along with a found solution after list generation and matching."}, {"post_id": 25061, "ts": "2026-07-09T00:47:57Z", "hours": 2.0878, "text": "I got the Stern algorithm prototype running! While the memory complexity makes it unusable for higher dimensions (multiple petabytes at just d=200), it is able to solve small dimensions relatively quickly. This is my last prototype until I start implementing BJMM in both software and HDL."}, {"post_id": 24924, "ts": "2026-07-08T20:02:16Z", "hours": 1.8081, "text": "This is my first devlog post! For now, my code is relatively basic. The problem it is attempting to solve is the syndrome decoding problem, which is used in error correction and post-quantum cryptography. I made a prototype of Prange’s algorithm, but now I am working on Stern’s, which has a higher memory complexity but better time complexity. Screenshotted is the partial RREF achieved in order to split the syndrome into two parts (one for lookup and the other for exact matching)."}]...
|
Title: Hardware Based SDP Solver by @brew | Starda Title: Hardware Based SDP Solver by @brew | Stardance
Devlogs:
This is my first devlog post! For now, my code is relatively basic. The problem it is attempting to solve is the syndrome decoding problem, which is used in error correction and post-quantum cryptography. I made a prototype of Prange’s algorithm, but now I am working on Stern’s, which has a higher memory complexity but better time complexity. Screenshotted is the partial RREF achieved in order to split the syndrome into two parts (one for lookup and the other for exact matching).
I got the Stern algorithm prototype running! While the memory complexity makes it unusable for higher dimensions (multiple petabytes at just d=200), it is able to solve small dimensions relatively quickly. This is my last prototype until I start implementing BJMM in both software and HDL.
Small updates, I fixed memory leakages and got the algorithm working at 170 dimensions instead of just 100. The next algorithm I will be prototyping will be the final one used in-hardware. In the screenshot, part of the matrix with partial RREF is shown along with a found solution after list generation and matching.
I decided to take another look at my Prange implementation before committing it to hardware. It turns out that there was a lot of room for optimization. Originally, with full optimizations, the code solved an instance at 200 dimensions in 300 seconds. At that dimension, it is estimated to have a complexity of 2^21, which means that my code was not doing too well. First things first, I started storing bits in bit arrays rather than byte arrays. Since everything was in GF(2) it was much easier to simply use an array given that C had no high performance built-in bitarray. However, C++ did. So after migrating my code base and changing everything to bitarrays (and using the same random seed, meaning same solution and work) I got it solved in 150 seconds, which is a 2x improvement! After removing some repeated allocations, making my code take better advantage of boost’s high performance block operations (64 bits xored in a cycle rather than 1 (there’s some heavy nuance to this due to how modern processors work but there is an improvement)), and making the hamming weight calculator operate along with the Gaussian elimination rather than after it, I got a further 5x boost to 30 seconds (same randomness). I got another improvement to 10 seconds when I changed the randomness (so technically there is a different amount of work but the overall trend held for other tests) and permutation logic to prevent repeated allocations and to decrease the amount of swaps that were needed by partitioning two sections at the cost of some random uniformity. Overall, I achieved a 30x speedup and now I’m able to run higher dimensions in a reasonable time.
Small changes. I implemented the permutation generator in systemverilog and made a testbench for it (looks for frozen random values, zero random values (breaks xorshift), and for invalid permutation states (multiple entries point to the same thing)). I used the xorshift32 algorithm because of how cheap it is on hardware. I would have used xorshift16, but the larger state prevents exhaustion of search space. Pictured is incremental changes in simulation.
Major changes, the permutation generator now can transfer data to the Gaussian elimination units in blocks. I made sure this, and some other logic I’ve added, works via a large test bench (larger than the actual implementation!).
This has been an undertaking, I present to you, a very very tunable Gaussian elimination unit in GF(2). This is essentially a state machine that copies over a partial permutated matrix from the other permutation unit, then it finds a non-zero coordinate for the current column, swaps, eliminates, and repeats. Afterwards, it does a hamming weight calculation to see if it’s equal to our needed weight, if yes then it stalls, otherwise it requests another matrix and restarts. The hardest part of this was making every parameter tunable, because doing so allows us to later use something like an evolutionary algorithm to reach a theoretical optimal design for a given dimension.
I wanted to one-up my time from yesterday so I continued working on my project. I implemented a fully randomized testbench of the new unit’s (responsible for gaussian elimination and hamming weight calculation) receiving protocol, hamming weight calculation, solution correctness, and more. Overall I found a few major bugs, but they’re all fixed now. My Prange implementation is nearly complete!
I am in the testing stage of the Prange implementation, simulation is really slow, so it will take a while. So far it has been running for an hour without a solution. However, other testbenches and results show that there likely will be a solution in some time.
RTL view or Factorio map? If you guessed RTL view, you would unfortunately be correct. My naive architecture was not a great idea! Pictured here is only 2% of the problem, the other 97% is the Gaussian elimination unit which doesn’t manage to load in RTL view even after an hour of waiting. Why? Muxes. I treated access into a 20k entry bitarray as cheap, which was not very smart, especially since I did multiple reads/writes in a single cycle (which duplicates logic). As a result, I am currently refactoring the codebase to store more things in BRAM. This will come at a heavy, heavy, heavy performance cost, but at least it’ll be synthesizable and the units may be duplicatable. This will require me to rewrite the permutation unit, the Gaussian unit, and both testbenches. Essentially 10 hours of work are down the drain.
Spent the entire day trying to refactor the permutation logic to use BRAM. So far, I was able to get the static matrix put into BRAM. I am currently working on getting the permutation matrix and snapshots put into BRAM. To prevent excessive logic or stale periods I am implementing a renaming system that allows for quick swaps of permutation matrixi. The testbench works for the static matrix in BRAM, but since the permutation logic is still being adapted to BRAM I am not near finished.
After an excessive amount of work, the permutation stage is now fully BRAM and the testbench is updated to match. This required renaming, state machines, multi-cycle delays, look ahead memory accesses, etc. I am very happy it is done, however the bigger beast (Gaussian elimination) is up next.
This is the new RTL view for the permutation! After changing some logic and fixing the testbench today I don’t think it will look much different in the future. The long thing is a 32 bit seed being used in the xorshift32 algorithm (a PRNG). Today I worked on the Gaussian elimination unit, there is a lot to do to move it into BRAM. First, I have to adapt it to receive the permutated matrix, which is the easy part. Everywhere else the architecture heavily diverges. I will be scanning the columns to build a list (in BRAM) of every row I need to eliminate, at the same time I will use a free list to prevent using an already-used row (which would break the algorithm) and select a row to use for elimination (and rename and allocate it to prevent re-use and actual swaps). During the elimination step, I will fetch the current word used for elimination, then eliminate every row in the list for the current word. I will repeat until it is done. Additionally, I’ll save some time by skipping unneeded words at the beginning (which should be all zero in our selected row by construction). The bit count implementation is pretty easy, all I need to do is read the new syndrome bits in many cycles, adding them together, then comparing against a constant. Most of this is not yet implemented, but progress is being made!
Almost done rewriting the Gaussian elimination module. Today I worked on the elimination part and finished the selection part. It’s really hard because all memory accesses are pipelined, and what’s worse is that the depth is >4, making it complicated enough where I need to diagram. Below is the RTL view, you may notice some tall stuff, that’s free list access, but besides that it’s highly optimized. All that’s left for this module is bitcounting & stalling, which are both trivial, however the testbench is a different story.
Got it to synthesize and work, it’s faster than my CPU implementation!
Implemented the UART logic, unfortunately there was a fire that led me to evacuate my house so I can not test it on my FPGA. Pictured is the top-level logic. (Each green block is a single unit, each unit contains one permutation unit and one Gaussian elimination unit).
It’s done. This script receives, from UART, the columns needed for the error. However, due to the nature of the algorithm, it also contains non-error columns. With one RREF run on the permutated matrix we can recover the error vector. I have to clean the code up globally and finish the Gaussian elimination testbench before I start thinking about writing this up, benchmarking it, and publishing it.
I’ve been running benchmarks. So far, the largest challenge I’ve been able to solve has an error length of 280 and a weight of 35, it took 13 hours and was externally verified.
Finished the Gaussian elimination testbench! Only bugs I caught were in the testbench itself (which was expected, since I tested it in hardware before simulating). One complicated thing was to undo the row swaps, I had to scan the identity matrix.
Well, I think this is it! I have some code hygiene to do, and I have to make the presentation video, but it’s done! I’ll be making a video presentation soon and pushing a release. Attached are some benchmark results; it’s pretty fast!
Fixed the permutation testbench, which I didn’t even know was broken! Apparently it broke when I changed the memory access system to flatten the 2d array, it also exposed some other bugs that have been hiding.
Cleaned up the codebase. The final thing I need to do before the technical write-up is make the overall test bench for a performance report & overall correctness.
I wrote up the entire architecture updated my overall testbench. I do not know why this took so long.
Minor timing improvements; I realized that the multiplication path was poor for timing. However, I found out this only increased it to about 120mhz and that BRAM latency was the real killer.
made the codebase slightly more readable
Ships:
I made a hardware implementation of Prange’s ISD algorithm. This algorithm is used in cryptanalysis of post-quantum cryptosystems (it can break something like HQC at extremely low parameters) or in some error correction algorithms (although these are not widely used). The hardest part about making this was designing the architecture. As my video demo shows, the math is not that hard. However, the architecture behind it required a software prototype, dozens of hours writing and debugging RTL, and accounting for deep memory access pipelines....
|
1792976064.4650254
|
1793062464.4650254
|
|
8348
|
MineJS by @vaito | Stardance
|
vaito
|
2
|
109.0
|
950
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-19T04:02:17Z", "hours": 49.0, "multiplier": 10.9, "payout": 0, "blessing": "neutral", "text": "There is a lot of changes since the last ship (I have made more 15 release since it). To sum up: Multi version support :D 26.3 is partially supported because there is some issue with decoding packets Container is here (but you can’t interact with it yet, just viewing) You can chat now I have implemented online account protocol but there is an issue prevent me from testing it so it is considered as unstable for now. There is some small changed in protocol Fix some bugs in physics engine", "repo": "https://github.com/VaitoSoi/minejs/", "demo": "https://www.npmjs.com/package/@vaitosoi/minejs"}, {"ship_num": 2, "ts": "2026-07-16T12:50:01Z", "hours": 60.0, "multiplier": 15.92, "payout": 950, "blessing": "neutral", "text": "This is a Minecraft client package, allow you to create Minecraft bot and joining server. This ship provide some basic functionality of Minecraft bot, including: Walking around Getting blocks Also, this ship include the low-level client for talking directly to the server.", "repo": "https://github.com/VaitoSoi/minejs/", "demo": "https://www.npmjs.com/package/@vaitosoi/minejs"}]...
|
[{"post_id": 80874, "ts": "202 [{"post_id": 80874, "ts": "2026-10-19T03:56:17Z", "hours": 2.7606, "text": "I’m not doing much these day beside fixing bugs because I’m quite busy with uni homework and I’m quite bored now I post this devlog to submit all of my hours before Stardance end"}, {"post_id": 74028, "ts": "2026-09-26T15:37:46Z", "hours": 1.4769, "text": "The container is finally opened, turn out there is a bug in my code which tell the server the wrong location of the chest ;-; P/s: Thank you Claude for helping me find this issue"}, {"post_id": 73148, "ts": "2026-09-24T14:14:32Z", "hours": 5.7178, "text": "I have implemented the Use item on packet for interacting with block, but seem like there was something wrong with it because it is expected to return an open screen packet but nothing returned. Beside that, I have implemented the tablist. Now you can see the header and footer Also, I’m preparing for supporting version 26.3. I’m wondering whether should I make a new ship. P/s: Rust rewrite when >:)"}, {"post_id": 65383, "ts": "2026-09-10T14:17:17Z", "hours": 1.8811, "text": "I added container But it is just clientbound Add container and block interaction soon"}, {"post_id": 64194, "ts": "2026-09-08T12:52:05Z", "hours": 5.9608, "text": "I have completed the reading slot part. I just know that a slot can hold that many data ;-; Btw, I’ll soon complete the container part, meaning that you can use chest now"}, {"post_id": 59464, "ts": "2026-09-01T10:24:05Z", "hours": 4.2389, "text": "The bot can chat now I have to reimplement the bitset to let this run btw"}, {"post_id": 53887, "ts": "2026-08-24T16:16:27Z", "hours": 3.5672, "text": "Hello again, I’m sorry for not update this project much since I’m working on the other. I just found out that the Mojang just revoke my app approval without any notification ;-; Btw, I fixed the bug that ignore the chunk packet and update the README about the current situation ;-;"}, {"post_id": 44586, "ts": "2026-08-10T13:25:50Z", "hours": 8.7567, "text": "Hello again, sorry for a almost-9-hour devlogs I’m just making the auth part for joining premium server and the thing is not going well for now ;-; I have registered the app for accessing Minecraft API but by some magic, I’m still blocked I’m also making the feature for verifying message signature"}, {"post_id": 40068, "ts": "2026-08-03T13:15:54Z", "hours": 6.7083, "text": "I do so much work that I forgot what to summarize here So before, everything is placed in TCPClient, which is fine for hard-coded packets. But now, I’m making the dynamic packet translating for multiple version supports. And while making it, it need reference from TCPClient, then TCPClient need to a reference of it and so on… So I have split the functionality into corresponding space. So now, each of class has its own responsibility: TCPClient for throwing and receiving packets through TCP connection VersionCodec for translating packets Dispatcher for handling packet SharedState for holding states So that is the whole update. Hope youre enjoy your day, also this project :D"}, {"post_id": 37686, "ts": "2026-07-30T16:10:51Z", "hours": 8.1078, "text": "Sorry for another 8-hour devlog ;-; Now MineJS support 26.2 I’m working on a system for mapping version and packet so MineJS can support multiple version at the same time, instead of one atm (because the packet ID is hard-coded). I also make another tool for scrapping Minecraft Wiki for packet structure (disclaimer: This is not an automate running so it will not spam the Wiki, please don’t ban me ;-;). Thats it, have a great day"}, {"post_id": 29459, "ts": "2026-07-16T12:40:35Z", "hours": 5.4361, "text": "Oh, I spent 5h for setting up documents? That’s crazy :D Btw, I have setup an auto document page using TypeDoc. I also setup Github Action for automating publish package and build document page."}, {"post_id": 28434, "ts": "2026-07-14T17:52:04Z", "hours": 5.855, "text": "NOW MY BOT CAN WALK ON STAIR I think it is ready to be publish ONE MORE TIME, I’m very sorry for not logging this painful process much, please please please forgive me"}, {"post_id": 27246, "ts": "2026-07-12T17:09:55Z", "hours": 2.0628, "text": "MY BOT CAN WALK NOW 🎉"}, {"post_id": 26816, "ts": "2026-07-11T20:33:54Z", "hours": 8.795, "text": "Hello, sorry for forget logging regularly In the last whole week, my only job is looking at Minecraft code, ask Claude what the beep beep is that, arguing with myself do I have to do this and then continue Btw I managed to write the trimmed Minecraft physics engine and ready to test it out Unfortunately, my code isn’t reading the Registry well so maybe tomorrow :D P/s: If you still read this, have a good day and please vote for me ;-;"}, {"post_id": 22246, "ts": "2026-07-04T16:43:26Z", "hours": 0.6108, "text": "I’m getting through clipping function, which is mandatory to calculate the damage from falling"}, {"post_id": 21570, "ts": "2026-07-03T16:24:49Z", "hours": 1.2514, "text": "Finally done the collide function ;-;"}, {"post_id": 20886, "ts": "2026-07-02T16:42:55Z", "hours": 1.2506, "text": "I have implemented the base collide function and ready for the entity collide :D"}, {"post_id": 19423, "ts": "2026-06-30T19:00:04Z", "hours": 2.0781, "text": "I added VoxelShape and some math related to it. Now I can reconstruct the collision the shape of the block and, hopefully, mobs. Thats mean I’m ready to let my client be able to move, I hope so"}, {"post_id": 18504, "ts": "2026-06-29T17:51:18Z", "hours": 6.9461, "text": "Now I’m implementing the “move” method for the client, which invokes physics things, which is very very difficult for me That why I’m not updating regularly ;-; (I’m sorry)"}, {"post_id": 16401, "ts": "2026-06-26T18:01:32Z", "hours": 4.4861, "text": "I’m making auth system and this takes me so much timeeeeeeeeeee Btw, I’m waiting for Mojang to approve my Azure app so I can test the auth API"}, {"post_id": 15114, "ts": "2026-06-24T15:35:22Z", "hours": 1.1408, "text": "I’m working on parsing player chat message now"}, {"post_id": 14337, "ts": "2026-06-23T13:07:17Z", "hours": 4.6081, "text": "This whole week is filled with debugging and small updates so here is the summary: Now the Client can handle Chunk datas, including blocks, biomes and block entites I also add more packet handling, events and decoder function. I’m moving to high-level client and the first function is move. Todo list: Inspect how Minecraft code handle movement and collision. Implement it :D"}, {"post_id": 9222, "ts": "2026-06-15T14:30:17Z", "hours": 3.2814, "text": "I’m on my way to reading chunk data. I have burnt all of my Github Copilot monthly credit only to realize that Copilot inserted a redundant read that collapse all reading latter :_D"}, {"post_id": 8565, "ts": "2026-06-14T07:26:57Z", "hours": 1.1917, "text": "It is finally working 🎉"}, {"post_id": 8530, "ts": "2026-06-14T06:05:46Z", "hours": 1.9508, "text": "I have handled all required packet so this should be theoretically playable. I also do some refactoring for a cleaner codebase :D"}, {"post_id": 8158, "ts": "2026-06-13T16:34:15Z", "hours": 2.3169, "text": "I forgot to make the devlogs so here is all of the updates: I’m heading towards making the main client All decoder and encoder have been merged to a single file for simpler file structure I’m making the encrypting things"}, {"post_id": 4223, "ts": "2026-06-07T13:37:37Z", "hours": 0.7256, "text": "The SNBT decoder is kinda work for now :D I’m moving to encoder (or should I >:D)"}, {"post_id": 3586, "ts": "2026-06-06T16:15:08Z", "hours": 1.8761, "text": "I’m working on SNBT decoder, which is way more trickier than NBT ;-; I’m just done the basic part and planning for nested object."}, {"post_id": 2804, "ts": "2026-06-05T16:59:44Z", "hours": 3.8261, "text": "I have made a NBT decoder and encoder. You can see it encode and decode in the terminal :D"}]...
|
Title: MineJS by @vaito | Stardance
Devlogs:
I ha Title: MineJS by @vaito | Stardance
Devlogs:
I have made a NBT decoder and encoder. You can see it encode and decode in the terminal :D
I’m working on SNBT decoder, which is way more trickier than NBT ;-; I’m just done the basic part and planning for nested object.
The SNBT decoder is kinda work for now :D I’m moving to encoder (or should I >:D)
I forgot to make the devlogs so here is all of the updates: I’m heading towards making the main client All decoder and encoder have been merged to a single file for simpler file structure I’m making the encrypting things
I have handled all required packet so this should be theoretically playable. I also do some refactoring for a cleaner codebase :D
It is finally working 🎉
I’m on my way to reading chunk data. I have burnt all of my Github Copilot monthly credit only to realize that Copilot inserted a redundant read that collapse all reading latter :_D
This whole week is filled with debugging and small updates so here is the summary: Now the Client can handle Chunk datas, including blocks, biomes and block entites I also add more packet handling, events and decoder function. I’m moving to high-level client and the first function is move. Todo list: Inspect how Minecraft code handle movement and collision. Implement it :D
I’m working on parsing player chat message now
I’m making auth system and this takes me so much timeeeeeeeeeee Btw, I’m waiting for Mojang to approve my Azure app so I can test the auth API
Now I’m implementing the “move” method for the client, which invokes physics things, which is very very difficult for me That why I’m not updating regularly ;-; (I’m sorry)
I added VoxelShape and some math related to it. Now I can reconstruct the collision the shape of the block and, hopefully, mobs. Thats mean I’m ready to let my client be able to move, I hope so
I have implemented the base collide function and ready for the entity collide :D
Finally done the collide function ;-;
I’m getting through clipping function, which is mandatory to calculate the damage from falling
Hello, sorry for forget logging regularly In the last whole week, my only job is looking at Minecraft code, ask Claude what the beep beep is that, arguing with myself do I have to do this and then continue Btw I managed to write the trimmed Minecraft physics engine and ready to test it out Unfortunately, my code isn’t reading the Registry well so maybe tomorrow :D P/s: If you still read this, have a good day and please vote for me ;-;
MY BOT CAN WALK NOW 🎉
NOW MY BOT CAN WALK ON STAIR I think it is ready to be publish ONE MORE TIME, I’m very sorry for not logging this painful process much, please please please forgive me
Oh, I spent 5h for setting up documents? That’s crazy :D Btw, I have setup an auto document page using TypeDoc. I also setup Github Action for automating publish package and build document page.
Sorry for another 8-hour devlog ;-; Now MineJS support 26.2 I’m working on a system for mapping version and packet so MineJS can support multiple version at the same time, instead of one atm (because the packet ID is hard-coded). I also make another tool for scrapping Minecraft Wiki for packet structure (disclaimer: This is not an automate running so it will not spam the Wiki, please don’t ban me ;-;). Thats it, have a great day
I do so much work that I forgot what to summarize here So before, everything is placed in TCPClient, which is fine for hard-coded packets. But now, I’m making the dynamic packet translating for multiple version supports. And while making it, it need reference from TCPClient, then TCPClient need to a reference of it and so on… So I have split the functionality into corresponding space. So now, each of class has its own responsibility: TCPClient for throwing and receiving packets through TCP connection VersionCodec for translating packets Dispatcher for handling packet SharedState for holding states So that is the whole update. Hope youre enjoy your day, also this project :D
Hello again, sorry for a almost-9-hour devlogs I’m just making the auth part for joining premium server and the thing is not going well for now ;-; I have registered the app for accessing Minecraft API but by some magic, I’m still blocked I’m also making the feature for verifying message signature
Hello again, I’m sorry for not update this project much since I’m working on the other. I just found out that the Mojang just revoke my app approval without any notification ;-; Btw, I fixed the bug that ignore the chunk packet and update the README about the current situation ;-;
The bot can chat now I have to reimplement the bitset to let this run btw
I have completed the reading slot part. I just know that a slot can hold that many data ;-; Btw, I’ll soon complete the container part, meaning that you can use chest now
I added container But it is just clientbound Add container and block interaction soon
I have implemented the Use item on packet for interacting with block, but seem like there was something wrong with it because it is expected to return an open screen packet but nothing returned. Beside that, I have implemented the tablist. Now you can see the header and footer Also, I’m preparing for supporting version 26.3. I’m wondering whether should I make a new ship. P/s: Rust rewrite when >:)
The container is finally opened, turn out there is a bug in my code which tell the server the wrong location of the chest ;-; P/s: Thank you Claude for helping me find this issue
I’m not doing much these day beside fixing bugs because I’m quite busy with uni homework and I’m quite bored now I post this devlog to submit all of my hours before Stardance end
Ships:
This is a Minecraft client package, allow you to create Minecraft bot and joining server. This ship provide some basic functionality of Minecraft bot, including: Walking around Getting blocks Also, this ship include the low-level client for talking directly to the server.
There is a lot of changes since the last ship (I have made more 15 release since it). To sum up: Multi version support :D 26.3 is partially supported because there is some issue with decoding packets Container is here (but you can’t interact with it yet, just viewing) You can chat now I have implemented online account protocol but there is an issue prevent me from testing it so it is considered as unstable for now. There is some small changed in protocol Fix some bugs in physics engine...
|
1792975738.0067835
|
1793062138.0067835
|
|
23764
|
Onlinja by @DoMax | Stardance
|
DoMax
|
2
|
55.02
|
946
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T20:31:45Z", "hours": 23.0, "multiplier": 17.29, "payout": 394, "blessing": "neutral", "text": "This is Onlinja, and it’s probably one of the best “easy to understand, hard to master” board games you will ever play. It’s built as a passion project, taking the game Linja as inspiration, but adapting it to be accessible anytime, anywhere! This is the second ship and it focuses entirely on making the most out of this app as possible, without making it feel janky. New additions are heavily impacted by community’s own responses to what should be improved, such as clearer indication of turns, tutorial progress saving, and a bit of my own additions, such as the Settings tab and Post-Game Statistics. While the game itself was kept true to its original core look and feel, the codebase underneath was heavily redefined! With new architecture decisions and SoC (separation of concerns) implementations, now it’s not only easy to expand the code, but easy to use in-person too! I really hope you will like this project and show much support for it. Let’s grow a beautiful and open source world together!", "repo": "https://github.com/domasles/onlinja", "demo": "https://onlinja.domax.lt"}, {"ship_num": 2, "ts": "2026-06-28T21:08:16Z", "hours": 29.0, "multiplier": 19.24, "payout": 552, "blessing": "neutral", "text": "After gifting Linja game to my dad on father’s day, I fell in love with it. And I thought to myself - what if there was a digital version? There was none when I started working on the project, so I decided to give it a shot myself. Just imagine - two players face off across eight parallel lanes, calculating every shift in momentum, where one misstep can cause the opponent to leap past. A game, where you need to balance your positions and plan your moves. And, of course, have fun! Inspired by the classic board game Linja, Onlinja brings minimalist, tactical warfare straight to your pocket. Onlinja features Aggressive (one piece moves twice) and Strategic (two different pieces move) gameplay modes, smart UI, bots, and a lightweight mono-repository utilizing React Native/Expo for the frontend, plus a way to both learn the game and play with your friends, not only against highly competitive bots. This game is very portable, as it was designed to be responsive to your screen size. You can try out the Live Demo instantly at https://onlinja.domax.lt Happy playing! I hope you enjoy this game and become a fan of Onlinja yourself!", "repo": "https://github.com/domasles/onlinja", "demo": "https://onlinja.domax.lt"}]...
|
[{"post_id": 81846, "ts": "202 [{"post_id": 81846, "ts": "2026-10-22T18:23:23Z", "hours": 3.0192, "text": "Quality of life improvements I’m happy to report work on Onlinja took one more step further! Before Stardance closes… After contacting Steffen Spiele directly and telling them about Onlinja, a love letter to one of their games, we settled on a mutual opinion of lack of attribution. Luckily, I managed to implement a distinct “credits” tab without casualties :) And, I am happy to present improvements for both developers and users!! 1. User-end improvements Taking a better look at your newest suggestions, I noticed 2 issues: Unclear tutorial Bland highlight colors I tried tackling both. While I couldn’t shorten the tutorial (as I’m not willing to update the rule spec), a new “Try it out” button was added to notify the player about an action block. The colors were boosted to have better distinction compared to standard lanes :) A spinning loader wheel now indicates when the app is ready to use. 2. Dev-end improvements To make Onlinja’s source also feel welcoming for developers, naming conventions, redundant code and skills were upgraded. Imports were refactored for code that’s easier to read and navigate, SoC is a priority while developing (to not make a mess). Expo 57 makes it easier for anyone to develop and test Onlinja, as newer Expo Go versions expect strict Expo 57+ compatibility. Centralized animation and other systems help when making consistent changes :) Conclusion This devlog (likely the last) demonstrates the most mature version of Onlinja singleplayer. As virtually no time is left before Stardance closes, and I won’t be able to implement multiplayer services, I want to conclude this project by saying a big Thank You to every supported and tester, and I hope I can see a big community grow when multiplayer eventually releases :P"}, {"post_id": 21718, "ts": "2026-07-03T20:12:55Z", "hours": 8.8967, "text": "You want it, I got it! How feedback from the community helped me improve Onlinja When I shipped Onlinja, I did not think about much. I had plans, and I still do, but the most important direction this project went to, I think, is the direction real users wanted the project to evolve in. I am super glad that the community’s notes are actually reported back to the developers. And, to my surprise, many opinions were highly similar. This shows 2 aspects: I am doing something well, when most of the personalized reviews say they love the same features. I missed some crucial points, when the same reviews point out similar improvements to be made, even without knowing what others pointed out. Happily, I wasn’t lazy and I read through the opinions. Not only did they make my heart warmer, but also shown that I was not moving forward with the right features. What exactly did I improve? Although the UI/UX experience was regarded as one of THE best by some, it lacked one thing - clarity when playing. Whose turn was it? No clear indication when a turn changed if you didn’t notice small text changing in the header when staring down to a monitor for minutes straight. This is now fixed. Also, a very simple addition included a “save and resume” feature within the tutorial. Now, even if you refresh the tab or browser crashes, you can’t lose tutorial progress! What won’t likely be implemented and why that makes me sad All of the things I said seem great - feedback-based improvements, better clarity and quality-of-life updates that make a project be worth the time spent creating it. But the 2 features I wish I could’ve added were: BotLabs (custom bot maker) Post-game analysis (like in Chess.com ) First feature was impossible to make the way I wanted due to how the game’s layout is constructed. I sacrificed this feature for a better overall coding experience. It’s not as vital for the project to live, but sad that I could not implement it. The second feature was entirely possible, but very difficult to plan out. What should be the data flow? What controls what? That led to me making a compromise - post-game statistics, that tell you these things: How many moves each player took? How many extra turns each player got? How many pieces ran all the way to the opponent’s base? And I think it’s a fair update :) In conclusion I am very pleased with the reviews and Stardance in general. I get to create what I love and share it with people who might love it as well. I am happy that the feedback made me grow stronger and I am thankful for every single person that helped me improve this project anyhow, opening my eyes on what were the real issues. This project is one of my most ambitious yet, and if you want to check it out, the latest version is out at Onlinja’s official site ! If you can, also follow me and star the project on GitHub !"}, {"post_id": 20305, "ts": "2026-07-01T21:21:25Z", "hours": 8.6608, "text": "Control and power - that’s all that I’m after! This devlog brings new ways to control your experience with Onlinja not only as a user, but also a developer. Great news all along! With the latest update in Onlinja, new systems have launched: Settings System: A system where you can tweak your settings and default preferences for when you launch the app (also, replay the tutorial, as the old dedicated tab is now gone). Tab System: More important for developers, but now the development of Onlinja can speed up significantly because of a convenient tab making system. Major Architecture Overhaul: By working on the imports and general structure, the codebase can feel free of 400-lined files that choked the app. New Animations: Although it’s a side effect of that new Tab System, it makes the tab animations feel consistent, and the UX undoubtedly better. Mobile app issues fixed: Even when a dedicated app is not Onlinja’s primary choice for delivery, I will not abandon it as that’s why I picked React Native instead of normal React (this, and animation issues with normal React). So, now the mobile port functions almost exactly as intended, but if you want to have the designed experience, and are a fan of dedicated apps, you can always click “Add to home screen” in your browser! That sounds great! What about BotLabs? BotLabs are currently in the works. I am still thinking about how to make the architecture right and the UX smooth, but they’re soon to be implemented, letting users customize bots and make Bot vs Bot matches or have personalized bots to play against. A playable demo is live with latest changes! Check out Onlinja’s official site !"}, {"post_id": 18292, "ts": "2026-06-29T12:06:12Z", "hours": 5.2406, "text": "PWA and updated experience That’s right, now you can enjoy Onlinja as a pseudo-standalone app! By finally implementing PWA (Progressive Web Application) support to Onlinja, you can simply install it from any mobile browser. Updated experience? What’s it about? This update features several enhancements: The tutorial was revamped to be easier to follow for anyone. This means no more confusing terms and big text chunks where unnecessary. The app is now excluded from any dark mode settings (possible that some rare instances might change the color scheme, but popular plugins and systems should not alter any styling). Slight performance and UX tweaks to make the game feel smoother. Any more updates planned? Yes! I want to implement an analysis tool to every match or “Bot Labs” where everyone can tweak bot parameters and experiment with the algorithms freely. A second ship should be issued when these are implemented. Online crossplay isn’t in any of my near-future plans. A huge thank you for everyone that supports, tests and anyhow helps me build this project!"}, {"post_id": 17273, "ts": "2026-06-28T00:12:42Z", "hours": 9.8469, "text": "How to play this game?? Great news! No more wondering of how this game works! Today I implemented a fully working tutorial system to Onlinja, and it tells everyone about any aspect of the game you could think of. Onboarding will be really easy now! What do I see there? A ship? Correct! Only a good README, logos and deployment left until a ship can be made. The rest of time will be dedicated just for that. What about standalone, non-web builds? This is React Native! Well, I have some good news and some bad news. Good news is that when I tested it, the standalone app build succeeded. Bad news is that it’s full of visual bugs and inconsistencies with the web build. So web builds will be the primary target of this app before I dedicate a separate week just for transformation to a unified solution. But I see no priority for this as web builds work wonderfully!"}, {"post_id": 15995, "ts": "2026-06-25T23:41:51Z", "hours": 7.2086, "text": "A very friendly update! Want to play Onlinja with your friends? No problem, not anymore! Today I finalized implementing the Pass & Play mode, together with some UI and bot logic enhancements. Gameplay is smoother than ever, offering a very pleasing experience! UI upgrades? Finally! After many thoughts of making the game not feel like a slideshow with very static-feeling updates, this devlog’s changes also include a whole new animation overhaul! With fade transitions and more movement the app finally feels responsive. Anything more? Yes! An architectural refactor and a bot logic upgrade was issued. This makes the game both easier to develop and the bot less prone to errors. Previously, if the second move of a turn was illegal, the bot (and the whole game) had no way of knowing and would just freeze. Today it’s been fixed! So, when’s the ship? Soon. Only thing left is a tutorial before playing to easily onboard everyone. As expected, I can’t dedicate myself fully towards this project and the first ship won’t include any networking code. But it might include an analysis tool inspired by chess.com , so stay tuned!"}, {"post_id": 15302, "ts": "2026-06-24T21:03:43Z", "hours": 3.1514, "text": "A bot-tacular evening! What’s new in today’s devlog Finally I have implemented a working bot within Onlinja - it’s configurable, and damn it plays well! The reason it can be so competitive is because it uses a deep-search minimax algorithm, always assuming you make the best move and making the best move itself (with some randomness sparkled on top). Also, it reacts to awards, where more benefit created for itself through several moves, even if 2 distinct move sequences create same amount of value in points, is valued higher for the bot. This helps create insane accuracy, exploitation of game features and more! Note: there’s an easter egg hidden somewhere in plain sight, try to find it! Next steps Aside from the bot, I made the game capable of receiving different controller settings. A controller is the setting of who controls your opponent, current available settings being HUMAN, BOT and SERVER (for future implementation). As the next step I’m planning to make a local one-phone mode to share like a physical board across 2 people. Also, a pre-game tutorial awaits. I’d very much love to implement more whacky gamemodes, that would include powerups, more configuration, different piece setups and more. But I am not sure how much time that would cost me. Conclusion With the first ship of Onlinja coming closer everyday, I am trying to make the user experience as polished as can be. I really hope everyone playing will enjoy this game as much as I do!"}, {"post_id": 14373, "ts": "2026-06-23T14:11:23Z", "hours": 5.3936, "text": "User interface has been implemented! The good After long hours of development, countless design choices gone through and many thoughts of how to structure the project, its base has been laid and it finally features a working UI with an easy to understand UX. The bad It wasn’t easy to set correct boundaries and enginner instructions for AI in a way that it doesn’t have too much freedom hallucinating. After many iterations of edits within AGENTS.md file I hope it won’t eat as much time ever again (but I don’t know). Even though everything seems fine so far, nothing is promised this early in development, and the instruction document may change. What does the current code offer? In the current version of Onlinja players can’t do much - only play with themselves. This was done just to show off how the game will look. Next devlog will most likely include the full bot implementation. What are my further plans? The first ship most likely won’t have any networking code (unless I can learn websockets within the next 5 days), but will offer a human-like bot. Subsequent ships will offer enhanced online capabilities, accounts, leveling, and friend systems, as well as an anonymous mode. I want to make the game similar in mechanics to chess.com - a fully fledged Linja-inspired game, with an online hub!"}, {"post_id": 13415, "ts": "2026-06-21T23:28:57Z", "hours": 3.195, "text": "Today I started working on my project Onlinja! Storytime When I was searching gift ideas for father’s day I suddenly thought of board games. He loves them! And was learning chess at that time too. Having no exact ideas in mind, I went searching. Many games were too complex for me to teach, and I wanted that game to be 3D-printable. I stumbled upon Linja - an abstract and simple strategy game for 2 players. It’s no too popular, but I fell in love with it, made 3D files myself and printed it out! After gifting it, I feel like it’s very much underrated, so I got an idea! The idea The idea is simple - making a local bot and online application that lets anyone enjoy a Linja-inspired game from their phones and browsers! The plan The plan is to take React Native and target web, Android and iOS builds of the app, code a server architecture and a bot algorithm. Why’s it a great project? Not only will I be able to develop my skills in agent harness engineering, testing, web deelopment and websockets (things I haven’t touched yet), but the completed project will be fully functional and entertaining! I have nothing to show off yet, as only the initialization stage is being completed, but I will update you all as soon as I finish doing something!"}]...
|
Title: Onlinja by @DoMax | Stardance
Devlogs:
Tod Title: Onlinja by @DoMax | Stardance
Devlogs:
Today I started working on my project Onlinja! Storytime When I was searching gift ideas for father’s day I suddenly thought of board games. He loves them! And was learning chess at that time too. Having no exact ideas in mind, I went searching. Many games were too complex for me to teach, and I wanted that game to be 3D-printable. I stumbled upon Linja - an abstract and simple strategy game for 2 players. It’s no too popular, but I fell in love with it, made 3D files myself and printed it out! After gifting it, I feel like it’s very much underrated, so I got an idea! The idea The idea is simple - making a local bot and online application that lets anyone enjoy a Linja-inspired game from their phones and browsers! The plan The plan is to take React Native and target web, Android and iOS builds of the app, code a server architecture and a bot algorithm. Why’s it a great project? Not only will I be able to develop my skills in agent harness engineering, testing, web deelopment and websockets (things I haven’t touched yet), but the completed project will be fully functional and entertaining! I have nothing to show off yet, as only the initialization stage is being completed, but I will update you all as soon as I finish doing something!
User interface has been implemented! The good After long hours of development, countless design choices gone through and many thoughts of how to structure the project, its base has been laid and it finally features a working UI with an easy to understand UX. The bad It wasn’t easy to set correct boundaries and enginner instructions for AI in a way that it doesn’t have too much freedom hallucinating. After many iterations of edits within AGENTS.md file I hope it won’t eat as much time ever again (but I don’t know). Even though everything seems fine so far, nothing is promised this early in development, and the instruction document may change. What does the current code offer? In the current version of Onlinja players can’t do much - only play with themselves. This was done just to show off how the game will look. Next devlog will most likely include the full bot implementation. What are my further plans? The first ship most likely won’t have any networking code (unless I can learn websockets within the next 5 days), but will offer a human-like bot. Subsequent ships will offer enhanced online capabilities, accounts, leveling, and friend systems, as well as an anonymous mode. I want to make the game similar in mechanics to chess.com - a fully fledged Linja-inspired game, with an online hub!
A bot-tacular evening! What’s new in today’s devlog Finally I have implemented a working bot within Onlinja - it’s configurable, and damn it plays well! The reason it can be so competitive is because it uses a deep-search minimax algorithm, always assuming you make the best move and making the best move itself (with some randomness sparkled on top). Also, it reacts to awards, where more benefit created for itself through several moves, even if 2 distinct move sequences create same amount of value in points, is valued higher for the bot. This helps create insane accuracy, exploitation of game features and more! Note: there’s an easter egg hidden somewhere in plain sight, try to find it! Next steps Aside from the bot, I made the game capable of receiving different controller settings. A controller is the setting of who controls your opponent, current available settings being HUMAN, BOT and SERVER (for future implementation). As the next step I’m planning to make a local one-phone mode to share like a physical board across 2 people. Also, a pre-game tutorial awaits. I’d very much love to implement more whacky gamemodes, that would include powerups, more configuration, different piece setups and more. But I am not sure how much time that would cost me. Conclusion With the first ship of Onlinja coming closer everyday, I am trying to make the user experience as polished as can be. I really hope everyone playing will enjoy this game as much as I do!
A very friendly update! Want to play Onlinja with your friends? No problem, not anymore! Today I finalized implementing the Pass & Play mode, together with some UI and bot logic enhancements. Gameplay is smoother than ever, offering a very pleasing experience! UI upgrades? Finally! After many thoughts of making the game not feel like a slideshow with very static-feeling updates, this devlog’s changes also include a whole new animation overhaul! With fade transitions and more movement the app finally feels responsive. Anything more? Yes! An architectural refactor and a bot logic upgrade was issued. This makes the game both easier to develop and the bot less prone to errors. Previously, if the second move of a turn was illegal, the bot (and the whole game) had no way of knowing and would just freeze. Today it’s been fixed! So, when’s the ship? Soon. Only thing left is a tutorial before playing to easily onboard everyone. As expected, I can’t dedicate myself fully towards this project and the first ship won’t include any networking code. But it might include an analysis tool inspired by chess.com , so stay tuned!
How to play this game?? Great news! No more wondering of how this game works! Today I implemented a fully working tutorial system to Onlinja, and it tells everyone about any aspect of the game you could think of. Onboarding will be really easy now! What do I see there? A ship? Correct! Only a good README, logos and deployment left until a ship can be made. The rest of time will be dedicated just for that. What about standalone, non-web builds? This is React Native! Well, I have some good news and some bad news. Good news is that when I tested it, the standalone app build succeeded. Bad news is that it’s full of visual bugs and inconsistencies with the web build. So web builds will be the primary target of this app before I dedicate a separate week just for transformation to a unified solution. But I see no priority for this as web builds work wonderfully!
PWA and updated experience That’s right, now you can enjoy Onlinja as a pseudo-standalone app! By finally implementing PWA (Progressive Web Application) support to Onlinja, you can simply install it from any mobile browser. Updated experience? What’s it about? This update features several enhancements: The tutorial was revamped to be easier to follow for anyone. This means no more confusing terms and big text chunks where unnecessary. The app is now excluded from any dark mode settings (possible that some rare instances might change the color scheme, but popular plugins and systems should not alter any styling). Slight performance and UX tweaks to make the game feel smoother. Any more updates planned? Yes! I want to implement an analysis tool to every match or “Bot Labs” where everyone can tweak bot parameters and experiment with the algorithms freely. A second ship should be issued when these are implemented. Online crossplay isn’t in any of my near-future plans. A huge thank you for everyone that supports, tests and anyhow helps me build this project!
Control and power - that’s all that I’m after! This devlog brings new ways to control your experience with Onlinja not only as a user, but also a developer. Great news all along! With the latest update in Onlinja, new systems have launched: Settings System: A system where you can tweak your settings and default preferences for when you launch the app (also, replay the tutorial, as the old dedicated tab is now gone). Tab System: More important for developers, but now the development of Onlinja can speed up significantly because of a convenient tab making system. Major Architecture Overhaul: By working on the imports and general structure, the codebase can feel free of 400-lined files that choked the app. New Animations: Although it’s a side effect of that new Tab System, it makes the tab animations feel consistent, and the UX undoubtedly better. Mobile app issues fixed: Even when a dedicated app is not Onlinja’s primary choice for delivery, I will not abandon it as that’s why I picked React Native instead of normal React (this, and animation issues with normal React). So, now the mobile port functions almost exactly as intended, but if you want to have the designed experience, and are a fan of dedicated apps, you can always click “Add to home screen” in your browser! That sounds great! What about BotLabs? BotLabs are currently in the works. I am still thinking about how to make the architecture right and the UX smooth, but they’re soon to be implemented, letting users customize bots and make Bot vs Bot matches or have personalized bots to play against. A playable demo is live with latest changes! Check out Onlinja’s official site !
You want it, I got it! How feedback from the community helped me improve Onlinja When I shipped Onlinja, I did not think about much. I had plans, and I still do, but the most important direction this project went to, I think, is the direction real users wanted the project to evolve in. I am super glad that the community’s notes are actually reported back to the developers. And, to my surprise, many opinions were highly similar. This shows 2 aspects: I am doing something well, when most of the personalized reviews say they love the same features. I missed some crucial points, when the same reviews point out similar improvements to be made, even without knowing what others pointed out. Happily, I wasn’t lazy and I read through the opinions. Not only did they make my heart warmer, but also shown that I was not moving forward with the right features. What exactly did I improve? Although the UI/UX experience was regarded as one of THE best by some, it lacked one thing - clarity when playing. Whose turn was it? No clear indication when a turn changed if you didn’t notice small text changing in the header when staring down to a monitor for minutes straight. This is now fixed. Also, a very simple addition included a “save and resume” feature within the tutorial. Now, even if you refresh the tab or browser crashes, you can’t lose tutorial progress! What won’t likely be implemented and why that makes me sad All of the things I said seem great - feedback-based improvements, better clarity and quality-of-life updates that make a project be worth the time spent creating it. But the 2 features I wish I could’ve added were: BotLabs (custom bot maker) Post-game analysis (like in Chess.com ) First feature was impossible to make the way I wanted due to how the game’s layout is constructed. I sacrificed this feature for a better overall coding experience. It’s not as vital for the project to live, but sad that I could not implement it. The second feature was entirely possible, but very difficult to plan out. What should be the data flow? What controls what? That led to me making a compromise - post-game statistics, that tell you these things: How many moves each player took? How many extra turns each player got? How many pieces ran all the way to the opponent’s base? And I think it’s a fair update :) In conclusion I am very pleased with the reviews and Stardance in general. I get to create what I love and share it with people who might love it as well. I am happy that the feedback made me grow stronger and I am thankful for every single person that helped me improve this project anyhow, opening my eyes on what were the real issues. This project is one of my most ambitious yet, and if you want to check it out, the latest version is out at Onlinja’s official site ! If you can, also follow me and star the project on GitHub !
Quality of life improvements I’m happy to report work on Onlinja took one more step further! Before Stardance closes… After contacting Steffen Spiele directly and telling them about Onlinja, a love letter to one of their games, we settled on a mutual opinion of lack of attribution. Luckily, I managed to implement a distinct “credits” tab without casualties :) And, I am happy to present improvements for both developers and users!! 1. User-end improvements Taking a better look at your newest suggestions, I noticed 2 issues: Unclear tutorial Bland highlight colors I tried tackling both. While I couldn’t shorten the tutorial (as I’m not willing to update the rule spec), a new “Try it out” button was added to notify the player about an action block. The colors were boosted to have better distinction compared to standard lanes :) A spinning loader wheel now indicates when the app is ready to use. 2. Dev-end improvements To make Onlinja’s source also feel welcoming for developers, naming conventions, redundant code and skills were upgraded. Imports were refactored for code that’s easier to read and navigate, SoC is a priority while developing (to not make a mess). Expo 57 makes it easier for anyone to develop and test Onlinja, as newer Expo Go versions expect strict Expo 57+ compatibility. Centralized animation and other systems help when making consistent changes :) Conclusion This devlog (likely the last) demonstrates the most mature version of Onlinja singleplayer. As virtually no time is left before Stardance closes, and I won’t be able to implement multiplayer services, I want to conclude this project by saying a big Thank You to every supported and tester, and I hope I can see a big community grow when multiplayer eventually releases :P
Ships:
After gifting Linja game to my dad on father’s day, I fell in love with it. And I thought to myself - what if there was a digital version? There was none when I started working on the project, so I decided to give it a shot myself. Just imagine - two players face off across eight parallel lanes, calculating every shift in momentum, where one misstep can cause the opponent to leap past. A game, where you need to balance your positions and plan your moves. And, of course, have fun! Inspired by the classic board game Linja, Onlinja brings minimalist, tactical warfare straight to your pocket. Onlinja features Aggressive (one piece moves twice) and Strategic (two different pieces move) gameplay modes, smart UI, bots, and a lightweight mono-repository utilizing React Native/Expo for the frontend, plus a way to both learn the game and play with your friends, not only against highly competitive bots. This game is very portable, as it was designed to be responsive to your screen size. You can try out the Live Demo instantly at https://onlinja.domax.lt Happy playing! I hope you enjoy this game and become a fan of Onlinja yourself!
This is Onlinja, and it’s probably one of the best “easy to understand, hard to master” board games you will ever play. It’s built as a passion project, taking the game Linja as inspiration, but adapting it to be accessible anytime, anywhere! This is the second ship and it focuses entirely on making the most out of this app as possible, without making it feel janky. New additions are heavily impacted by community’s own responses to what should be improved, such as clearer indication of turns, tutorial progress saving, and a bit of my own additions, such as the Settings tab and Post-Game Statistics. While the game itself was kept true to its original core look and feel, the codebase underneath was heavily redefined! With new architecture decisions and SoC (separation of concerns) implementations, now it’s not only easy to expand the code, but easy to use in-person too! I really hope you will like this project and show much support for it. Let’s grow a beautiful and open source world together!...
|
1792997410.4637108
|
1793083810.4637108
|
|
55067
|
Word Chains by @Chicken502 | Stardance
|
Chicken502
|
3
|
49.0
|
945
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-24T20:47:52Z", "hours": 19.0, "multiplier": 19.82, "payout": 444, "blessing": "neutral", "text": "WordChains V0.5b is here! I’ve added a lot of new features since the last ship! Its been a fun couple of months since I started this project, and I’ve learned a lot. New Features : Timed mode, 200 more puzzles, Dictionary look up feature, level reset, and lots of bug fixes. One feature that was highly requested from the last ship was the level reset feature, so players didn’t have to spam the undo button, which is what I figured they would do, so I didn’t bother adding it. But so many people mentioned it would be nice, I went ahead and added it. How to play Word Chains is very simple: drag a letter onto the current word to change it into a new word. Your trying to get to the target word. (if this sounds a bit complicated don’t worry there is a tutorial) Lastly… Thanks for play, and I hope you have fun! If you want to follow the project after stardance ends, go follow on itch.io !", "repo": "https://github.com/Chiken502/WordChains", "demo": "https://chicken502.itch.io/word-chains"}, {"ship_num": 2, "ts": "2026-09-24T21:13:23Z", "hours": 22.0, "multiplier": 18.45, "payout": 403, "blessing": "neutral", "text": "Word Chains V0.4b is out! Since the last ship I’ve been working very hard to add a whole slew of features. There is now 200 new levels, daily puzzles and a tutorial (very requested last ship!). I had a lot of fun making this, and I hope you have a lot of fun playing it! The main part of this ship was rewriting the level loading code, and generating files for levels. I didn’t want to write 200 puzzles by hand. I found did some research and wrote a small script to generate the puzzles for me. I do eventually want to add more to Word Chains after this ship but it probably won’t be for a little while as I have other projects I want to work on. But the end goal is to get Word Chains onto a app store. Last Note: When reviewing please do not feel like you need to complete all the levels, and have fun!", "repo": "https://github.com/Chiken502/WordChains", "demo": "https://chicken502.itch.io/word-chains"}, {"ship_num": 3, "ts": "2026-09-06T14:26:12Z", "hours": 8.0, "multiplier": 12.68, "payout": 98, "blessing": "neutral", "text": "I just finished making a small word puzzle game called Word Chains. To play, you drag letters to change your current word one letter at a time! There are 15 different levels with a wide range of difficulty. This game was originally intended to be played on a phone, but getting it on to the app stores is a little out of my league right now, although you can still play the itch version on your phone, but maybe next year Ill get it onto a app store! I had a lot of fun making this project and I might add some more things later like daily puzzles or more color options. I started this project before I found hack club so sadly not all my hours are accounted for. This was really fun to work on this project and show it of to my friends. I learned more about marketing my games with devlogs, and learned that after 5 years of making games with Godot, I’ve been exporting them to the web wrong this whole time! Thanks so much for taking the time to check this project out! Can’t wait to see what everyone thinks!", "repo": "https://github.com/Chiken502/WordChains", "demo": "https://chicken502.itch.io/word-chains"}]...
|
[{"post_id": 82339, "ts": "202 [{"post_id": 82339, "ts": "2026-10-24T16:29:37Z", "hours": 0.6861, "text": "Readme Updates and another +200 Puzzles This is the final devlog for WordChains v0.5b! Only a couple things were changed, one of which being adding another 200 Puzzles! This brings us up to 400 Puzzles in total (not including daily puzzles). Other than that I just made some small README updates and officially changed the version number to v0.5b! Thanks to everyone following the project so far! If you want to continue to follow this project after stardance ends, you can go follow it on itch.io ! Thanks for everyone’s feedback and support! WordChains will be shipped latter today!"}, {"post_id": 81908, "ts": "2026-10-22T23:04:41Z", "hours": 1.9497, "text": "New Hint Mechanic and BUGS! As I’m nearing the end of this project (or at least this version) I’ve been doing a lot of bug fixing . This time around I squashed a major bug that has been annoying me for some time now. For some reason, Godot doesn’t have native keyboard support for IOS devices, unless you go into the advanced export settings and turn them on. And since there are text boxes for writing your nickname, this is kinda needed. Hint rewarding changed This is a feature that I’ve been intending to add for a couple weeks now. In the past every time you complete a level, you gain an new hint. Now you get hints after completing a set number of puzzles. Each difficulty has a different value for this as well. So it takes less completed puzzles on difficult puzzles than on easy puzzles to earn hints. With this I also added a small animation to show that you got a new hint! Secret Solutions This was not an intended feature that I meant to add. But its hear to stay! Recently I changed how puzzles are generated , by using a cleaned up dictionary, that only has more frequently used words. But I still let the user make connections with less frequent words, so sometimes its possible to find shorter solutions then intended . This used to leave the leftover letters behind to use on the next puzzle which messed everything up. I have now fixed this issue , and added a little message telling you that you have “Found a Secret Solution!” What’s next? Things are wrapping up , both with Stardance and WordChains. I only have two items left on my todo list , the first being to add more puzzles, which will only take a couple of minutes, and the second is a bug which I’m not sure I can even start to debug since I think it only happens on my phone, where I can’t see the console. Once I add these things, WordChains is ready to ship! I’m expecting to ship on Tuesday or Wednesday, but It might even happen over the weekend. Once Stardance is over, WordChains will still continue development. If you want to follow the devlopment, go follow it over on itch.io"}, {"post_id": 80845, "ts": "2026-10-19T00:18:28Z", "hours": 3.6275, "text": "Stats and game reset. Finally got around to making the stats page. You can now see stats like how many puzzles you have completed, how many hints you’ve used and even how many times you have dragged a letter. This wasn’t to hard to add although it did take a little while. Reset game Now you can wipe your save file to replay levels. The also wasn’t anything to difficult to do but it ended up take about an hour to figure out how to style the confirmation pop up. This did show me a couple things that needed fixing regarding the tutorial, and even some stat tracking that I coded in wrong. What’s next! We have some small bug fixes that need to be made, and some other small features like adding more settings, compressing the puzzle files so they don’t get to big later on, and some small sound design changes. From there all that needs to be done is some formatting and spelling checks (cause I am terrible at spelling) and updating the README, then we are ready to SHIP!!!"}, {"post_id": 80156, "ts": "2026-10-16T13:17:16Z", "hours": 1.2933, "text": "Puzzle Generation Overhaul Not a lot to say about this other than there are 200 new puzzles (just changed them out though)! I created a new python script that uses python libraries wordfreq and better_profanity , to clean up the generation dictionary. What this does is takes out words that are to infrequently used or are marked as profanity. One thing to note is that this is not the dictionary in game that this cleans. It just cleans the dictionary that I use to generate puzzles . So in game it is still possible to spell obscure words, which opens the opportunity to find alternant solutions. Another thing that I added to my puzzle selector script was the ability to append new puzzles to a file allowing me to later add more puzzles very easily. What’s next? I plan on doing some more puzzle generation tweaks , as well as adding in a stats page! That’s most of what’s on the timeline, so were getting near the end!"}, {"post_id": 78868, "ts": "2026-10-11T20:18:16Z", "hours": 3.7161, "text": "New UI! The main menu has been changed, and some new features are coming soon! Dictionary Polishing I added in some much needed polishing to the dictionary panel that added in yesterday. I added a loading panel as it used to just show the previous term you looked up, then jumped to the new one when it loaded. Currently its just a progress bar with a small animation to it, but it works for now. I’m also thinking about reusing it in other areas too. New Credit Screen! I’ve been wanting to change the credits screen for a while now, as its just been a static wall of text. For right now it mostly still is a static wall of text. But with more stuff! I have some tweens when you hover over the text which was missing in the old version. I’m not entirely happy with this one, but its still much better. New Main Menu Buttons! What are those about? Added two new buttons. One for level select, and one for a stats page (not added yet! but soon). Now when you press the big play button you go to the last level you were playing, instead of level select. What’s next for Word Chains I have some plans for what’s next for Word Chains, like a stats page! I’m also planning some new puzzles."}, {"post_id": 78421, "ts": "2026-10-10T19:19:56Z", "hours": 4.1831, "text": "#New Dictionary Feature & Bug Fixes! We are back! School finally caught up to me so things slowed down over the last week, but I think I’m back! So lets get started! New Dictionary Feature One thing I’ve wanted to add for a while was a way to look up the definition for the current word . So now using a this free API I added this feature. It still has some small polishing things that need to be done but overall it pretty much done. Bug Fixes I also took some time todo some bug fixing. Most of them originated from added the Timed Mode like leaderboards displaying scores incorrectly and medium difficulty level progress being saved in timed mode. Another bug that I fixed was UI scaling . When you play WordChains on a phone, the buttons and everything can be really small. It only took some changes to the project settings but it was very needed as the end goal is for WordChains to be on the app store! ##Puzzle Generation One small thing that I also worked on was making levels more normal. The way levels are generated is by picking random words from the dictionary that I’m using, and seeing if they connect. This gets us to have some really weird words. I wrote a little program in python to clean up the words but checking if the word use frequency was above a certain level. This hasn’t been implemented yet but it hopefully will be in the coming week. Thanks for reading! I’ve been trying to put more effort into these devlogs , plus I haven’t posted in over a week so wanted to let everyone know what’s going on with WordChains! If you want to play it you can do so here although this version doesn’t have all the new features yet . You can follow the project to be notifed when it does though!"}, {"post_id": 75232, "ts": "2026-09-29T15:20:11Z", "hours": 1.5033, "text": "Timed Mode What’s new Added new timed mode , where you have 90 seconds to complete as many medium difficulty levels as you can. Then your score gets submitted to a leaderboard . This was not very difficult to add but I didn’t have a lot of time, so it’s very unpolished right now. I need some balancing and some tweens to add to it. There is also a lot of bugs that I think I introduce that I get to go hunt for later today. YIPPEE! Whats coming up soon Puzzle generation rehaul. The way I created all 200 levels for WordChains is through a algorithm that hunts through every possible puzzle combination that could be made from the dictionary that I’m using. This worked for the last shift but It wont work in the long run as some puzzles just have completely random words that don’t seem like they are really words. In other words I think I need to update the dictionary that the algorithm takes from."}, {"post_id": 74604, "ts": "2026-09-27T19:09:55Z", "hours": 1.6953, "text": "Level Reset Button Just shipped! I just got the reviews in for the last ship, and things were very positive! There were a couple little bugs that people found as well as a lot of people wanting one feature: a level reset button! So I added one! What’s coming up in the future Based on recent feedback, I want to continue working on this game with the end goal of publishing WordChains into the Apple App Store . So here are some of the features that are coming soonish: Timed Mode : See how many levels you can complete in a set amount of time. Daily Streak and Personal Records : Keep track of everything. EVEN MORE PUZZLES : But also working on condensing the puzzle files, and imporving the quality of the puzzles, as currently some of the words are really random, which make the puzzle a bit tricky Better Credits Screen(?) : I want to improve the current credits screen, to add more personality so its not just a wall of text. This isn’t a necessary feature but something that I would like to add."}, {"post_id": 72901, "ts": "2026-09-24T00:02:32Z", "hours": 1.2467, "text": "Last touches! Planning on shipping tomorrow, so finished up some small things. I added a label to the top of the game screen to tell you what level you are currently on. The other big thing I did was update the README with all the updates in the new version. All I have to do tomorrow is hit ship!"}, {"post_id": 72457, "ts": "2026-09-23T00:46:57Z", "hours": 2.2489, "text": "Documentation Took some time to update/add documentation to most of the scripts. I haven’t done this for a very long time, and since the project will likely be shipped very soon, they should be intelligible. Also took some time to update some images in the README to reflect recent updates."}, {"post_id": 71531, "ts": "2026-09-21T00:48:06Z", "hours": 6.2325, "text": "200 NEW LEVELS! Yes you are reading that right folks! 200 new levels (and the ability to easily add tons more) have been added to Word Chains! A while ago for the daily puzzle creation I created some algorithms to create a list of puzzles from all the words in the dictionary that I’m using, and then randomly select some. I ended up generating 4,125,015 puzzles with word lengths of 4-8 letters . I then generated difficulties and selected 50 per each difficulty. I then created this new UI for the level select screen . I then wasted an hour trying to find a very small bug that was caused by my over complicated code! Where in the home stretch now and word chains is almost ready to be shipped!"}, {"post_id": 69418, "ts": "2026-09-17T00:42:52Z", "hours": 1.68, "text": "New Settings and Color! Added Teal as a color! I want to add more colors, but I’ve used most of the rainbow now so don’t know how many more will be coming. I also added the ability to change your leaderboard display name , and the ability to replay the tutorial . These can both be found in the settings page. Getting the leaderboard display name to change was actually more challenging than I thought it would be due to a bug in the Godot CheddaBoard SDK that I was using, but the updated Github had a version that worked! One thing to note about changing the display name: The change will not appear on the leaderboard until the next time you submit a score, or in other words till the next day."}, {"post_id": 68375, "ts": "2026-09-15T00:59:59Z", "hours": 2.6225, "text": "Leaderboard and Daily Puzzles Complete! Got the leaderboard to work and finished up some polishing touches to this leaderboard screen. The big challenge today was getting the chosen nickname to save and be used , then not prompt for it again (although I’m planning on being able to change it in settings later). I also changed my API that I was using to get the time, so I could get the correct daily puzzle, to UTC to align with CheddaBoards daily reset for my leaderboard. Another big thing was you can now only play the daily puzzle once ! This took a bit longer than I would have liked, but oh well!"}, {"post_id": 67742, "ts": "2026-09-13T23:45:07Z", "hours": 5.4233, "text": "Daily Puzzle and Leaderboard(kinda) Today was all about the daily puzzles. I generated a list of about 360 puzzles, then used an API to fetch the day of the year, and got the puzzle at that index. All in all that part was super easy! But the leaderboards, not so much. They are still being worked on in fact! I’m trying to use a service called CheddaBoards but I keep running into random issues that shouldn’t be issues. I think I’m just going to switch my leaderboard service, and rewrite all the code. But I need a break today, as 5 hours is a lot of coding for me."}, {"post_id": 66015, "ts": "2026-09-11T15:31:23Z", "hours": 1.6583, "text": "Tutorial and New Color One piece of feedback that I got from playtesting was to add a tutorial . So I made it so when you first play the game, the tutorial mode is activated. This shows a hand that will show you how to drag the letters. If you need the animation to replay you can use the hint button at no cost. Another quick thing I added was a new color, Green ! It might be tweeked in the future but for now I’m happy with it."}, {"post_id": 65611, "ts": "2026-09-10T21:06:12Z", "hours": 0.7383, "text": "Updated Repo Organization and README Last week I shipped Word Chains, and the reviews are back! People seem to like it and even 4 minuets before logged on to post this devlog, Word Chains was given a Super Star! Wow! Thanks everyone! Feedback from the ship was amazing, although there were some comments about a couple things, like the repo being messy. This is what I worked on today was cleaning up the repo and adding some more stuff to the README like update notes, and the project’s file structure. In the near future I plan on adding a couple things like… daily puzzles with leaderboards, a actual tutorial, new colors and more!"}, {"post_id": 62935, "ts": "2026-09-06T14:09:04Z", "hours": 0.5508, "text": "v0.3b Finished! I just uploaded the v0.3b builds to by itch page so you can play with all the new updates here ! This update added the new level select screen and the 5 new levels. I added a couple little tweeks this morning before finally uploading everything to itch.io. And for the first time I created a Windows and Linux builds, which went much smoother than I thought."}, {"post_id": 62534, "ts": "2026-09-05T23:22:18Z", "hours": 3.0839, "text": "Level Select Screen Finally took the time to create a working level select screen! This was one of the last big features that I have to add to this game before I ship it. In order to make this, I had to redo the way I saved the game, and needed to change some stuff on my color changing code. If you haven’t noticed from my devlogs, One of the options in the settings, is to change the games color. That was made before I came across HackClub so sadly I don’t get credit for the multiple hours that it took to make that feature."}, {"post_id": 58165, "ts": "2026-08-30T15:01:32Z", "hours": 1.7544, "text": "Bug fixes and new levels! Added 5 new levels into the game, but a little concerned with the difficulty scaling so far. I’ve also added some squash and stretch to the letters when you drag them, which was a bit tricky to figure out how to do with my code base so far. If you want to check it you you can do so here ."}, {"post_id": 57616, "ts": "2026-08-29T20:31:48Z", "hours": 1.6956, "text": "Bug Fixing plus new splash screen audio! One big issue I had was that the icons in the web build weren’t rendering correctly. If you look in the screenshot, the icons I’m talking about are the check box, the slider grabbers, etc.. The big problem I had was I was trying to read a file that was not able to be read at runtime on the web build due to them being compressed into a .pck file by Godot. The way I got around this is by adding .txt to the end of the file. I also found some sound effects for the splash screen that I’m using, so I added that today as well. If you want to play this game the beta version is on itch.io at https://chicken502.itch.io/word-chains"}, {"post_id": 56293, "ts": "2026-08-28T00:35:53Z", "hours": 0.7311, "text": "First update to my game! I just found out about HackClub, and ive been working on this project for a couple of weeks. This is my first update here! I just added fullscreen support for my game WordChains! I made everything auto scale to the window size, and when the window is resized, letters that are now off the screen get respawned instead of just snaping to the edge."}]...
|
Title: Word Chains by @Chicken502 | Stardance
Dev Title: Word Chains by @Chicken502 | Stardance
Devlogs:
First update to my game! I just found out about HackClub, and ive been working on this project for a couple of weeks. This is my first update here! I just added fullscreen support for my game WordChains! I made everything auto scale to the window size, and when the window is resized, letters that are now off the screen get respawned instead of just snaping to the edge.
Bug Fixing plus new splash screen audio! One big issue I had was that the icons in the web build weren’t rendering correctly. If you look in the screenshot, the icons I’m talking about are the check box, the slider grabbers, etc.. The big problem I had was I was trying to read a file that was not able to be read at runtime on the web build due to them being compressed into a .pck file by Godot. The way I got around this is by adding .txt to the end of the file. I also found some sound effects for the splash screen that I’m using, so I added that today as well. If you want to play this game the beta version is on itch.io at https://chicken502.itch.io/word-chains
Bug fixes and new levels! Added 5 new levels into the game, but a little concerned with the difficulty scaling so far. I’ve also added some squash and stretch to the letters when you drag them, which was a bit tricky to figure out how to do with my code base so far. If you want to check it you you can do so here .
Level Select Screen Finally took the time to create a working level select screen! This was one of the last big features that I have to add to this game before I ship it. In order to make this, I had to redo the way I saved the game, and needed to change some stuff on my color changing code. If you haven’t noticed from my devlogs, One of the options in the settings, is to change the games color. That was made before I came across HackClub so sadly I don’t get credit for the multiple hours that it took to make that feature.
v0.3b Finished! I just uploaded the v0.3b builds to by itch page so you can play with all the new updates here ! This update added the new level select screen and the 5 new levels. I added a couple little tweeks this morning before finally uploading everything to itch.io. And for the first time I created a Windows and Linux builds, which went much smoother than I thought.
Updated Repo Organization and README Last week I shipped Word Chains, and the reviews are back! People seem to like it and even 4 minuets before logged on to post this devlog, Word Chains was given a Super Star! Wow! Thanks everyone! Feedback from the ship was amazing, although there were some comments about a couple things, like the repo being messy. This is what I worked on today was cleaning up the repo and adding some more stuff to the README like update notes, and the project’s file structure. In the near future I plan on adding a couple things like… daily puzzles with leaderboards, a actual tutorial, new colors and more!
Tutorial and New Color One piece of feedback that I got from playtesting was to add a tutorial . So I made it so when you first play the game, the tutorial mode is activated. This shows a hand that will show you how to drag the letters. If you need the animation to replay you can use the hint button at no cost. Another quick thing I added was a new color, Green ! It might be tweeked in the future but for now I’m happy with it.
Daily Puzzle and Leaderboard(kinda) Today was all about the daily puzzles. I generated a list of about 360 puzzles, then used an API to fetch the day of the year, and got the puzzle at that index. All in all that part was super easy! But the leaderboards, not so much. They are still being worked on in fact! I’m trying to use a service called CheddaBoards but I keep running into random issues that shouldn’t be issues. I think I’m just going to switch my leaderboard service, and rewrite all the code. But I need a break today, as 5 hours is a lot of coding for me.
Leaderboard and Daily Puzzles Complete! Got the leaderboard to work and finished up some polishing touches to this leaderboard screen. The big challenge today was getting the chosen nickname to save and be used , then not prompt for it again (although I’m planning on being able to change it in settings later). I also changed my API that I was using to get the time, so I could get the correct daily puzzle, to UTC to align with CheddaBoards daily reset for my leaderboard. Another big thing was you can now only play the daily puzzle once ! This took a bit longer than I would have liked, but oh well!
New Settings and Color! Added Teal as a color! I want to add more colors, but I’ve used most of the rainbow now so don’t know how many more will be coming. I also added the ability to change your leaderboard display name , and the ability to replay the tutorial . These can both be found in the settings page. Getting the leaderboard display name to change was actually more challenging than I thought it would be due to a bug in the Godot CheddaBoard SDK that I was using, but the updated Github had a version that worked! One thing to note about changing the display name: The change will not appear on the leaderboard until the next time you submit a score, or in other words till the next day.
200 NEW LEVELS! Yes you are reading that right folks! 200 new levels (and the ability to easily add tons more) have been added to Word Chains! A while ago for the daily puzzle creation I created some algorithms to create a list of puzzles from all the words in the dictionary that I’m using, and then randomly select some. I ended up generating 4,125,015 puzzles with word lengths of 4-8 letters . I then generated difficulties and selected 50 per each difficulty. I then created this new UI for the level select screen . I then wasted an hour trying to find a very small bug that was caused by my over complicated code! Where in the home stretch now and word chains is almost ready to be shipped!
Documentation Took some time to update/add documentation to most of the scripts. I haven’t done this for a very long time, and since the project will likely be shipped very soon, they should be intelligible. Also took some time to update some images in the README to reflect recent updates.
Last touches! Planning on shipping tomorrow, so finished up some small things. I added a label to the top of the game screen to tell you what level you are currently on. The other big thing I did was update the README with all the updates in the new version. All I have to do tomorrow is hit ship!
Level Reset Button Just shipped! I just got the reviews in for the last ship, and things were very positive! There were a couple little bugs that people found as well as a lot of people wanting one feature: a level reset button! So I added one! What’s coming up in the future Based on recent feedback, I want to continue working on this game with the end goal of publishing WordChains into the Apple App Store . So here are some of the features that are coming soonish: Timed Mode : See how many levels you can complete in a set amount of time. Daily Streak and Personal Records : Keep track of everything. EVEN MORE PUZZLES : But also working on condensing the puzzle files, and imporving the quality of the puzzles, as currently some of the words are really random, which make the puzzle a bit tricky Better Credits Screen(?) : I want to improve the current credits screen, to add more personality so its not just a wall of text. This isn’t a necessary feature but something that I would like to add.
Timed Mode What’s new Added new timed mode , where you have 90 seconds to complete as many medium difficulty levels as you can. Then your score gets submitted to a leaderboard . This was not very difficult to add but I didn’t have a lot of time, so it’s very unpolished right now. I need some balancing and some tweens to add to it. There is also a lot of bugs that I think I introduce that I get to go hunt for later today. YIPPEE! Whats coming up soon Puzzle generation rehaul. The way I created all 200 levels for WordChains is through a algorithm that hunts through every possible puzzle combination that could be made from the dictionary that I’m using. This worked for the last shift but It wont work in the long run as some puzzles just have completely random words that don’t seem like they are really words. In other words I think I need to update the dictionary that the algorithm takes from.
#New Dictionary Feature & Bug Fixes! We are back! School finally caught up to me so things slowed down over the last week, but I think I’m back! So lets get started! New Dictionary Feature One thing I’ve wanted to add for a while was a way to look up the definition for the current word . So now using a this free API I added this feature. It still has some small polishing things that need to be done but overall it pretty much done. Bug Fixes I also took some time todo some bug fixing. Most of them originated from added the Timed Mode like leaderboards displaying scores incorrectly and medium difficulty level progress being saved in timed mode. Another bug that I fixed was UI scaling . When you play WordChains on a phone, the buttons and everything can be really small. It only took some changes to the project settings but it was very needed as the end goal is for WordChains to be on the app store! ##Puzzle Generation One small thing that I also worked on was making levels more normal. The way levels are generated is by picking random words from the dictionary that I’m using, and seeing if they connect. This gets us to have some really weird words. I wrote a little program in python to clean up the words but checking if the word use frequency was above a certain level. This hasn’t been implemented yet but it hopefully will be in the coming week. Thanks for reading! I’ve been trying to put more effort into these devlogs , plus I haven’t posted in over a week so wanted to let everyone know what’s going on with WordChains! If you want to play it you can do so here although this version doesn’t have all the new features yet . You can follow the project to be notifed when it does though!
New UI! The main menu has been changed, and some new features are coming soon! Dictionary Polishing I added in some much needed polishing to the dictionary panel that added in yesterday. I added a loading panel as it used to just show the previous term you looked up, then jumped to the new one when it loaded. Currently its just a progress bar with a small animation to it, but it works for now. I’m also thinking about reusing it in other areas too. New Credit Screen! I’ve been wanting to change the credits screen for a while now, as its just been a static wall of text. For right now it mostly still is a static wall of text. But with more stuff! I have some tweens when you hover over the text which was missing in the old version. I’m not entirely happy with this one, but its still much better. New Main Menu Buttons! What are those about? Added two new buttons. One for level select, and one for a stats page (not added yet! but soon). Now when you press the big play button you go to the last level you were playing, instead of level select. What’s next for Word Chains I have some plans for what’s next for Word Chains, like a stats page! I’m also planning some new puzzles.
Puzzle Generation Overhaul Not a lot to say about this other than there are 200 new puzzles (just changed them out though)! I created a new python script that uses python libraries wordfreq and better_profanity , to clean up the generation dictionary. What this does is takes out words that are to infrequently used or are marked as profanity. One thing to note is that this is not the dictionary in game that this cleans. It just cleans the dictionary that I use to generate puzzles . So in game it is still possible to spell obscure words, which opens the opportunity to find alternant solutions. Another thing that I added to my puzzle selector script was the ability to append new puzzles to a file allowing me to later add more puzzles very easily. What’s next? I plan on doing some more puzzle generation tweaks , as well as adding in a stats page! That’s most of what’s on the timeline, so were getting near the end!
Stats and game reset. Finally got around to making the stats page. You can now see stats like how many puzzles you have completed, how many hints you’ve used and even how many times you have dragged a letter. This wasn’t to hard to add although it did take a little while. Reset game Now you can wipe your save file to replay levels. The also wasn’t anything to difficult to do but it ended up take about an hour to figure out how to style the confirmation pop up. This did show me a couple things that needed fixing regarding the tutorial, and even some stat tracking that I coded in wrong. What’s next! We have some small bug fixes that need to be made, and some other small features like adding more settings, compressing the puzzle files so they don’t get to big later on, and some small sound design changes. From there all that needs to be done is some formatting and spelling checks (cause I am terrible at spelling) and updating the README, then we are ready to SHIP!!!
New Hint Mechanic and BUGS! As I’m nearing the end of this project (or at least this version) I’ve been doing a lot of bug fixing . This time around I squashed a major bug that has been annoying me for some time now. For some reason, Godot doesn’t have native keyboard support for IOS devices, unless you go into the advanced export settings and turn them on. And since there are text boxes for writing your nickname, this is kinda needed. Hint rewarding changed This is a feature that I’ve been intending to add for a couple weeks now. In the past every time you complete a level, you gain an new hint. Now you get hints after completing a set number of puzzles. Each difficulty has a different value for this as well. So it takes less completed puzzles on difficult puzzles than on easy puzzles to earn hints. With this I also added a small animation to show that you got a new hint! Secret Solutions This was not an intended feature that I meant to add. But its hear to stay! Recently I changed how puzzles are generated , by using a cleaned up dictionary, that only has more frequently used words. But I still let the user make connections with less frequent words, so sometimes its possible to find shorter solutions then intended . This used to leave the leftover letters behind to use on the next puzzle which messed everything up. I have now fixed this issue , and added a little message telling you that you have “Found a Secret Solution!” What’s next? Things are wrapping up , both with Stardance and WordChains. I only have two items left on my todo list , the first being to add more puzzles, which will only take a couple of minutes, and the second is a bug which I’m not sure I can even start to debug since I think it only happens on my phone, where I can’t see the console. Once I add these things, WordChains is ready to ship! I’m expecting to ship on Tuesday or Wednesday, but It might even happen over the weekend. Once Stardance is over, WordChains will still continue development. If you want to follow the devlopment, go follow it over on itch.io
Readme Updates and another +200 Puzzles This is the final devlog for WordChains v0.5b! Only a couple things were changed, one of which being adding another 200 Puzzles! This brings us up to 400 Puzzles in total (not including daily puzzles). Other than that I just made some small README updates and officially changed the version number to v0.5b! Thanks to everyone following the project so far! If you want to continue to follow this project after stardance ends, you can go follow it on itch.io ! Thanks for everyone’s feedback and support! WordChains will be shipped latter today!
Ships:
I just finished making a small word puzzle game called Word Chains. To play, you drag letters to change your current word one letter at a time! There are 15 different levels with a wide range of difficulty. This game was originally intended to be played on a phone, but getting it on to the app stores is a little out of my league right now, although you can still play the itch version on your phone, but maybe next year Ill get it onto a app store! I had a lot of fun making this project and I might add some more things later like daily puzzles or more color options. I started this project before I found hack club so sadly not all my hours are accounted for. This was really fun to work on this project and show it of to my friends. I learned more about marketing my games with devlogs, and learned that after 5 years of making games with Godot, I’ve been exporting them to the web wrong this whole time! Thanks so much for taking the time to check this project out! Can’t wait to see what everyone thinks!
Word Chains V0.4b is out! Since the last ship I’ve been working very hard to add a whole slew of features. There is now 200 new levels, daily puzzles and a tutorial (very requested last ship!). I had a lot of fun making this, and I hope you have a lot of fun playing it! The main part of this ship was rewriting the level loading code, and generating files for levels. I didn’t want to write 200 puzzles by hand. I found did some research and wrote a small script to generate the puzzles for me. I do eventually want to add more to Word Chains after this ship but it probably won’t be for a little while as I have other projects I want to work on. But the end goal is to get Word Chains onto a app store. Last Note: When reviewing please do not feel like you need to complete all the levels, and have fun!
WordChains V0.5b is here! I’ve added a lot of new features since the last ship! Its been a fun couple of months since I started this project, and I’ve learned a lot. New Features : Timed mode, 200 more puzzles, Dictionary look up feature, level reset, and lots of bug fixes. One feature that was highly requested from the last ship was the level reset feature, so players didn’t have to spam the undo button, which is what I figured they would do, so I didn’t bother adding it. But so many people mentioned it would be nice, I went ahead and added it. How to play Word Chains is very simple: drag a letter onto the current word to change it into a new word. Your trying to get to the target word. (if this sounds a bit complicated don’t worry there is a tutorial) Lastly… Thanks for play, and I hope you have fun! If you want to follow the project after stardance ends, go follow on itch.io !...
|
1793001168.392795
|
1793087568.392795
|
|
26729
|
just tell me what to do by @justrivaan | Stardance
|
justrivaan
|
3
|
48.0
|
944
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-26T07:11:51Z", "hours": 29.0, "multiplier": 18.85, "payout": 647, "blessing": "blessed", "text": "Hello, this is the final devlog for my project, i believe that the website, for its sole purpose is now totally finished. ‘just tell me what to do’ is a website i have developed for a huge problem in real life, decision making. You have to choose a time duration (the time u have on hand), and you msut choose how you are feeling (emotion), and then type out a brain dump. This input gives you an output that helps you come to a decision about your problem. There are also modes for the responses, these modes change the way the AI responds to you. There is a mode recommendation feature where if the AI believes that your brain dump is better suitable for another mode, then it recommends you to swap to that mode instead. I have really enjoyed working on this site. There were many bugs along the way, but in the end it all worked out!", "repo": "https://github.com/officiallyrivaan/just-tell-me-what-to-do", "demo": "https://just-tell-me-what-to-do.vercel.app"}, {"ship_num": 2, "ts": "2026-07-05T02:06:39Z", "hours": 15.0, "multiplier": 17.79, "payout": 226, "blessing": "neutral", "text": "The second ship of just tell me what to do! Alright, first, here’s a quick summary on what just tell me what to do is. An AI powered tool, where you choose your time on hand, then you choose how you are feeling, and then finally dump your thoughts. This gives you the next step, the next step may help to come to a more precise decision, or it maybe just to cheer you up. I went through WAY too many difficulties during this making, i tried making user accounts, but that didnt work out, and a lot more was tried… Now the HUGE update! Modes have been added to the AI, You get to choose how the AI behaves with you! There are six new modes, (the details for them are in the previous devlog) selecting the right mode can u help you for the next step much more effectively! I am really proud of my progress so far, its been insane how much work has been put into this project, and im hoping to continue this further!", "repo": "https://github.com/officiallyrivaan/just-tell-me-what-to-do", "demo": "https://just-tell-me-what-to-do.vercel.app"}, {"ship_num": 3, "ts": "2026-06-28T14:40:38Z", "hours": 4.0, "multiplier": 19.11, "payout": 71, "blessing": "neutral", "text": "As I thought about ideas, I found myself constantly thinking about the problem that everyone deals with but never considers: choosing what to do next. From procrastination to boredom or from being indecisive to having too many options to pick from, making small decisions can end up taking more time than one would expect. And that is how just tell me what to do came to life. The app poses a set of questions to users and based on their answers, makes an AI-suggested recommendation to do something specific next. Those questions include the amount of free time users have, their current state, and any limits they may have. My intention was not to create a new planning tool but rather to help remove the obstacle in making the first step and continue without additional delays. Development was definitely far from being a straight road ahead. More often than not, my time was used to solve bugs rather than implementing new features. They included different behavior between AI models, unexpected failure of my API key, and an annoying UI bug when the to-do pile overlayed with its own popup. The aspect which I am most proud of is the very idea itself. This is the problem that I myself faced, and many other people, I presume, must have had their experiences as well. Rather than just creating another productivity app, I have wanted to make something that would be practical for someone’s daily routine. Even if the app will help save just a few minutes, it would already mean a lot. Moreover, this project gave me an opportunity to practice debugging and using the API of an AI. Each of the problems that I managed to solve added to my knowledge, and at the end of the project, I knew a lot more about frontend and using an AI in the project. All in all, just tell me what to do has turned out to be one of those projects which was very easy at first but proved to be rather challenging in practice. I am glad that I made it till the end despite all the bugs and came up with something practical.", "repo": "https://github.com/officiallyrivaan/just-tell-me-what-to-do", "demo": "https://just-tell-me-what-to-do.vercel.app"}]...
|
[{"post_id": 32255, "ts": "202 [{"post_id": 32255, "ts": "2026-07-21T09:39:08Z", "hours": 8.0, "text": "bugs finally fixed!!! (some) alright, im back now, i had taken a short break. i fixed the liquid glass bugs, and it is finally good enough! Im fine tuning the mode recommendation feature, to make it accurate now."}, {"post_id": 28171, "ts": "2026-07-14T09:28:38Z", "hours": 3.0, "text": "okay, this devlog is gonna be a short one, since i just wanted to keep yall updated on whats up. basically, ive been facing bugs on the liquid glass topbar, i might scratch the idea entirely, not sure, and now im facing bugs on the mode recommendation…"}, {"post_id": 26365, "ts": "2026-07-11T03:30:41Z", "hours": 7.0, "text": "i worked a lot on the backend already so now i decided to work on the frontend. im developing a liquid glass component for the topbar, its not ready yet, trust me making it is a PAIN. im also almost done with the mode recommendations! im pretty sure by tommorow, or today, all of these updates will be out!"}, {"post_id": 25821, "ts": "2026-07-10T09:05:02Z", "hours": 8.0, "text": "its me again! i was on a grind, and i spent 8 hours refining the mode-specific responses, i did not change much else. next up, im planning on adding mode recommendations. this update looks at your brain dump, and suggests if there is a better mode for this input."}, {"post_id": 22538, "ts": "2026-07-05T01:56:46Z", "hours": 12.0, "text": "okay, honestly that grind was insane. 12 hours of work, i toughed it out. anyways, now to the project. alright, so a super cool update, now theres modes to the ai, like personalities that u think will best suit you. 6 modes have been added, just decide - the defualt, vent - ai is a calm listener and gives u small gentle steps, roast me - straight forward, friend-like attitude that shows you the total truth in a blunt way, hype me up - high energy, gets you pumped up u for the next step, talk it through - thinks alongside with you, and provides clarity, and finally break it down - treats your brain dumb as a task list, and is more analytical. These are the new modes, and ive made a change mode button on the tool page. This may be my final devlog before the ship! Insane update, im excited to see how this turns out!"}, {"post_id": 21998, "ts": "2026-07-04T07:06:10Z", "hours": 2.0, "text": "INSANE UPDATEEEEE! alright now ive added 2 new pages instead of 1 long scroll through page. Personally, the scroll through is really generic, and feels unfinished. One page is for “the tool,” (the ai suggester on waht to do) the other is called “my patterns” this gives u an analysis on your mood trends, productive hours etc. Im not sure if im planning to keep this feature since it feels kind of pointless. I also have added a pomodoro timer, where u get 25 minutes to complete your activity, its totally optional. In addition to that i added a share button, so u can copy it and put it into your notes, or screenshot it and send it to people! anyways, thats it for now. stay tuned for the next one!"}, {"post_id": 21581, "ts": "2026-07-03T16:42:41Z", "hours": 0.0, "text": "wsp guys! im back to working on this project, i made a few css changes over the week, nothing much really, i would want yall to suggest me some features that i can implement in the website! feel free to comment, really helps out!"}, {"post_id": 17610, "ts": "2026-06-28T14:11:26Z", "hours": 1.0, "text": "FINAL DEVLOGGGGGG, I encountered way too many bugs deleting my .env file. it was PAINFUL. Finally fixed and im gonna ship the project!!!!!!! Huge new feature added, i call it the to-do pile. Your last 5 actions show up on it, and a button thats clickable saying “did it,” as soon as you click it, the action dissappears from the to-do pile! Its been really fun working on this site!"}, {"post_id": 17569, "ts": "2026-06-28T12:29:28Z", "hours": 1.0, "text": "FINISHED BUG FIXING!!!! That took way too long. Devlog #2. Alright so now i’ve fixed the major prompting issue, you can finally talk to the ai without it bringing up additional math pass rates. 😅 I figured i’d host it on OnRender since im used to it. Added environment variables instead of the .env since its not testing anymore. Rebuilt the UI slightly. Worked on it all day. Theres a share option now, which copies the text instantly (incase you want to put it on your notes/to-do-list) Hoping i face no major bugs, please check out the site and let me know if theres bugs! (you can drop a comment or wtv) Added some nice translucent/glassy ui aswell. Not sure what’s next but lets see!"}, {"post_id": 17450, "ts": "2026-06-28T07:27:43Z", "hours": 0.0, "text": "First Devlog, i thought of one of the biggest problems in daily life, decision making. Im sure every one of us has faced this ATLEAST once, if not hundreds and thousands of times. On average, roughly 2.5 hours is spent on indecisiveness by humans, may it be micro decisions or important decisions. This led me to making, “just tell me what to do,” a website thats AI-Powered and helps you get your thoughts straight and come to a decision. I’ve made the first version, its not being hosted anywhere yet due to major bugs, but hopefully by my second devlog i will have started hosting it."}]...
|
Title: just tell me what to do by @justrivaan | St Title: just tell me what to do by @justrivaan | Stardance
Devlogs:
First Devlog, i thought of one of the biggest problems in daily life, decision making. Im sure every one of us has faced this ATLEAST once, if not hundreds and thousands of times. On average, roughly 2.5 hours is spent on indecisiveness by humans, may it be micro decisions or important decisions. This led me to making, “just tell me what to do,” a website thats AI-Powered and helps you get your thoughts straight and come to a decision. I’ve made the first version, its not being hosted anywhere yet due to major bugs, but hopefully by my second devlog i will have started hosting it.
FINISHED BUG FIXING!!!! That took way too long. Devlog #2. Alright so now i’ve fixed the major prompting issue, you can finally talk to the ai without it bringing up additional math pass rates. 😅 I figured i’d host it on OnRender since im used to it. Added environment variables instead of the .env since its not testing anymore. Rebuilt the UI slightly. Worked on it all day. Theres a share option now, which copies the text instantly (incase you want to put it on your notes/to-do-list) Hoping i face no major bugs, please check out the site and let me know if theres bugs! (you can drop a comment or wtv) Added some nice translucent/glassy ui aswell. Not sure what’s next but lets see!
FINAL DEVLOGGGGGG, I encountered way too many bugs deleting my .env file. it was PAINFUL. Finally fixed and im gonna ship the project!!!!!!! Huge new feature added, i call it the to-do pile. Your last 5 actions show up on it, and a button thats clickable saying “did it,” as soon as you click it, the action dissappears from the to-do pile! Its been really fun working on this site!
wsp guys! im back to working on this project, i made a few css changes over the week, nothing much really, i would want yall to suggest me some features that i can implement in the website! feel free to comment, really helps out!
INSANE UPDATEEEEE! alright now ive added 2 new pages instead of 1 long scroll through page. Personally, the scroll through is really generic, and feels unfinished. One page is for “the tool,” (the ai suggester on waht to do) the other is called “my patterns” this gives u an analysis on your mood trends, productive hours etc. Im not sure if im planning to keep this feature since it feels kind of pointless. I also have added a pomodoro timer, where u get 25 minutes to complete your activity, its totally optional. In addition to that i added a share button, so u can copy it and put it into your notes, or screenshot it and send it to people! anyways, thats it for now. stay tuned for the next one!
okay, honestly that grind was insane. 12 hours of work, i toughed it out. anyways, now to the project. alright, so a super cool update, now theres modes to the ai, like personalities that u think will best suit you. 6 modes have been added, just decide - the defualt, vent - ai is a calm listener and gives u small gentle steps, roast me - straight forward, friend-like attitude that shows you the total truth in a blunt way, hype me up - high energy, gets you pumped up u for the next step, talk it through - thinks alongside with you, and provides clarity, and finally break it down - treats your brain dumb as a task list, and is more analytical. These are the new modes, and ive made a change mode button on the tool page. This may be my final devlog before the ship! Insane update, im excited to see how this turns out!
its me again! i was on a grind, and i spent 8 hours refining the mode-specific responses, i did not change much else. next up, im planning on adding mode recommendations. this update looks at your brain dump, and suggests if there is a better mode for this input.
i worked a lot on the backend already so now i decided to work on the frontend. im developing a liquid glass component for the topbar, its not ready yet, trust me making it is a PAIN. im also almost done with the mode recommendations! im pretty sure by tommorow, or today, all of these updates will be out!
okay, this devlog is gonna be a short one, since i just wanted to keep yall updated on whats up. basically, ive been facing bugs on the liquid glass topbar, i might scratch the idea entirely, not sure, and now im facing bugs on the mode recommendation…
bugs finally fixed!!! (some) alright, im back now, i had taken a short break. i fixed the liquid glass bugs, and it is finally good enough! Im fine tuning the mode recommendation feature, to make it accurate now.
Ships:
As I thought about ideas, I found myself constantly thinking about the problem that everyone deals with but never considers: choosing what to do next. From procrastination to boredom or from being indecisive to having too many options to pick from, making small decisions can end up taking more time than one would expect. And that is how just tell me what to do came to life. The app poses a set of questions to users and based on their answers, makes an AI-suggested recommendation to do something specific next. Those questions include the amount of free time users have, their current state, and any limits they may have. My intention was not to create a new planning tool but rather to help remove the obstacle in making the first step and continue without additional delays. Development was definitely far from being a straight road ahead. More often than not, my time was used to solve bugs rather than implementing new features. They included different behavior between AI models, unexpected failure of my API key, and an annoying UI bug when the to-do pile overlayed with its own popup. The aspect which I am most proud of is the very idea itself. This is the problem that I myself faced, and many other people, I presume, must have had their experiences as well. Rather than just creating another productivity app, I have wanted to make something that would be practical for someone’s daily routine. Even if the app will help save just a few minutes, it would already mean a lot. Moreover, this project gave me an opportunity to practice debugging and using the API of an AI. Each of the problems that I managed to solve added to my knowledge, and at the end of the project, I knew a lot more about frontend and using an AI in the project. All in all, just tell me what to do has turned out to be one of those projects which was very easy at first but proved to be rather challenging in practice. I am glad that I made it till the end despite all the bugs and came up with something practical.
The second ship of just tell me what to do! Alright, first, here’s a quick summary on what just tell me what to do is. An AI powered tool, where you choose your time on hand, then you choose how you are feeling, and then finally dump your thoughts. This gives you the next step, the next step may help to come to a more precise decision, or it maybe just to cheer you up. I went through WAY too many difficulties during this making, i tried making user accounts, but that didnt work out, and a lot more was tried… Now the HUGE update! Modes have been added to the AI, You get to choose how the AI behaves with you! There are six new modes, (the details for them are in the previous devlog) selecting the right mode can u help you for the next step much more effectively! I am really proud of my progress so far, its been insane how much work has been put into this project, and im hoping to continue this further!
Hello, this is the final devlog for my project, i believe that the website, for its sole purpose is now totally finished. ‘just tell me what to do’ is a website i have developed for a huge problem in real life, decision making. You have to choose a time duration (the time u have on hand), and you msut choose how you are feeling (emotion), and then type out a brain dump. This input gives you an output that helps you come to a decision about your problem. There are also modes for the responses, these modes change the way the AI responds to you. There is a mode recommendation feature where if the AI believes that your brain dump is better suitable for another mode, then it recommends you to swap to that mode instead. I have really enjoyed working on this site. There were many bugs along the way, but in the end it all worked out!...
|
1792878860.1476197
|
1793742860.1476197
|
|
40758
|
Game Contained Entirely Within a Minecraft Shader Game Contained Entirely Within a Minecraft Shader by @_Pm7 | Stardance...
|
_Pm7
|
1
|
48.0
|
941
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-31T23:53:19Z", "hours": 48.0, "multiplier": 19.46, "payout": 941, "blessing": "neutral", "text": "I created a fully functional 3d game that runs entirely through a vanilla Minecraft postprocessing effect. Anyone who owns minecraft java edition will be able to load this onto a world and play it. Player input is collected via a datapack that changes colors on the screen when keys are pressed, but besides that the entire game’s code is contained in a resource pack. It is complete with a tank-style movement system, key-door interactions, enemies, and an intuitive level loading system.", "repo": "https://github.com/Pm7-dev/posteffect-game", "demo": "https://github.com/Pm7-dev/posteffect-game/releases/latest"}]...
|
[{"post_id": 59271, "ts": "202 [{"post_id": 59271, "ts": "2026-08-31T23:38:05Z", "hours": 2.5286, "text": "It’s finally finished! After designing the main level and getting some friends to playtest it, I’m happy to say that this project is finally ready for release! The game can now be played by anyone with vanilla Minecraft Java Edition!!"}, {"post_id": 58473, "ts": "2026-08-30T21:49:59Z", "hours": 7.7214, "text": "Added cats I have added my friend’s cat, Mumuy, into the game as an enemy which follows the player around and attacks if she gets close. This took such an incredible amount of pain and debugging with the memory buffer that I’m almost ready to call this project done. In the next devlog I’d like to polish up some things and then finally release the project."}, {"post_id": 52456, "ts": "2026-08-22T16:05:18Z", "hours": 7.8172, "text": "I knew this would take a long time but uh….. oh. I have now created a functioning inventory pickup system, and opening doors will now check to make sure the player is holding the corresponding colored key before it opens. To do this, I had to store an array of colors of the keys in the program memory for the player’s inventory. But since I can’t always guarantee that the array doesn’t have gaps in it, each frame also generates a list of positions of the colors addresses (I guess in a really cursed way you could call these pointers?) so I don’t have to sample the entire inventory list for every pixel in the rendering passes and can instead read the pointers list to know what inventory index to render."}, {"post_id": 49341, "ts": "2026-08-18T03:29:17Z", "hours": 6.1069, "text": "Added spinning keys as placeable objects in the map image I modeled this key in blender and rendered out eight frames of it spinning to create this texture atlas. The atlas is pulled from based on the GameTime. Loading keys into memory from the map proved to be quite a challenge. When initializing the map, the shader reads the map texture for any pixels with opacity 150 and treats them as keys, loading them and their data into a few rows in memory. The data stored and updated along with them is: Their coordinates on the map, their colors, their distance offset from the player, and their rotational offset from the player. Using this data, I created a render pass after the map renderer that adds these in. Next will be a pickup system so they can be used to unlock doors. The player inventory system is probably gonna suuuuuuck to make."}, {"post_id": 47224, "ts": "2026-08-15T00:20:59Z", "hours": 3.9419, "text": "Map units can now be destroyed in real time by pressing the space bar. Listening for the player jump predicate and treating it like an “action” input allows me to make the map destructible. This will be used later to make doors that require keys to open. Additionally, inputs are now polled independently of one another, as shown later in the video. Each input set (movement, rotation, action) has its own text display associated with it, and now the shader samples from three points on the screen to get all the inputs at once."}, {"post_id": 44039, "ts": "2026-08-09T15:30:26Z", "hours": 1.9911, "text": "Wall texture atlas created The shader now looks for specific rgb values in the map so it knows what part of the atlas to sample from, allowing me to choose which wall texture to render when making the game map. Next I will be working on wall collision and an item pickup system."}, {"post_id": 42366, "ts": "2026-08-07T01:37:06Z", "hours": 1.3319, "text": "Wall textures are now sampled from texture images using the raycast positions, I can determine the x coordinate to sample from on the texture just by modding the larger coordinate by one (making the texture repeat every unit.) The Y coordinate is based on the current calculated wall height (determined by the distance between the raycast and the player.) Next I will make textures loaded on an atlas instead of a single image so I can make multiple different types of wall."}, {"post_id": 39874, "ts": "2026-08-03T04:25:21Z", "hours": 7.4583, "text": "Spent a huge amount of time refactoring my entire fragment shader pipeline, splitting it into more than two render passes. Before, there was one pass to update data, and one to render the data. Now there are six: Player input -> Update Map -> Update Player -> Collect Raycast Data -> Render Map -> Update Global Data All these passes share one 512x512 persistent render target to store/load data, which gives me about one megabyte of “ram” given that each pixel stores 32 bits. This should be more than enough for what I need. Currently, I don’t even use half of it, with the largest chunk storing the 256x256 game level that can now be affected by the player. As an added bonus to this new render target storage method, I now store the coordinates of where each camera raycast hits, so I can map textures to the walls. I think I’ll work on a system to do this next."}, {"post_id": 38857, "ts": "2026-08-01T12:49:37Z", "hours": 3.535, "text": "4th Devlog, Rewritten the raycasting system. Now the map is gridlocked to its texture, with each pixel representing one unit. The raycast only has to check the status of each pixel it passes through on the map image rather than sampling at a defined distance interval that could potentially pass through the corners of units. I also fixed the previous fisheye effect by multiplying the caculated ray distance by the cosine of its angle offset from the center Next I would like to work on texture mapping to the walls, but with what I plan to add in the future I think I might spend some time refactoring the way I store the program’s memory so I can fit more data in it and organize it better."}, {"post_id": 37362, "ts": "2026-07-30T00:50:21Z", "hours": 1.4472, "text": "Beginnings of player input Because shader code is run entirely on the GPU, I can’t just directly listen for keyboard input. The only thing that the shader code actually reads is the colors rendered to the screen by minecraft, so I needed to make a sort of “translation layer” that listens for player input in minecraft and outputs a color on the screen so it can be read and interpreted by the shader code. My really jank test rig As shown in the video, the color of the square updates depending on the pressed keys. The inputs are gathered using minecraft’s “predicate” system and are translated to the background color of a text display entity. The player is mounted to an armor stand to stop them from moving away, keeping the text display in the center of the screen always. How I keep track of data in code that can’t store variables If a shader can only read colors, how does it remember where the player is? This question was one that I had until I discovered minecraft’s support for the persistent render target. This allows the shader to sample from the pixels it renders in the current frame in the next frame. A floating point number is stored using thirty two bits. Each pixel’s color is stored with eight bits of precision each for red, green, blue, and alpha channels, which also happens to total 32 bits. So I wrote what is possibly the strangest utility I have ever written, that can translate a float to an rgba color and an rgba color to a float. Now, using a persistent render target that is simply never rendered to the screen, I can store the player’s x, y, and camera position in colors, and update them based on the color in the middle of the screen from the minecraft render. I suppose the persistent render target sorta counts as the game’s “RAM.” I’ll be using it to store a lot more data in the future, but next I’ll be fixing up some issues I found with rendering and player control."}, {"post_id": 36763, "ts": "2026-07-29T01:02:02Z", "hours": 3.0931, "text": "I finally got some actual visual output!! After fixing many compiler errors, and then another few that kept causing the loaded data to reset, I got this output. The current system renders walls based on the pixel’s distance from a wall defined by a texture (visualized in the picture). This created a sort of fisheye distortion that I’ll try and work out later, but I’m happy with my progress for now, and would like to focus on getting player movement functional"}, {"post_id": 36141, "ts": "2026-07-28T01:24:17Z", "hours": 1.3989, "text": "Minecraft has in recent snapshots greatly improved the capabilities of its shader system, now allowing postprocessing shaders “post effects” to be applied using commands. This has wildly changed what is now possible in vanilla minecraft and I immediately was overcome with excitement about what was now possible. After playing around with it for a while and discovering the “persistent” mode on custom render targets, I realized that even more than expected was now possible, and found a way to make posteffects that have fade-in animations by updating the value in a persistent render target over the course of a few frames. To make it consistent across different frame rates, I had to figure out a way to get a deltatime (time between frames), which I was able to do using the GameTime uniform in minecraft. Having gotten a deltatime, I began wondering about the possibilities of creating a fully functional game contained entirely in a minecraft postprocessing shader…"}]...
|
Title: Game Contained Entirely Within a Minecraft Title: Game Contained Entirely Within a Minecraft Shader by @_Pm7 | Stardance
Devlogs:
Minecraft has in recent snapshots greatly improved the capabilities of its shader system, now allowing postprocessing shaders “post effects” to be applied using commands. This has wildly changed what is now possible in vanilla minecraft and I immediately was overcome with excitement about what was now possible. After playing around with it for a while and discovering the “persistent” mode on custom render targets, I realized that even more than expected was now possible, and found a way to make posteffects that have fade-in animations by updating the value in a persistent render target over the course of a few frames. To make it consistent across different frame rates, I had to figure out a way to get a deltatime (time between frames), which I was able to do using the GameTime uniform in minecraft. Having gotten a deltatime, I began wondering about the possibilities of creating a fully functional game contained entirely in a minecraft postprocessing shader…
I finally got some actual visual output!! After fixing many compiler errors, and then another few that kept causing the loaded data to reset, I got this output. The current system renders walls based on the pixel’s distance from a wall defined by a texture (visualized in the picture). This created a sort of fisheye distortion that I’ll try and work out later, but I’m happy with my progress for now, and would like to focus on getting player movement functional
Beginnings of player input Because shader code is run entirely on the GPU, I can’t just directly listen for keyboard input. The only thing that the shader code actually reads is the colors rendered to the screen by minecraft, so I needed to make a sort of “translation layer” that listens for player input in minecraft and outputs a color on the screen so it can be read and interpreted by the shader code. My really jank test rig As shown in the video, the color of the square updates depending on the pressed keys. The inputs are gathered using minecraft’s “predicate” system and are translated to the background color of a text display entity. The player is mounted to an armor stand to stop them from moving away, keeping the text display in the center of the screen always. How I keep track of data in code that can’t store variables If a shader can only read colors, how does it remember where the player is? This question was one that I had until I discovered minecraft’s support for the persistent render target. This allows the shader to sample from the pixels it renders in the current frame in the next frame. A floating point number is stored using thirty two bits. Each pixel’s color is stored with eight bits of precision each for red, green, blue, and alpha channels, which also happens to total 32 bits. So I wrote what is possibly the strangest utility I have ever written, that can translate a float to an rgba color and an rgba color to a float. Now, using a persistent render target that is simply never rendered to the screen, I can store the player’s x, y, and camera position in colors, and update them based on the color in the middle of the screen from the minecraft render. I suppose the persistent render target sorta counts as the game’s “RAM.” I’ll be using it to store a lot more data in the future, but next I’ll be fixing up some issues I found with rendering and player control.
4th Devlog, Rewritten the raycasting system. Now the map is gridlocked to its texture, with each pixel representing one unit. The raycast only has to check the status of each pixel it passes through on the map image rather than sampling at a defined distance interval that could potentially pass through the corners of units. I also fixed the previous fisheye effect by multiplying the caculated ray distance by the cosine of its angle offset from the center Next I would like to work on texture mapping to the walls, but with what I plan to add in the future I think I might spend some time refactoring the way I store the program’s memory so I can fit more data in it and organize it better.
Spent a huge amount of time refactoring my entire fragment shader pipeline, splitting it into more than two render passes. Before, there was one pass to update data, and one to render the data. Now there are six: Player input -> Update Map -> Update Player -> Collect Raycast Data -> Render Map -> Update Global Data All these passes share one 512x512 persistent render target to store/load data, which gives me about one megabyte of “ram” given that each pixel stores 32 bits. This should be more than enough for what I need. Currently, I don’t even use half of it, with the largest chunk storing the 256x256 game level that can now be affected by the player. As an added bonus to this new render target storage method, I now store the coordinates of where each camera raycast hits, so I can map textures to the walls. I think I’ll work on a system to do this next.
Wall textures are now sampled from texture images using the raycast positions, I can determine the x coordinate to sample from on the texture just by modding the larger coordinate by one (making the texture repeat every unit.) The Y coordinate is based on the current calculated wall height (determined by the distance between the raycast and the player.) Next I will make textures loaded on an atlas instead of a single image so I can make multiple different types of wall.
Wall texture atlas created The shader now looks for specific rgb values in the map so it knows what part of the atlas to sample from, allowing me to choose which wall texture to render when making the game map. Next I will be working on wall collision and an item pickup system.
Map units can now be destroyed in real time by pressing the space bar. Listening for the player jump predicate and treating it like an “action” input allows me to make the map destructible. This will be used later to make doors that require keys to open. Additionally, inputs are now polled independently of one another, as shown later in the video. Each input set (movement, rotation, action) has its own text display associated with it, and now the shader samples from three points on the screen to get all the inputs at once.
Added spinning keys as placeable objects in the map image I modeled this key in blender and rendered out eight frames of it spinning to create this texture atlas. The atlas is pulled from based on the GameTime. Loading keys into memory from the map proved to be quite a challenge. When initializing the map, the shader reads the map texture for any pixels with opacity 150 and treats them as keys, loading them and their data into a few rows in memory. The data stored and updated along with them is: Their coordinates on the map, their colors, their distance offset from the player, and their rotational offset from the player. Using this data, I created a render pass after the map renderer that adds these in. Next will be a pickup system so they can be used to unlock doors. The player inventory system is probably gonna suuuuuuck to make.
I knew this would take a long time but uh….. oh. I have now created a functioning inventory pickup system, and opening doors will now check to make sure the player is holding the corresponding colored key before it opens. To do this, I had to store an array of colors of the keys in the program memory for the player’s inventory. But since I can’t always guarantee that the array doesn’t have gaps in it, each frame also generates a list of positions of the colors addresses (I guess in a really cursed way you could call these pointers?) so I don’t have to sample the entire inventory list for every pixel in the rendering passes and can instead read the pointers list to know what inventory index to render.
Added cats I have added my friend’s cat, Mumuy, into the game as an enemy which follows the player around and attacks if she gets close. This took such an incredible amount of pain and debugging with the memory buffer that I’m almost ready to call this project done. In the next devlog I’d like to polish up some things and then finally release the project.
It’s finally finished! After designing the main level and getting some friends to playtest it, I’m happy to say that this project is finally ready for release! The game can now be played by anyone with vanilla Minecraft Java Edition!!
Ships:
I created a fully functional 3d game that runs entirely through a vanilla Minecraft postprocessing effect. Anyone who owns minecraft java edition will be able to load this onto a world and play it. Player input is collected via a datapack that changes colors on the screen when keys are pressed, but besides that the entire game’s code is contained in a resource pack. It is complete with a tank-style movement system, key-door interactions, enemies, and an intuitive level loading system....
|
1792997701.1433141
|
1793084101.1433141
|
|
13870
|
OceanOS by @Sai-K | Stardance
|
Sai-K
|
5
|
73.0
|
933
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-02T05:08:53Z", "hours": 5.0, "multiplier": 18.91, "payout": 88, "blessing": "neutral", "text": "OceanOS 5.0🌊 🌊 What did you make? I created OceanOS , a web-based operating system designed to feel like a real desktop environment. It includes interactive apps such as Files, Settings, Music, Gallery, Calendar, Weather, Ocean Store, Lumos , and more. OceanOS features draggable and resizable windows, menus, animations, themes, wallpapers, system controls, app installation, and other desktop-style functionality. 🧩 What was challenging? One of the biggest challenges was making all of the different parts of the operating system work together smoothly. Managing windows, animations, app states, menus, themes, sounds, and different OS modes required a lot of careful logic and testing. Making the interface feel responsive and polished while keeping everything consistent was also challenging. 🏆 What are you proud of? I’m most proud of how much OceanOS has grown from a simple web project into a complete interactive OS experience . I’m especially proud of the attention to detail in the UI, the animations, the apps, the window system, and the overall feeling of using a real desktop operating system. Building and connecting so many different features together was a major accomplishment. 🧪 What should people know to test the project? To properly test OceanOS, people should explore the desktop and try opening different apps, moving and resizing windows, using the menus, changing themes and wallpapers, testing the bottom bar, and checking the different system controls. They should also try features such as Ocean Store , app installation/uninstallation, Lumos , and switching between available OS modes. Some features may take a moment to load, so giving the interface a few seconds when testing is recommended. Thank you to everyone who has supported me in creating OceanOS. It means a lot to me, and I hope you have a wonderful experience. Have a breezy day!🌊", "repo": "https://github.com/SaiDanielK/OceanOS/tree/WindowsOS-Version", "demo": "https://ocean-os-one.vercel.app/"}, {"ship_num": 2, "ts": "2026-08-22T04:58:50Z", "hours": 15.0, "multiplier": 19.36, "payout": 260, "blessing": "neutral", "text": "OceanOS 🌊— A Web-Based Operating System Experience Introducing OceanOS, a web-based operating system that brings the look and feel of a modern desktop environment right to your browser. Unlike standard websites or separate applications, OceanOS offers a comprehensive desktop experience where everything—from applications and windows to menus and animations—works together smoothly as one unified system. OceanOS features a variety of built-in applications such as Files, Settings, Music, Gallery, Calendar, Weather, and Ocean Store, among others. Each application is designed to integrate seamlessly into the operating system, offering interactive windows and behaviors that feel intuitive and familiar. Developing OceanOS presented its own set of challenges, particularly in ensuring that all its components worked together seamlessly. I decided to create a consistent user experience rather than a disjointed collection of features. Every interaction, whether it’s launching an app, moving a window, or changing the system’s appearance, is thoughtfully designed to mimic the experience of using a real computer. I take pride in how OceanOS has evolved. At first, it was just a simple web-based desktop, and now, it has grown into a rich and immersive operating system experience. OceanOS combines a traditional desktop interface with custom applications, personalization options, animations, and Lumos, an intelligent multilingual AI assistant powered by Gemini, creating an environment you can explore, rather than just a website to browse. OceanOS is designed to be interacted with, so I encourage you to dive in and use it as you would any real operating system: Open and explore different applications. Move, resize, minimize, maximize, and close windows as needed. Use the bottom bar and windows grid for navigation. Search for applications and investigate the available options. Customize the system theme, visual style, and wallpaper to suit your preferences. Access the Ocean Store to experiment with installing and managing applications. Discover how the built-in apps interact to enhance your productivity. Try out Lumos, our AI assistant, to see how it can assist you. Experiment with menus, controls, animations, and other interactive elements throughout the desktop. For the best experience, I recommend using OceanOS on a desktop or laptop browser in fullscreen mode. A larger display allows you to fully enjoy the desktop environment, windows, animations, and applications as intended. Welcome to OceanOS 4.0🌊—an operating system designed for the web, inviting you to explore, engage with, and experience it just like you would with any traditional computer. Have a breezy day!🌊", "repo": "https://github.com/SaiDanielK/OceanOS/tree/WindowsOS-Version", "demo": "https://ocean-os-one.vercel.app/"}, {"ship_num": 3, "ts": "2026-08-07T18:32:47Z", "hours": 8.0, "multiplier": 16.41, "payout": 132, "blessing": "neutral", "text": "OceanOS 🌊 3.0 (Ship #3): OceanOS is a web-based desktop experience that brings the feel of an operating system into the browser. I built it as an ocean-themed, interactive environment with a boot sequence, a taskbar, draggable windows, built-in apps, and a polished desktop layout that feels familiar but still unique. The goal was to create something playful and immersive while still feeling functional and thoughtfully designed. The most challenging part was making the experience feel smooth and believable without relying on a traditional desktop environment. Balancing UI polish, window interactions, app behavior, and overall performance required a lot of work. I’m proud of how great OceanOS feels as a whole, especially the visual identity, the attention to detail in the interface, and the fact that it works as more than just a demo—it feels like a real product experience. People should know that OceanOS is best experienced in a modern browser and that the interactions are most fun when tested with a mouse, since dragging windows and using the desktop UI are central to the experience. If they want to try it locally, they can run the app with the usual Next.js setup, then open it in the browser and explore the desktop, apps, and settings. It’s a project that is easy to enjoy casually, but also rewarding to explore in detail. Well, that was quite the adventure. I started off with a plain template and a dream. Now, I have a complete desktop experience. I hope you enjoy OceanOS as much as I enjoyed creating it! And with no further ado, I give you… OceanOS 3.0!🌊", "repo": "https://github.com/SaiDanielK/OceanOS/tree/WindowsOS-Version", "demo": "https://ocean-os-one.vercel.app/"}, {"ship_num": 4, "ts": "2026-07-24T16:48:57Z", "hours": 17.0, "multiplier": 16.46, "payout": 276, "blessing": "neutral", "text": "OceanOS is a personal project that brings a playful, macOS-inspired desktop experience directly to your web browser. Its goal is to create a calm, relaxing ocean-themed environment that feels both immersive and enjoyable to explore. Built with modern web technologies such as Next.js, React, Zustand for state management, and Tailwind CSS for styling, OceanOS combines a polished interface with interactive functionality. The desktop includes a variety of built-in applications, ranging from everyday utilities like Calculator, Notes, and Calendar to entertainment apps like Music, Gallery, and even a TikTok-style video viewer. You’ll also find productivity and exploration tools, including a File Explorer, Weather app, a web browser that defaults to Wikipedia, and Ocean Shell—a fully interactive command-line interface that’s easily my favorite feature in the project. A quick note before you try it: if you open an app but can’t see it, your display is probably too small for the default window layout. OceanOS 2.0 was primarily tested on a 15.6-inch Windows 11 display. If this happens, simply zoom out in your browser (Ctrl + -) and drag the window back into view. OceanOS has been an exciting creative challenge and a great way to experiment with modern web development. The focus has always been on building a fun, visually appealing, and functional desktop experience that anyone can enjoy. The project is constantly evolving, with new features and improvements planned for future updates. That’s all for now! I hope you enjoy exploring OceanOS as much as I enjoyed building it. Have a breezy day! 🌊", "repo": "https://github.com/SaiDanielK/OceanOS/tree/WindowsOS-Version", "demo": "https://ocean-os-one.vercel.app/"}, {"ship_num": 5, "ts": "2026-07-10T23:56:45Z", "hours": 28.0, "multiplier": 14.12, "payout": 177, "blessing": "neutral", "text": "Welcome to OceanOS! I’m glad to finally present this project to the public and I hope that everyone gets their share of fun in this amazing simulation. I created OceanOS, an ocean-themed user-friendly desktop-simulation that allows users to experience the looks of macOS in their web browsers. To me, the most challenging part of my project was making all the apps fit on a user’s screen. I solved it by adjusting the sizes of all the apps to fit a certain position when the website is in full screen so that the user gets an amazing experience. However, if you would like the optimal experience from OceanOS, it is highly recommended to go full screen, especially in a 15.6 inch laptop (the kind I use). In my project, I am most proud of the web browser as it took me many attempts to perfect the Typescript code so that users not only can see the Wikipedia page, but also the browser simulation. Usually, implementing embed websites are very rare, so I chose Wikipedia as a base. It just so happened that Wikipedia is completely open-source and is allowed to be used in iframes. For OceanOS testers, please note, if you have not already, to go Full Screen when you visit my website. I apologize for any sizing inconveniences, and if you find yourself in such a situation, kindly resize the windows to your preference. Additionally, please adjust your browser settings to allow sound so that the startup sound can be heard. And with no further ado, I give you… OceanOS! 🥳", "repo": "https://github.com/SaiDanielK/OceanOS/tree/WindowsOS-Version", "demo": "https://ocean-os-one.vercel.app/"}]...
|
[{"post_id": 58468, "ts": "202 [{"post_id": 58468, "ts": "2026-08-30T21:45:04Z", "hours": 4.6328, "text": "🌊 OCEAN OS IS BACK!!!! 🥳🥳🌊🌊 OCEAN OS 5.0 HAS ARRIVED. 🚀🌊 We had an AMAZING time with OceanOS 4.0, but I decided it was time to take things to the next level with a newer, more complex generation of OceanOS. I like to call it “The Gen 5.” JK. It’s just called OceanOS 5.0. 😏 Seriously though, this is one of the biggest updates I’ve made so far! 🍎 Windows or macOS? You Choose. Some of you might remember we talked about adding a toggle between Windows Mode and macOS Mode . Well… it’s finally here! And yes — I brought back the beloved macOS-style dock from OceanOS 3.0. 🫡 And I am NOT exaggerating: It took me FIVE HOURS to bring that dock back. 5. WHOLE. HOURS. 😭 By the time I finished, I was running on about 3% brain power and an unreasonable amount of sleep deprivation. JK, I’m fine guys. 😂 Getting the dock working with windows, animations, app states, minimizing, restoring, and everything else was definitely an experience. But honestly? It was completely worth it. 🛠️ A LOT of Bug Fixes I fixed a bunch of bugs and annoyances you guys reported, cleaned up interactions, improved the UX, and fixed several weird behaviors. The Guide also got a major visual upgrade so it feels more like a real part of the OS. 🔴🟡🟢 THE BUTTONS ARE BACK THE THREE BUTTONS ARE BACK. 😂 macOS Mode now has: 🔴 Close 🟡 Minimize 🟢 Maximize It’s a small detail, but it makes macOS Mode feel MUCH more authentic. And after five hours getting the dock back, I was NOT leaving those out. 😭 🌅 A Fresh New Background I added a brand-new, high-quality background because a beautiful OS deserves a beautiful wallpaper. 🌊 A lot of you have asked where I find my backgrounds. One place I like is WallpaperFlare : WallpaperFlare There are some seriously awesome wallpapers there! ✨ A More Polished Top Bar The top bar got a major visual refresh to make it cleaner, more modern, and more macOS-inspired . And honestly… I LOVE how it turned out. 😭🔥 I also added smaller improvements like smoother UX, cleaner visuals, better interactions, polished menus, animation improvements, and lots of tiny details. The goal? Make OceanOS feel less like a website pretending to be an operating system… and more like an actual operating system. 🧑💻 How Did I Make This? A lot of you have asked how I created OceanOS. Honestly, OceanOS has really grown on me. I started it just a few months ago, a little after Stardance started. What began as a simple project became MUCH bigger than I expected. I started with a blank Next.js template. No OS. No desktop. No apps. No windows. Just a blank project. From there, I built everything step by step and had to learn an entirely new coding language. And honestly? I had a blast doing it. There were definitely moments where I wanted to throw my computer out the window. 😂 But every problem I solved made OceanOS a little better. 🌊 OceanOS 3.0 Was a HUGE Milestone OceanOS 3.0 was special because that was when I finally got the dock working the way I wanted. Looking back at where OceanOS started compared to where it is now… I’m honestly pretty proud of how far it’s come. What started as a blank Next.js project has become a full interactive desktop environment with apps, windows, themes, animations, system UI, multiple OS modes, and much more. And this is only OceanOS 5.0. 👀 Who knows where this thing is going next? 🚀 OceanOS 5.0 Is Coming I hope you guys enjoy the new OceanOS! You’ll be able to check it out once I ship the project on Stardance , and it’ll be available on Vercel soon. Thank you to everyone who has followed the project, given feedback, reported bugs, suggested features, or simply checked it out. OceanOS has come a LONG way, and I’m excited to keep building it. Welcome to OceanOS 5.0. 🌊 Have a breezy day! 🌊😎"}, {"post_id": 52075, "ts": "2026-08-22T04:39:33Z", "hours": 0.6983, "text": "Made the BootScreen animation WAY better. Pics are attached below. I also updated the top bar menu dropdown options and fixed a few bugs in the Ocean Store. I triple checked everything worked and I see no errors. I believe OceanOS 4.0 is ready to ship! 😁"}, {"post_id": 52040, "ts": "2026-08-22T02:40:35Z", "hours": 0.6683, "text": "Added an Activity Monitor app 📟 (btw this emoji took me SO long to find) and it’s starting to look pretty good. Just adding a few more features to the desktop and OceanOS will soon be ready to ship!"}, {"post_id": 52011, "ts": "2026-08-22T01:29:48Z", "hours": 2.0506, "text": "🌊 OceanOS 4.0 — The OceanOS Messages Era Is Here OKAY… I KNOW I JUST RELEASED OCEANOS 4.0. 😭 But I wasn’t done. After all the SVGs, debugging, redesigns, new apps, and Lumos AI, I decided OceanOS needed something that felt a little more… alive. So I built something new. 💬 Introducing: Messages OceanOS now has a Messages app . And this isn’t just a basic texting app. You can now text, voice call, and video call Lumos AI, Alex, Sam, Maya, and the OceanOS Team. Yep. All of them. 😏 Each character has their own advanced Gemini-powered voice, personality, and communication experience. They’re designed to feel like actual people you can interact with—not just static AI characters sitting inside an app. And the best part? It all works together seamlessly. Text them. Call them. Video call them. Switch between conversations. Everything is integrated directly with the Gemini API key , so the experience feels like one connected part of OceanOS instead of a bunch of separate features glued together. 👥 Meet the Crew 🤖 Lumos AI You already know Lumos. Now you can actually text, call, and video call Lumos directly from Messages. 👨 Alex One of the new voices joining the OceanOS experience. Text him, call him, or start a video call and see what happens. 👩 Sam Another new Gemini-powered voice with their own personality and communication style. 🧔♂️ Maya Yep, Maya is here too. He’s fully integrated into Messages and ready to talk. 🌊 OceanOS Team And of course… the OceanOS Team. Because sometimes you just need to talk to the people behind the ocean. 🌊🫡 🔐 Four Accounts. One Ocean. When you first open Messages, you’ll be greeted with four account options: Guest Ocean Developer Personal Work This makes Messages feel like an actual part of the operating system rather than just another app. Different accounts. Different conversations. One OceanOS experience. 📞 Texting. Voice. Video. This is probably the part I’m most excited about. Messages isn’t limited to typing. You can have a normal conversation through text , switch to a voice call , or jump into a video call . And because these are all powered by the same Gemini integration, everything works together surprisingly smoothly. I spent a LOT of time making sure the experience felt seamless. No weird transitions. No completely separate systems. Just… Messages. 🚀 👉 What’s Next? I have a feeling this is going to open up a LOT of possibilities for OceanOS. More voices. More characters. More integrations. More ways to communicate. And maybe even more things I probably shouldn’t be promising yet. 👀 But for now… Messages is here. Text them. Call them. Video call them. Try all four accounts. See what they say. And most importantly… Please don’t traumatize the OceanOS Team. 😭 🌊 Welcome to the next generation of OceanOS. The ocean isn’t just a place you explore anymore. It’s a place you can talk to. Have fun. 🌊"}, {"post_id": 47284, "ts": "2026-08-15T04:20:22Z", "hours": 11.6897, "text": "🌊 OceanOS 4.0 — I Know You All Have Been Waiting For This WOW. It has been a WHILE! I put a LOT of work into OceanOS 4.0, and I genuinely think you guys are going to love it. If you thought OceanOS 3.0 was great, just wait until you see this. ⏱️ The 12 Hours of OceanOS 4.0 Hour 1 — Settings & Boot Screen I upgraded the Settings app , fixed some long-awaited features, and completely redesigned the OceanOS boot screen. Hour 2 — The Dock Saga 😭 I spent basically the entire hour trying to bring the dock back. Eventually, I gave up. 😭 I later figured out what was wrong, but I’m NOT spending another hour making a macOS-style toggle. Psst… OceanOS 5.0. 😏 Hour 3 — Debugging I found what felt like a hundred problems while testing everything. After an entire hour of debugging, I finally said: “That’s good enough.” Then I closed my laptop and went to bed. Hour 4 — User Experience I realized many of my apps weren’t user-friendly, so I redesigned a bunch of them and completely changed the Ocean Store design. Hours 5 & 6 — Tiny Changes Mostly small changes that somehow took forever. 😭 I also added several new apps. Hour 7 — Start Launcher I redesigned the Start Launcher and added even more apps to the Ocean Store. Hour 8 — Tweaks Added minor features, cleaned things up, and improved the code. At this point, OceanOS was looking REALLY good. Hour 9 — SVG Era I removed the old icons from the project and started converting everything to SVG . Hour 10 — SVG Is NOT Easy Probably the most stressful hour. Creating and refining SVGs took forever, but they turned out pretty great. Hour 11 — Polish I polished the SVG icons and improved the overall user experience. Hour 12 — Final Push I updated the project to use the new SVG icons, debugged everything, and added one more app … 🤖 Introducing: Lumos AI Lumos AI uses Gemini 3.1 Flash Live Preview to actually speak with you. It can answer questions, communicate through voice, and support multiple languages . Basically, you can actually talk to it. 😏 🌊 And Here We Are OceanOS 4.0 is FINALLY here! 12 hours. Countless bugs. Way too much SVG. A questionable amount of sleep. And a LOT of ocean-themed code. The Vercel deployment is soon to be live , GitHub commits are coming right now , and you can access the localhost version whenever you want. 📱 Apps About, Music, Gallery, Settings, Camera, Ocean Shell, Web Browser, Notes, Calculator, TikTok, OceanStore, Markdown, TypeSprint, Location, Calendar, Weather, Files, Voice Recorder, Clock, Internet Speed Test, Lumos, and OceanCode. Explore everything. Try the new apps. Please don’t break something. 😭 And most importantly… Enjoy the Ocean. 🌊 The ocean breeze will stay here for as long as you need it. 🌊 Welcome to OceanOS! Your personal breezy companion. Have a great day! 🌊"}, {"post_id": 42804, "ts": "2026-08-07T18:23:23Z", "hours": 0.3275, "text": "Fixed a few bugs, deployed both my Github branches to Vercel, and polished my website for the optimal user experience. OceanOS 3.0 is officially ready to be shipped!🌊🌊🥳🥳"}, {"post_id": 42767, "ts": "2026-08-07T17:24:53Z", "hours": 7.6942, "text": "OceanOS 3.0 (WindowsOS Edition) OceanOS 3.0 is a redesigned web-based desktop environment built with React. This release focuses on creating a more polished and familiar desktop experience while keeping the ocean-inspired style that defines the project. Project Links Live Demo: https://ocean-os-one.vercel.app GitHub Repository: https://github.com/SaiDanielK/OceanOS/tree/WindowsOS-Version What’s New in Version 3.0 Layout & Navigation Redesigned the desktop layout with a cleaner, grid-based arrangement. Added a Windows-inspired taskbar for a more familiar navigation experience. Updated the top menu bar with fully functional navigation buttons that integrate with the system. Visual Improvements Replaced the old react-battery-gauge component with a custom blue gradient battery indicator that better matches the overall theme. Refreshed the Wi-Fi and volume controls with a cleaner, more responsive design. Improved the clock formatting so the date and time fit naturally within the taskbar. Updated the widget designs to give them a more modern and consistent appearance. Customization OceanOS now ships with a custom ocean-themed desktop by default. Easily switch wallpapers and personalize the desktop through the built-in Settings app. Tech Stack Framework: React.js Hosting: Vercel Thanks for checking out OceanOS 3.0! I had a great time building this version, and I hope you enjoy exploring it! Have a breezy day!🌊"}, {"post_id": 33902, "ts": "2026-07-24T06:14:28Z", "hours": 0.9478, "text": "Fixed a few bugs and added a few new features to my website. Just edited a few files from the src folder and I think I’m ready to ship my project now. The github link is: https://github.com/SaiDanielK/OceanOS and the Demo Link is: https://ocean-os-one.vercel.app/ Enjoy!"}, {"post_id": 33871, "ts": "2026-07-24T04:19:59Z", "hours": 5.7694, "text": "🌊 OceanOS 2.0 — A Bigger, Better, More Polished Experience OceanOS 2.0 is here! This update brings several new applications, major improvements to the Ocean Store, visual polish, bug fixes, an improved boot experience, and a brand-new file management experience integrated directly into the website. 🌤️ New Weather App OceanOS now has its own dedicated Weather app! You can now check the weather directly from your OceanOS desktop alongside the new Calendar app. Both applications have also been integrated into the Ocean Store, making them part of the growing OceanOS ecosystem. 🛍️ Install and Uninstall Apps from the Ocean Store The Ocean Store is now more interactive than ever. Users can now: Install applications directly from the Ocean Store Uninstall applications they no longer want Manage their OceanOS applications more dynamically This brings OceanOS closer to feeling like a real operating system with its own application management system. 📁 Brand-New Files App OceanOS now includes a new Files app integrated directly into the website. The Files app connects with the project’s GitHub files and provides a more organized way to explore the files and content associated with the OceanOS project. This is another step toward making OceanOS feel like a complete desktop environment rather than just a collection of applications. 🚀 Improved Boot Screen The OceanOS boot screen has been redesigned and polished to provide a smoother and more professional startup experience. Improvements include: A cleaner and more modern design Improved animations and transitions Better visual polish A more refined first impression when starting OceanOS 🖥️ Visual Improvements & A More Polished Look OceanOS 2.0 received a significant visual refresh. Updates include: A new and more polished wallpaper experience Updated icons Improved overall visual consistency Better spacing and positioning A cleaner, more refined desktop interface The goal was to make OceanOS feel more cohesive, modern, and enjoyable to use. 🔍 Bug Fixes & Improvements Several previous issues have also been fixed in this update. 🐛 Dock Magnification Fix The dock hover magnification effect has been improved and the previous magnification bug has been fixed. The dock should now respond more smoothly when hovering over icons. 📌 Improved Z-Indexing Window layering has been improved to make sure applications appear in the correct order when interacting with the desktop. This should make overlapping windows and app interactions feel much more natural. 🔎 Search Improvements The search system has also been fixed and improved, along with several other bugs from previous versions. 🌊 Welcome to OceanOS 2.0 OceanOS 2.0 is a major step forward for the project. With new apps, a more powerful Ocean Store, a new Files app, an improved boot screen, refreshed visuals, better window management, and numerous bug fixes, OceanOS is continuing to evolve into a more complete web-based operating system experience. Have fun exploring OceanOS, try out the new features, and enjoy the new update! 💻P.S. Please do not spam the suggestion box in the Notes app. Suggestions are always welcome, but please use them responsibly so everyone can help improve OceanOS. 🌊 Welcome to OceanOS 2.0 — and have fun!"}, {"post_id": 32635, "ts": "2026-07-21T22:25:50Z", "hours": 6.0922, "text": "🚀 OceanOS 2.0 Beta Update Over the last 10 hours , I’ve been hard at work improving OceanOS. Here’s what’s new in OceanOS 2.0 Beta : ✨ New Features Added a Close All button to the top bar. Added a battery indicator using react-battery-gauge in the top bar. Added mock Wi-Fi and sound indicators . Added Shut Down and Sleep options. Sleep temporarily pauses OceanOS until you click anywhere on the screen to wake it up. Added a search bar below the top bar to quickly search for apps. Added draggable Advanced Clock and Weather widgets. 📱 New Apps Notes Calculator TikTok App Store Calendar 💡 Tips For the best experience, make sure to allow sound and geolocation permissions when prompted. I’ve also attached a screenshot of the new OceanOS 2.0 Beta for reference. Enjoy! 😁"}, {"post_id": 29836, "ts": "2026-07-16T23:47:47Z", "hours": 3.9769, "text": "Devlog: New Features for Ship #2 Overview Migrated OceanOS window layout from hardcoded positioning to a z-index-window layout system . This removes the need for manual position management across individual apps. Also added a notes app with suggestions and changed app positional settings. Changes Window Component ( src/components/Window.tsx ) Added Optional Positioning : x and y props are now optional with fallback defaults Added dynamic offset calculation : Windows now cascade based on their z-index value Formula: baseOffset = (zIndex - 100) * 50px Easy to Use Layout Management Desktop Layout ( src/components/Desktop.tsx ) Removed hardcoded positions : All 8 app windows no longer have explicit x={...} and y={...} coordinates Made Prop Passing Easier : Windows now only define z-index, width, and height Windows automatically position themselves based on their stacking order Notes App and Suggestions Configuration ( src/apps/Notes.tsx ) Created a Notes application with a suggestion box where users can give their opinion on OceanOS Configured the suggestion box to use JSON : export async function GET () { const suggestions = await readSuggestions (); return NextResponse . json ( suggestions ); }"}, {"post_id": 26259, "ts": "2026-07-10T22:58:16Z", "hours": 2.1953, "text": "I spent the last 2 hours adding a web browser app (with an embed Wikipedia page) so that users can simulate a real web browser inside my operating system. I also added a transparent top bar to my project and a splash screen that opens when my website first loads. It has a ocean-colored progress bar and a nice ocean-themed background. Remember to go Full Screen so you can view the whole project!"}, {"post_id": 25387, "ts": "2026-07-09T17:29:01Z", "hours": 0.3478, "text": "I just added dock magnification on hover."}, {"post_id": 25358, "ts": "2026-07-09T16:30:35Z", "hours": 25.9081, "text": "Hello everyone! So recently, I started creating an ocean-themed user-friendly desktop-simulation that allows users to experience the looks of macOS in their web browsers. I have started this project with Next.js, React, Zustand, and Tailwind CSS. So far, I have created the dock, in which all the apps will be stored. I have also added all the apps I am going to create into it for a good start. I have also added windows and a few features in each of them. For good measure, I have also added a cool background."}]...
|
Title: OceanOS by @Sai-K | Stardance
Devlogs:
Hel Title: OceanOS by @Sai-K | Stardance
Devlogs:
Hello everyone! So recently, I started creating an ocean-themed user-friendly desktop-simulation that allows users to experience the looks of macOS in their web browsers. I have started this project with Next.js, React, Zustand, and Tailwind CSS. So far, I have created the dock, in which all the apps will be stored. I have also added all the apps I am going to create into it for a good start. I have also added windows and a few features in each of them. For good measure, I have also added a cool background.
I just added dock magnification on hover.
I spent the last 2 hours adding a web browser app (with an embed Wikipedia page) so that users can simulate a real web browser inside my operating system. I also added a transparent top bar to my project and a splash screen that opens when my website first loads. It has a ocean-colored progress bar and a nice ocean-themed background. Remember to go Full Screen so you can view the whole project!
Devlog: New Features for Ship #2 Overview Migrated OceanOS window layout from hardcoded positioning to a z-index-window layout system . This removes the need for manual position management across individual apps. Also added a notes app with suggestions and changed app positional settings. Changes Window Component ( src/components/Window.tsx ) Added Optional Positioning : x and y props are now optional with fallback defaults Added dynamic offset calculation : Windows now cascade based on their z-index value Formula: baseOffset = (zIndex - 100) * 50px Easy to Use Layout Management Desktop Layout ( src/components/Desktop.tsx ) Removed hardcoded positions : All 8 app windows no longer have explicit x={...} and y={...} coordinates Made Prop Passing Easier : Windows now only define z-index, width, and height Windows automatically position themselves based on their stacking order Notes App and Suggestions Configuration ( src/apps/Notes.tsx ) Created a Notes application with a suggestion box where users can give their opinion on OceanOS Configured the suggestion box to use JSON : export async function GET () { const suggestions = await readSuggestions (); return NextResponse . json ( suggestions ); }
🚀 OceanOS 2.0 Beta Update Over the last 10 hours , I’ve been hard at work improving OceanOS. Here’s what’s new in OceanOS 2.0 Beta : ✨ New Features Added a Close All button to the top bar. Added a battery indicator using react-battery-gauge in the top bar. Added mock Wi-Fi and sound indicators . Added Shut Down and Sleep options. Sleep temporarily pauses OceanOS until you click anywhere on the screen to wake it up. Added a search bar below the top bar to quickly search for apps. Added draggable Advanced Clock and Weather widgets. 📱 New Apps Notes Calculator TikTok App Store Calendar 💡 Tips For the best experience, make sure to allow sound and geolocation permissions when prompted. I’ve also attached a screenshot of the new OceanOS 2.0 Beta for reference. Enjoy! 😁
🌊 OceanOS 2.0 — A Bigger, Better, More Polished Experience OceanOS 2.0 is here! This update brings several new applications, major improvements to the Ocean Store, visual polish, bug fixes, an improved boot experience, and a brand-new file management experience integrated directly into the website. 🌤️ New Weather App OceanOS now has its own dedicated Weather app! You can now check the weather directly from your OceanOS desktop alongside the new Calendar app. Both applications have also been integrated into the Ocean Store, making them part of the growing OceanOS ecosystem. 🛍️ Install and Uninstall Apps from the Ocean Store The Ocean Store is now more interactive than ever. Users can now: Install applications directly from the Ocean Store Uninstall applications they no longer want Manage their OceanOS applications more dynamically This brings OceanOS closer to feeling like a real operating system with its own application management system. 📁 Brand-New Files App OceanOS now includes a new Files app integrated directly into the website. The Files app connects with the project’s GitHub files and provides a more organized way to explore the files and content associated with the OceanOS project. This is another step toward making OceanOS feel like a complete desktop environment rather than just a collection of applications. 🚀 Improved Boot Screen The OceanOS boot screen has been redesigned and polished to provide a smoother and more professional startup experience. Improvements include: A cleaner and more modern design Improved animations and transitions Better visual polish A more refined first impression when starting OceanOS 🖥️ Visual Improvements & A More Polished Look OceanOS 2.0 received a significant visual refresh. Updates include: A new and more polished wallpaper experience Updated icons Improved overall visual consistency Better spacing and positioning A cleaner, more refined desktop interface The goal was to make OceanOS feel more cohesive, modern, and enjoyable to use. 🔍 Bug Fixes & Improvements Several previous issues have also been fixed in this update. 🐛 Dock Magnification Fix The dock hover magnification effect has been improved and the previous magnification bug has been fixed. The dock should now respond more smoothly when hovering over icons. 📌 Improved Z-Indexing Window layering has been improved to make sure applications appear in the correct order when interacting with the desktop. This should make overlapping windows and app interactions feel much more natural. 🔎 Search Improvements The search system has also been fixed and improved, along with several other bugs from previous versions. 🌊 Welcome to OceanOS 2.0 OceanOS 2.0 is a major step forward for the project. With new apps, a more powerful Ocean Store, a new Files app, an improved boot screen, refreshed visuals, better window management, and numerous bug fixes, OceanOS is continuing to evolve into a more complete web-based operating system experience. Have fun exploring OceanOS, try out the new features, and enjoy the new update! 💻P.S. Please do not spam the suggestion box in the Notes app. Suggestions are always welcome, but please use them responsibly so everyone can help improve OceanOS. 🌊 Welcome to OceanOS 2.0 — and have fun!
Fixed a few bugs and added a few new features to my website. Just edited a few files from the src folder and I think I’m ready to ship my project now. The github link is: https://github.com/SaiDanielK/OceanOS and the Demo Link is: https://ocean-os-one.vercel.app/ Enjoy!
OceanOS 3.0 (WindowsOS Edition) OceanOS 3.0 is a redesigned web-based desktop environment built with React. This release focuses on creating a more polished and familiar desktop experience while keeping the ocean-inspired style that defines the project. Project Links Live Demo: https://ocean-os-one.vercel.app GitHub Repository: https://github.com/SaiDanielK/OceanOS/tree/WindowsOS-Version What’s New in Version 3.0 Layout & Navigation Redesigned the desktop layout with a cleaner, grid-based arrangement. Added a Windows-inspired taskbar for a more familiar navigation experience. Updated the top menu bar with fully functional navigation buttons that integrate with the system. Visual Improvements Replaced the old react-battery-gauge component with a custom blue gradient battery indicator that better matches the overall theme. Refreshed the Wi-Fi and volume controls with a cleaner, more responsive design. Improved the clock formatting so the date and time fit naturally within the taskbar. Updated the widget designs to give them a more modern and consistent appearance. Customization OceanOS now ships with a custom ocean-themed desktop by default. Easily switch wallpapers and personalize the desktop through the built-in Settings app. Tech Stack Framework: React.js Hosting: Vercel Thanks for checking out OceanOS 3.0! I had a great time building this version, and I hope you enjoy exploring it! Have a breezy day!🌊
Fixed a few bugs, deployed both my Github branches to Vercel, and polished my website for the optimal user experience. OceanOS 3.0 is officially ready to be shipped!🌊🌊🥳🥳
🌊 OceanOS 4.0 — I Know You All Have Been Waiting For This WOW. It has been a WHILE! I put a LOT of work into OceanOS 4.0, and I genuinely think you guys are going to love it. If you thought OceanOS 3.0 was great, just wait until you see this. ⏱️ The 12 Hours of OceanOS 4.0 Hour 1 — Settings & Boot Screen I upgraded the Settings app , fixed some long-awaited features, and completely redesigned the OceanOS boot screen. Hour 2 — The Dock Saga 😭 I spent basically the entire hour trying to bring the dock back. Eventually, I gave up. 😭 I later figured out what was wrong, but I’m NOT spending another hour making a macOS-style toggle. Psst… OceanOS 5.0. 😏 Hour 3 — Debugging I found what felt like a hundred problems while testing everything. After an entire hour of debugging, I finally said: “That’s good enough.” Then I closed my laptop and went to bed. Hour 4 — User Experience I realized many of my apps weren’t user-friendly, so I redesigned a bunch of them and completely changed the Ocean Store design. Hours 5 & 6 — Tiny Changes Mostly small changes that somehow took forever. 😭 I also added several new apps. Hour 7 — Start Launcher I redesigned the Start Launcher and added even more apps to the Ocean Store. Hour 8 — Tweaks Added minor features, cleaned things up, and improved the code. At this point, OceanOS was looking REALLY good. Hour 9 — SVG Era I removed the old icons from the project and started converting everything to SVG . Hour 10 — SVG Is NOT Easy Probably the most stressful hour. Creating and refining SVGs took forever, but they turned out pretty great. Hour 11 — Polish I polished the SVG icons and improved the overall user experience. Hour 12 — Final Push I updated the project to use the new SVG icons, debugged everything, and added one more app … 🤖 Introducing: Lumos AI Lumos AI uses Gemini 3.1 Flash Live Preview to actually speak with you. It can answer questions, communicate through voice, and support multiple languages . Basically, you can actually talk to it. 😏 🌊 And Here We Are OceanOS 4.0 is FINALLY here! 12 hours. Countless bugs. Way too much SVG. A questionable amount of sleep. And a LOT of ocean-themed code. The Vercel deployment is soon to be live , GitHub commits are coming right now , and you can access the localhost version whenever you want. 📱 Apps About, Music, Gallery, Settings, Camera, Ocean Shell, Web Browser, Notes, Calculator, TikTok, OceanStore, Markdown, TypeSprint, Location, Calendar, Weather, Files, Voice Recorder, Clock, Internet Speed Test, Lumos, and OceanCode. Explore everything. Try the new apps. Please don’t break something. 😭 And most importantly… Enjoy the Ocean. 🌊 The ocean breeze will stay here for as long as you need it. 🌊 Welcome to OceanOS! Your personal breezy companion. Have a great day! 🌊
🌊 OceanOS 4.0 — The OceanOS Messages Era Is Here OKAY… I KNOW I JUST RELEASED OCEANOS 4.0. 😭 But I wasn’t done. After all the SVGs, debugging, redesigns, new apps, and Lumos AI, I decided OceanOS needed something that felt a little more… alive. So I built something new. 💬 Introducing: Messages OceanOS now has a Messages app . And this isn’t just a basic texting app. You can now text, voice call, and video call Lumos AI, Alex, Sam, Maya, and the OceanOS Team. Yep. All of them. 😏 Each character has their own advanced Gemini-powered voice, personality, and communication experience. They’re designed to feel like actual people you can interact with—not just static AI characters sitting inside an app. And the best part? It all works together seamlessly. Text them. Call them. Video call them. Switch between conversations. Everything is integrated directly with the Gemini API key , so the experience feels like one connected part of OceanOS instead of a bunch of separate features glued together. 👥 Meet the Crew 🤖 Lumos AI You already know Lumos. Now you can actually text, call, and video call Lumos directly from Messages. 👨 Alex One of the new voices joining the OceanOS experience. Text him, call him, or start a video call and see what happens. 👩 Sam Another new Gemini-powered voice with their own personality and communication style. 🧔♂️ Maya Yep, Maya is here too. He’s fully integrated into Messages and ready to talk. 🌊 OceanOS Team And of course… the OceanOS Team. Because sometimes you just need to talk to the people behind the ocean. 🌊🫡 🔐 Four Accounts. One Ocean. When you first open Messages, you’ll be greeted with four account options: Guest Ocean Developer Personal Work This makes Messages feel like an actual part of the operating system rather than just another app. Different accounts. Different conversations. One OceanOS experience. 📞 Texting. Voice. Video. This is probably the part I’m most excited about. Messages isn’t limited to typing. You can have a normal conversation through text , switch to a voice call , or jump into a video call . And because these are all powered by the same Gemini integration, everything works together surprisingly smoothly. I spent a LOT of time making sure the experience felt seamless. No weird transitions. No completely separate systems. Just… Messages. 🚀 👉 What’s Next? I have a feeling this is going to open up a LOT of possibilities for OceanOS. More voices. More characters. More integrations. More ways to communicate. And maybe even more things I probably shouldn’t be promising yet. 👀 But for now… Messages is here. Text them. Call them. Video call them. Try all four accounts. See what they say. And most importantly… Please don’t traumatize the OceanOS Team. 😭 🌊 Welcome to the next generation of OceanOS. The ocean isn’t just a place you explore anymore. It’s a place you can talk to. Have fun. 🌊
Added an Activity Monitor app 📟 (btw this emoji took me SO long to find) and it’s starting to look pretty good. Just adding a few more features to the desktop and OceanOS will soon be ready to ship!
Made the BootScreen animation WAY better. Pics are attached below. I also updated the top bar menu dropdown options and fixed a few bugs in the Ocean Store. I triple checked everything worked and I see no errors. I believe OceanOS 4.0 is ready to ship! 😁
🌊 OCEAN OS IS BACK!!!! 🥳🥳🌊🌊 OCEAN OS 5.0 HAS ARRIVED. 🚀🌊 We had an AMAZING time with OceanOS 4.0, but I decided it was time to take things to the next level with a newer, more complex generation of OceanOS. I like to call it “The Gen 5.” JK. It’s just called OceanOS 5.0. 😏 Seriously though, this is one of the biggest updates I’ve made so far! 🍎 Windows or macOS? You Choose. Some of you might remember we talked about adding a toggle between Windows Mode and macOS Mode . Well… it’s finally here! And yes — I brought back the beloved macOS-style dock from OceanOS 3.0. 🫡 And I am NOT exaggerating: It took me FIVE HOURS to bring that dock back. 5. WHOLE. HOURS. 😭 By the time I finished, I was running on about 3% brain power and an unreasonable amount of sleep deprivation. JK, I’m fine guys. 😂 Getting the dock working with windows, animations, app states, minimizing, restoring, and everything else was definitely an experience. But honestly? It was completely worth it. 🛠️ A LOT of Bug Fixes I fixed a bunch of bugs and annoyances you guys reported, cleaned up interactions, improved the UX, and fixed several weird behaviors. The Guide also got a major visual upgrade so it feels more like a real part of the OS. 🔴🟡🟢 THE BUTTONS ARE BACK THE THREE BUTTONS ARE BACK. 😂 macOS Mode now has: 🔴 Close 🟡 Minimize 🟢 Maximize It’s a small detail, but it makes macOS Mode feel MUCH more authentic. And after five hours getting the dock back, I was NOT leaving those out. 😭 🌅 A Fresh New Background I added a brand-new, high-quality background because a beautiful OS deserves a beautiful wallpaper. 🌊 A lot of you have asked where I find my backgrounds. One place I like is WallpaperFlare : WallpaperFlare There are some seriously awesome wallpapers there! ✨ A More Polished Top Bar The top bar got a major visual refresh to make it cleaner, more modern, and more macOS-inspired . And honestly… I LOVE how it turned out. 😭🔥 I also added smaller improvements like smoother UX, cleaner visuals, better interactions, polished menus, animation improvements, and lots of tiny details. The goal? Make OceanOS feel less like a website pretending to be an operating system… and more like an actual operating system. 🧑💻 How Did I Make This? A lot of you have asked how I created OceanOS. Honestly, OceanOS has really grown on me. I started it just a few months ago, a little after Stardance started. What began as a simple project became MUCH bigger than I expected. I started with a blank Next.js template. No OS. No desktop. No apps. No windows. Just a blank project. From there, I built everything step by step and had to learn an entirely new coding language. And honestly? I had a blast doing it. There were definitely moments where I wanted to throw my computer out the window. 😂 But every problem I solved made OceanOS a little better. 🌊 OceanOS 3.0 Was a HUGE Milestone OceanOS 3.0 was special because that was when I finally got the dock working the way I wanted. Looking back at where OceanOS started compared to where it is now… I’m honestly pretty proud of how far it’s come. What started as a blank Next.js project has become a full interactive desktop environment with apps, windows, themes, animations, system UI, multiple OS modes, and much more. And this is only OceanOS 5.0. 👀 Who knows where this thing is going next? 🚀 OceanOS 5.0 Is Coming I hope you guys enjoy the new OceanOS! You’ll be able to check it out once I ship the project on Stardance , and it’ll be available on Vercel soon. Thank you to everyone who has followed the project, given feedback, reported bugs, suggested features, or simply checked it out. OceanOS has come a LONG way, and I’m excited to keep building it. Welcome to OceanOS 5.0. 🌊 Have a breezy day! 🌊😎
Ships:
Welcome to OceanOS! I’m glad to finally present this project to the public and I hope that everyone gets their share of fun in this amazing simulation. I created OceanOS, an ocean-themed user-friendly desktop-simulation that allows users to experience the looks of macOS in their web browsers. To me, the most challenging part of my project was making all the apps fit on a user’s screen. I solved it by adjusting the sizes of all the apps to fit a certain position when the website is in full screen so that the user gets an amazing experience. However, if you would like the optimal experience from OceanOS, it is highly recommended to go full screen, especially in a 15.6 inch laptop (the kind I use). In my project, I am most proud of the web browser as it took me many attempts to perfect the Typescript code so that users not only can see the Wikipedia page, but also the browser simulation. Usually, implementing embed websites are very rare, so I chose Wikipedia as a base. It just so happened that Wikipedia is completely open-source and is allowed to be used in iframes. For OceanOS testers, please note, if you have not already, to go Full Screen when you visit my website. I apologize for any sizing inconveniences, and if you find yourself in such a situation, kindly resize the windows to your preference. Additionally, please adjust your browser settings to allow sound so that the startup sound can be heard. And with no further ado, I give you… OceanOS! 🥳
OceanOS is a personal project that brings a playful, macOS-inspired desktop experience directly to your web browser. Its goal is to create a calm, relaxing ocean-themed environment that feels both immersive and enjoyable to explore. Built with modern web technologies such as Next.js, React, Zustand for state management, and Tailwind CSS for styling, OceanOS combines a polished interface with interactive functionality. The desktop includes a variety of built-in applications, ranging from everyday utilities like Calculator, Notes, and Calendar to entertainment apps like Music, Gallery, and even a TikTok-style video viewer. You’ll also find productivity and exploration tools, including a File Explorer, Weather app, a web browser that defaults to Wikipedia, and Ocean Shell—a fully interactive command-line interface that’s easily my favorite feature in the project. A quick note before you try it: if you open an app but can’t see it, your display is probably too small for the default window layout. OceanOS 2.0 was primarily tested on a 15.6-inch Windows 11 display. If this happens, simply zoom out in your browser (Ctrl + -) and drag the window back into view. OceanOS has been an exciting creative challenge and a great way to experiment with modern web development. The focus has always been on building a fun, visually appealing, and functional desktop experience that anyone can enjoy. The project is constantly evolving, with new features and improvements planned for future updates. That’s all for now! I hope you enjoy exploring OceanOS as much as I enjoyed building it. Have a breezy day! 🌊
OceanOS 🌊 3.0 (Ship #3): OceanOS is a web-based desktop experience that brings the feel of an operating system into the browser. I built it as an ocean-themed, interactive environment with a boot sequence, a taskbar, draggable windows, built-in apps, and a polished desktop layout that feels familiar but still unique. The goal was to create something playful and immersive while still feeling functional and thoughtfully designed. The most challenging part was making the experience feel smooth and believable without relying on a traditional desktop environment. Balancing UI polish, window interactions, app behavior, and overall performance required a lot of work. I’m proud of how great OceanOS feels as a whole, especially the visual identity, the attention to detail in the interface, and the fact that it works as more than just a demo—it feels like a real product experience. People should know that OceanOS is best experienced in a modern browser and that the interactions are most fun when tested with a mouse, since dragging windows and using the desktop UI are central to the experience. If they want to try it locally, they can run the app with the usual Next.js setup, then open it in the browser and explore the desktop, apps, and settings. It’s a project that is easy to enjoy casually, but also rewarding to explore in detail. Well, that was quite the adventure. I started off with a plain template and a dream. Now, I have a complete desktop experience. I hope you enjoy OceanOS as much as I enjoyed creating it! And with no further ado, I give you… OceanOS 3.0!🌊
OceanOS 🌊— A Web-Based Operating System Experience Introducing OceanOS, a web-based operating system that brings the look and feel of a modern desktop environment right to your browser. Unlike standard websites or separate applications, OceanOS offers a comprehensive desktop experience where everything—from applications and windows to menus and animations—works together smoothly as one unified system. OceanOS features a variety of built-in applications such as Files, Settings, Music, Gallery, Calendar, Weather, and Ocean Store, among others. Each application is designed to integrate seamlessly into the operating system, offering interactive windows and behaviors that feel intuitive and familiar. Developing OceanOS presented its own set of challenges, particularly in ensuring that all its components worked together seamlessly. I decided to create a consistent user experience rather than a disjointed collection of features. Every interaction, whether it’s launching an app, moving a window, or changing the system’s appearance, is thoughtfully designed to mimic the experience of using a real computer. I take pride in how OceanOS has evolved. At first, it was just a simple web-based desktop, and now, it has grown into a rich and immersive operating system experience. OceanOS combines a traditional desktop interface with custom applications, personalization options, animations, and Lumos, an intelligent multilingual AI assistant powered by Gemini, creating an environment you can explore, rather than just a website to browse. OceanOS is designed to be interacted with, so I encourage you to dive in and use it as you would any real operating system: Open and explore different applications. Move, resize, minimize, maximize, and close windows as needed. Use the bottom bar and windows grid for navigation. Search for applications and investigate the available options. Customize the system theme, visual style, and wallpaper to suit your preferences. Access the Ocean Store to experiment with installing and managing applications. Discover how the built-in apps interact to enhance your productivity. Try out Lumos, our AI assistant, to see how it can assist you. Experiment with menus, controls, animations, and other interactive elements throughout the desktop. For the best experience, I recommend using OceanOS on a desktop or laptop browser in fullscreen mode. A larger display allows you to fully enjoy the desktop environment, windows, animations, and applications as intended. Welcome to OceanOS 4.0🌊—an operating system designed for the web, inviting you to explore, engage with, and experience it just like you would with any traditional computer. Have a breezy day!🌊
OceanOS 5.0🌊 🌊 What did you make? I created OceanOS , a web-based operating system designed to feel like a real desktop environment. It includes interactive apps such as Files, Settings, Music, Gallery, Calendar, Weather, Ocean Store, Lumos , and more. OceanOS features draggable and resizable windows, menus, animations, themes, wallpapers, system controls, app installation, and other desktop-style functionality. 🧩 What was challenging? One of the biggest challenges was making all of the different parts of the operating system work together smoothly. Managing windows, animations, app states, menus, themes, sounds, and different OS modes required a lot of careful logic and testing. Making the interface feel responsive and polished while keeping everything consistent was also challenging. 🏆 What are you proud of? I’m most proud of how much OceanOS has grown from a simple web project into a complete interactive OS experience . I’m especially proud of the attention to detail in the UI, the animations, the apps, the window system, and the overall feeling of using a real desktop operating system. Building and connecting so many different features together was a major accomplishment. 🧪 What should people know to test the project? To properly test OceanOS, people should explore the desktop and try opening different apps, moving and resizing windows, using the menus, changing themes and wallpapers, testing the bottom bar, and checking the different system controls. They should also try features such as Ocean Store , app installation/uninstallation, Lumos , and switching between available OS modes. Some features may take a moment to load, so giving the interface a few seconds when testing is recommended. Thank you to everyone who has supported me in creating OceanOS. It means a lot to me, and I hope you have a wonderful experience. Have a breezy day!🌊...
|
1792968547.4861383
|
1793054947.4861383
|
|
40892
|
legacysignal by @simonproyt | Stardance
|
simonproyt
|
1
|
50.0
|
933
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-22T20:18:52Z", "hours": 50.0, "multiplier": 18.54, "payout": 933, "blessing": "neutral", "text": "So i taught this project was going to be easy like creating the tidal client for legacy devices but like i was so naive and didnt yet understand how hard it is going to be but it was good in the end i think because i learned a lot about the signal protocol encryption and about backporting and how to make legacy android do things that it was never intended to do but the project is still not finished and i have a lot of work ahead if i want make the app feature complete to the normal signal mobile app but i think its a great demo and it was a great learning experience", "repo": "https://github.com/simonproyt/legacysignal", "demo": "https://cdn.hackclub.com/01a02af7-c370-7c8f-b806-6ca92696e8a8/demo.mp4"}]...
|
[{"post_id": 52604, "ts": "202 [{"post_id": 52604, "ts": "2026-08-22T20:11:21Z", "hours": 3.6061, "text": "Devlog 11: Fixing a few bugs and getting the app ready to ship So in this time i havent done a lot of like cool stuff rather i was fixing a few bugs that broke the messaging feature and image attachment loading because i wanted to showcase those in my demo video and i fixed the github action so ppl can download an apk for the latest version if they want to try it out on their own legacy device also sorry for not writing a dev log sooner i was kinda busy but now i finally got the time to get the project into a ready to ship state"}, {"post_id": 49850, "ts": "2026-08-18T20:00:49Z", "hours": 4.1261, "text": "Devlog 10: Finally added image sending/receiving support So the next thing i taught i would add to my app is image sending and receiving support because that is like kinda a basic feature that any messaging app needs so i added image reviving sending images from the phones storage and via taking a picture with the camera adding these was kinda annoying with figuring out all the correct endpoints and stuff but i think it was worth it in the end"}, {"post_id": 48433, "ts": "2026-08-16T19:38:19Z", "hours": 2.5408, "text": "Devlog 9: New features and a bit of an ui overhaul So I decided to make the ui a bit more pretty and a few new features So this is what i added: a new cleaner ui contact profile picture support message time stamping in the ui dark theme and theme switcher with persistence these are just like qol improvements that i decided to add into the app nothing special but like i missed a few features like the dark theme myself so nothing major but i hope these changes makes the app more usable to ppl"}, {"post_id": 46921, "ts": "2026-08-14T13:57:31Z", "hours": 4.015, "text": "Devlog 8 Working name syncing So after a lot of work i finally made it work so it can show the name that you entered on the signal set up or the devices not just the phone numbers or just unknown sender or just the user id on my app so i guess another feature added now but i still want to add a few stuff before shipping"}, {"post_id": 45824, "ts": "2026-08-12T15:33:59Z", "hours": 6.4758, "text": "Devlog 7: Partly finally working message send/receive So after a lot of work i finally managed to get message sending and receiving working with all of their related crypto stuff but its kinda broken because our message sending api does not support sealed sender yet only the old legacy unsealed sender api that does not encrypt the sender data like modern signal does so on all of the replies it says that they came from unknown contact rather then the actual contact so im working on implementing that so the current stage of the project is after 3x hours of development is Whats working: registering onto the signal network via the phone number and the captchas receiving messages Whats not working or only partially working: sending messages (not working fully because the sealed sender stuff that i talked about previously)"}, {"post_id": 44528, "ts": "2026-08-10T10:59:03Z", "hours": 3.4514, "text": "Devlog 6 Discoverability finally works So after a lot of pain and trial and error and using the signal android source code as an some sort of example that how does the protocol work now we have a finally working code and i can finally move onto the message encryption/decryption part and make it work"}, {"post_id": 43257, "ts": "2026-08-08T12:38:55Z", "hours": 3.6764, "text": "Debugging hell pt2 sorry guys i have been on vacation and taking a bit of a break from the project because of it but now its back in active development now but sadly after fixing registration there is another problem my phone with the latest signal client sadly cant find my client says that its not registered some why even tho it successfully registers so im working trying to fix that possibly and make this project work finally"}, {"post_id": 39975, "ts": "2026-08-03T10:03:07Z", "hours": 6.6417, "text": "Devlog 4: Finally working registration So after like 15 hours of continuous work and debugging i can finally now say that the registration and connection to the signal network is finally working now and i can finally move onto actually making the app itself rather then just having to do trial and error debugging with libsignal and the protocol also while i was testing the app i made a working ci pipeline so the app could be actually downloaded by other ppl now that took a few attempts because of the setting up of the rust toolchains stuff and the android ndk setup part having a few bugs but that is working too now"}, {"post_id": 38718, "ts": "2026-08-01T08:23:46Z", "hours": 9.9889, "text": "Devlog 3: Stuck in debuging hell I’m sorry yall that i didnt make any devlogs about this but i taught this was kinda boring and nothing to write about but after last devlog i found out that the my registration api wasnt fully finished and i needed to generate more keys after the user enters the code from the sms and the registration itself starts but for that we needed to use signals cryptography lib called libsignal so i tried that but the latest version of libsignal had a newer type of elf hash that android 4.x didnt support so i tried using an older version of libsignal but that still didnt work cause it used a few instructions that newer android versions introduced so i tried binary patching in the missing instructions but that still didnt work so i decided the only viable solution was to fork libsignal to try to manually backport everything and thats where im stuck now in debugging hell trying to manually backport and replace the api calls that it uses with the older android versions and its been like 9 hours of trying to do this and still nothing so im kinda tired trying to do this but im wishing that i will finally fix everything and could move onto making that actual app itself rather then then trying to make libsignal work Thank you for reading this super long devlog!"}, {"post_id": 36915, "ts": "2026-07-29T09:58:25Z", "hours": 1.3386, "text": "Devlog 2 Polishing the ui and adding more underlying stuff that we will need in the future so So in this we added to two big changes First is the completely reworked set up it to make it a little bit more pretty and polished looking And the other one is its a more of an underlying change but a well needed one because in the previous demos it stored the key pairs in plain text and stuff so that is obviously super dangerous in a secure messaging context so it will now let you encrypt it via a pin you set in the account creation like in the real signal"}, {"post_id": 36867, "ts": "2026-07-29T06:42:19Z", "hours": 4.4753, "text": "First devlog for this new project So i taught that i made tidal for legacy android and it was pretty easy this is going to be easy like that but how naive was i am like getting even the signal sms registration almost took 4 hours of debugging mainly so this is going to be hard but i will try because it will be worth it in the end"}]...
|
Title: legacysignal by @simonproyt | Stardance
De Title: legacysignal by @simonproyt | Stardance
Devlogs:
First devlog for this new project So i taught that i made tidal for legacy android and it was pretty easy this is going to be easy like that but how naive was i am like getting even the signal sms registration almost took 4 hours of debugging mainly so this is going to be hard but i will try because it will be worth it in the end
Devlog 2 Polishing the ui and adding more underlying stuff that we will need in the future so So in this we added to two big changes First is the completely reworked set up it to make it a little bit more pretty and polished looking And the other one is its a more of an underlying change but a well needed one because in the previous demos it stored the key pairs in plain text and stuff so that is obviously super dangerous in a secure messaging context so it will now let you encrypt it via a pin you set in the account creation like in the real signal
Devlog 3: Stuck in debuging hell I’m sorry yall that i didnt make any devlogs about this but i taught this was kinda boring and nothing to write about but after last devlog i found out that the my registration api wasnt fully finished and i needed to generate more keys after the user enters the code from the sms and the registration itself starts but for that we needed to use signals cryptography lib called libsignal so i tried that but the latest version of libsignal had a newer type of elf hash that android 4.x didnt support so i tried using an older version of libsignal but that still didnt work cause it used a few instructions that newer android versions introduced so i tried binary patching in the missing instructions but that still didnt work so i decided the only viable solution was to fork libsignal to try to manually backport everything and thats where im stuck now in debugging hell trying to manually backport and replace the api calls that it uses with the older android versions and its been like 9 hours of trying to do this and still nothing so im kinda tired trying to do this but im wishing that i will finally fix everything and could move onto making that actual app itself rather then then trying to make libsignal work Thank you for reading this super long devlog!
Devlog 4: Finally working registration So after like 15 hours of continuous work and debugging i can finally now say that the registration and connection to the signal network is finally working now and i can finally move onto actually making the app itself rather then just having to do trial and error debugging with libsignal and the protocol also while i was testing the app i made a working ci pipeline so the app could be actually downloaded by other ppl now that took a few attempts because of the setting up of the rust toolchains stuff and the android ndk setup part having a few bugs but that is working too now
Debugging hell pt2 sorry guys i have been on vacation and taking a bit of a break from the project because of it but now its back in active development now but sadly after fixing registration there is another problem my phone with the latest signal client sadly cant find my client says that its not registered some why even tho it successfully registers so im working trying to fix that possibly and make this project work finally
Devlog 6 Discoverability finally works So after a lot of pain and trial and error and using the signal android source code as an some sort of example that how does the protocol work now we have a finally working code and i can finally move onto the message encryption/decryption part and make it work
Devlog 7: Partly finally working message send/receive So after a lot of work i finally managed to get message sending and receiving working with all of their related crypto stuff but its kinda broken because our message sending api does not support sealed sender yet only the old legacy unsealed sender api that does not encrypt the sender data like modern signal does so on all of the replies it says that they came from unknown contact rather then the actual contact so im working on implementing that so the current stage of the project is after 3x hours of development is Whats working: registering onto the signal network via the phone number and the captchas receiving messages Whats not working or only partially working: sending messages (not working fully because the sealed sender stuff that i talked about previously)
Devlog 8 Working name syncing So after a lot of work i finally made it work so it can show the name that you entered on the signal set up or the devices not just the phone numbers or just unknown sender or just the user id on my app so i guess another feature added now but i still want to add a few stuff before shipping
Devlog 9: New features and a bit of an ui overhaul So I decided to make the ui a bit more pretty and a few new features So this is what i added: a new cleaner ui contact profile picture support message time stamping in the ui dark theme and theme switcher with persistence these are just like qol improvements that i decided to add into the app nothing special but like i missed a few features like the dark theme myself so nothing major but i hope these changes makes the app more usable to ppl
Devlog 10: Finally added image sending/receiving support So the next thing i taught i would add to my app is image sending and receiving support because that is like kinda a basic feature that any messaging app needs so i added image reviving sending images from the phones storage and via taking a picture with the camera adding these was kinda annoying with figuring out all the correct endpoints and stuff but i think it was worth it in the end
Devlog 11: Fixing a few bugs and getting the app ready to ship So in this time i havent done a lot of like cool stuff rather i was fixing a few bugs that broke the messaging feature and image attachment loading because i wanted to showcase those in my demo video and i fixed the github action so ppl can download an apk for the latest version if they want to try it out on their own legacy device also sorry for not writing a dev log sooner i was kinda busy but now i finally got the time to get the project into a ready to ship state
Ships:
So i taught this project was going to be easy like creating the tidal client for legacy devices but like i was so naive and didnt yet understand how hard it is going to be but it was good in the end i think because i learned a lot about the signal protocol encryption and about backporting and how to make legacy android do things that it was never intended to do but the project is still not finished and i have a lot of work ahead if i want make the app feature complete to the normal signal mobile app but i think its a great demo and it was a great learning experience...
|
1792986943.3642483
|
1793073343.3642483
|
|
20345
|
Boilerplater by @cauadev | Stardance
|
cauadev
|
1
|
72.0
|
922
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-22T00:03:39Z", "hours": 72.0, "multiplier": 12.85, "payout": 922, "blessing": "neutral", "text": "Hello guys! Today, I celebrate the shipping of Br-Zueira’s Boilerplater! It serves for saving (ctrl+u, mac: cmd+u) and pasting code snippets (ctrl+alt+u, mac: cmd+alt+u). It also supports categorizing them by tags and languages, giving descriptions and titles to them and even supports macros: [%%] -> Supports variables such as BP_FILENAME, some sandboxed JavaScript evaluation and even macros (variables defined by yourself using JavaScript code) [#n#] -> Tabstops, where n is an index (they’re standard Vscode tabstops: evaluated from 1 to infinity and beyond, 0 at last and can be grouped like in the example) [#n|fallback#] -> Tabstops but with a placeholder/fallback if user chooses to ignore the tabstop. Also, you can change the snippets by the extension itself (supports basic coding editor features, such as tab indenting or auto closing quotes). For all this. it uses an in-build webview (ctrl+alt+u, mac: cmd+alt+u). You can easily download it at Microsoft Extension Marketplace (just search by “Br-Zueira’s Boilerplater”). If you want, you can also get the VSIX file at GitHub Releases (then open it with Vscode and click “Download VSIX extension”). It’s plug and enjoy! Hope it really lets your workflow more frictionless!", "repo": "https://github.com/Br-Zueira/Boilerplater", "demo": "https://github.com/Br-Zueira/Boilerplater/releases"}]...
|
[{"post_id": 51978, "ts": "202 [{"post_id": 51978, "ts": "2026-08-21T23:45:24Z", "hours": 0.3475, "text": "Bug patching and extension updating"}, {"post_id": 30442, "ts": "2026-07-18T00:04:29Z", "hours": 4.9075, "text": "Hello, fellow devs! Today, I added this gorgeous gif into the readme. Also, I had to escape the content to be shown in list view (I discovered it the worst way: completely breaking the layout while playing around with HTML and PHP snippets) and added aliases for languages, which makes searching them easier. I removed frontend JS and CSS into actual files (they were string literals before) and, finally, moved some files around."}, {"post_id": 30107, "ts": "2026-07-17T12:50:50Z", "hours": 5.6953, "text": "Hello, fellow devs! Yesterday, I completed the CRUD for languages! You can now create, edit or even delete them. The internal name is searched in Vscode language IDs. To delete one, if you have snippets assigned to them, you can either reassign all of them to another language or delete them along with the language, both automatically made."}, {"post_id": 29226, "ts": "2026-07-16T00:24:16Z", "hours": 5.0817, "text": "Hello, fellow devs! Today, I solved the issues related to macros. Also, letting it in configs.json made it messy, counterintuitive and less integrated with the rest of the extension, so I moved it to the webviews, together with the snippets, tags and languages you’re all already familiar with. The evaluation order is very important, as this is what grants macros can be access by other macros, only needing to come before in the order. I’m really excited to see what will people come up with this."}, {"post_id": 28638, "ts": "2026-07-15T00:35:52Z", "hours": 5.8692, "text": "Hello. I started preparing extension for release, so I changed compiler to esbuild and added the GSL3 license to my project. I also started trying to implement the option to add custom variables for templating to the extension, but it’s all broken."}, {"post_id": 28259, "ts": "2026-07-14T12:35:30Z", "hours": 3.7383, "text": "Hello, fellow devs! I just wrote this info at index about the extension and about the templates. I also made the snippet typing more similar to Vscode coding, so now it has tab indentation, and auto closes quotes, parenthesis, brackets, curly braces and the extension templating “[%” and “[#”. TODO: Fix the frontend script that is now half broken."}, {"post_id": 27340, "ts": "2026-07-12T20:37:25Z", "hours": 5.8317, "text": "Hello guys! Now we can paste the snippets directly from the webview! Also, it has dynamic templates: [%%] executes simple JavaScript and can access variables such as BP_FILENAME or BP_YEAR [##] turns into tabstops: can be either [# index #] or [# index | default value #] where index is an integer, and optional default value can be used when user just skips the tabstop However, as a safety measure, the templates can’t directly access vscode, node.js or other possibly sensible variables, methods or functions."}, {"post_id": 26564, "ts": "2026-07-11T13:44:20Z", "hours": 9.9067, "text": "Hey guys! I did a search engine for the list view! It was kind of complex, as I had to deal with SQL joins (INNER JOIN for NOT NULL fields and LEFT JOIN for optional fields), a bridge table, JSON_GROUP_ARRAY, etc, but in the end, it worked. Just have to test a bit more the search bar as it sometimes have some glitches (every time a search is fired, the whole DOM is reloaded)."}, {"post_id": 22458, "ts": "2026-07-04T22:35:41Z", "hours": 6.6092, "text": "Hey guys! Today, I officially finished CRUD! For all models! I also made tag assignment work 100% fine. Besides that, I improved a bit on code modularity and organization and did small patches. TODO: Improve the “R” and maybe the “D” of CRUD; Add the snippet pasting part (the app focus)."}, {"post_id": 19611, "ts": "2026-06-30T23:46:55Z", "hours": 7.6217, "text": "Hey guys! Now tom-select is 100% working and model editing works… at least 50%? Well, and we also have this gorgeous CSS styling that matches with Vscode styles!"}, {"post_id": 17274, "ts": "2026-06-28T00:14:13Z", "hours": 3.0789, "text": "Today, the edit view successfully shows the right values, but the tomSelect dropdowns I tried to add were a complete failure. TODO: Fix tomSelect."}, {"post_id": 16846, "ts": "2026-06-27T10:53:15Z", "hours": 3.0275, "text": "Hey guys! Yesterday, I tried to make this generic model editor, and I have the layout, but the functionality is… well… broke for now. Also, to correct a bug, I had to rewrite the whole functionality of the database. Now I have a proper class wrapper instead of passing the raw database object around."}, {"post_id": 16008, "ts": "2026-06-26T00:05:24Z", "hours": 2.3042, "text": "Hello, programmers! Today, I improved more the webview, this time focusing on the list view. It successfully shows a list of one of the valid models (snippets, tags, languages) and information about it. TODO: Model creation page, editing page, ensure paginate works 100% fine and add searchbar functionality. Struggles: SQL (I’m having to work with raw SQL as sql.js doesn’t have ORM) and avoiding spaghetti code (trust me: It’s hard when you have to write HTML and frontend JavaScript in string literal templates)"}, {"post_id": 15366, "ts": "2026-06-24T23:50:43Z", "hours": 2.5772, "text": "Hey guys! Today, I worked in the webwiew. For now, we have this index page and the start of the list page. Other improvements were more docs focused, such as improving README.db and code commenting, and enforcing code structure with new ‘helpers’ folder and ‘html’ TypeScript file."}, {"post_id": 14726, "ts": "2026-06-23T22:43:44Z", "hours": 2.8136, "text": "Hey guys. After fighting against compilation errors, caused by libs and shx, and errors in database managing, caused by thread throttling by setup-ing db, that were solved using asynchronous tasks instead, now I’ve finally done the snippet creation part! The extension successfully saves the snippet, along with its title, description (can be empty) and language (in another table, as the snippet itself only carries the language id, in a one-to-many relationship, as a snippet have only one language, while a language can have lots of snippets). Next step is continuing the CRUD part, probably by including a web view."}, {"post_id": 13993, "ts": "2026-06-22T23:22:23Z", "hours": 2.3778, "text": "For now, Boilerplater has just a function to copy a highlighted section (still does nothing with it) and a database loader/initializer. Most of the concepts are still just ideas. Next step is to program the snippet saving part in database."}]...
|
Title: Boilerplater by @cauadev | Stardance
Devlo Title: Boilerplater by @cauadev | Stardance
Devlogs:
For now, Boilerplater has just a function to copy a highlighted section (still does nothing with it) and a database loader/initializer. Most of the concepts are still just ideas. Next step is to program the snippet saving part in database.
Hey guys. After fighting against compilation errors, caused by libs and shx, and errors in database managing, caused by thread throttling by setup-ing db, that were solved using asynchronous tasks instead, now I’ve finally done the snippet creation part! The extension successfully saves the snippet, along with its title, description (can be empty) and language (in another table, as the snippet itself only carries the language id, in a one-to-many relationship, as a snippet have only one language, while a language can have lots of snippets). Next step is continuing the CRUD part, probably by including a web view.
Hey guys! Today, I worked in the webwiew. For now, we have this index page and the start of the list page. Other improvements were more docs focused, such as improving README.db and code commenting, and enforcing code structure with new ‘helpers’ folder and ‘html’ TypeScript file.
Hello, programmers! Today, I improved more the webview, this time focusing on the list view. It successfully shows a list of one of the valid models (snippets, tags, languages) and information about it. TODO: Model creation page, editing page, ensure paginate works 100% fine and add searchbar functionality. Struggles: SQL (I’m having to work with raw SQL as sql.js doesn’t have ORM) and avoiding spaghetti code (trust me: It’s hard when you have to write HTML and frontend JavaScript in string literal templates)
Hey guys! Yesterday, I tried to make this generic model editor, and I have the layout, but the functionality is… well… broke for now. Also, to correct a bug, I had to rewrite the whole functionality of the database. Now I have a proper class wrapper instead of passing the raw database object around.
Today, the edit view successfully shows the right values, but the tomSelect dropdowns I tried to add were a complete failure. TODO: Fix tomSelect.
Hey guys! Now tom-select is 100% working and model editing works… at least 50%? Well, and we also have this gorgeous CSS styling that matches with Vscode styles!
Hey guys! Today, I officially finished CRUD! For all models! I also made tag assignment work 100% fine. Besides that, I improved a bit on code modularity and organization and did small patches. TODO: Improve the “R” and maybe the “D” of CRUD; Add the snippet pasting part (the app focus).
Hey guys! I did a search engine for the list view! It was kind of complex, as I had to deal with SQL joins (INNER JOIN for NOT NULL fields and LEFT JOIN for optional fields), a bridge table, JSON_GROUP_ARRAY, etc, but in the end, it worked. Just have to test a bit more the search bar as it sometimes have some glitches (every time a search is fired, the whole DOM is reloaded).
Hello guys! Now we can paste the snippets directly from the webview! Also, it has dynamic templates: [%%] executes simple JavaScript and can access variables such as BP_FILENAME or BP_YEAR [##] turns into tabstops: can be either [# index #] or [# index | default value #] where index is an integer, and optional default value can be used when user just skips the tabstop However, as a safety measure, the templates can’t directly access vscode, node.js or other possibly sensible variables, methods or functions.
Hello, fellow devs! I just wrote this info at index about the extension and about the templates. I also made the snippet typing more similar to Vscode coding, so now it has tab indentation, and auto closes quotes, parenthesis, brackets, curly braces and the extension templating “[%” and “[#”. TODO: Fix the frontend script that is now half broken.
Hello. I started preparing extension for release, so I changed compiler to esbuild and added the GSL3 license to my project. I also started trying to implement the option to add custom variables for templating to the extension, but it’s all broken.
Hello, fellow devs! Today, I solved the issues related to macros. Also, letting it in configs.json made it messy, counterintuitive and less integrated with the rest of the extension, so I moved it to the webviews, together with the snippets, tags and languages you’re all already familiar with. The evaluation order is very important, as this is what grants macros can be access by other macros, only needing to come before in the order. I’m really excited to see what will people come up with this.
Hello, fellow devs! Yesterday, I completed the CRUD for languages! You can now create, edit or even delete them. The internal name is searched in Vscode language IDs. To delete one, if you have snippets assigned to them, you can either reassign all of them to another language or delete them along with the language, both automatically made.
Hello, fellow devs! Today, I added this gorgeous gif into the readme. Also, I had to escape the content to be shown in list view (I discovered it the worst way: completely breaking the layout while playing around with HTML and PHP snippets) and added aliases for languages, which makes searching them easier. I removed frontend JS and CSS into actual files (they were string literals before) and, finally, moved some files around.
Bug patching and extension updating
Ships:
Hello guys! Today, I celebrate the shipping of Br-Zueira’s Boilerplater! It serves for saving (ctrl+u, mac: cmd+u) and pasting code snippets (ctrl+alt+u, mac: cmd+alt+u). It also supports categorizing them by tags and languages, giving descriptions and titles to them and even supports macros: [%%] -> Supports variables such as BP_FILENAME, some sandboxed JavaScript evaluation and even macros (variables defined by yourself using JavaScript code) [#n#] -> Tabstops, where n is an index (they’re standard Vscode tabstops: evaluated from 1 to infinity and beyond, 0 at last and can be grouped like in the example) [#n|fallback#] -> Tabstops but with a placeholder/fallback if user chooses to ignore the tabstop. Also, you can change the snippets by the extension itself (supports basic coding editor features, such as tab indenting or auto closing quotes). For all this. it uses an in-build webview (ctrl+alt+u, mac: cmd+alt+u). You can easily download it at Microsoft Extension Marketplace (just search by “Br-Zueira’s Boilerplater”). If you want, you can also get the VSIX file at GitHub Releases (then open it with Vscode and click “Download VSIX extension”). It’s plug and enjoy! Hope it really lets your workflow more frictionless!...
|
1792961370.1995184
|
1793047770.1995184
|
|
10280
|
Space Shuttle by @CoolHotDog64 | Stardance
|
CoolHotDog64
|
1
|
52.0
|
920
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-14T18:27:21Z", "hours": 52.0, "multiplier": 19.22, "payout": 920, "blessing": "neutral", "text": "Space Shuttle I Created a Space Shuttle Using CAD (Computer Aided Design) How to use my project: You can visit the model of my space shuttle at https://cad.onshape.com/documents/0cc091979462d1f40116053c/w/ab82948fa33e8f748e0fcb44/e/4129cc439ac4ca6aab65041f?renderMode=0&uiState=6a565da1ab0f5b3c13bc4737 If this link says 403 Forbidden, you should select the address bar at the top of the screen and then press enter to refresh the page, which should fix the issue Step-by-step explanation: Select the address bar at the top of the screen Press enter/search Another way to fix this is copying the url and pasting it into another tab Step-by-step explanation: Select the address bar at the top of the screen Copy the address bar that you selected Paste the link in a different address bar (a new tab) How to download my project: First go through the link to visit my project Then select the download button After selecting the download, button a menu should appear where you can then select many options before you export the file Does this project support AMS (Multi-Color Printing)? Yes, this project should support AMS since it’s broken down into separate pieces instead of just coloring the visible faces on the rocket Why did I choose a space shuttle? This project was very hard to make and not many space shuttles are available, and they are usually not realistic. I wanted to make a space shuttle since it was the theme of the event, and I was interested in testing my CAD skills. I am so happy with the result and realism of my rocket. If you look at other designs online, a lot of them will be way less realistic than mine. For example, here is a link to a space shuttle on maker world. Comparing it to my rocket, you can see the difference in realism. https://makerworld.com/en/models/956260-space-shuttle#profileId-925247 What was the most difficult part of this project? One of the most difficult parts of this project was the back of my rocket. There were so many complex, intricate parts that I had to redo so many times that it took me countless hours just to get it right. What I learned from this project: I learned how to use multiple new tools that I’ve never used before, like the transform tool I learned how to copy off images and try to make the dimensions correct I learned how to use many tools better, like fillet tools I learned how to make complex sketches Thank you for viewing my ship! I had so much fun creating this project and I can’t wait to start my next project (which will probably be a space station!) My readme is easier to follow since it has multiple images so check that out if you are confused for the viewing and downloading process Check my readme out here: https://github.com/JaydenSeelo/CAD/blob/main/README.md", "repo": "https://github.com/JaydenSeelo/CAD", "demo": "https://cad.onshape.com/documents/0cc091979462d1f40116053c/w/ab82948fa33e8f748e0fcb44/e/4129cc439ac4ca6aab65041f?renderMode=0&uiState=6a565da1ab0f5b3c13bc4737"}]...
|
[{"post_id": 27783, "ts": "202 [{"post_id": 27783, "ts": "2026-07-13T17:18:19Z", "hours": 5.0453, "text": "I Finished My Space Shuttle! This has taken me so many hours and I’m very happy with the result What I did in the past 4 hours: I started and completed the large support that connects the body of the shuttle to the external tanks. I had to cut into the external tank and I used multiple tools to add realism like the extrude tool. After that, I created cylinder supports that i then connected using the transform and extrude tools. I started and completed the small support that connected the nose of the shuttle to the external tanks. I had to use many transform tools to make the correct shape but eventually I shaped it correctly. I added a liquid oxygen fuel line to the large external tank and connected it to the system tunnel with many supports. I mostly used the extrude tool for this step. This took the most time to complete in the 4 hours since my last devlog. ____________________________________________________________________________ What My Space Shuttle Includes Realistic external tanks Realistic rings surrounding the solid rocket boosters Realistic rocket booster shape Small realistic features like an access door and forward booster separation modules Realistic supports that carry the rocket Realistic external tank Realistic LO2 feedline and LO2 feedline fairing Realistic stringers Realistic ring frames A realistic rocket Realistic wings Realistic nose with small features like the cockpit window and star tracker doors Realistic vertical stabilizer Realistic body shape Realistic Aft fuselage, which includes the space shuttle’s main engines and also includes the orbital maneuvering system and the RCS thrusters Thanks for the support on this project! I will likely do a space station for my next project. I will probably ship this project tomorrow, and then it should be available for printing! I tried to design the shuttle for multicolor printing so you should be able to choose multiple colors. There should be a total of 3 different colors since I wanted to limit the amount of filament colors for printing. If you still have any suggestions, please leave them in the comments!"}, {"post_id": 24991, "ts": "2026-07-08T21:43:00Z", "hours": 6.4489, "text": "I Finished The Rocket Component Of My Space Shuttle This Was A Long And Hard Process But I was Finally Able To Complete The Rocket Component Of My Shuttle! This Is What I Have Done In The Past 6 Hours I fixed an error in the front of my rocket that made the front look less realistic (This took so long since I needed to fix an area with a curved shape. which is difficult to do) I remade the elevons of my rocket since they were unrealistic before I renamed my project from CAD to Space Shuttle for more clarity in what my project is What I Still Need To Do I still need to connect the rocket to the external tanks (They are hidden in this image) This Project Is So Close To Being Done! If You Have Any Suggestions To Make This Rocket Better, Please State Them In The Comments!"}, {"post_id": 21148, "ts": "2026-07-02T23:06:35Z", "hours": 3.9303, "text": "Almost Done The Back Of My Rocket! I Can’t Believe How Close I Really Am From Completing This Project. This Is All I Need To Do Before I Am Done: A quick fix to the wings of the space shuttle (this will probably take 10 minutes and then I will be done with the back of my rocket! Connect the fuel tanks to the rest of the build (They are hidden in this picture) Possibly fix one area on the front of my rocket (This Is Optional But Would Make The Rocket Look Much Better) What I Did Since Last Devlog: I completely remade the vertical stabilizer (also called the tail fin) of the space shuttle Remade and angled the oms pods since they were completely wrong before Moved up the oms engine nozzles (The bell looking component on the rocket) Redesigned the RCS thruster ports (They are beside the OMS engine nozzles) If you have any improvements that i could make to the space shuttle, please mention them in the comments!"}, {"post_id": 19221, "ts": "2026-06-30T14:17:17Z", "hours": 2.7025, "text": "I’m Done The Front Of My Space Shuttle! This Has Taken A Lot Of Hours But I Am Happy With This Iteration I was able to add: Much More Realism To The Front Of The Rocket Like Realistic Colors Added Some More Small Components Onto The Front Of The Rocket Added The Flight Deck Window To The Rocket Added More Material To The Middle Of The Rocket To Make The Base More Curved And Realistic (This Took The Longest Since I needed To Smooth It Out Realistically And It Took Forever To Find The Solution To Round It Perfectly) What I Still Need To Work On: I Still Need To Add Realistic Angle To The OMS Pods I also Need To Attach The OMS Pods To The Rocket, Which Includes Reshaping Them To The Right Dimensions I Need To Move The Body Of The Rocket Further Down Into The Rocket Boosters Since Right Now There Is A Gap I Have To Smooth Out The Enclosure Surrounding The Main Engines I Will Try And Fix The Connection Point On The Rocket To The Main Tanks (They Are Hidden In This Image) ______________________________________ I’m Estimating This Will Take 9 Hours To Complete. If You Have Any Suggestions To Improve This Model, Feel Free To Share Them In The Comments!"}, {"post_id": 16688, "ts": "2026-06-27T03:53:09Z", "hours": 3.0233, "text": "Almost done the front of my rocket! After 3 Hours, I Was Able To Troubleshoot Many Errors and Finally I Was Able to Make The Front Of My Rocket Much More Realistic. I was finally able to add: A realistic, smooth shape of the rocket that resulted in boosted realism A more round shape to the body of the rocket- Realistic features of the rocket’s nose I also removed the sharp edges on the front of the rocket that ruined the rocket’s overall image. My next goals: Working on the bottom of the rocket to add realistic color for AMS printing Smoothing out the transition between the body and the engines (Right now they are really messed up and look terrible) Adding realistic connections where the rocket attaches to the external tank (The tank is hidden in this image) I was able to make the rocket look so much more realistic (Look at my other devlogs to see the before and after) and I’m so happy about how it turned out so far! So far, I have made amazing progress on this ambitious project and I can’t wait to finish this off."}, {"post_id": 15392, "ts": "2026-06-25T00:55:03Z", "hours": 3.8297, "text": "I’m still working on my space shuttle! So Far, My Main Goal has been Editing The Front of My Shuttle Since it Was Lacking in Realism. This Includes: Smoothing down ruff corners Adding high detail to the front of the rocket (Haven’t done this yet, but I have enough experience from the previous design to edit this) Enlarging the base of the rocket to add more crucial detail Making the front shape of the rocket realistic (This is by far the hardest and most time-consuming part) Adding detail to the tip of the rocket and the window in the front of the rocket (I haven’t really started on this because it needs a lot of work) Adding realistic connections to the external tank (Right now it’s just sitting on top) Once I complete these main goals, I will likely be done! (The rest of the rocket in this image is hidden) Feel Free To Share Suggestions About The Rocket In The Comments!"}, {"post_id": 12270, "ts": "2026-06-20T01:06:13Z", "hours": 1.6928, "text": "Still Working on My Space Shuttle. I was able to add much more detail to the external tank like realistic panels, vents, and intertank ribs (The stripe pattern on the external tank). I also moved up the external tank and rocket since they were very low. I’m also planning on designing a better nose for the shuttle. After I do that, I’m am going to be very close to being done but the nose will take a while."}, {"post_id": 10371, "ts": "2026-06-17T01:42:15Z", "hours": 2.0058, "text": "Editing My Space Shuttle I mostly worked on adding the smaller details on the external tank. I was able to smooth out some areas to add more realism and this made the rocket more clean. I also realized that the front of my rocket isn’t very realistic, and I’m going to try and fix it. I’m also planning on adding other details. Sadly, it seems like my project will take much longer than expected, but I’m willing to pour in more time to make this ship accurate. I’ll try to add much more detail over these past few days. I might also design a stand so you can display this rocket (You should be able to print it once I ship the project, and it should also support multicolor printing) Let me know if you want me to make a stand in the comments!"}, {"post_id": 9515, "ts": "2026-06-15T21:41:01Z", "hours": 4.1583, "text": "My Space Shuttle is Almost Done! My Estimate is That it Will be Done Tomorrow The main goals I have worked on since my last devlog are: Added the same realism on the left rocket as the right rocket. This included adding multiple realistic rings and other complex shapes. Added much more detail on the solid rocket boosters, like accurate connection points to the external tank. This was necessary so that the tank would actually connect to the rocket boosters when printing the rocket, and this also made the rocket look much more realistic. Smoothed out the bottom of the external tank to increase realism since before it was just a block. Moved up both solid rocket boosters since they were very low. I had to move them up since they were very wonky and moving them up made the overall image of the rocket much better and more accurate (You can see what it looked like before with the messed-up tank on the other devlogs). Added a black stripe to the wings of the rocket (Wasn’t too noticeable but after completing this edit the wings looked much cleaner). Hollowed out the bottom of both rocket boosters, since before it was just a block before. I also added subsections on the rocket boosters. This created subtle realism, and it made the boosters look less empty. What I still need to work on: I still need to add realism to the external tank since it currently looks empty. This whole build took way too long since i made many mistakes and errors during this whole process but I learned a lot and I’m very happy with the result! If you see my shipped project, feel free to check it out!"}, {"post_id": 8484, "ts": "2026-06-14T03:26:37Z", "hours": 3.3347, "text": "I’ve Finally Designed The Back of My Space Shuttle. I was able to add very crucial details like: Angle on the RS-25 engines (Space Shuttle Engines) Added much more detail and realism to the OMS Engines (Smaller Steering Engines) Fixed the overall shape of the backside of the shuttle Added an RCS thruster port My Next Goal is to Finish off the Left Solid Rocket Booster, and Then I’m Going to add More Detail to the External Fuel Tank. If you have any suggestions on how to make the rocket better, feel free to send suggestions in the comments!"}, {"post_id": 7832, "ts": "2026-06-13T02:15:24Z", "hours": 1.7161, "text": "I Completed The First Side of The Rocket For My Shuttle I still need to do the other side so I will work on that next and then I will almost be completed this project!"}, {"post_id": 7789, "ts": "2026-06-13T00:24:54Z", "hours": 14.3428, "text": "I’m Designing A Space Shuttle Completely From Scratch This involved many steps Finding a picture that I could base the rocket off of Making countless sketches (28 right now to be exact) Extruding these sketches (this was one of the hardest parts since I needed everything perfect and it took 73 extrudes) Using multiple tools to smooth it out and add realistic dimensions (I used 18 fillets, 33 splits, 14 drafts, 1 chamfer and finally 1 shell) I’m Now Working On Adding More Details To The Fuel Tanks and Other Large Components"}]...
|
Title: Space Shuttle by @CoolHotDog64 | Stardance
Title: Space Shuttle by @CoolHotDog64 | Stardance
Devlogs:
I’m Designing A Space Shuttle Completely From Scratch This involved many steps Finding a picture that I could base the rocket off of Making countless sketches (28 right now to be exact) Extruding these sketches (this was one of the hardest parts since I needed everything perfect and it took 73 extrudes) Using multiple tools to smooth it out and add realistic dimensions (I used 18 fillets, 33 splits, 14 drafts, 1 chamfer and finally 1 shell) I’m Now Working On Adding More Details To The Fuel Tanks and Other Large Components
I Completed The First Side of The Rocket For My Shuttle I still need to do the other side so I will work on that next and then I will almost be completed this project!
I’ve Finally Designed The Back of My Space Shuttle. I was able to add very crucial details like: Angle on the RS-25 engines (Space Shuttle Engines) Added much more detail and realism to the OMS Engines (Smaller Steering Engines) Fixed the overall shape of the backside of the shuttle Added an RCS thruster port My Next Goal is to Finish off the Left Solid Rocket Booster, and Then I’m Going to add More Detail to the External Fuel Tank. If you have any suggestions on how to make the rocket better, feel free to send suggestions in the comments!
My Space Shuttle is Almost Done! My Estimate is That it Will be Done Tomorrow The main goals I have worked on since my last devlog are: Added the same realism on the left rocket as the right rocket. This included adding multiple realistic rings and other complex shapes. Added much more detail on the solid rocket boosters, like accurate connection points to the external tank. This was necessary so that the tank would actually connect to the rocket boosters when printing the rocket, and this also made the rocket look much more realistic. Smoothed out the bottom of the external tank to increase realism since before it was just a block. Moved up both solid rocket boosters since they were very low. I had to move them up since they were very wonky and moving them up made the overall image of the rocket much better and more accurate (You can see what it looked like before with the messed-up tank on the other devlogs). Added a black stripe to the wings of the rocket (Wasn’t too noticeable but after completing this edit the wings looked much cleaner). Hollowed out the bottom of both rocket boosters, since before it was just a block before. I also added subsections on the rocket boosters. This created subtle realism, and it made the boosters look less empty. What I still need to work on: I still need to add realism to the external tank since it currently looks empty. This whole build took way too long since i made many mistakes and errors during this whole process but I learned a lot and I’m very happy with the result! If you see my shipped project, feel free to check it out!
Editing My Space Shuttle I mostly worked on adding the smaller details on the external tank. I was able to smooth out some areas to add more realism and this made the rocket more clean. I also realized that the front of my rocket isn’t very realistic, and I’m going to try and fix it. I’m also planning on adding other details. Sadly, it seems like my project will take much longer than expected, but I’m willing to pour in more time to make this ship accurate. I’ll try to add much more detail over these past few days. I might also design a stand so you can display this rocket (You should be able to print it once I ship the project, and it should also support multicolor printing) Let me know if you want me to make a stand in the comments!
Still Working on My Space Shuttle. I was able to add much more detail to the external tank like realistic panels, vents, and intertank ribs (The stripe pattern on the external tank). I also moved up the external tank and rocket since they were very low. I’m also planning on designing a better nose for the shuttle. After I do that, I’m am going to be very close to being done but the nose will take a while.
I’m still working on my space shuttle! So Far, My Main Goal has been Editing The Front of My Shuttle Since it Was Lacking in Realism. This Includes: Smoothing down ruff corners Adding high detail to the front of the rocket (Haven’t done this yet, but I have enough experience from the previous design to edit this) Enlarging the base of the rocket to add more crucial detail Making the front shape of the rocket realistic (This is by far the hardest and most time-consuming part) Adding detail to the tip of the rocket and the window in the front of the rocket (I haven’t really started on this because it needs a lot of work) Adding realistic connections to the external tank (Right now it’s just sitting on top) Once I complete these main goals, I will likely be done! (The rest of the rocket in this image is hidden) Feel Free To Share Suggestions About The Rocket In The Comments!
Almost done the front of my rocket! After 3 Hours, I Was Able To Troubleshoot Many Errors and Finally I Was Able to Make The Front Of My Rocket Much More Realistic. I was finally able to add: A realistic, smooth shape of the rocket that resulted in boosted realism A more round shape to the body of the rocket- Realistic features of the rocket’s nose I also removed the sharp edges on the front of the rocket that ruined the rocket’s overall image. My next goals: Working on the bottom of the rocket to add realistic color for AMS printing Smoothing out the transition between the body and the engines (Right now they are really messed up and look terrible) Adding realistic connections where the rocket attaches to the external tank (The tank is hidden in this image) I was able to make the rocket look so much more realistic (Look at my other devlogs to see the before and after) and I’m so happy about how it turned out so far! So far, I have made amazing progress on this ambitious project and I can’t wait to finish this off.
I’m Done The Front Of My Space Shuttle! This Has Taken A Lot Of Hours But I Am Happy With This Iteration I was able to add: Much More Realism To The Front Of The Rocket Like Realistic Colors Added Some More Small Components Onto The Front Of The Rocket Added The Flight Deck Window To The Rocket Added More Material To The Middle Of The Rocket To Make The Base More Curved And Realistic (This Took The Longest Since I needed To Smooth It Out Realistically And It Took Forever To Find The Solution To Round It Perfectly) What I Still Need To Work On: I Still Need To Add Realistic Angle To The OMS Pods I also Need To Attach The OMS Pods To The Rocket, Which Includes Reshaping Them To The Right Dimensions I Need To Move The Body Of The Rocket Further Down Into The Rocket Boosters Since Right Now There Is A Gap I Have To Smooth Out The Enclosure Surrounding The Main Engines I Will Try And Fix The Connection Point On The Rocket To The Main Tanks (They Are Hidden In This Image) ______________________________________ I’m Estimating This Will Take 9 Hours To Complete. If You Have Any Suggestions To Improve This Model, Feel Free To Share Them In The Comments!
Almost Done The Back Of My Rocket! I Can’t Believe How Close I Really Am From Completing This Project. This Is All I Need To Do Before I Am Done: A quick fix to the wings of the space shuttle (this will probably take 10 minutes and then I will be done with the back of my rocket! Connect the fuel tanks to the rest of the build (They are hidden in this picture) Possibly fix one area on the front of my rocket (This Is Optional But Would Make The Rocket Look Much Better) What I Did Since Last Devlog: I completely remade the vertical stabilizer (also called the tail fin) of the space shuttle Remade and angled the oms pods since they were completely wrong before Moved up the oms engine nozzles (The bell looking component on the rocket) Redesigned the RCS thruster ports (They are beside the OMS engine nozzles) If you have any improvements that i could make to the space shuttle, please mention them in the comments!
I Finished The Rocket Component Of My Space Shuttle This Was A Long And Hard Process But I was Finally Able To Complete The Rocket Component Of My Shuttle! This Is What I Have Done In The Past 6 Hours I fixed an error in the front of my rocket that made the front look less realistic (This took so long since I needed to fix an area with a curved shape. which is difficult to do) I remade the elevons of my rocket since they were unrealistic before I renamed my project from CAD to Space Shuttle for more clarity in what my project is What I Still Need To Do I still need to connect the rocket to the external tanks (They are hidden in this image) This Project Is So Close To Being Done! If You Have Any Suggestions To Make This Rocket Better, Please State Them In The Comments!
I Finished My Space Shuttle! This has taken me so many hours and I’m very happy with the result What I did in the past 4 hours: I started and completed the large support that connects the body of the shuttle to the external tanks. I had to cut into the external tank and I used multiple tools to add realism like the extrude tool. After that, I created cylinder supports that i then connected using the transform and extrude tools. I started and completed the small support that connected the nose of the shuttle to the external tanks. I had to use many transform tools to make the correct shape but eventually I shaped it correctly. I added a liquid oxygen fuel line to the large external tank and connected it to the system tunnel with many supports. I mostly used the extrude tool for this step. This took the most time to complete in the 4 hours since my last devlog. ____________________________________________________________________________ What My Space Shuttle Includes Realistic external tanks Realistic rings surrounding the solid rocket boosters Realistic rocket booster shape Small realistic features like an access door and forward booster separation modules Realistic supports that carry the rocket Realistic external tank Realistic LO2 feedline and LO2 feedline fairing Realistic stringers Realistic ring frames A realistic rocket Realistic wings Realistic nose with small features like the cockpit window and star tracker doors Realistic vertical stabilizer Realistic body shape Realistic Aft fuselage, which includes the space shuttle’s main engines and also includes the orbital maneuvering system and the RCS thrusters Thanks for the support on this project! I will likely do a space station for my next project. I will probably ship this project tomorrow, and then it should be available for printing! I tried to design the shuttle for multicolor printing so you should be able to choose multiple colors. There should be a total of 3 different colors since I wanted to limit the amount of filament colors for printing. If you still have any suggestions, please leave them in the comments!
Ships:
Space Shuttle I Created a Space Shuttle Using CAD (Computer Aided Design) How to use my project: You can visit the model of my space shuttle at https://cad.onshape.com/documents/0cc091979462d1f40116053c/w/ab82948fa33e8f748e0fcb44/e/4129cc439ac4ca6aab65041f?renderMode=0&uiState=6a565da1ab0f5b3c13bc4737 If this link says 403 Forbidden, you should select the address bar at the top of the screen and then press enter to refresh the page, which should fix the issue Step-by-step explanation: Select the address bar at the top of the screen Press enter/search Another way to fix this is copying the url and pasting it into another tab Step-by-step explanation: Select the address bar at the top of the screen Copy the address bar that you selected Paste the link in a different address bar (a new tab) How to download my project: First go through the link to visit my project Then select the download button After selecting the download, button a menu should appear where you can then select many options before you export the file Does this project support AMS (Multi-Color Printing)? Yes, this project should support AMS since it’s broken down into separate pieces instead of just coloring the visible faces on the rocket Why did I choose a space shuttle? This project was very hard to make and not many space shuttles are available, and they are usually not realistic. I wanted to make a space shuttle since it was the theme of the event, and I was interested in testing my CAD skills. I am so happy with the result and realism of my rocket. If you look at other designs online, a lot of them will be way less realistic than mine. For example, here is a link to a space shuttle on maker world. Comparing it to my rocket, you can see the difference in realism. https://makerworld.com/en/models/956260-space-shuttle#profileId-925247 What was the most difficult part of this project? One of the most difficult parts of this project was the back of my rocket. There were so many complex, intricate parts that I had to redo so many times that it took me countless hours just to get it right. What I learned from this project: I learned how to use multiple new tools that I’ve never used before, like the transform tool I learned how to copy off images and try to make the dimensions correct I learned how to use many tools better, like fillet tools I learned how to make complex sketches Thank you for viewing my ship! I had so much fun creating this project and I can’t wait to start my next project (which will probably be a space station!) My readme is easier to follow since it has multiple images so check that out if you are confused for the viewing and downloading process Check my readme out here: https://github.com/JaydenSeelo/CAD/blob/main/README.md...
|
1792972517.9813762
|
1793058917.9813762
|
|
18043
|
Seal OS by @indiesealdev | Stardance
|
indiesealdev
|
3
|
116.0
|
920
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-21T02:36:55Z", "hours": 11.0, "multiplier": 18.0, "payout": 200, "blessing": "neutral", "text": "Hello there!! Well, I’m done with this project, I’m very happy with the result of what I did, and I learnt a lot of JavaScript, HTML and CSS. For this final update I worked on a ton of QOL basically, basically the following: All things you build now get saved when you reset the page. You can now scale and rotate objects (only certain you can rotate), for example, Seals can be scaled up and be slower, or be scaled down and be faster. For rotating and scaling, you can also use your ARROW KEYS :D That was about it, most of my time spent was in structuring my code and making it easier to expand, so the integration of these was pretty easy tbh. Well, thank you for following me on this journey <] SEAl YA!", "repo": "https://github.com/IndieSeal/SealWebOS", "demo": "https://indieseal.github.io/SealWebOS/"}, {"ship_num": 2, "ts": "2026-08-12T06:19:20Z", "hours": 37.0, "multiplier": 19.4, "payout": 720, "blessing": "neutral", "text": "I made 3 new apps, but I did add a heck ton more features! Ok, let’s get started with the apps first: Moving Seals: This is an app that lets you draw seals that move all over your screen and that after they’re spawned you have the possibility to make them explode, or nuke them if you’re so cruel. Sand Builder: An app to decorate your os! Place sand castles, starfishes and sand dollars (didn’t know those existed but they’re really cool). Settings: A simple app to adjust volume settings, and to enable a certain possible jumpscare with a very small chance of it happening every second, hope it doesn’t catch you off guard. They’re also saved if you reload the page (including Seal Clicker!!). About the features, I wanted to add some small things that were fun to play around and fun to discover, very silly! So I made the following: Sleepy but hungry seal: A seal that sits in the top left corner of your screen which if you click, will call it’s guard (an epic cat), which will throw a brick at you lol, this will leave your screen fractured, unless you feed the seal some fish by dragging them into its mouth. Fish: There’s some new decoration, which are fish who like to swim below in your screen in the sea! You can grab them to feed the hungry seal. DVD Seal: I wanted to experiment with 3D, because I saw a really cute seal model, so I made it so you can grab it and throw it around like the DVD Screensaver, I’m not sure why it reminded me of it, but yeah. Foxy Jumpscare: I wanted to scare the user of the website, at first I thought I would do a really creepy seal image, WHICH I FOUND SOME WHICH I WILL NEVER BE ABLE TO ERASE FROM MY BRAIN D:, but I landed on the Foxy Jumpscare as I think it’s funnier and fits the silly vibes more, but I decided to disable it by default so if someone doesn’t know about it, they don’t get jumped or smthing. Since the last update, I updated a lot of the visuals (just UI elements, my weird art will still be there), thanks to my sister which is an artist (thx for the help :D). I had a bit of trouble with the 3D DVD Seal as I thought moving it would be as easy as just getting the input from the canvas, I was so wrong, I was there for hours trying to fix it, and then I thought, what about raycasting? That would literally need the model to be hit! But implementation also took hours as I couldn’t find any guides, but OH WELL. I’m super duper happy with how it turned out, and I hope you love it as much as I enjoyed making it, thanks for watching my devlogs, for reading alla this. and bye <3", "repo": "https://github.com/IndieSeal/SealWebOS", "demo": "https://indieseal.github.io/SealWebOS/"}, {"ship_num": 3, "ts": "2026-08-03T00:56:22Z", "hours": 68.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hello there!! I made a very Seal-Inspired WebOS, it has 3 apps, which only two are cool as the other one is just an introduction to the OS and me! The REAL cool apps are these as of right now are: Seal Clicker: A clicker/idle game like Cookie Clicker but if it was seals. SealTok: Wanna brainrot your brain until it only thinks of seals? Me too! Now you can do that here!! I think what was most challenging about making this project was the Seal Clicker app as it went through multiple stages of rebuilding to make expanding the upgrades and seals easier, and in general it’s just a big app lol, I also did all the art myself, I’ve been challenging myself recently to learn to draw, even if they’re not the best drawings, but I’m very happy on how it turned out! I also had barely any knowledge about HTML, CSS and JS, so I learnt everything from scratch, though I was glad to discover that JS is surprisingly similar to my main coding language C#. I’m also VERY proud of the Seal Clicker app, it’s where I learnt that a lot of the concepts from C# were applicable in JS and is where I put my structure optimization hat haha, I ended up loving the drawings I made. And for you to test the project just hit the “Try Project” button and it will take you there! I really hope you enjoy the OS as much as I loved building it, and thanks for taking the time to check it out!!", "repo": "https://github.com/IndieSeal/SealWebOS", "demo": "https://indieseal.github.io/SealWebOS/"}]...
|
[{"post_id": 70954, "ts": "202 [{"post_id": 70954, "ts": "2026-09-20T03:04:48Z", "hours": 3.5997, "text": "Helloooooooo, I again fell into the rabbit hole of OPTIMIZATION As I am on my mission to make everything really approachable for coders that may want to inspect the code and fork it, and make their own silly changes, it is easier than ever. So I made some new sliders that affect multiple things, which I used to replace the audio categories! (sfx and ui for example), audios that fit into the same category and have one slider that affects all of them. Thanks to the new slider system I have, it was very easy to implement a new feature, sizing and rotation for objects! Though not all objects are rotatable, but at least they all are scalable :]! So now you can have annoying cockroach seals that zoom all over the screen, or have big sealies that move as slow as a turtle. OH, I almost forgot. You can also use the arrow keys to rotate and scale the stuff without having to grab the slider and move it around, though I could not find a way to make it so you can press more than 2 keys at the same time, I will be putting some time to research that, but for now, nope :[ Alrighty, that is it for this cool devlog , see ya"}, {"post_id": 65627, "ts": "2026-09-10T21:30:46Z", "hours": 6.7997, "text": "Hello thereeee!! i am back with a pretty boring devlog, oh yea I have been fixing bugs, which that I am aware, everything should be fixed (hopefully) These include: Sealtok autoplaying on page load (videos with audio would be heard from outside, which could be annoying) I have also been busy with structuring code, and I am currently working on optimizing the Audio Categories to translate them into the new settings system! (sfx and ui sliders) I also spent some of the stardust on buying a domain, so I can have my cool OS outside of github >:] (now with cloudflare too) Some really cool things that I have been working on for the Paint Windows is so they get saved, so you can restart the page and have your drawn things there again!! I have a rotation system and scaling system for object painting, but with the structuring of the setting system so that I can create sliders for other things too, it is still a WIP, but it should be out soon! Alright, yippe and bye"}, {"post_id": 50735, "ts": "2026-08-20T02:39:42Z", "hours": 0.7006, "text": "Well, I am back at it, as my goal is to get a 3D printer! As of currently, I just fixed a couple of bugs, including: Making ¨painting¨ apps easier to close. Fixed it so you could not ¨paint¨ when clicking the close or minimize button. Fixed Foxy Jumpscare setting not actually working I already have some ideas in mind of what I want to do next! If you wanna hear my quick vent, go ahead: For WebOS 1 I really placed a lot of time into it so I could have my code structure really well done so it would be really easy to create new apps, and I did spend a lot of time in Seal Clicker lol, but I thought the ratings would count both Web 1 and 2, but sadly not, so I will have to work another 50 hours on this , not annoyed, but I did wanna work on other projects"}, {"post_id": 45597, "ts": "2026-08-12T05:57:52Z", "hours": 8.5486, "text": "Hello there, and welcome to my last devlog, it is been a long journey, but I have done it, I have learned the ways of HTML, CSS and JS. I hate them all, but at least I know them now lol. I made a lot of QOL, a LOT of bug fixing and added some cool little features, you can take a look: Random Foxy Jumpscare: It is an option in the Settings App which can be activated and desactivated, but it is disabled by default. Saved settings: All settings you modify will be kept if you reload the page, this also works with the Seal Clicker app! Fih: Now you will see a bunch of fish swimming around in the bottom of the screen, and they are grabbable!! Sleepy, Hungry seal: The seal in the top corner of the screen is very sleepy, if you click it, it will get mad, but you can fix the damages by feeding it fish. Audio: Added a bunch more of audio Fixes: A lot of bug interactions with the DVD Seal."}, {"post_id": 44959, "ts": "2026-08-11T02:07:57Z", "hours": 10.1906, "text": "I made mostly visual improvements and added some silly stuff in general, because I wanna have fun, you know? These include: Mad Seal: The seal is resting, and you woke them up by clicking them, they are calling the crazy kitty to attack you, for now the damage is permanent (until you refresh the page), but there will soon be a way to revert it by feeding the seal. 🐟 Spinning Seal: You can grab it and throw it around like those DVD Screensavers, its fun! 📀 I want to make something to jumpscare y´all, but I will be thinking of ideas to do so hehe, be prepared >:] I had to make the Desktop App Icons wrap around, so they did not sink into the water, because I do not want that. I am so close to finishing this really cool OS which I am really proud of, I love it so much, and did it all without any frameworks which is really cool. These changes are not published yet, they are on a testing branch as I still need to squash some bugs."}, {"post_id": 43810, "ts": "2026-08-09T07:37:47Z", "hours": 9.8419, "text": "Hello there, I did a lot of expanding on the Seal Moving app, I grabbed it and stripped all of its bones and removed their personality so they were easily modifiable and expandable! YIPPEE. What I am trying to say is, I plan on using the same behaviour of spawning seals for another app to decorate your OS´s background! So i had to spend a lot of time making it easily expandable, and it was worth it!! I also made a variation of the seal´s sprite so you can choose which one to spawn, there is also brushes now for spawning and removing seals, aswell as an icon for nuking them all!! The other app will be for spawning sand castles, sea stars and other stuff like that ONLY in the sand, below everything that is UI. With these two apps, I would just need to add one more app, and I should be done! Probably another game to have some more fun stuff, I know that will take a while, but eh, doesn´t really matter."}, {"post_id": 41328, "ts": "2026-08-05T14:03:48Z", "hours": 8.7142, "text": "These days I have been mostly optimizing the code, so again, it is easier to create new windows and stuff, and I also fixed some annoying window header css issues. I am also thinking to change some of the audio the apps have to sound a bit less THUMPY. I currently have two things I am working on, just a visual update in general for the OS so it feels more silly, which should be in video 2, and a new app >:] This new app, I am still unsure in which direction to take it, maybe both?? But here is the idea: You have seals that move in your screen, and you can click to explode them (sorry sealies ) But I do need to decide wether with this to do this or that: A minigame where seals spawn and you have to explode as many as you can in a limited amount of time. Desktop pets, them just hanging around, and if they are bothering you, just pop them lol. Or I could do a combo of the two, but again, unsure. Would love to know what everyone else thinks"}, {"post_id": 39792, "ts": "2026-08-03T00:23:54Z", "hours": 5.6922, "text": "Final devlog, this was a great journey, and I cannot wait to get started on WebOS 2, this is going to take an eternity with how long this first part took me, but I already have a solid base (I might even do some more structure changes in the code to make it EVEN EASIER to make windows), and I learnt a lot about HTML, CSS and JS! Well, in these last two days I did the following: Fixed the drag audio bug Fixed some CSS which was not working on build Finished adding all the art for Seal Clicker Balanched Seal Clicker so it takes around 10-20 minutes to finish Made App Icons for Seal Clicker and SealTok Made some visual changes Added RESOURCES.md and updated the README.md hope you enjoy it!!! I really loved building it 🦭 (hope there is someone as autistic as me who loves seals lol)"}, {"post_id": 38610, "ts": "2026-08-01T02:54:25Z", "hours": 10.3364, "text": "I have finished my Seal-Tok, I wanted to keep it simple, I do not really want to add likes and comments and stuff as I do not want to overcomplicate myself as much as I did with Seal Clicker lol, but I may add a ¨Share¨ feature which would just take you to the source of the authors video. I am also planning on doing some videos myself for seal-tok, I am already working on some, but it is going to take a while D: I have finally finished my Seal Clicker in terms of systems and having all the upgrades, now I only have to draw the last couple of upgrades (7 more). In terms of what I have to do before publishing the mission is to fix a couple of audio bugs, for some reason windows if left inactive for a while (changing to other tabs of browser), probably because of the deltaTime I have in there? I need to take a look. And soon SealOS will be available for all!! hehe"}, {"post_id": 32758, "ts": "2026-07-22T03:40:05Z", "hours": 9.1253, "text": "I’m no artist but I’ve been working on the art for the game, maybe it’s not the prettiest but ehh, it’s pretty good for me. I’ve been working on implementing audio, on adding some juice to the interactions, which I’m still planning to do a lot more of those, but time will tell. I’ve added the basic first upgrades for all the Seals which is really cool yeaa.. I’m super happy with how I got to optimize the upgrade and seal system as now you only need 3 lines of code to inject HOPE into the html give it their unique id and change icons and text around with ease, I love using classes, seriously can’t even begin to say how happy I am with JavaScript literally being C# but a bit worse ( sorry JS enjoyers :[ ). So now, it should be very easy to add new stuff which I’m thrilled to do, not thrilled about the art part though haha. Probably less than 10 more hours and I should be done with this damned app, and I have already noted down some ideas for which apps I could do next, but I don’t want to spoil, so you’ll have to wait, or if you find the Source Code, maybe you can go search for it, like a treasure hunt, or easter egg? if you actually find the easter egg, what do you think of my suggestion? it’s amazing right? right? idk (also I just got annoyed with my keyboard putting this: ` instead of ’, so I just copied it and pasted it, would be fun to have a onekey for that haha) ok bye, thanks for reading"}, {"post_id": 30250, "ts": "2026-07-17T17:54:40Z", "hours": 9.8186, "text": "Hellooo!! Well, I´ve been working a lot on the Seal Clicker app, it´s taking a whole lot more than I had initially thought, but oh well. All upgrades are working correctly, made a lot of UI improvements, more like the layout specifically, I still need to work on how it overall looks. I´ve been squashing down bugs, and I´ve implemented tooltips! For now only applicable on the upgrades, but I want to see if I can make it modular. My next task is learning how to spawn HTML into a page, because I want there to be a visual way to know how many Seals you´ve bought that help you obtain food (that´s the middle row for ya, I still need to draw some backgrounds lol). Also, I´m actually enjoying a lot learning this as first of all, now I can make websites hehe, but also I got a new language in my ¨can-do¨ list I guess, JavaScript is literally C# but with Dynamic Typing so it´s been quite easy to learn. (i hate dynamic typing though). alright, adios, see ya on the next devlog :]"}, {"post_id": 28500, "ts": "2026-07-14T19:47:15Z", "hours": 8.9739, "text": "I´m about to hit the 10 hour time limit per devlog, so I´m posting this :] As of currently, I´m just trying to make the project more organized, I´ve been making folders to store CSS´s as I´ve been splitting the main one, similarly of how I did with my Java Script files. And I´ve got the basics down of the Seal Clicker, I´m going to be taking a lot of inspiration from Cookie Clicker, so I´m seeing how to land those vibes. I´ve also made it so windows can´t leave your viewport and can´t go on top of the Navbar. I would share a video, but the project still looks exactly the same and feels about the same, the Seal Clicker window has the basic click and upgrade functionality, but it´s just the elements rn and it looks kinda ugly. But I´ll keep y´all updated!! :]"}, {"post_id": 22546, "ts": "2026-07-05T02:07:31Z", "hours": 8.0039, "text": "Thanks to Jenin over on Summer Camp, I´ve been able to grasp the concepts of HTML and CSS better, and I got over some hard bugs I couldn´t squash. Well, I´ve done a lot on this update, I followed a tutorial on how to make a sea, on top of that I added a fish that swims through the sea, and soon will be draggable and will be feedable to a seal! I´ve thought of what I will do app-wise, but I won´t spoil ya! I added some relaxing beach/sea sounds, I changed the background to actually match the water i placed, so not it´s sand! I added a little bar in the taskbar app icons to know wether it is the app that is selected, or if it´s minimized/not selected, I´ll probably need to have a different color for those two states, but for now, I think it´s pretty good, on the future I want to make apps pinnable on the taskbar and they will show up without the bar below! Visually I think it´s looking great, now I only gotta start developing the actuall apps lol. Wish me luck :]"}, {"post_id": 18397, "ts": "2026-06-29T15:16:32Z", "hours": 5.7233, "text": "I have improved my audio system for dragging objects, so it only plays when you´re moving the window and not just by touching it, and finished adding the lerp implementation to the windows, I still gotta fix some bugs though, like the buttons from the windows making sound when hovered WHEN moving the windows too fast, I´m thinking I´ll disable their interactions when the window is grabbed. I also made a very important change, to avoid creating duplicate script and to make my lerp actually work, I made the whole drag script into a class! This way, each window manages itself and can store it’s last position for the lerp purpose, and I’m very proud of how it ended up looking and how it sounds, would’ve loved to be able to fix the bug where looping has a small pause between each loop, but maybe I’ll make the audio longer so it’s not AS noticeable, or it doesn’t happen as often! With these changes, making new windows should be easy peasy :D"}, {"post_id": 11067, "ts": "2026-06-18T03:16:23Z", "hours": 3.8808, "text": "Working on the taskbar, and added some audio to keep it from being so silent, I was getting tired from it! To-do: -Work on Wii-type opening app menu. -Finish adding sounds everywhere -Add more desktop apps -Finish taskbar behaviour"}, {"post_id": 8547, "ts": "2026-06-14T06:38:21Z", "hours": 3.3081, "text": "Finally finished the basic part of the windows, still needs to be polished, but hey they behaviour’s there!"}, {"post_id": 8276, "ts": "2026-06-13T19:23:23Z", "hours": 3.2692, "text": "I finally finished the drag and drop feature, took me a while as I was trying to have different cursors while outside, while hovering and while clicking, which took longer than I thought, but I did it! Next task: Make an app inside of the OS"}]...
|
Title: Seal OS by @indiesealdev | Stardance
Devlo Title: Seal OS by @indiesealdev | Stardance
Devlogs:
I finally finished the drag and drop feature, took me a while as I was trying to have different cursors while outside, while hovering and while clicking, which took longer than I thought, but I did it! Next task: Make an app inside of the OS
Finally finished the basic part of the windows, still needs to be polished, but hey they behaviour’s there!
Working on the taskbar, and added some audio to keep it from being so silent, I was getting tired from it! To-do: -Work on Wii-type opening app menu. -Finish adding sounds everywhere -Add more desktop apps -Finish taskbar behaviour
I have improved my audio system for dragging objects, so it only plays when you´re moving the window and not just by touching it, and finished adding the lerp implementation to the windows, I still gotta fix some bugs though, like the buttons from the windows making sound when hovered WHEN moving the windows too fast, I´m thinking I´ll disable their interactions when the window is grabbed. I also made a very important change, to avoid creating duplicate script and to make my lerp actually work, I made the whole drag script into a class! This way, each window manages itself and can store it’s last position for the lerp purpose, and I’m very proud of how it ended up looking and how it sounds, would’ve loved to be able to fix the bug where looping has a small pause between each loop, but maybe I’ll make the audio longer so it’s not AS noticeable, or it doesn’t happen as often! With these changes, making new windows should be easy peasy :D
Thanks to Jenin over on Summer Camp, I´ve been able to grasp the concepts of HTML and CSS better, and I got over some hard bugs I couldn´t squash. Well, I´ve done a lot on this update, I followed a tutorial on how to make a sea, on top of that I added a fish that swims through the sea, and soon will be draggable and will be feedable to a seal! I´ve thought of what I will do app-wise, but I won´t spoil ya! I added some relaxing beach/sea sounds, I changed the background to actually match the water i placed, so not it´s sand! I added a little bar in the taskbar app icons to know wether it is the app that is selected, or if it´s minimized/not selected, I´ll probably need to have a different color for those two states, but for now, I think it´s pretty good, on the future I want to make apps pinnable on the taskbar and they will show up without the bar below! Visually I think it´s looking great, now I only gotta start developing the actuall apps lol. Wish me luck :]
I´m about to hit the 10 hour time limit per devlog, so I´m posting this :] As of currently, I´m just trying to make the project more organized, I´ve been making folders to store CSS´s as I´ve been splitting the main one, similarly of how I did with my Java Script files. And I´ve got the basics down of the Seal Clicker, I´m going to be taking a lot of inspiration from Cookie Clicker, so I´m seeing how to land those vibes. I´ve also made it so windows can´t leave your viewport and can´t go on top of the Navbar. I would share a video, but the project still looks exactly the same and feels about the same, the Seal Clicker window has the basic click and upgrade functionality, but it´s just the elements rn and it looks kinda ugly. But I´ll keep y´all updated!! :]
Hellooo!! Well, I´ve been working a lot on the Seal Clicker app, it´s taking a whole lot more than I had initially thought, but oh well. All upgrades are working correctly, made a lot of UI improvements, more like the layout specifically, I still need to work on how it overall looks. I´ve been squashing down bugs, and I´ve implemented tooltips! For now only applicable on the upgrades, but I want to see if I can make it modular. My next task is learning how to spawn HTML into a page, because I want there to be a visual way to know how many Seals you´ve bought that help you obtain food (that´s the middle row for ya, I still need to draw some backgrounds lol). Also, I´m actually enjoying a lot learning this as first of all, now I can make websites hehe, but also I got a new language in my ¨can-do¨ list I guess, JavaScript is literally C# but with Dynamic Typing so it´s been quite easy to learn. (i hate dynamic typing though). alright, adios, see ya on the next devlog :]
I’m no artist but I’ve been working on the art for the game, maybe it’s not the prettiest but ehh, it’s pretty good for me. I’ve been working on implementing audio, on adding some juice to the interactions, which I’m still planning to do a lot more of those, but time will tell. I’ve added the basic first upgrades for all the Seals which is really cool yeaa.. I’m super happy with how I got to optimize the upgrade and seal system as now you only need 3 lines of code to inject HOPE into the html give it their unique id and change icons and text around with ease, I love using classes, seriously can’t even begin to say how happy I am with JavaScript literally being C# but a bit worse ( sorry JS enjoyers :[ ). So now, it should be very easy to add new stuff which I’m thrilled to do, not thrilled about the art part though haha. Probably less than 10 more hours and I should be done with this damned app, and I have already noted down some ideas for which apps I could do next, but I don’t want to spoil, so you’ll have to wait, or if you find the Source Code, maybe you can go search for it, like a treasure hunt, or easter egg? if you actually find the easter egg, what do you think of my suggestion? it’s amazing right? right? idk (also I just got annoyed with my keyboard putting this: ` instead of ’, so I just copied it and pasted it, would be fun to have a onekey for that haha) ok bye, thanks for reading
I have finished my Seal-Tok, I wanted to keep it simple, I do not really want to add likes and comments and stuff as I do not want to overcomplicate myself as much as I did with Seal Clicker lol, but I may add a ¨Share¨ feature which would just take you to the source of the authors video. I am also planning on doing some videos myself for seal-tok, I am already working on some, but it is going to take a while D: I have finally finished my Seal Clicker in terms of systems and having all the upgrades, now I only have to draw the last couple of upgrades (7 more). In terms of what I have to do before publishing the mission is to fix a couple of audio bugs, for some reason windows if left inactive for a while (changing to other tabs of browser), probably because of the deltaTime I have in there? I need to take a look. And soon SealOS will be available for all!! hehe
Final devlog, this was a great journey, and I cannot wait to get started on WebOS 2, this is going to take an eternity with how long this first part took me, but I already have a solid base (I might even do some more structure changes in the code to make it EVEN EASIER to make windows), and I learnt a lot about HTML, CSS and JS! Well, in these last two days I did the following: Fixed the drag audio bug Fixed some CSS which was not working on build Finished adding all the art for Seal Clicker Balanched Seal Clicker so it takes around 10-20 minutes to finish Made App Icons for Seal Clicker and SealTok Made some visual changes Added RESOURCES.md and updated the README.md hope you enjoy it!!! I really loved building it 🦭 (hope there is someone as autistic as me who loves seals lol)
These days I have been mostly optimizing the code, so again, it is easier to create new windows and stuff, and I also fixed some annoying window header css issues. I am also thinking to change some of the audio the apps have to sound a bit less THUMPY. I currently have two things I am working on, just a visual update in general for the OS so it feels more silly, which should be in video 2, and a new app >:] This new app, I am still unsure in which direction to take it, maybe both?? But here is the idea: You have seals that move in your screen, and you can click to explode them (sorry sealies ) But I do need to decide wether with this to do this or that: A minigame where seals spawn and you have to explode as many as you can in a limited amount of time. Desktop pets, them just hanging around, and if they are bothering you, just pop them lol. Or I could do a combo of the two, but again, unsure. Would love to know what everyone else thinks
Hello there, I did a lot of expanding on the Seal Moving app, I grabbed it and stripped all of its bones and removed their personality so they were easily modifiable and expandable! YIPPEE. What I am trying to say is, I plan on using the same behaviour of spawning seals for another app to decorate your OS´s background! So i had to spend a lot of time making it easily expandable, and it was worth it!! I also made a variation of the seal´s sprite so you can choose which one to spawn, there is also brushes now for spawning and removing seals, aswell as an icon for nuking them all!! The other app will be for spawning sand castles, sea stars and other stuff like that ONLY in the sand, below everything that is UI. With these two apps, I would just need to add one more app, and I should be done! Probably another game to have some more fun stuff, I know that will take a while, but eh, doesn´t really matter.
I made mostly visual improvements and added some silly stuff in general, because I wanna have fun, you know? These include: Mad Seal: The seal is resting, and you woke them up by clicking them, they are calling the crazy kitty to attack you, for now the damage is permanent (until you refresh the page), but there will soon be a way to revert it by feeding the seal. 🐟 Spinning Seal: You can grab it and throw it around like those DVD Screensavers, its fun! 📀 I want to make something to jumpscare y´all, but I will be thinking of ideas to do so hehe, be prepared >:] I had to make the Desktop App Icons wrap around, so they did not sink into the water, because I do not want that. I am so close to finishing this really cool OS which I am really proud of, I love it so much, and did it all without any frameworks which is really cool. These changes are not published yet, they are on a testing branch as I still need to squash some bugs.
Hello there, and welcome to my last devlog, it is been a long journey, but I have done it, I have learned the ways of HTML, CSS and JS. I hate them all, but at least I know them now lol. I made a lot of QOL, a LOT of bug fixing and added some cool little features, you can take a look: Random Foxy Jumpscare: It is an option in the Settings App which can be activated and desactivated, but it is disabled by default. Saved settings: All settings you modify will be kept if you reload the page, this also works with the Seal Clicker app! Fih: Now you will see a bunch of fish swimming around in the bottom of the screen, and they are grabbable!! Sleepy, Hungry seal: The seal in the top corner of the screen is very sleepy, if you click it, it will get mad, but you can fix the damages by feeding it fish. Audio: Added a bunch more of audio Fixes: A lot of bug interactions with the DVD Seal.
Well, I am back at it, as my goal is to get a 3D printer! As of currently, I just fixed a couple of bugs, including: Making ¨painting¨ apps easier to close. Fixed it so you could not ¨paint¨ when clicking the close or minimize button. Fixed Foxy Jumpscare setting not actually working I already have some ideas in mind of what I want to do next! If you wanna hear my quick vent, go ahead: For WebOS 1 I really placed a lot of time into it so I could have my code structure really well done so it would be really easy to create new apps, and I did spend a lot of time in Seal Clicker lol, but I thought the ratings would count both Web 1 and 2, but sadly not, so I will have to work another 50 hours on this , not annoyed, but I did wanna work on other projects
Hello thereeee!! i am back with a pretty boring devlog, oh yea I have been fixing bugs, which that I am aware, everything should be fixed (hopefully) These include: Sealtok autoplaying on page load (videos with audio would be heard from outside, which could be annoying) I have also been busy with structuring code, and I am currently working on optimizing the Audio Categories to translate them into the new settings system! (sfx and ui sliders) I also spent some of the stardust on buying a domain, so I can have my cool OS outside of github >:] (now with cloudflare too) Some really cool things that I have been working on for the Paint Windows is so they get saved, so you can restart the page and have your drawn things there again!! I have a rotation system and scaling system for object painting, but with the structuring of the setting system so that I can create sliders for other things too, it is still a WIP, but it should be out soon! Alright, yippe and bye
Helloooooooo, I again fell into the rabbit hole of OPTIMIZATION As I am on my mission to make everything really approachable for coders that may want to inspect the code and fork it, and make their own silly changes, it is easier than ever. So I made some new sliders that affect multiple things, which I used to replace the audio categories! (sfx and ui for example), audios that fit into the same category and have one slider that affects all of them. Thanks to the new slider system I have, it was very easy to implement a new feature, sizing and rotation for objects! Though not all objects are rotatable, but at least they all are scalable :]! So now you can have annoying cockroach seals that zoom all over the screen, or have big sealies that move as slow as a turtle. OH, I almost forgot. You can also use the arrow keys to rotate and scale the stuff without having to grab the slider and move it around, though I could not find a way to make it so you can press more than 2 keys at the same time, I will be putting some time to research that, but for now, nope :[ Alrighty, that is it for this cool devlog , see ya
Ships:
Hello there!! I made a very Seal-Inspired WebOS, it has 3 apps, which only two are cool as the other one is just an introduction to the OS and me! The REAL cool apps are these as of right now are: Seal Clicker: A clicker/idle game like Cookie Clicker but if it was seals. SealTok: Wanna brainrot your brain until it only thinks of seals? Me too! Now you can do that here!! I think what was most challenging about making this project was the Seal Clicker app as it went through multiple stages of rebuilding to make expanding the upgrades and seals easier, and in general it’s just a big app lol, I also did all the art myself, I’ve been challenging myself recently to learn to draw, even if they’re not the best drawings, but I’m very happy on how it turned out! I also had barely any knowledge about HTML, CSS and JS, so I learnt everything from scratch, though I was glad to discover that JS is surprisingly similar to my main coding language C#. I’m also VERY proud of the Seal Clicker app, it’s where I learnt that a lot of the concepts from C# were applicable in JS and is where I put my structure optimization hat haha, I ended up loving the drawings I made. And for you to test the project just hit the “Try Project” button and it will take you there! I really hope you enjoy the OS as much as I loved building it, and thanks for taking the time to check it out!!
I made 3 new apps, but I did add a heck ton more features! Ok, let’s get started with the apps first: Moving Seals: This is an app that lets you draw seals that move all over your screen and that after they’re spawned you have the possibility to make them explode, or nuke them if you’re so cruel. Sand Builder: An app to decorate your os! Place sand castles, starfishes and sand dollars (didn’t know those existed but they’re really cool). Settings: A simple app to adjust volume settings, and to enable a certain possible jumpscare with a very small chance of it happening every second, hope it doesn’t catch you off guard. They’re also saved if you reload the page (including Seal Clicker!!). About the features, I wanted to add some small things that were fun to play around and fun to discover, very silly! So I made the following: Sleepy but hungry seal: A seal that sits in the top left corner of your screen which if you click, will call it’s guard (an epic cat), which will throw a brick at you lol, this will leave your screen fractured, unless you feed the seal some fish by dragging them into its mouth. Fish: There’s some new decoration, which are fish who like to swim below in your screen in the sea! You can grab them to feed the hungry seal. DVD Seal: I wanted to experiment with 3D, because I saw a really cute seal model, so I made it so you can grab it and throw it around like the DVD Screensaver, I’m not sure why it reminded me of it, but yeah. Foxy Jumpscare: I wanted to scare the user of the website, at first I thought I would do a really creepy seal image, WHICH I FOUND SOME WHICH I WILL NEVER BE ABLE TO ERASE FROM MY BRAIN D:, but I landed on the Foxy Jumpscare as I think it’s funnier and fits the silly vibes more, but I decided to disable it by default so if someone doesn’t know about it, they don’t get jumped or smthing. Since the last update, I updated a lot of the visuals (just UI elements, my weird art will still be there), thanks to my sister which is an artist (thx for the help :D). I had a bit of trouble with the 3D DVD Seal as I thought moving it would be as easy as just getting the input from the canvas, I was so wrong, I was there for hours trying to fix it, and then I thought, what about raycasting? That would literally need the model to be hit! But implementation also took hours as I couldn’t find any guides, but OH WELL. I’m super duper happy with how it turned out, and I hope you love it as much as I enjoyed making it, thanks for watching my devlogs, for reading alla this. and bye <3
Hello there!! Well, I’m done with this project, I’m very happy with the result of what I did, and I learnt a lot of JavaScript, HTML and CSS. For this final update I worked on a ton of QOL basically, basically the following: All things you build now get saved when you reset the page. You can now scale and rotate objects (only certain you can rotate), for example, Seals can be scaled up and be slower, or be scaled down and be faster. For rotating and scaling, you can also use your ARROW KEYS :D That was about it, most of my time spent was in structuring my code and making it easier to expand, so the integration of these was pretty easy tbh. Well, thank you for following me on this journey <] SEAl YA!...
|
1792990393.52246
|
1793076793.52246
|
|
316
|
Mesa AI by @ng_qi_an | Stardance
|
ng_qi_an
|
1
|
56.0
|
917
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-23T13:44:58Z", "hours": 56.0, "multiplier": 16.82, "payout": 917, "blessing": "neutral", "text": "Finally, a ship!! 🚢 This project was really rushed, as my exams are coming, and I couldn’t finish much of it. Really hope to continue in the next event! But here is what Mesa AI does right now: 📋 Generate concise summary notes from lectures which you can edit yourself, in a Notion-style editor. 🤖 Comes with a agent (i like to call it sidekick) that can search your lecture notes, research on the web, and put all that together by editing directly into your notes. 🗹 Ships with a quiz function for reinforced learning as well Built with a flexible tab-interface, allowing you to make opened chats/quizzes larger, or on the side as you please. 📑 Subject-specific instructions keep notes & quizzes relevant to syllabus, instead of those generic AI study apps out there. 📚 And an organization system that splits notes into classes, and files into folders. Demo credentials: Email: [email protected] Password: test1234 I don’t recommend using this, since you’ll be skipping out on the actual tutorials and onboarding flow. Just use if you’re too lazy. Here are some improvements from the Flavourtown edition: Model flexiblity: No longer locked to just Gemini in the chat 👀 Custom Rag pipeline built from scratch: Files are uploaded in 10s, while chat context is no longer bloated. 🖼️ More supported files: PDFs, slides, word documents, images can all be uploaded. 🗲 Efficient notebooks design: The layout has been reconfigured, letting you resize the side panel, and move tabs anywhere you like. 🔍 Agent chat: Chat can now search through your files directly instead of being a wrapper ☁️ Editable notes: Notes are no longer read-only, and save your changes! Things I learned: How to upload files with streams, and making those streams editable. How to integrate a text-editor. How to make AI interact with the BlockNote editor, given they don’t have a direct AI extension for my use case. How to create a RAG system, from extracting, to chunking, to embedding and querying. How to add tools to the model, making it truly agentic. For more technical details & future plans, checkout the github! Full breakdown of tech stack is there. Show some love and try the demo too!", "repo": "https://github.com/ng-qi-an/mesa-ai", "demo": "https://mesa-ai.vercel.app"}]...
|
[{"post_id": 53049, "ts": "202 [{"post_id": 53049, "ts": "2026-08-23T13:19:48Z", "hours": 0.3097, "text": "Image embeddings!! Forgot to install hackatime on a new editor so all the time i spent here on here was wasted 💔 Notebook improvements 🖼️ Images from files are extracted and saved 🖹 The model is presented with a list of images to choose from, and can embed them directly into the notebook. 🗲 Generating notes are now single-step . The old generate title, subtitle, topics then generate notes is abolished and combined into a single request. This makes note generation almost instant! 📋 New bottom bar that shows notebook actions, along with a editor mode (toggle between editing and viewing). File uploads Files uploaded are now indexed reliably. Images are also extracted from files, as mentioned before. Other changes Topics has been removed temporarily. Quiz no longer has topic options as well. Notebook is no longer accessible on mobile The tutorial was cut short. 😢 Things I couldn’t do: Having to focus on exams, I couldn’t finish Mesa AI before stardance ends. Here are a list of things I’ll work to complete the next hackclub event: Mobile support for Notebooks Notebook topics that are procedurally generated Add flashcards Freshen up UI (little unpolished here and there) Add a marking mode (AI marks papers for you) Collaboration & sharing notebooks Code the dashboard page (as a consolation i included a mockup of what it would have been) Making topics on the class page actually work 📹 Check out the demo video and screenshots! (show some love for me missing like almost 4-5 hours of work here)"}, {"post_id": 43313, "ts": "2026-08-08T14:43:23Z", "hours": 3.0472, "text": "Upload improvements File uploads are more stable, and status updates resume between reloads Users can see what stage their file is at on the indexing progress Allows for file statuses to still work even if the file selector dialog box is closed and reopened."}, {"post_id": 39434, "ts": "2026-08-02T11:57:23Z", "hours": 10.0094, "text": "Agentic notes?!?! 👀 *i really need to post devlogs more often ;p) check out the demo first if you’re too lazy to read 🤓 Agent 🤖 : ⭐️ This is a crazy milestone, and I finally finished one of the biggest features i really wanted to bring to Mesa ai when i decided to continue it on stardance. The chat window can now edit, delete and move notebook content ! ✍️ You can ask the chat to summarise blocks, turn into different formats or even create tables ⚡️ 📖 Basically a mini notion + notebookLM but with a study agent Use this with your sources and the web to supercharge research ! 🔬 I have plans to make the chat be able to create flashcards, quizzes and future tools directly from the chat window along with history, so there wont be a need to make those manually anymore ✨ Editor : Chat agent cursor shows which block it’s interacting with (the white bar on the left) ⌨️ Diff editor to see what the agent changed 📋 Tool approvals so you can choose whether to accept it or not! ✅ While Blocknote provides some helpers for the AI extension, since i’m not using it as intended, I had to patch up alot of the implementation myself 😭 Chat : Finally allowed images to be pasted or dragged into the chat window 🖼️ Added cool tool UI for notebook edits too 🎶 Check out the new demo!!!! 🎥 (sorry if its abit dizzying i was playing with the zooms a little too much) Honestly, I never imagined I would be capable enough to create something like this, starting just about 6 months ago. 🥲 Gimme a follow too if u wanna see more of this project and find out when its done ❤️"}, {"post_id": 35216, "ts": "2026-07-26T14:32:20Z", "hours": 11.23, "text": "Usage limits! Went over the 10hr limit 😭 🙈 In this update, messages now count towards a single usage limit. The default is 3000 credits, which is equivalent to 3 million tokens of Gemini 3 Flash. 💸 Limits are enforced at the API level, and the chat level. Free models can still be used even when the limit is exhausted. 🔁 Limits reset every billing cycle, which is about 1 month from the same day. Built in mind to be extended with stripe in the future to be monetised. ❤️ This is a soft limit, so currently generating chats won’t stop halfway. 📋 Billing breakdown can be seen in the usage tab on account settings, will be extended in the future! Other than that, 🍝 The notebook chat API and main chat API were merged, fixing some of the spaghetti code building up. 📁 The main chat can now reference ALL files too! That’s right, ALL FILES. 🤓 Notebook chats are still limited to files only linked to the notebook. 📹 Check out the awesome demo & screenshot i forgot to include in the video. Chat generation kinda slow, just skip forward."}, {"post_id": 30674, "ts": "2026-07-18T13:24:33Z", "hours": 0.8264, "text": "Web search! Short devlog, but I added Perplexity Search as a tool to both standalone chat & notebook chat. 🔍 🐛 Took considerably longer cause I found some weird bug where thinking modes would become null on reload Check out the screenshot for the UI eyecandy! 🍭"}, {"post_id": 30606, "ts": "2026-07-18T09:57:26Z", "hours": 8.9583, "text": "Notebook & Chat updates! Been really busy and I forgot to log :( Notebooks ☁️ Notebooks now save ! Changes made to the editor persist between reloads. ➗ Math equations can be edited using Latex. You can now create custom physics formulas :) ✨ Brand new animation when generating that unintentionally looks like siri (it’s kinda laggy though) Chat 🤖Claude now works ⚒️ New UI to visualise the model’s tool calls 👀 Seeing which queries and sources the model pulls information from is now easier than ever 🌐 Plans to implement this for web search Check out this amazing demo below 📹 (might be a lil blurry cause of the file limit)"}, {"post_id": 27675, "ts": "2026-07-13T13:36:17Z", "hours": 6.6358, "text": "More UI overhauls!! I completely forgot to make devlogs 😭 Been really busy so far In this update, I introduced a notion style notebook editor, allowing users to edit their AI-generated notes. Along with that, I’ve polished up the library panel Chats and quizzes now open in a seperate tab Tabs can be dragged between the sidebar and the main panel, allowing for ultimate flexibility(check out the video!!!!) The main panel (notebook) can also be resized, making it more flexible on smaller devices like ipads. In my next devlog, I’ll work on making edited notes save, and polish up the quiz UI (it was rushed from flavourtown)"}, {"post_id": 19258, "ts": "2026-06-30T14:58:42Z", "hours": 5.4336, "text": "Facelift! Made some huge design changes to notebooks! The interface is now tabbed, and notebook content is finally editable like Notion. Still ironing out formatting for the new editor, so math is a little broken New library interface is resizable and supports dragging! (Took longer than usual cause alot of things had to be moved around ❤️. Enjoy the videos!!)"}, {"post_id": 9245, "ts": "2026-06-15T15:04:49Z", "hours": 1.2183, "text": "RAG pipeline! Finally migrated the old notebooks to a rag-based one. Most of the changes are backend, so theres not much to show :( Files (PDFs, slides, lecture notes) were directly used as sources for notebooks before. This was slow, inefficient, and wasted tokens. Now, files are converted to markdown on upload. This markdown is then processed, and broken down into chunks in the rag pipeline, making chat faster and more accurate! Additionally, chat uses the new AI gateway/Openrouter provider to ensure fallback and consistent speeds regardless of provider downtime (plagued the app during flavourtown) On preliminary testing, generation speeds jumped from 30s ttft to 10s ttft, with chat seeing the most improvements. The next update should improve UI and refine subject prompts (a lil too robotic rn)!"}, {"post_id": 1290, "ts": "2026-06-03T05:54:05Z", "hours": 3.4972, "text": "Added a model selector to the chat menu! Along with this, thinking modes were standardised across all models, and usages are now tabulated. I plan to add tools too, so the chat window can actually retrieve information from notebooks or materials uploaded."}, {"post_id": 222, "ts": "2026-06-01T10:14:52Z", "hours": 4.5847, "text": "Stardance!! 🌟 . Back story This project is a continuation from flavourtown ( https://flavortown.hackclub.com/projects/10428 ), initially to help students use AI to make studying faster. A short summary for those unfamiliar: Mesa AI would create summary notes, quizzes and chats in a interface called notebooks. It’s meant to be similar to Notebook LM, but actually make notes and offer more exam accurate (subject-based instructions) notes & quizzes. Unfortunately, I couldn’t finish Mesa AI in time (took almost 100 hours!). In Stardance, I aim to complete this project’s ambitious plans, and finally ship it. Here are the things I intend to change or add: Complete all the unfinished pages Migrate to a fully custom RAG engine Move towards openrouter and Vercel AI gateway after that gemini outage which plagued Mesa AI in most of flavourtown Move from a read-only summary notes to notes which you can actually edit, and Mesa AI will edit them with you (agentic studying) . All those changes would need me to fundementally rewrite how Mesa AI was built, and make this journey on Stardance even more interesting. Mesa AI could also evolve to not just be a notetaker, but a researcher and an entire online tutor too. . First Devlog To start off this rewrite, I’ve already made the custom RAG engine, which replaces Google’s file search API (too slow, unreliable, and locks me into using a Google API key). All files are indexed automatically by a combination of Jina (PDF to markdown) and Mistral (PDF to markdown too), along with OpenAI’s embedding models. A 20-word summary is then generated with Gemma 4 such that search queries are more relevant without relying on file name alone. To test this, I made a barebones boilerplate to simulate a real chat. (See the image!) Sorry I don’t have more pictures! This devlog was mainly backend. In my testing, indexing (turning the file into embeddings and the summary) takes about 20s, with subsequent messages regarding that file taking about 5-8s (search and retrieval). Really pleased with the accuracy though! Sadly i forgot to install hackatime on my mac so a few hours were lost when i was working outside :("}]...
|
Title: Mesa AI by @ng_qi_an | Stardance
Devlogs:
Title: Mesa AI by @ng_qi_an | Stardance
Devlogs:
Stardance!! 🌟 . Back story This project is a continuation from flavourtown ( https://flavortown.hackclub.com/projects/10428 ), initially to help students use AI to make studying faster. A short summary for those unfamiliar: Mesa AI would create summary notes, quizzes and chats in a interface called notebooks. It’s meant to be similar to Notebook LM, but actually make notes and offer more exam accurate (subject-based instructions) notes & quizzes. Unfortunately, I couldn’t finish Mesa AI in time (took almost 100 hours!). In Stardance, I aim to complete this project’s ambitious plans, and finally ship it. Here are the things I intend to change or add: Complete all the unfinished pages Migrate to a fully custom RAG engine Move towards openrouter and Vercel AI gateway after that gemini outage which plagued Mesa AI in most of flavourtown Move from a read-only summary notes to notes which you can actually edit, and Mesa AI will edit them with you (agentic studying) . All those changes would need me to fundementally rewrite how Mesa AI was built, and make this journey on Stardance even more interesting. Mesa AI could also evolve to not just be a notetaker, but a researcher and an entire online tutor too. . First Devlog To start off this rewrite, I’ve already made the custom RAG engine, which replaces Google’s file search API (too slow, unreliable, and locks me into using a Google API key). All files are indexed automatically by a combination of Jina (PDF to markdown) and Mistral (PDF to markdown too), along with OpenAI’s embedding models. A 20-word summary is then generated with Gemma 4 such that search queries are more relevant without relying on file name alone. To test this, I made a barebones boilerplate to simulate a real chat. (See the image!) Sorry I don’t have more pictures! This devlog was mainly backend. In my testing, indexing (turning the file into embeddings and the summary) takes about 20s, with subsequent messages regarding that file taking about 5-8s (search and retrieval). Really pleased with the accuracy though! Sadly i forgot to install hackatime on my mac so a few hours were lost when i was working outside :(
Added a model selector to the chat menu! Along with this, thinking modes were standardised across all models, and usages are now tabulated. I plan to add tools too, so the chat window can actually retrieve information from notebooks or materials uploaded.
RAG pipeline! Finally migrated the old notebooks to a rag-based one. Most of the changes are backend, so theres not much to show :( Files (PDFs, slides, lecture notes) were directly used as sources for notebooks before. This was slow, inefficient, and wasted tokens. Now, files are converted to markdown on upload. This markdown is then processed, and broken down into chunks in the rag pipeline, making chat faster and more accurate! Additionally, chat uses the new AI gateway/Openrouter provider to ensure fallback and consistent speeds regardless of provider downtime (plagued the app during flavourtown) On preliminary testing, generation speeds jumped from 30s ttft to 10s ttft, with chat seeing the most improvements. The next update should improve UI and refine subject prompts (a lil too robotic rn)!
Facelift! Made some huge design changes to notebooks! The interface is now tabbed, and notebook content is finally editable like Notion. Still ironing out formatting for the new editor, so math is a little broken New library interface is resizable and supports dragging! (Took longer than usual cause alot of things had to be moved around ❤️. Enjoy the videos!!)
More UI overhauls!! I completely forgot to make devlogs 😭 Been really busy so far In this update, I introduced a notion style notebook editor, allowing users to edit their AI-generated notes. Along with that, I’ve polished up the library panel Chats and quizzes now open in a seperate tab Tabs can be dragged between the sidebar and the main panel, allowing for ultimate flexibility(check out the video!!!!) The main panel (notebook) can also be resized, making it more flexible on smaller devices like ipads. In my next devlog, I’ll work on making edited notes save, and polish up the quiz UI (it was rushed from flavourtown)
Notebook & Chat updates! Been really busy and I forgot to log :( Notebooks ☁️ Notebooks now save ! Changes made to the editor persist between reloads. ➗ Math equations can be edited using Latex. You can now create custom physics formulas :) ✨ Brand new animation when generating that unintentionally looks like siri (it’s kinda laggy though) Chat 🤖Claude now works ⚒️ New UI to visualise the model’s tool calls 👀 Seeing which queries and sources the model pulls information from is now easier than ever 🌐 Plans to implement this for web search Check out this amazing demo below 📹 (might be a lil blurry cause of the file limit)
Web search! Short devlog, but I added Perplexity Search as a tool to both standalone chat & notebook chat. 🔍 🐛 Took considerably longer cause I found some weird bug where thinking modes would become null on reload Check out the screenshot for the UI eyecandy! 🍭
Usage limits! Went over the 10hr limit 😭 🙈 In this update, messages now count towards a single usage limit. The default is 3000 credits, which is equivalent to 3 million tokens of Gemini 3 Flash. 💸 Limits are enforced at the API level, and the chat level. Free models can still be used even when the limit is exhausted. 🔁 Limits reset every billing cycle, which is about 1 month from the same day. Built in mind to be extended with stripe in the future to be monetised. ❤️ This is a soft limit, so currently generating chats won’t stop halfway. 📋 Billing breakdown can be seen in the usage tab on account settings, will be extended in the future! Other than that, 🍝 The notebook chat API and main chat API were merged, fixing some of the spaghetti code building up. 📁 The main chat can now reference ALL files too! That’s right, ALL FILES. 🤓 Notebook chats are still limited to files only linked to the notebook. 📹 Check out the awesome demo & screenshot i forgot to include in the video. Chat generation kinda slow, just skip forward.
Agentic notes?!?! 👀 *i really need to post devlogs more often ;p) check out the demo first if you’re too lazy to read 🤓 Agent 🤖 : ⭐️ This is a crazy milestone, and I finally finished one of the biggest features i really wanted to bring to Mesa ai when i decided to continue it on stardance. The chat window can now edit, delete and move notebook content ! ✍️ You can ask the chat to summarise blocks, turn into different formats or even create tables ⚡️ 📖 Basically a mini notion + notebookLM but with a study agent Use this with your sources and the web to supercharge research ! 🔬 I have plans to make the chat be able to create flashcards, quizzes and future tools directly from the chat window along with history, so there wont be a need to make those manually anymore ✨ Editor : Chat agent cursor shows which block it’s interacting with (the white bar on the left) ⌨️ Diff editor to see what the agent changed 📋 Tool approvals so you can choose whether to accept it or not! ✅ While Blocknote provides some helpers for the AI extension, since i’m not using it as intended, I had to patch up alot of the implementation myself 😭 Chat : Finally allowed images to be pasted or dragged into the chat window 🖼️ Added cool tool UI for notebook edits too 🎶 Check out the new demo!!!! 🎥 (sorry if its abit dizzying i was playing with the zooms a little too much) Honestly, I never imagined I would be capable enough to create something like this, starting just about 6 months ago. 🥲 Gimme a follow too if u wanna see more of this project and find out when its done ❤️
Upload improvements File uploads are more stable, and status updates resume between reloads Users can see what stage their file is at on the indexing progress Allows for file statuses to still work even if the file selector dialog box is closed and reopened.
Image embeddings!! Forgot to install hackatime on a new editor so all the time i spent here on here was wasted 💔 Notebook improvements 🖼️ Images from files are extracted and saved 🖹 The model is presented with a list of images to choose from, and can embed them directly into the notebook. 🗲 Generating notes are now single-step . The old generate title, subtitle, topics then generate notes is abolished and combined into a single request. This makes note generation almost instant! 📋 New bottom bar that shows notebook actions, along with a editor mode (toggle between editing and viewing). File uploads Files uploaded are now indexed reliably. Images are also extracted from files, as mentioned before. Other changes Topics has been removed temporarily. Quiz no longer has topic options as well. Notebook is no longer accessible on mobile The tutorial was cut short. 😢 Things I couldn’t do: Having to focus on exams, I couldn’t finish Mesa AI before stardance ends. Here are a list of things I’ll work to complete the next hackclub event: Mobile support for Notebooks Notebook topics that are procedurally generated Add flashcards Freshen up UI (little unpolished here and there) Add a marking mode (AI marks papers for you) Collaboration & sharing notebooks Code the dashboard page (as a consolation i included a mockup of what it would have been) Making topics on the class page actually work 📹 Check out the demo video and screenshots! (show some love for me missing like almost 4-5 hours of work here)
Ships:
Finally, a ship!! 🚢 This project was really rushed, as my exams are coming, and I couldn’t finish much of it. Really hope to continue in the next event! But here is what Mesa AI does right now: 📋 Generate concise summary notes from lectures which you can edit yourself, in a Notion-style editor. 🤖 Comes with a agent (i like to call it sidekick) that can search your lecture notes, research on the web, and put all that together by editing directly into your notes. 🗹 Ships with a quiz function for reinforced learning as well Built with a flexible tab-interface, allowing you to make opened chats/quizzes larger, or on the side as you please. 📑 Subject-specific instructions keep notes & quizzes relevant to syllabus, instead of those generic AI study apps out there. 📚 And an organization system that splits notes into classes, and files into folders. Demo credentials: Email: [email protected] Password: test1234 I don’t recommend using this, since you’ll be skipping out on the actual tutorials and onboarding flow. Just use if you’re too lazy. Here are some improvements from the Flavourtown edition: Model flexiblity: No longer locked to just Gemini in the chat 👀 Custom Rag pipeline built from scratch: Files are uploaded in 10s, while chat context is no longer bloated. 🖼️ More supported files: PDFs, slides, word documents, images can all be uploaded. 🗲 Efficient notebooks design: The layout has been reconfigured, letting you resize the side panel, and move tabs anywhere you like. 🔍 Agent chat: Chat can now search through your files directly instead of being a wrapper ☁️ Editable notes: Notes are no longer read-only, and save your changes! Things I learned: How to upload files with streams, and making those streams editable. How to integrate a text-editor. How to make AI interact with the BlockNote editor, given they don’t have a direct AI extension for my use case. How to create a RAG system, from extracting, to chunking, to embedding and querying. How to add tools to the model, making it truly agentic. For more technical details & future plans, checkout the github! Full breakdown of tech stack is there. Show some love and try the demo too!...
|
1792990353.3016624
|
1793076753.3016624
|
|
26517
|
Exopossibilities by @Skye | Stardance
|
Skye
|
2
|
63.0
|
909
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-27T20:04:39Z", "hours": 50.0, "multiplier": 15.94, "payout": 791, "blessing": "neutral", "text": "Hi everyone! This is my first ever website I’ve made by myself and I’m super proud to share it with you guys! It’s called Exopossibilities (Exoplanet and Possibilities blended into one). It uses a whole bunch of data from NASA’s Exoplanet Archive and presents in a fun way. I started this summer by making the base of the website (the home, discover, and planet pages), and have since added a bunch of fun features! I used Claude for help a lot with JS at the beginning, but have since learned how to do most of it myself, which I’m super proud of. The point of this project is to bring together my interests and present them in a way that is fun for other people to explore and learn from. There’s a quiz to match exoplanets to your preferences, a glossary for words you don’t know, and so much more! I put a lot of work into this project and really hope you enjoy it!", "repo": "https://github.com/julietmeletta/Exopossibilities", "demo": "https://julietmeletta.github.io/Exopossibilities/index"}, {"ship_num": 2, "ts": "2026-07-06T03:13:26Z", "hours": 13.0, "multiplier": 9.22, "payout": 118, "blessing": "neutral", "text": "I created a website and named it Exopossibilities, basically blending the word possibilities into the word Exoplanets. On my website, the user can navigate to the Discover page, where they see a list of every exoplanet in NASA’s archive(over 5,000). They can then explore info on each planet, search for a specific planet, filter to see planets that fit specific criteria, i.e. Each box containing the planet’s name and info is able to be clicked on, which sends the user to a page focused solely on that planet. Each planet’s page displays the planet’s info, how long it would take to get to the planet, how living on the planet would affect the human body, and what would be needed to live on that planet, if possible at all. I’m super proud because this was all super unfamiliar to me. This was my first website, it was my first time using APIs, my first time using JS at all, i.e. As expected, I ran into some problems (for example, sometimes the list of planets just wouldn’t load: yes it was a very silly mistake of forgetting to rename one of the filters in my JS file) but was able to troubleshoot/debug to get everything working. I made this project because I’m interested in aerospace engineering and in biomedical engineering, so the idea behind the project was to blend the two by exploring the effects on the human body of living on different exoplanets. I hope you guys enjoy my project!", "repo": "https://github.com/julietmeletta/Exopossibilities", "demo": "https://julietmeletta.github.io/Exopossibilities/index"}]...
|
[{"post_id": 55773, "ts": "202 [{"post_id": 55773, "ts": "2026-08-27T19:32:22Z", "hours": 1.9789, "text": "Ready to Ship!! I haven’t done much since the last devlog, just some random fixes, polishing whatever. But I’ve added a bunch since my last ship that I’ll talk more about in my ship itself!"}, {"post_id": 54681, "ts": "2026-08-25T18:55:05Z", "hours": 6.4967, "text": "I added some statistics on a page! It’s not much but it was fun to make and I like it. There’s 6 different charts that each show different data. I think it’s cool to see and fits in with the “discover” theme. Currently I’m working on making it work well on mobile because rn it looks like it needs fixing. When I’m done I think I’m ready to ship!"}, {"post_id": 53153, "ts": "2026-08-23T16:17:58Z", "hours": 3.2425, "text": "Introducing Favorites! Used local storage so I’m not taking anyone’s info lol. It allows you to heart any planet and filter to favorites on the discover page. This way you can keep track of the planets you like! I like finding the matches of planets I like using the quiz then favoriting those!"}, {"post_id": 47729, "ts": "2026-08-15T20:47:06Z", "hours": 3.0519, "text": "I’ve been playing around with the locator page. For now I have it like this, where the info is entered and it tells the user where (better CSS than last devlog in my opinion). I don’t know if I can make it into a whole map thing mostly because I would probably use SVG but I don’t really have any experience with that. Anyway, if I have tons of extra time I might try that. For now, I’m just fixing the styling on mobile."}, {"post_id": 46666, "ts": "2026-08-14T03:09:32Z", "hours": 4.6506, "text": "So - another (not done) new feature. This one is kind of different. I found ra and dec values in the NASA archive I’ve been using and came up with this idea. My original idea was to make a map of the exoplanet and then you could search for one and it would find it on the map. There are sites that do same type of thing like Stellarium or the app Night Sky. I might do that or something like that later but this is what I have for now. It’s basically the math and JS that the map would use, just not made into a map. I’m hoping to make this more sophisticated than it currently is but I’m not sure quite how far I’ll be able to take it. I hope that the end product for this feature turns out well. Edit: When I say map I mean like a 360 view of the night sky from the ground type thing (you can look at Stellarium to understand what I mean if you are curious)."}, {"post_id": 45328, "ts": "2026-08-11T18:28:35Z", "hours": 2.3153, "text": "I added a print button on the planet page! Next to the side navigation button, there’s a button with the print symbol that allows the user to print that planet’s page. Lot of styling went into it to figure out how to get it to show the background image and colors and stuff but overall it was pretty simple to make."}, {"post_id": 44940, "ts": "2026-08-11T01:14:31Z", "hours": 3.0764, "text": "Added a navigation side bar menu! Not in love with the styling, so maybe I will change up the CSS to make it prettier. But overall it works fully and is much more helpful than navigating through the site using home and back buttons."}, {"post_id": 44250, "ts": "2026-08-09T21:36:52Z", "hours": 5.9186, "text": "I added a glossary. When my sister was looking at my project I realized there’s a lot of terms some people might not know so I made a page explaining those terms. I also have been keeping my project updated to work on mobile."}, {"post_id": 38479, "ts": "2026-07-31T21:40:58Z", "hours": 1.9289, "text": "Guys I need help. I have a question and I can’t figure out what I should do. I have a whole bunch of files for my website I’ve been making and I don’t know how I’m supposed to organize my files. You may be thinking, this isn’t really a problem. Well I guess you’re right in the sense that it doesn’t affect how my website works. BUT it’s like lowkey making me anxious because my file list keeps growing and whatnot. I tried to start sorting the files. I have folders for the JS files, the JSON files, and the images. Do I keep this pattern and make a folder for the html files and another for css files? I guess my real question is this: Is there a conventional way of organizing them that I’m supposed to know? If not, is there like a best way to do it?"}, {"post_id": 37691, "ts": "2026-07-30T16:16:58Z", "hours": 7.0717, "text": "So I was thinking about like what I could add to my site and came up with some fun ideas. First, I added a formula (from NASA’s website) to calculate the ESI (Earth Similarity Index) of each exoplanet. Then, I made certain exoplanets “medalists”. Basically if a exoplanet is like unique in a quantitative way (with the data I’m already using) then it is awarded a medal. Some examples are largest/smallest mass, highest/lowest ESI Score, etc. In total, right now, there are 11 exoplanets with medals (out of like 6,000 total). Then I added having a medal to the filters and connected it to a button on the home screen."}, {"post_id": 29699, "ts": "2026-07-16T19:47:15Z", "hours": 1.7039, "text": "I APOLOGIZE FOR THE 18 COMMITS THAT ARE ALL FOR THE SAME THING. So I decided to style the site for mobile as well as laptop because it worked okay on mobile but was very zoomed out and stuff. So it’s not like I have vs code on my phone and there probably is an easier way but I didn’t want to figure out getting a live server on my phone so I kept changing the CSS, committing, checking it on my phone, and repeat. But hey - now it looks better for mobile!"}, {"post_id": 29264, "ts": "2026-07-16T02:17:50Z", "hours": 1.1181, "text": "Introducing Planet of the Day and some neat CSS changes! I added a planet of the day on the home page which is clickable just like the cards on the discover page. I also added skeleton loading states for the list of planets on the discover page. I noticed that it was consistently taking time to load and render the planets (not surprisingly) so I added it to make it feel more polished and less sharp. And yes, the screenshot of the loading states was timed so that I caught them on the screen before the planets appeared."}, {"post_id": 29145, "ts": "2026-07-15T20:33:59Z", "hours": 2.8753, "text": "I added a new feature! A quiz that matches the user’s preferences with exoplanets. The user answers 5 questions and gets a collection of exoplanets that match those preferences!"}, {"post_id": 28859, "ts": "2026-07-15T12:41:13Z", "hours": 1.6367, "text": "Update - Changes Since My Ship Photos! As I mentioned in my last 2 devlogs, I changed the planets’ photos. I used to have a single blue planet that was on every planet’s page and that seemed boring, so I changed it. Most exoplanets don’t actually have photos, so I took a handful of photos and sorted the planets into types. Now, there is a photo for each type and the planet’s corresponding photo is on its planet page and its card in the discover page. I have a photo for each type: terrestrial, super-earth, Neptune-like, mini-Neptune, gas giant, and hot Jupiter. Mini-Neptunes and hot Jupiters are really just subsections of Neptune-like and gas giants, respectively, but I decided to give them their own photo anyways. Random Planet Button! I added a button right next to the filters that brings the user to a random planet page obeying the filters that they set. I thought it’s a fun little feature to make my site a bit more fun. Hopefully, I’ll be adding a couple other features too. I made like some minor CSS changes to the filters and stuff. Barely noticeable but I think that little part looks better than before. Yay! More to come!"}, {"post_id": 27429, "ts": "2026-07-13T00:02:15Z", "hours": 1.2636, "text": "So … I added the images to the discover page, which makes it less boring. The planets are sorted into 6 categories, each with a different photo. I also finally sorted my files. Yay! I wasn’t quite sure how I should organize them - like do I put css in one folder and html in another? So I left some unorganized for now."}, {"post_id": 26975, "ts": "2026-07-12T02:57:00Z", "hours": 1.3003, "text": "A lot of people who reviewed my ship mentioned all the planet pages having the same image - which is totally fair. I felt the same way (and so did my sister), so I decided to do something about it. Most exoplanets just simply don’t have photos, so it’s not like I could put a photo of each planet. I decided to put different photos for different types of planets (terrestrial, super earth, neptune-like, gas giant). Hope you guys like it!"}, {"post_id": 23246, "ts": "2026-07-06T02:28:12Z", "hours": 1.9897, "text": "I give you fonts ! And I’m done! (for now). I want to try and add a cool feature and do some other random stuff at some point but ta-da!"}, {"post_id": 22973, "ts": "2026-07-05T17:34:03Z", "hours": 7.4275, "text": "Finished the first draft of my website. I put an example image of what one of the planet pages looks like. I will probably do a little more CSS work and maybe add some new features but I’m pretty happy with what I have so far. This is my first website that I’ve made myself. It’s also my first time using APIs in a project which was super cool."}, {"post_id": 18833, "ts": "2026-06-30T01:11:16Z", "hours": 2.2908, "text": "I finished the filters and detailed blocks for each exoplanet! Next step is each exoplanet getting an individual page with more details."}, {"post_id": 18399, "ts": "2026-06-29T15:17:03Z", "hours": 1.0153, "text": "I have the API of exoplanets from NASA in my project and added a search bar. Next step is to add clickable cards to show the data of each planet, then filters for searching, etc. The API I used has info on each planet’s name, radius, mass, distance from earth, and equilibrium temp. I’ll get around to better CSS at the end, right now it’s kind of sad looking. Then I’ll tie the info to the effect on the human body."}, {"post_id": 17766, "ts": "2026-06-28T18:14:30Z", "hours": 0.4517, "text": "Hi everyone! This is my first ever devlog and I’m so excited! I’ve only just started my project, for now it’s called Exopossibilities. I’m planning on using an API to have data on exoplanets then users can see what would happen to a human on a specific exoplanets. I’m planning to use a second API to have information on how the human body is affected by certain environmental factors(pressure, extreme temps, etc.)."}]...
|
Title: Exopossibilities by @Skye | Stardance
Devl Title: Exopossibilities by @Skye | Stardance
Devlogs:
Hi everyone! This is my first ever devlog and I’m so excited! I’ve only just started my project, for now it’s called Exopossibilities. I’m planning on using an API to have data on exoplanets then users can see what would happen to a human on a specific exoplanets. I’m planning to use a second API to have information on how the human body is affected by certain environmental factors(pressure, extreme temps, etc.).
I have the API of exoplanets from NASA in my project and added a search bar. Next step is to add clickable cards to show the data of each planet, then filters for searching, etc. The API I used has info on each planet’s name, radius, mass, distance from earth, and equilibrium temp. I’ll get around to better CSS at the end, right now it’s kind of sad looking. Then I’ll tie the info to the effect on the human body.
I finished the filters and detailed blocks for each exoplanet! Next step is each exoplanet getting an individual page with more details.
Finished the first draft of my website. I put an example image of what one of the planet pages looks like. I will probably do a little more CSS work and maybe add some new features but I’m pretty happy with what I have so far. This is my first website that I’ve made myself. It’s also my first time using APIs in a project which was super cool.
I give you fonts ! And I’m done! (for now). I want to try and add a cool feature and do some other random stuff at some point but ta-da!
A lot of people who reviewed my ship mentioned all the planet pages having the same image - which is totally fair. I felt the same way (and so did my sister), so I decided to do something about it. Most exoplanets just simply don’t have photos, so it’s not like I could put a photo of each planet. I decided to put different photos for different types of planets (terrestrial, super earth, neptune-like, gas giant). Hope you guys like it!
So … I added the images to the discover page, which makes it less boring. The planets are sorted into 6 categories, each with a different photo. I also finally sorted my files. Yay! I wasn’t quite sure how I should organize them - like do I put css in one folder and html in another? So I left some unorganized for now.
Update - Changes Since My Ship Photos! As I mentioned in my last 2 devlogs, I changed the planets’ photos. I used to have a single blue planet that was on every planet’s page and that seemed boring, so I changed it. Most exoplanets don’t actually have photos, so I took a handful of photos and sorted the planets into types. Now, there is a photo for each type and the planet’s corresponding photo is on its planet page and its card in the discover page. I have a photo for each type: terrestrial, super-earth, Neptune-like, mini-Neptune, gas giant, and hot Jupiter. Mini-Neptunes and hot Jupiters are really just subsections of Neptune-like and gas giants, respectively, but I decided to give them their own photo anyways. Random Planet Button! I added a button right next to the filters that brings the user to a random planet page obeying the filters that they set. I thought it’s a fun little feature to make my site a bit more fun. Hopefully, I’ll be adding a couple other features too. I made like some minor CSS changes to the filters and stuff. Barely noticeable but I think that little part looks better than before. Yay! More to come!
I added a new feature! A quiz that matches the user’s preferences with exoplanets. The user answers 5 questions and gets a collection of exoplanets that match those preferences!
Introducing Planet of the Day and some neat CSS changes! I added a planet of the day on the home page which is clickable just like the cards on the discover page. I also added skeleton loading states for the list of planets on the discover page. I noticed that it was consistently taking time to load and render the planets (not surprisingly) so I added it to make it feel more polished and less sharp. And yes, the screenshot of the loading states was timed so that I caught them on the screen before the planets appeared.
I APOLOGIZE FOR THE 18 COMMITS THAT ARE ALL FOR THE SAME THING. So I decided to style the site for mobile as well as laptop because it worked okay on mobile but was very zoomed out and stuff. So it’s not like I have vs code on my phone and there probably is an easier way but I didn’t want to figure out getting a live server on my phone so I kept changing the CSS, committing, checking it on my phone, and repeat. But hey - now it looks better for mobile!
So I was thinking about like what I could add to my site and came up with some fun ideas. First, I added a formula (from NASA’s website) to calculate the ESI (Earth Similarity Index) of each exoplanet. Then, I made certain exoplanets “medalists”. Basically if a exoplanet is like unique in a quantitative way (with the data I’m already using) then it is awarded a medal. Some examples are largest/smallest mass, highest/lowest ESI Score, etc. In total, right now, there are 11 exoplanets with medals (out of like 6,000 total). Then I added having a medal to the filters and connected it to a button on the home screen.
Guys I need help. I have a question and I can’t figure out what I should do. I have a whole bunch of files for my website I’ve been making and I don’t know how I’m supposed to organize my files. You may be thinking, this isn’t really a problem. Well I guess you’re right in the sense that it doesn’t affect how my website works. BUT it’s like lowkey making me anxious because my file list keeps growing and whatnot. I tried to start sorting the files. I have folders for the JS files, the JSON files, and the images. Do I keep this pattern and make a folder for the html files and another for css files? I guess my real question is this: Is there a conventional way of organizing them that I’m supposed to know? If not, is there like a best way to do it?
I added a glossary. When my sister was looking at my project I realized there’s a lot of terms some people might not know so I made a page explaining those terms. I also have been keeping my project updated to work on mobile.
Added a navigation side bar menu! Not in love with the styling, so maybe I will change up the CSS to make it prettier. But overall it works fully and is much more helpful than navigating through the site using home and back buttons.
I added a print button on the planet page! Next to the side navigation button, there’s a button with the print symbol that allows the user to print that planet’s page. Lot of styling went into it to figure out how to get it to show the background image and colors and stuff but overall it was pretty simple to make.
So - another (not done) new feature. This one is kind of different. I found ra and dec values in the NASA archive I’ve been using and came up with this idea. My original idea was to make a map of the exoplanet and then you could search for one and it would find it on the map. There are sites that do same type of thing like Stellarium or the app Night Sky. I might do that or something like that later but this is what I have for now. It’s basically the math and JS that the map would use, just not made into a map. I’m hoping to make this more sophisticated than it currently is but I’m not sure quite how far I’ll be able to take it. I hope that the end product for this feature turns out well. Edit: When I say map I mean like a 360 view of the night sky from the ground type thing (you can look at Stellarium to understand what I mean if you are curious).
I’ve been playing around with the locator page. For now I have it like this, where the info is entered and it tells the user where (better CSS than last devlog in my opinion). I don’t know if I can make it into a whole map thing mostly because I would probably use SVG but I don’t really have any experience with that. Anyway, if I have tons of extra time I might try that. For now, I’m just fixing the styling on mobile.
Introducing Favorites! Used local storage so I’m not taking anyone’s info lol. It allows you to heart any planet and filter to favorites on the discover page. This way you can keep track of the planets you like! I like finding the matches of planets I like using the quiz then favoriting those!
I added some statistics on a page! It’s not much but it was fun to make and I like it. There’s 6 different charts that each show different data. I think it’s cool to see and fits in with the “discover” theme. Currently I’m working on making it work well on mobile because rn it looks like it needs fixing. When I’m done I think I’m ready to ship!
Ready to Ship!! I haven’t done much since the last devlog, just some random fixes, polishing whatever. But I’ve added a bunch since my last ship that I’ll talk more about in my ship itself!
Ships:
I created a website and named it Exopossibilities, basically blending the word possibilities into the word Exoplanets. On my website, the user can navigate to the Discover page, where they see a list of every exoplanet in NASA’s archive(over 5,000). They can then explore info on each planet, search for a specific planet, filter to see planets that fit specific criteria, i.e. Each box containing the planet’s name and info is able to be clicked on, which sends the user to a page focused solely on that planet. Each planet’s page displays the planet’s info, how long it would take to get to the planet, how living on the planet would affect the human body, and what would be needed to live on that planet, if possible at all. I’m super proud because this was all super unfamiliar to me. This was my first website, it was my first time using APIs, my first time using JS at all, i.e. As expected, I ran into some problems (for example, sometimes the list of planets just wouldn’t load: yes it was a very silly mistake of forgetting to rename one of the filters in my JS file) but was able to troubleshoot/debug to get everything working. I made this project because I’m interested in aerospace engineering and in biomedical engineering, so the idea behind the project was to blend the two by exploring the effects on the human body of living on different exoplanets. I hope you guys enjoy my project!
Hi everyone! This is my first ever website I’ve made by myself and I’m super proud to share it with you guys! It’s called Exopossibilities (Exoplanet and Possibilities blended into one). It uses a whole bunch of data from NASA’s Exoplanet Archive and presents in a fun way. I started this summer by making the base of the website (the home, discover, and planet pages), and have since added a bunch of fun features! I used Claude for help a lot with JS at the beginning, but have since learned how to do most of it myself, which I’m super proud of. The point of this project is to bring together my interests and present them in a way that is fun for other people to explore and learn from. There’s a quiz to match exoplanets to your preferences, a glossary for words you don’t know, and so much more! I put a lot of work into this project and really hope you enjoy it!...
|
1792979793.1289396
|
1793066193.1289396
|
|
28749
|
WaldOS© 3.0 by @Waldewort | Stardance
|
Waldewort
|
3
|
121.0
|
900
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-17T11:57:36Z", "hours": 64.0, "multiplier": 13.36, "payout": 0, "blessing": "neutral", "text": "🎉Release of the WaldOS© 3.0🎉 Yipppppie, here are all new features: Animation when you start the WaldOS© 3.0 The completely new startmenu and minimization of the Apps The VoiceAI, starts by pressing on the starring under the title and can be monitored in the settings 🤖. The WaldAI, a groq based Ai witch can answer your question (not that good, but it´s okay) The Waldracer, a game in qhich you can drive infinte in a cool world. Thanks to slowroads to make this free 🏎️! The WaldClock, a timer and clock (wow!) The Wal(D)-OS, you can create your own TO-DO Pins with date and time. Waldtravel, a app you can calculate the CO2 and energy needed for different Vehicles and Routes Waldollution, you can see how long different things need to get composed in nature The Waldeye, with different livestreams of nature and animals The WaldWeather, a whater app! Waldience, you can create naturesounds to chill more 🌳. Thanks for testing the WaldOS© 3.0 and your likes ♥️, comments 💬 and the good rating 🥰😉 !", "repo": "https://github.com/Waldewort/WaldOS", "demo": "https://waldewort.github.io/WaldOS/"}, {"ship_num": 2, "ts": "2026-09-18T21:39:19Z", "hours": 17.0, "multiplier": 18.03, "payout": 302, "blessing": "neutral", "text": "🎉 The WaldOS© 2.0 has officelly launched 🎉 Welcome to the WaldOS© 2.0 🥳! The WaldOS© 2.0 is a update of the WaldOS© and brings with it two new Apps, a completely new Background ✨witch is fully customisable and new Icons 📱! The WaldOS© 2.0 is a very elaborate project in witch I tried to use as many AI as possible so please remember this in the rating! What’s Inside the WaldOS©? 📝 Notes & 🌙 Mooncalendar: Write down ideas and check your calendar persistent session saving. (Pro tip: Try clicking on the clock! ⏰) 🎺 Trumpet Learn: Learn brass fingerings step-by-step—huge credit to my coding colleague #Dasher2801 for building this! 📽️ Waldiverse & 🔍 WaldSearch: Stream longform YouTube content or search exclusively for pure Wikipedia articles. 🗺️ Waldlas: OpenStreetMap integration with route planning and session-saved emoji pins worldwide. 🧮 WaldCalc & 🌌 WaldSky: Solve equations or gaze at real-time constellations flying across your screen. ⚙️ Settings App: Fully customize your background universe! Adjust colors, star density, and speeds (watch out, potato PCs 🥔). ⚠️I only tested the WaldOS© 2.0 on a FHD (1080p) or higher monitor so lower resolution may cause window rendering issues⚠️ Thanks for reading and your interests in the WaldOS© 2.0 ♥️. Thanks for your feedback and like and I hope for a good rating 😉!", "repo": "https://github.com/Waldewort/WaldOS", "demo": "https://waldewort.github.io/WaldOS/"}, {"ship_num": 3, "ts": "2026-09-05T13:59:35Z", "hours": 40.0, "multiplier": 14.98, "payout": 598, "blessing": "neutral", "text": "Welcome to the WaldOS©! The WaldOS© is a Webbased operating system by #Waldewort. It already has the most important features like: A Notebook screen which saves your notes for the next session A Trumpetfingeringlearning screen made by my coding college #Dasher2801 For all the ones who only want to watch longform YouTube content the Waldiverse, a YouTube application The WaldSearch, a Wikipedia based Searchmachine which outputs you only Wikipedia articles The Waldlas, a openstreetmaps based map version with Searchmodus and the possibility to make emoji Pins all over the world witch also saves over sessions and a route planer to plan your next vacation (We as coder won´t need this XD ) It´s important during coding to not forget to eat so theres the Mooncalendar, opens by pressing on the date is presize and custumisable Notes are possible witch saves over your sessions !!!Try out what happens when you press on the clock!!! Please only try it on desktop and you need at least a FHD Monitor that the windows aren´t too big! One day there will be a mobile version! But the WaldOS© is still in process and a lot more Apps will come, with even more features and better Style. Please remember that I needed 40 hours to code this caused by coding it BY MYSELF and not AI, so also the design is not the best but at least not a AI Design like on 95% of the projects here! Thanks for reading and your interest in WaldSearch© and for the good rating :))", "repo": "https://github.com/Waldewort/WaldOS", "demo": "https://waldewort.github.io/WaldOS/"}]...
|
[{"post_id": 80338, "ts": "202 [{"post_id": 80338, "ts": "2026-10-17T10:05:31Z", "hours": 9.5719, "text": "🥳The last features before the WaldOS© 3.0🥳 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Devlog 17 The new apps: The WaldEye: A cool app you can watch cute animal livestreams in! Of course only animals in pure nature so it can be you can´t see an animal for hours, but that´s nature. Since now I included four live streams of different animals ( also cute ones, like squirrels) The Waldollution: Another app that shows you how long trash need to get composed if it´s thrown into nature! Finally introducing the WaldWeather app: Automatically shows you the Weather on your location, but you can also search for places and save them to the bar on top to have easy access to them. If you maximize the window you get extra detailed information and a 7 day forecast (that´s maybe right XD) Also I fixed some bugs in the WaldTravel app! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Here you can try the WaldOS 2.0 for your own: https://waldewort.github.io/WaldOS/ Today I will launch the WaldOS 3.0 so follow to don´t miss something! Thanks for reading and the like and comment :))"}, {"post_id": 79807, "ts": "2026-10-15T14:09:25Z", "hours": 9.6897, "text": "🌳More Waldclimate Apps for the WaldOS© 2.0🌳 “´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´´”´”´”´”´”´” Devlog 16 One new app and one in progress: The Waldollution, a app which shows you how long different objects need to get composed in nature if they get thrown away not regular. Work in progress for a really cool app with cats and polar bears ( and lot of cool other animals 😉), but more in the next Devlog 🤫 Bug fixing for the Control Center and some performance tests. Also I improved the Waldtravel animations a bit “´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´´”´”´”´”´”´” Test the WaldOS© 2.0 by your own: https://waldewort.github.io/WaldOS/ That´s it, the release of WaldOS© 3.0 will be soon, follow to don´t miss it! Thanks for reading and the like and follow 🙃"}, {"post_id": 79021, "ts": "2026-10-12T11:54:43Z", "hours": 9.4014, "text": "🎉We celebrate the pass of the 100 hours mark of the WaldOS© 2.0 🎉 (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: Devlog 16 One new feature and one revolutional app for the celebration 😲: The WaldOS has got it´s own control center . Now you open apps in this center and then they are shown in the taskbar like in all other real operating systems! Also you can now minimize apps or close them complete. The new App: Introducing the WaldTravel! The WaldTravel is a tool you can plan your next trip more climate nutral and you can explore how much CO2 is expelled with different Vehicles! Short realtalk: This app is very important to me to show all the world how to reduce greenhouse gases and help with climate protection ♥️🌳! This is the most important topic for our (the stardance) generation and the following ones and I think stardance is a good way to show this importance to more people. Thank you 🥰 The app is very interactive and shows the importance of this topic in an easy and good to understand way with visualization! Also I fixed again some bugs and smoothed the WaldOS© 2.0 expierience more 🥱! (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: Try the WaldOS© 2.0 for your own: https://waldewort.github.io/WaldOS/ Thank you so much for reading this more serios Devlog and sharing it and give it a like 🙃! Write down in the comments if you want more of such apps with a important topic."}, {"post_id": 78288, "ts": "2026-10-10T09:37:52Z", "hours": 9.0592, "text": "🤖Full Voice Assistant in the WaldOS© 2.0🤖 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Devlog 15 Trying is better than … this: https://waldewort.github.io/WaldOS/ The first accessibility feature is full working now 🤖🎉 The VoiceAI is now completely integrated in the WaldOS© 2.0 without a App needed. Just press the starring right under the title and talk to the VoiceAI! Also then there is a cool animation 🙃 The VoiceAI can now complete tasks in the apps like setting a timer or write down notes for you 😯 In the Settings App you can controll the VoiceAI and also read the user manuell to get to know how the VoiceAI works excactly. What changed else: Nothing 😢 But right now I´m working on a big new feature witch revoluts the opening process of the Apps in the WaldOS© 2.0, so stay tuned 😉 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - You wanna try the WaldOS© 2.0 ? Here you can 🥳: https://waldewort.github.io/WaldOS/ I´m glad you´ve readen this Devlog and thank you soo much for the like and comment and the good rating for the WaldOS© 3.0 (which is comming soon🤫)"}, {"post_id": 76453, "ts": "2026-10-03T16:04:27Z", "hours": 8.8867, "text": "🎉🗣️The Waldasist beta version is out now in the WaldOS© 2.0🗣️🎉 ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^ Devlog 14 The biggest new feature in the history of the WaldOS© 2.0 has launched its beta version 🥳! The Waldasist is a integrated voice assistant in the WaldOS© 2.0. You can easyly activate it by pressing on the circle of stars right under the title. Now you can say the name of the App and it opens by magic. Also you can say maximize and then the name of the app and close apps by saying close and the app name. I´m right now working on a voice assist even in the apps themself but that´s not that easy! What changed too: Just a bit buggfixing in the Waldracer and WaldAi 😢 ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^ Stay tuned to don´t miss the next ship and that you can try WaldOS© 3.0 (holy moly😯). Next week I´m in holiday so I won´t post anything! Thanks for the like, follow and the commi 🙃"}, {"post_id": 74464, "ts": "2026-09-27T13:08:04Z", "hours": 8.9736, "text": "💫Animations for the WaldOS© 2.0 💫 </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </> Devlog 13 You know the sentence 😂: https://waldewort.github.io/WaldOS/ A lot of cool new things for all with shortend attentionspan: A legendary starting animation in which … ahh no, just watch the video or visit: https://waldewort.github.io/WaldOS/ by your own! (but watch out it´s epic 😯) A new app with mathematical generated ambience sounds to learn or chill. Google Gemini helped me with this cause the generating of sounds is mindblowing complex. Thank you Gemini XD (But I made all around by my own and I think it´s a good app anyways! ) (I just recognized I still don´t have an app icon, but fixed till next time! ) A bit of bugfixing and testing with different thinks (stay tuned 😉) </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </> Try the WaldOS© 2.0 for your own: https://waldewort.github.io/WaldOS/ What comes next ? I don´t know, right now I´m producing content for the Virality Bonus for this follow https://www.instagram.com/waldewort/ on Instagram, thank you! Thanks for reading, your time, the like and the comment :)))"}, {"post_id": 72793, "ts": "2026-09-23T19:05:01Z", "hours": 8.5556, "text": "⏰🏎️🤖 The WaldOS© 2.0 got 3 new apps! :.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.: Devlog 12 Trying is better than reading: https://github.com/Waldewort/WaldOS The 3 new apps: A clock, alarm and stopwatch app to not forget the time! Very simple done! (yippie 🥳) The thing most of the people wanted: An integrated WaldAI 🤖😲: Using an free croq API I created the WaldAI. It´s using the gpt oss 120b modell by openai and is a bit stupid but for normal questions it´s okay (just don´t ask things witch are newer than 2024 😉😂) A very simple integrated game: The Waldracer! It´s the game slowroads by topograph.io and now it´s in the WaldOS© 2.0 as a standalone game thanks to the open source of their game: https://slowroads.io 🎉 Things that are also new but no app: A little staranimation is now greeting you when entering the WaldOS© 2.0 :.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.: That was it already, thanks for reading and the like and comment :) Try it for your own: https://github.com/Waldewort/WaldOS See you soon 🙃"}, {"post_id": 70280, "ts": "2026-09-18T21:18:32Z", "hours": 2.1525, "text": "2️⃣.0️⃣Release of the WaldOS© 2.0 is now🥳🥳🥳2️⃣.0️⃣ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Devlog 11 What has changed ? Bugfixes on the WaldSky and Waldlas and perfomance optimization (99% of work) Title has changed to WaldOS© 2.0 (1% of work 😂) A new ReadME (more exciting and readable) Uhm not more, but now version 2.0 is ready to launch 🥳🥳🥳 So celebrate with me the second launch in 3️⃣Three 2️⃣Two 1️⃣One Nowwww!!!! 🎉🎆✨ https://waldewort.github.io/WaldOS/ yippie! Try it your self 🙃 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thanks for reading, the like and comment and the good rating 😉"}, {"post_id": 69775, "ts": "2026-09-17T19:23:30Z", "hours": 5.5242, "text": "2️⃣.0️⃣The Launch of the WaldOS© 2.0 is happening in the next days! 2️⃣.0️⃣ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Devlog 10 (I think) Trying is better than reading: https://waldewort.github.io/WaldOS/ All the new stuff: 1. First time ever I really did what I said in last Devlog: Introducing the own creatable and saveable Universum function in the settings app (yesss, fully customiseable - other than apple XD) Two new Apps (Wow I was productive 😁): The WaldCalc, a … Calculator (stunning 😲) And the… WaldSky, a App you can watch the real stars flying over sky. You can let you show real constellations and the names of them 💫. You can set in a time and place so you know where to have to look with your Crush during night to see the Ursa Minor ( Just joking, we are coder, not touching grass (or girls 😜(just joking again😂)) 😢). New Icon design: Gemini cooked with the new Icons, I just inserted them (took anyways like one hour) A little Copyright sentence under the title to prevent abuse 😲 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This was it actually, I´m going to ship tomorror or one day after this (sorry to all native speaker hehe) Try the WaldOS© for your own: https://waldewort.github.io/WaldOS/ Thanks for reading and all the support and the comment and like ♥️!"}, {"post_id": 67416, "ts": "2026-09-13T14:48:56Z", "hours": 5.2639, "text": "🥳The final design of the WaldOS© is finished!🥳 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Devlog 9 Try it out instead of reading (I know you 😜): https://waldewort.github.io/WaldOS/ What is new: The new glassy design with the new header is now applied on all Apps (sadly looks bit like apple :( ) A new App has launched: The settings (wow how exciting XD) -The background is now fully costummizable with the settings app. -You can choose of 6 different Presets for Colouring -You can create your own colouring -You can set the speed and digit of stars and how far constellations are forming (watch out for your potato PC - Graphical intensive 😉) -You can Rename the main title in the middle of the WebOS! Bugfixes 2.3 on Waldiverse and Waldlas First performance fix and improvement (no fun 😢) That will come next? A save for your own presets ( cool idea! ) Idk see what comes in my mind next! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- You wanna try the WaldOS©: https://waldewort.github.io/WaldOS/ I hope you have fun and thanks for the reading and the like and comment 🙃"}, {"post_id": 64382, "ts": "2026-09-08T18:24:53Z", "hours": 3.8128, "text": "💫Finale Design for the WaldOS©💫 — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — Devlog 8 What´s new: Interactive Background! The cursor forms star constellations and in the middle is a subtle WaldOS© title. Randomly some little shooting stars flying over the screen (some cute little ones💫) I´m worikng on a new App design for every app witch fits way better in the style (but need soo long time😢) — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — Here you can try out the WaldOS©: https://waldewort.github.io/WaldOS/ Thanks for reading this and your like and comment :)"}, {"post_id": 62151, "ts": "2026-09-05T12:26:21Z", "hours": 8.9528, "text": "🥳The final Version 1.0 of The WaldOS©🥳 : ) : ) : ) : ) : ) : ) :) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) Devlog 7 Lunch of the WaldOS© Version 1.0 today❗ Thinks changed since last time: The best App has launched, The Waldlas: A Openstreetmaps based maps app with a lot of functions: Your current location and the WaldOS© Headquarter are fixed on the map as a pin. You can klick anywhere on the map and pin a emoji with text to the map to don´t ever forget where this good restaurant was ( because we all forget always 😢, but not anymore 🥳) A searchbar makes it possible to find any location within milliseconds (for all the bad geographie students 😉) And a FULLY USEABLE ROUTESEARCH SIDEBAR (wow!), just type in two locations and it will find the fastest route for cars! Again a new design! I removed the background and now theres something like a glassy optic ( I know a bit mainstream but I didn´t know what else 😢) Bugfixes 1.3 for the Waldiverse and the Waldsearch I don´t know it´s too much happend XD : ) : ) : ) : ) : ) : ) :) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) If you want to try it out before the launch in some hours: https://waldewort.github.io/WaldOS/ I hope you like the new features and give a good ranking 🙃 cause I made sooo much and nearly all by my self, different than others! Thanks for reading and leaving a like and a comment! See you soon 👋"}, {"post_id": 55209, "ts": "2026-08-26T19:18:22Z", "hours": 7.9508, "text": "❗Completely new Design for WaldOS© ❗ .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. Devlog 6! First, the Website to explore it to your own😉: https://waldewort.github.io/WaldOS/ If you more like to read about the new features, here it comes: Now the WaldOS has an fullscreenmode to make it feel like a real Operating System (That´s so cool!) Other things I added: Togglemode for the appicons to close them by pressing again on them A new App has launched (yippie): A calender to write in all your import dates to ship the next project for stardance XD The Taskbar border is gone now the Border is the sun 🤯 The Waldiverse and Waldsearch became their own Icons and a big remake: The Waldiverse (YouTube) experience is now way smoother and easier to handle The Waldsearch has now a own Wikipedia Screen in the WaldOS 😱 which opens by choosing an article and makes the expierience of WaldOS© sooo immersive (befor you was kicked out to your browser 🙄) The design is a bit updated and some datails like backgroundcolors changed (some uninteresting stuff XD ) .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. After adding the next app (hints in the Video 😶) I´m gonna ship Version 1.0 of The WaldOS© Stay excited there will come even more afterwards! Thanks for reading, now it´s on you to try the WaldOS for your own 🥳: https://waldewort.github.io/WaldOS/ Now as an real WebOS (yeah:))) ) Have fun and remember to like and leave a follow 🤗"}, {"post_id": 47552, "ts": "2026-08-15T15:04:42Z", "hours": 9.0628, "text": "❗Biggest Update ever for the WaldOS ❗ ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,., Devlog 5 All the new features: Better WaldVideo App: Thanks to the google cloud YouTube DATA API v3 now you can search directly in the window and then watch your favorite Videos ( yesss, that´s soo cool :)) The WaldSearch: A Wikipedia Action API make it possible to search all you want to know and then get the matching Wikipedia Pages to read (Only the best information for you all XD ) New App in building: I´m building up an complete own app in the WaldOS without any iframes or APIs, the release of this will be next time (you have to have a bit patience, it will be soo cool. I promise :))) ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,., Thanks for reading, now you can try all of this for your own: https://github.com/Waldewort/WaldOS (The YouTube will sadly not work cause you need a server to run on, I do it on a python server, so if you wanna try this you have to wait till the ship sadly :( Have fun and thanks for the like <3"}, {"post_id": 40709, "ts": "2026-08-04T12:27:28Z", "hours": 7.8767, "text": "❗NEW FEATURES FOR THE WALDOS© ❗ Devlog 4 ! New things I added: A new taskbar for a better overview Maximizable Windows ( Now you can see something 🤯💻) A notes Window with enough space to write down all notes about your own stardance project :) YouTube as a Window (Yippie, sadly you have to paste the Video-URL in, but changes will come :)) Onklick move to top on all Windows You can try it for your own and have a lot of fun: https://github.com/Waldewort/WaldOS Thanks for the like and follow ❤️, next time there will come new apps and better YouTube :)))"}, {"post_id": 35815, "ts": "2026-07-27T14:26:23Z", "hours": 4.1792, "text": "BIG UPDATE for the WaldOS©!!! (Devlog 3) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - __ Things I updated since last time in Part-3: Movabale Windows (Yeah :))) Openable Windows Closable Windows New stile 💫 A own CSS - File for the stile (Now it´s ordered 👌) An inscreen of an other project as a window 🎺 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Next time I will add real content and a searching Machine 💻🌍"}, {"post_id": 20055, "ts": "2026-07-01T15:46:08Z", "hours": 1.6544, "text": "DEVLOG 2 .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. My WaldOS is doing a big progress! I´ve added a couple of new thiongs in part 2. - A aqua translucent Top Bar where all the underpages will get linked - A background of vacation in Michigan to make the OS more beautiful - Circeled all the edges and outlined all boxes - Centered the main Box .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. I´m still hyped to work on this project and will build up a cool OS - the WaldOS© (just jocking with the copyright XD) -´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´- I hope you have a good day :) You have to follow to don´t miss anything XD"}, {"post_id": 19174, "ts": "2026-06-30T13:13:14Z", "hours": 0.2708, "text": "Just finished the first part of the tutorial! I´ve once learned HTML in school like in sixth class or so and now all the memories come back and it´s a lot of fun to program in HTML (although the WaldOS© looks like garbage XD). But I´m hyped to build it better and spend way more time in this cool project which I can still use after the Stardance Challenge!"}]...
|
Title: WaldOS© 3.0 by @Waldewort | Stardance
Devl Title: WaldOS© 3.0 by @Waldewort | Stardance
Devlogs:
Just finished the first part of the tutorial! I´ve once learned HTML in school like in sixth class or so and now all the memories come back and it´s a lot of fun to program in HTML (although the WaldOS© looks like garbage XD). But I´m hyped to build it better and spend way more time in this cool project which I can still use after the Stardance Challenge!
DEVLOG 2 .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. My WaldOS is doing a big progress! I´ve added a couple of new thiongs in part 2. - A aqua translucent Top Bar where all the underpages will get linked - A background of vacation in Michigan to make the OS more beautiful - Circeled all the edges and outlined all boxes - Centered the main Box .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. I´m still hyped to work on this project and will build up a cool OS - the WaldOS© (just jocking with the copyright XD) -´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´-´- I hope you have a good day :) You have to follow to don´t miss anything XD
BIG UPDATE for the WaldOS©!!! (Devlog 3) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - __ Things I updated since last time in Part-3: Movabale Windows (Yeah :))) Openable Windows Closable Windows New stile 💫 A own CSS - File for the stile (Now it´s ordered 👌) An inscreen of an other project as a window 🎺 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Next time I will add real content and a searching Machine 💻🌍
❗NEW FEATURES FOR THE WALDOS© ❗ Devlog 4 ! New things I added: A new taskbar for a better overview Maximizable Windows ( Now you can see something 🤯💻) A notes Window with enough space to write down all notes about your own stardance project :) YouTube as a Window (Yippie, sadly you have to paste the Video-URL in, but changes will come :)) Onklick move to top on all Windows You can try it for your own and have a lot of fun: https://github.com/Waldewort/WaldOS Thanks for the like and follow ❤️, next time there will come new apps and better YouTube :)))
❗Biggest Update ever for the WaldOS ❗ ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,., Devlog 5 All the new features: Better WaldVideo App: Thanks to the google cloud YouTube DATA API v3 now you can search directly in the window and then watch your favorite Videos ( yesss, that´s soo cool :)) The WaldSearch: A Wikipedia Action API make it possible to search all you want to know and then get the matching Wikipedia Pages to read (Only the best information for you all XD ) New App in building: I´m building up an complete own app in the WaldOS without any iframes or APIs, the release of this will be next time (you have to have a bit patience, it will be soo cool. I promise :))) ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,., Thanks for reading, now you can try all of this for your own: https://github.com/Waldewort/WaldOS (The YouTube will sadly not work cause you need a server to run on, I do it on a python server, so if you wanna try this you have to wait till the ship sadly :( Have fun and thanks for the like <3
❗Completely new Design for WaldOS© ❗ .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. Devlog 6! First, the Website to explore it to your own😉: https://waldewort.github.io/WaldOS/ If you more like to read about the new features, here it comes: Now the WaldOS has an fullscreenmode to make it feel like a real Operating System (That´s so cool!) Other things I added: Togglemode for the appicons to close them by pressing again on them A new App has launched (yippie): A calender to write in all your import dates to ship the next project for stardance XD The Taskbar border is gone now the Border is the sun 🤯 The Waldiverse and Waldsearch became their own Icons and a big remake: The Waldiverse (YouTube) experience is now way smoother and easier to handle The Waldsearch has now a own Wikipedia Screen in the WaldOS 😱 which opens by choosing an article and makes the expierience of WaldOS© sooo immersive (befor you was kicked out to your browser 🙄) The design is a bit updated and some datails like backgroundcolors changed (some uninteresting stuff XD ) .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. After adding the next app (hints in the Video 😶) I´m gonna ship Version 1.0 of The WaldOS© Stay excited there will come even more afterwards! Thanks for reading, now it´s on you to try the WaldOS for your own 🥳: https://waldewort.github.io/WaldOS/ Now as an real WebOS (yeah:))) ) Have fun and remember to like and leave a follow 🤗
🥳The final Version 1.0 of The WaldOS©🥳 : ) : ) : ) : ) : ) : ) :) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) Devlog 7 Lunch of the WaldOS© Version 1.0 today❗ Thinks changed since last time: The best App has launched, The Waldlas: A Openstreetmaps based maps app with a lot of functions: Your current location and the WaldOS© Headquarter are fixed on the map as a pin. You can klick anywhere on the map and pin a emoji with text to the map to don´t ever forget where this good restaurant was ( because we all forget always 😢, but not anymore 🥳) A searchbar makes it possible to find any location within milliseconds (for all the bad geographie students 😉) And a FULLY USEABLE ROUTESEARCH SIDEBAR (wow!), just type in two locations and it will find the fastest route for cars! Again a new design! I removed the background and now theres something like a glassy optic ( I know a bit mainstream but I didn´t know what else 😢) Bugfixes 1.3 for the Waldiverse and the Waldsearch I don´t know it´s too much happend XD : ) : ) : ) : ) : ) : ) :) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) : ) If you want to try it out before the launch in some hours: https://waldewort.github.io/WaldOS/ I hope you like the new features and give a good ranking 🙃 cause I made sooo much and nearly all by my self, different than others! Thanks for reading and leaving a like and a comment! See you soon 👋
💫Finale Design for the WaldOS©💫 — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — Devlog 8 What´s new: Interactive Background! The cursor forms star constellations and in the middle is a subtle WaldOS© title. Randomly some little shooting stars flying over the screen (some cute little ones💫) I´m worikng on a new App design for every app witch fits way better in the style (but need soo long time😢) — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — Here you can try out the WaldOS©: https://waldewort.github.io/WaldOS/ Thanks for reading this and your like and comment :)
🥳The final design of the WaldOS© is finished!🥳 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Devlog 9 Try it out instead of reading (I know you 😜): https://waldewort.github.io/WaldOS/ What is new: The new glassy design with the new header is now applied on all Apps (sadly looks bit like apple :( ) A new App has launched: The settings (wow how exciting XD) -The background is now fully costummizable with the settings app. -You can choose of 6 different Presets for Colouring -You can create your own colouring -You can set the speed and digit of stars and how far constellations are forming (watch out for your potato PC - Graphical intensive 😉) -You can Rename the main title in the middle of the WebOS! Bugfixes 2.3 on Waldiverse and Waldlas First performance fix and improvement (no fun 😢) That will come next? A save for your own presets ( cool idea! ) Idk see what comes in my mind next! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- You wanna try the WaldOS©: https://waldewort.github.io/WaldOS/ I hope you have fun and thanks for the reading and the like and comment 🙃
2️⃣.0️⃣The Launch of the WaldOS© 2.0 is happening in the next days! 2️⃣.0️⃣ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Devlog 10 (I think) Trying is better than reading: https://waldewort.github.io/WaldOS/ All the new stuff: 1. First time ever I really did what I said in last Devlog: Introducing the own creatable and saveable Universum function in the settings app (yesss, fully customiseable - other than apple XD) Two new Apps (Wow I was productive 😁): The WaldCalc, a … Calculator (stunning 😲) And the… WaldSky, a App you can watch the real stars flying over sky. You can let you show real constellations and the names of them 💫. You can set in a time and place so you know where to have to look with your Crush during night to see the Ursa Minor ( Just joking, we are coder, not touching grass (or girls 😜(just joking again😂)) 😢). New Icon design: Gemini cooked with the new Icons, I just inserted them (took anyways like one hour) A little Copyright sentence under the title to prevent abuse 😲 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This was it actually, I´m going to ship tomorror or one day after this (sorry to all native speaker hehe) Try the WaldOS© for your own: https://waldewort.github.io/WaldOS/ Thanks for reading and all the support and the comment and like ♥️!
2️⃣.0️⃣Release of the WaldOS© 2.0 is now🥳🥳🥳2️⃣.0️⃣ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Devlog 11 What has changed ? Bugfixes on the WaldSky and Waldlas and perfomance optimization (99% of work) Title has changed to WaldOS© 2.0 (1% of work 😂) A new ReadME (more exciting and readable) Uhm not more, but now version 2.0 is ready to launch 🥳🥳🥳 So celebrate with me the second launch in 3️⃣Three 2️⃣Two 1️⃣One Nowwww!!!! 🎉🎆✨ https://waldewort.github.io/WaldOS/ yippie! Try it your self 🙃 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thanks for reading, the like and comment and the good rating 😉
⏰🏎️🤖 The WaldOS© 2.0 got 3 new apps! :.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.: Devlog 12 Trying is better than reading: https://github.com/Waldewort/WaldOS The 3 new apps: A clock, alarm and stopwatch app to not forget the time! Very simple done! (yippie 🥳) The thing most of the people wanted: An integrated WaldAI 🤖😲: Using an free croq API I created the WaldAI. It´s using the gpt oss 120b modell by openai and is a bit stupid but for normal questions it´s okay (just don´t ask things witch are newer than 2024 😉😂) A very simple integrated game: The Waldracer! It´s the game slowroads by topograph.io and now it´s in the WaldOS© 2.0 as a standalone game thanks to the open source of their game: https://slowroads.io 🎉 Things that are also new but no app: A little staranimation is now greeting you when entering the WaldOS© 2.0 :.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.: That was it already, thanks for reading and the like and comment :) Try it for your own: https://github.com/Waldewort/WaldOS See you soon 🙃
💫Animations for the WaldOS© 2.0 💫 </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </> Devlog 13 You know the sentence 😂: https://waldewort.github.io/WaldOS/ A lot of cool new things for all with shortend attentionspan: A legendary starting animation in which … ahh no, just watch the video or visit: https://waldewort.github.io/WaldOS/ by your own! (but watch out it´s epic 😯) A new app with mathematical generated ambience sounds to learn or chill. Google Gemini helped me with this cause the generating of sounds is mindblowing complex. Thank you Gemini XD (But I made all around by my own and I think it´s a good app anyways! ) (I just recognized I still don´t have an app icon, but fixed till next time! ) A bit of bugfixing and testing with different thinks (stay tuned 😉) </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </>< > </> Try the WaldOS© 2.0 for your own: https://waldewort.github.io/WaldOS/ What comes next ? I don´t know, right now I´m producing content for the Virality Bonus for this follow https://www.instagram.com/waldewort/ on Instagram, thank you! Thanks for reading, your time, the like and the comment :)))
🎉🗣️The Waldasist beta version is out now in the WaldOS© 2.0🗣️🎉 ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^ Devlog 14 The biggest new feature in the history of the WaldOS© 2.0 has launched its beta version 🥳! The Waldasist is a integrated voice assistant in the WaldOS© 2.0. You can easyly activate it by pressing on the circle of stars right under the title. Now you can say the name of the App and it opens by magic. Also you can say maximize and then the name of the app and close apps by saying close and the app name. I´m right now working on a voice assist even in the apps themself but that´s not that easy! What changed too: Just a bit buggfixing in the Waldracer and WaldAi 😢 ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^ Stay tuned to don´t miss the next ship and that you can try WaldOS© 3.0 (holy moly😯). Next week I´m in holiday so I won´t post anything! Thanks for the like, follow and the commi 🙃
🤖Full Voice Assistant in the WaldOS© 2.0🤖 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Devlog 15 Trying is better than … this: https://waldewort.github.io/WaldOS/ The first accessibility feature is full working now 🤖🎉 The VoiceAI is now completely integrated in the WaldOS© 2.0 without a App needed. Just press the starring right under the title and talk to the VoiceAI! Also then there is a cool animation 🙃 The VoiceAI can now complete tasks in the apps like setting a timer or write down notes for you 😯 In the Settings App you can controll the VoiceAI and also read the user manuell to get to know how the VoiceAI works excactly. What changed else: Nothing 😢 But right now I´m working on a big new feature witch revoluts the opening process of the Apps in the WaldOS© 2.0, so stay tuned 😉 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - You wanna try the WaldOS© 2.0 ? Here you can 🥳: https://waldewort.github.io/WaldOS/ I´m glad you´ve readen this Devlog and thank you soo much for the like and comment and the good rating for the WaldOS© 3.0 (which is comming soon🤫)
🎉We celebrate the pass of the 100 hours mark of the WaldOS© 2.0 🎉 (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: Devlog 16 One new feature and one revolutional app for the celebration 😲: The WaldOS has got it´s own control center . Now you open apps in this center and then they are shown in the taskbar like in all other real operating systems! Also you can now minimize apps or close them complete. The new App: Introducing the WaldTravel! The WaldTravel is a tool you can plan your next trip more climate nutral and you can explore how much CO2 is expelled with different Vehicles! Short realtalk: This app is very important to me to show all the world how to reduce greenhouse gases and help with climate protection ♥️🌳! This is the most important topic for our (the stardance) generation and the following ones and I think stardance is a good way to show this importance to more people. Thank you 🥰 The app is very interactive and shows the importance of this topic in an easy and good to understand way with visualization! Also I fixed again some bugs and smoothed the WaldOS© 2.0 expierience more 🥱! (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: Try the WaldOS© 2.0 for your own: https://waldewort.github.io/WaldOS/ Thank you so much for reading this more serios Devlog and sharing it and give it a like 🙃! Write down in the comments if you want more of such apps with a important topic.
🌳More Waldclimate Apps for the WaldOS© 2.0🌳 “´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´´”´”´”´”´”´” Devlog 16 One new app and one in progress: The Waldollution, a app which shows you how long different objects need to get composed in nature if they get thrown away not regular. Work in progress for a really cool app with cats and polar bears ( and lot of cool other animals 😉), but more in the next Devlog 🤫 Bug fixing for the Control Center and some performance tests. Also I improved the Waldtravel animations a bit “´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´”´´”´”´”´”´”´” Test the WaldOS© 2.0 by your own: https://waldewort.github.io/WaldOS/ That´s it, the release of WaldOS© 3.0 will be soon, follow to don´t miss it! Thanks for reading and the like and follow 🙃
🥳The last features before the WaldOS© 3.0🥳 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Devlog 17 The new apps: The WaldEye: A cool app you can watch cute animal livestreams in! Of course only animals in pure nature so it can be you can´t see an animal for hours, but that´s nature. Since now I included four live streams of different animals ( also cute ones, like squirrels) The Waldollution: Another app that shows you how long trash need to get composed if it´s thrown into nature! Finally introducing the WaldWeather app: Automatically shows you the Weather on your location, but you can also search for places and save them to the bar on top to have easy access to them. If you maximize the window you get extra detailed information and a 7 day forecast (that´s maybe right XD) Also I fixed some bugs in the WaldTravel app! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Here you can try the WaldOS 2.0 for your own: https://waldewort.github.io/WaldOS/ Today I will launch the WaldOS 3.0 so follow to don´t miss something! Thanks for reading and the like and comment :))
Ships:
Welcome to the WaldOS©! The WaldOS© is a Webbased operating system by #Waldewort. It already has the most important features like: A Notebook screen which saves your notes for the next session A Trumpetfingeringlearning screen made by my coding college #Dasher2801 For all the ones who only want to watch longform YouTube content the Waldiverse, a YouTube application The WaldSearch, a Wikipedia based Searchmachine which outputs you only Wikipedia articles The Waldlas, a openstreetmaps based map version with Searchmodus and the possibility to make emoji Pins all over the world witch also saves over sessions and a route planer to plan your next vacation (We as coder won´t need this XD ) It´s important during coding to not forget to eat so theres the Mooncalendar, opens by pressing on the date is presize and custumisable Notes are possible witch saves over your sessions !!!Try out what happens when you press on the clock!!! Please only try it on desktop and you need at least a FHD Monitor that the windows aren´t too big! One day there will be a mobile version! But the WaldOS© is still in process and a lot more Apps will come, with even more features and better Style. Please remember that I needed 40 hours to code this caused by coding it BY MYSELF and not AI, so also the design is not the best but at least not a AI Design like on 95% of the projects here! Thanks for reading and your interest in WaldSearch© and for the good rating :))
🎉 The WaldOS© 2.0 has officelly launched 🎉 Welcome to the WaldOS© 2.0 🥳! The WaldOS© 2.0 is a update of the WaldOS© and brings with it two new Apps, a completely new Background ✨witch is fully customisable and new Icons 📱! The WaldOS© 2.0 is a very elaborate project in witch I tried to use as many AI as possible so please remember this in the rating! What’s Inside the WaldOS©? 📝 Notes & 🌙 Mooncalendar: Write down ideas and check your calendar persistent session saving. (Pro tip: Try clicking on the clock! ⏰) 🎺 Trumpet Learn: Learn brass fingerings step-by-step—huge credit to my coding colleague #Dasher2801 for building this! 📽️ Waldiverse & 🔍 WaldSearch: Stream longform YouTube content or search exclusively for pure Wikipedia articles. 🗺️ Waldlas: OpenStreetMap integration with route planning and session-saved emoji pins worldwide. 🧮 WaldCalc & 🌌 WaldSky: Solve equations or gaze at real-time constellations flying across your screen. ⚙️ Settings App: Fully customize your background universe! Adjust colors, star density, and speeds (watch out, potato PCs 🥔). ⚠️I only tested the WaldOS© 2.0 on a FHD (1080p) or higher monitor so lower resolution may cause window rendering issues⚠️ Thanks for reading and your interests in the WaldOS© 2.0 ♥️. Thanks for your feedback and like and I hope for a good rating 😉!
🎉Release of the WaldOS© 3.0🎉 Yipppppie, here are all new features: Animation when you start the WaldOS© 3.0 The completely new startmenu and minimization of the Apps The VoiceAI, starts by pressing on the starring under the title and can be monitored in the settings 🤖. The WaldAI, a groq based Ai witch can answer your question (not that good, but it´s okay) The Waldracer, a game in qhich you can drive infinte in a cool world. Thanks to slowroads to make this free 🏎️! The WaldClock, a timer and clock (wow!) The Wal(D)-OS, you can create your own TO-DO Pins with date and time. Waldtravel, a app you can calculate the CO2 and energy needed for different Vehicles and Routes Waldollution, you can see how long different things need to get composed in nature The Waldeye, with different livestreams of nature and animals The WaldWeather, a whater app! Waldience, you can create naturesounds to chill more 🌳. Thanks for testing the WaldOS© 3.0 and your likes ♥️, comments 💬 and the good rating 🥰😉 !...
|
1792817554.6616461
|
1793681554.6616461
|
|
40621
|
ZweiCFD by @toiabzahoor | Stardance
|
toiabzahoor
|
2
|
51.0
|
883
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T09:54:49Z", "hours": 18.0, "multiplier": 15.77, "payout": 287, "blessing": "neutral", "text": "Hello Guys! I am back with An improved version of ZweiCFD. Last time, everyone recommended a few things to improve on ZweiCFD , which i have been working hard to do! I have also added Custom Models, A CLI interface, heat colormap (which shows velocity of the wind on the model) , 3d vortex cores using Q criterion, surface pressure distribution curve. I have also added a polar sweep function which lets you select from a range of AoA to see how the drag, lift varies. If anyone is new, They can take a look below this Ship to understand what ZweiCFD is. I Have Also tried to Compile binaries for different OS systems, and i’d like you guys to show me how it works on your end so that i may fix it ASAP. Thank you!", "repo": "https://github.com/toiabzahoor/ZweiCFD", "demo": "https://github.com/Toiabzahoor/ZweiCFD/releases/tag/ZweiCFD"}, {"ship_num": 2, "ts": "2026-08-09T06:47:25Z", "hours": 33.0, "multiplier": 18.19, "payout": 596, "blessing": "neutral", "text": "ZweiCFD: A Real-Time 3D Fluid Dynamics Simulator! Hey Everyone! I’m super excited to ship my first project ZweiCFD , an interactive Computational Fluid Dynamics (CFD) solver and visualization tool I built from scratch. Have you ever wanted to just make a model and see how air flows around it? This is the simulator for that! What it does: Real-Time Aerodynamics: You can adjust the Angle of Attack (AOA), speed, thickness, and camber of an airfoil on the go, and the solver recalculates the airflow instantly. Rich 3D Visuals: Generates velocity heatmaps, streamlines, and slices to visualize exactly how the fluid is behaving. How it was made Built entirely in C++ using Qt6 for the UI and VTK for the heavy-duty 3D rendering. Powered by a custom 3D Lattice Boltzmann Method (LBM) volumetric solver (using a D3Q19 discrete velocity model). Uses Signed Distance Fields (SDF) to handle the complex math of arbitrary boundaries and real-time obstacle drawing. Rest Of The Documentation Is Available On My Github Page! The journey To be completely honest, building this solo while managing my studies has been brutal. My laptop is pretty low-end, so debugging the 3D flap airfoil simulation tanked my compute resources and I had to sideline some 2D features entirely to get the 3D working because it kept interfering. Also, Sitting on the laptop with my chronic pain is very painful for me, so if there are some rough edges, please tell me as it would boost my motivation to work! If you are on Windows, you can download the .exe (with all the VTK DLLs bundled!) from my repo and tinker around with it. I would absolutely love your feedback, reviews, or even just some stars on the repo to help me push this to the next level! :3 For The People Who Need To Take A Look At How It Works: https://youtu.be/mjVsJX-nruM", "repo": "https://github.com/toiabzahoor/ZweiCFD", "demo": "https://github.com/Toiabzahoor/ZweiCFD/releases/tag/ZweiCFD"}]...
|
[{"post_id": 64114, "ts": "202 [{"post_id": 64114, "ts": "2026-09-08T09:50:03Z", "hours": 3.2444, "text": "Finally, I think I have worked enough on zweicfd, i think i will close the chapter on this project. everyone, thank you for supporting me till now! it has really helped my life alot. and i appreciate every bit of support from everyone! i have also tried my best to upload the binaries for linux and macos, and i would like your humble opinion if you face any issues. i would be sure to help you in any way i can!"}, {"post_id": 58895, "ts": "2026-08-31T13:48:56Z", "hours": 6.5239, "text": "Hello! it has been a while since i have dropped a devlog because i have been busy with my doctor visits, so i apologise for the delay! i have added many features to ZweiCFD, like the color heatmap which tells you how the pressure distribution on your model is! I have also added a polar sweep function which lets you simulate for many angles and configurations and plot how the force ,drag angle relate! I am really out of ideas on what to do next, So it would be really helpful to recieve your feedback on what to do next!"}, {"post_id": 53689, "ts": "2026-08-24T11:18:14Z", "hours": 4.2728, "text": "Hey Everyone! I am back with some new additions to ZweiCFD! First, I wanted to maximize the compute for massive simulations, so I’ve added a headless CLI mode and added a function where you can scale the grid up or down (depends on how big your model is / how accurate you want to trace the model). If you are running this on a lower-end device like my laptop, or if you just want to dedicate 100% of your CPU to the physics without running the rendering simultaneously , you can now run the solver entirely from the command line! Second, based on some great feedback, I’ve integrated .vti file exporting. now you can also export your high-resolution flow data generated by ZweiCFD directly into industry-standard tools like ParaView for deep, professional-grade analysis(if anyone is an expert at paraview, please let me know what you think. I would love to hear from a professional so i can tailor to their needs!). Let me know what you think!"}, {"post_id": 52861, "ts": "2026-08-23T07:10:04Z", "hours": 4.1683, "text": "Thank you everyone for supporting my project so much! I am really grateful for all of the support everyone has given me!. Now, I finally have more motivation to work on this project! Currently, as many people recommended, I was working on import functionality of any custom models you may have. It is currently in progress so I appreciate your patience as the latest won’t be reflected on github. Also, I plan to also make a web version of ZweiCFD which would run easily on any platform (Which would be very tough but I think i can make it). Thank you for your time!"}, {"post_id": 43767, "ts": "2026-08-09T06:01:56Z", "hours": 4.4875, "text": "Finally My Last Devlog Before I Ship! I’ve Fixed most of the issues and uploaded the build binary along with the necessary libraries to my releases in github for you guys to try, Thank you very much for your support till now!"}, {"post_id": 42780, "ts": "2026-08-07T17:38:52Z", "hours": 6.8753, "text": "it has finally been starting to look very decent. I had to do a major architectural shift to VTK and QT. and it turned out very good. I am feeling burned out these days. i dont really know if i can keep up the motivation to work on this. but ill try my best! thank you for checking out."}, {"post_id": 40901, "ts": "2026-08-04T18:38:47Z", "hours": 4.6822, "text": "i have been working to make the simulation more pleasing to look at . also, trying to model complex shapes and adding stuff like .obj support, lets see how that goes. have been working on some optimization features, so the github commit may take some more time. Thank you for checking out!"}, {"post_id": 40171, "ts": "2026-08-03T16:02:52Z", "hours": 3.0133, "text": "the 3d interface is under work, although there are major issues with making the equations work in 3d and other stuff so you wont find this version on github. your patience is appreciated!!"}, {"post_id": 39536, "ts": "2026-08-02T15:42:10Z", "hours": 3.975, "text": "i moved most of the calculations onto the gpu so having alot of particles will be easier to render. plus, now testing complex shapes and writing boundary layer equations and some approximation methods to hug around the shape. also i am planning to add 3d next, which will be tough. wish me luck!"}, {"post_id": 38960, "ts": "2026-08-01T16:07:01Z", "hours": 3.5236, "text": "have done a great session. added coloring, and added more equations like lattice-boltzmann method (recovering the navier stokes). thank you for taking a look!"}, {"post_id": 38389, "ts": "2026-07-31T18:54:12Z", "hours": 1.9697, "text": "working on it more, now modelling the equations and physics. havent commited this part to github yet due to some bugs here and there. thank you for checking out!"}, {"post_id": 37775, "ts": "2026-07-30T18:06:55Z", "hours": 1.6783, "text": "Got it fixed. also added some new stuff, and added the wind effect (the lines, yes they move). although i have to incorporate the equations next time. before that, i have to study up on it as this is a topic i havent really studied much about :)"}, {"post_id": 36261, "ts": "2026-07-28T07:51:57Z", "hours": 2.0814, "text": "still working on it. although the graphics arent looking too good yet. Have to stop here for lunch and some rest for my leg, will start work later to fix this."}, {"post_id": 35874, "ts": "2026-07-27T16:20:21Z", "hours": 0.4969, "text": "currently, as i’ve initialized this project. just working to make the files tidy and clean and adding some basic stuff."}]...
|
Title: ZweiCFD by @toiabzahoor | Stardance
Devlog Title: ZweiCFD by @toiabzahoor | Stardance
Devlogs:
currently, as i’ve initialized this project. just working to make the files tidy and clean and adding some basic stuff.
still working on it. although the graphics arent looking too good yet. Have to stop here for lunch and some rest for my leg, will start work later to fix this.
Got it fixed. also added some new stuff, and added the wind effect (the lines, yes they move). although i have to incorporate the equations next time. before that, i have to study up on it as this is a topic i havent really studied much about :)
working on it more, now modelling the equations and physics. havent commited this part to github yet due to some bugs here and there. thank you for checking out!
have done a great session. added coloring, and added more equations like lattice-boltzmann method (recovering the navier stokes). thank you for taking a look!
i moved most of the calculations onto the gpu so having alot of particles will be easier to render. plus, now testing complex shapes and writing boundary layer equations and some approximation methods to hug around the shape. also i am planning to add 3d next, which will be tough. wish me luck!
the 3d interface is under work, although there are major issues with making the equations work in 3d and other stuff so you wont find this version on github. your patience is appreciated!!
i have been working to make the simulation more pleasing to look at . also, trying to model complex shapes and adding stuff like .obj support, lets see how that goes. have been working on some optimization features, so the github commit may take some more time. Thank you for checking out!
it has finally been starting to look very decent. I had to do a major architectural shift to VTK and QT. and it turned out very good. I am feeling burned out these days. i dont really know if i can keep up the motivation to work on this. but ill try my best! thank you for checking out.
Finally My Last Devlog Before I Ship! I’ve Fixed most of the issues and uploaded the build binary along with the necessary libraries to my releases in github for you guys to try, Thank you very much for your support till now!
Thank you everyone for supporting my project so much! I am really grateful for all of the support everyone has given me!. Now, I finally have more motivation to work on this project! Currently, as many people recommended, I was working on import functionality of any custom models you may have. It is currently in progress so I appreciate your patience as the latest won’t be reflected on github. Also, I plan to also make a web version of ZweiCFD which would run easily on any platform (Which would be very tough but I think i can make it). Thank you for your time!
Hey Everyone! I am back with some new additions to ZweiCFD! First, I wanted to maximize the compute for massive simulations, so I’ve added a headless CLI mode and added a function where you can scale the grid up or down (depends on how big your model is / how accurate you want to trace the model). If you are running this on a lower-end device like my laptop, or if you just want to dedicate 100% of your CPU to the physics without running the rendering simultaneously , you can now run the solver entirely from the command line! Second, based on some great feedback, I’ve integrated .vti file exporting. now you can also export your high-resolution flow data generated by ZweiCFD directly into industry-standard tools like ParaView for deep, professional-grade analysis(if anyone is an expert at paraview, please let me know what you think. I would love to hear from a professional so i can tailor to their needs!). Let me know what you think!
Hello! it has been a while since i have dropped a devlog because i have been busy with my doctor visits, so i apologise for the delay! i have added many features to ZweiCFD, like the color heatmap which tells you how the pressure distribution on your model is! I have also added a polar sweep function which lets you simulate for many angles and configurations and plot how the force ,drag angle relate! I am really out of ideas on what to do next, So it would be really helpful to recieve your feedback on what to do next!
Finally, I think I have worked enough on zweicfd, i think i will close the chapter on this project. everyone, thank you for supporting me till now! it has really helped my life alot. and i appreciate every bit of support from everyone! i have also tried my best to upload the binaries for linux and macos, and i would like your humble opinion if you face any issues. i would be sure to help you in any way i can!
Ships:
ZweiCFD: A Real-Time 3D Fluid Dynamics Simulator! Hey Everyone! I’m super excited to ship my first project ZweiCFD , an interactive Computational Fluid Dynamics (CFD) solver and visualization tool I built from scratch. Have you ever wanted to just make a model and see how air flows around it? This is the simulator for that! What it does: Real-Time Aerodynamics: You can adjust the Angle of Attack (AOA), speed, thickness, and camber of an airfoil on the go, and the solver recalculates the airflow instantly. Rich 3D Visuals: Generates velocity heatmaps, streamlines, and slices to visualize exactly how the fluid is behaving. How it was made Built entirely in C++ using Qt6 for the UI and VTK for the heavy-duty 3D rendering. Powered by a custom 3D Lattice Boltzmann Method (LBM) volumetric solver (using a D3Q19 discrete velocity model). Uses Signed Distance Fields (SDF) to handle the complex math of arbitrary boundaries and real-time obstacle drawing. Rest Of The Documentation Is Available On My Github Page! The journey To be completely honest, building this solo while managing my studies has been brutal. My laptop is pretty low-end, so debugging the 3D flap airfoil simulation tanked my compute resources and I had to sideline some 2D features entirely to get the 3D working because it kept interfering. Also, Sitting on the laptop with my chronic pain is very painful for me, so if there are some rough edges, please tell me as it would boost my motivation to work! If you are on Windows, you can download the .exe (with all the VTK DLLs bundled!) from my repo and tinker around with it. I would absolutely love your feedback, reviews, or even just some stars on the repo to help me push this to the next level! :3 For The People Who Need To Take A Look At How It Works: https://youtu.be/mjVsJX-nruM
Hello Guys! I am back with An improved version of ZweiCFD. Last time, everyone recommended a few things to improve on ZweiCFD , which i have been working hard to do! I have also added Custom Models, A CLI interface, heat colormap (which shows velocity of the wind on the model) , 3d vortex cores using Q criterion, surface pressure distribution curve. I have also added a polar sweep function which lets you select from a range of AoA to see how the drag, lift varies. If anyone is new, They can take a look below this Ship to understand what ZweiCFD is. I Have Also tried to Compile binaries for different OS systems, and i’d like you guys to show me how it works on your end so that i may fix it ASAP. Thank you!...
|
1792972295.7210894
|
1793058695.7210894
|
|
27556
|
Skysync by @bartoszkasyna | Stardance
|
bartoszkasyna
|
1
|
96.0
|
880
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-11T20:21:44Z", "hours": 96.0, "multiplier": 18.26, "payout": 880, "blessing": "neutral", "text": "Privacy-first encrypted cloud storage for securely uploading, organizing, previewing, and sharing files. Built with React, TypeScript, and Rust. Desktop view recommended :)", "repo": "https://github.com/B4rtekk1/SkysyncR", "demo": "https://skysync.dev"}]...
|
[{"post_id": 40286, "ts": "202 [{"post_id": 40286, "ts": "2026-08-03T18:30:52Z", "hours": 2.0733, "text": "Updated mobile UI. cant update demo link so here: https://skysync.dev"}, {"post_id": 39470, "ts": "2026-08-02T13:15:45Z", "hours": 5.5069, "text": "Made skysync work with custom domain and SSL certificate. Updated security and UI a little. Updated docker files. Now ready to ship!"}, {"post_id": 38963, "ts": "2026-08-01T16:13:13Z", "hours": 3.6919, "text": "Added Recent and important page. Added folder soft deletion. Added ransomware detector(I hope). Added word files preview. Added sounds files preview."}, {"post_id": 38423, "ts": "2026-07-31T19:44:14Z", "hours": 5.8661, "text": "I didnt focus on UI as I said in previous devlog, I decided to add all functionalities first and then adjust UI. So I improved security page. I also updated backend to be more secure. Two or three devlogs more and I finish functionalities, then i am going on one week holiday. I’m targeting at 15-18 August to deploy"}, {"post_id": 37863, "ts": "2026-07-30T20:46:10Z", "hours": 6.7542, "text": "Improved main page UI. Added security page. Added limits while creating ZIP. Updated settings page. Fixed UI bugs.Now I will focus on mobile view"}, {"post_id": 37213, "ts": "2026-07-29T19:17:10Z", "hours": 5.9672, "text": "Updated dashboard UI a little. Updated settings page. Added download checksum, session managment resumable file upload. Added Typescript syntax. Added c/c++/cuda hihjlighter and syntax."}, {"post_id": 35937, "ts": "2026-07-27T18:20:32Z", "hours": 4.0675, "text": "Successfully dockerized whole aplication"}, {"post_id": 33039, "ts": "2026-07-22T16:26:58Z", "hours": 5.0569, "text": "Updated typescript highlighter. Added better files mobility - folder tree view. Drag & drop files into folders. Pausable/Resumable file upload."}, {"post_id": 32418, "ts": "2026-07-21T16:22:56Z", "hours": 4.7278, "text": "Added typescript highlight support. Now insted of loading placeholder images are blured. Improved UI/UX. Updated mobile support. Fixed bug and vulnelabirity"}, {"post_id": 30875, "ts": "2026-07-18T20:36:51Z", "hours": 4.3769, "text": "Added python highlighter with keyword and variables syntax suggestion. Added more tests."}, {"post_id": 30346, "ts": "2026-07-17T20:23:02Z", "hours": 5.5833, "text": "Added custom nof found page. Updated security settings. Added tests. Added OpenAPI specs."}, {"post_id": 29144, "ts": "2026-07-15T20:33:40Z", "hours": 2.5011, "text": "Added create file modal with extension based editor. Added backend support for some features. Added calendar."}, {"post_id": 28969, "ts": "2026-07-15T16:19:07Z", "hours": 2.3747, "text": "Added link expiration date, added file download limit. Added folder description. Improved user privacy"}, {"post_id": 28784, "ts": "2026-07-15T09:02:28Z", "hours": 2.2144, "text": "Added file deletion with retention. Updated security and privacy"}, {"post_id": 28375, "ts": "2026-07-14T16:27:05Z", "hours": 3.1672, "text": "Added custom PDF preview with basic function - in file search. Next pdf features in next update"}, {"post_id": 27858, "ts": "2026-07-13T19:12:01Z", "hours": 0.4897, "text": "Added notes attached to files"}, {"post_id": 27819, "ts": "2026-07-13T18:20:22Z", "hours": 2.3033, "text": "Added custom video preview with prebked volume chart. Added info card in file tile."}, {"post_id": 27556, "ts": "2026-07-13T07:42:50Z", "hours": 1.9786, "text": "Added Sort and filter options. IMproved text files preview. Added missing animations."}, {"post_id": 27236, "ts": "2026-07-12T16:56:22Z", "hours": 1.3906, "text": "Added sharing file feature with custom qr code."}, {"post_id": 27191, "ts": "2026-07-12T15:04:17Z", "hours": 2.4408, "text": "Added markdown editing with live preview, added text files edit. Added photos preview, Updated CORS."}, {"post_id": 26818, "ts": "2026-07-11T20:35:00Z", "hours": 2.075, "text": "Added settings page. added photos preview. Fixed depracted features from react. Deleted duplicated lines of code"}, {"post_id": 26691, "ts": "2026-07-11T17:01:30Z", "hours": 4.1953, "text": "Enhanced visuals. Added more animations. Added Groups pagenot yet finished). Added file type icons, memory usgae by file types. Added files upload."}, {"post_id": 25198, "ts": "2026-07-09T08:46:30Z", "hours": 1.0972, "text": "Added favourites tile in nav. Tiles are now draggable."}, {"post_id": 22905, "ts": "2026-07-05T15:26:37Z", "hours": 4.0747, "text": "Added main page placeholder. Security update - resistant to most attacks"}, {"post_id": 20170, "ts": "2026-07-01T18:33:23Z", "hours": 5.2494, "text": "Enhanced signing up and loging in flow. Added verification link sent via email. Added utils files. Added config files. Better files organization."}, {"post_id": 17525, "ts": "2026-06-28T10:44:57Z", "hours": 7.0594, "text": "I added simple welcome page and some rust backend"}]...
|
Title: Skysync by @bartoszkasyna | Stardance
Devl Title: Skysync by @bartoszkasyna | Stardance
Devlogs:
I added simple welcome page and some rust backend
Enhanced signing up and loging in flow. Added verification link sent via email. Added utils files. Added config files. Better files organization.
Added main page placeholder. Security update - resistant to most attacks
Added favourites tile in nav. Tiles are now draggable.
Enhanced visuals. Added more animations. Added Groups pagenot yet finished). Added file type icons, memory usgae by file types. Added files upload.
Added settings page. added photos preview. Fixed depracted features from react. Deleted duplicated lines of code
Added markdown editing with live preview, added text files edit. Added photos preview, Updated CORS.
Added sharing file feature with custom qr code.
Added Sort and filter options. IMproved text files preview. Added missing animations.
Added custom video preview with prebked volume chart. Added info card in file tile.
Added notes attached to files
Added custom PDF preview with basic function - in file search. Next pdf features in next update
Added file deletion with retention. Updated security and privacy
Added link expiration date, added file download limit. Added folder description. Improved user privacy
Added create file modal with extension based editor. Added backend support for some features. Added calendar.
Added custom nof found page. Updated security settings. Added tests. Added OpenAPI specs.
Added python highlighter with keyword and variables syntax suggestion. Added more tests.
Added typescript highlight support. Now insted of loading placeholder images are blured. Improved UI/UX. Updated mobile support. Fixed bug and vulnelabirity
Updated typescript highlighter. Added better files mobility - folder tree view. Drag & drop files into folders. Pausable/Resumable file upload.
Successfully dockerized whole aplication
Updated dashboard UI a little. Updated settings page. Added download checksum, session managment resumable file upload. Added Typescript syntax. Added c/c++/cuda hihjlighter and syntax.
Improved main page UI. Added security page. Added limits while creating ZIP. Updated settings page. Fixed UI bugs.Now I will focus on mobile view
I didnt focus on UI as I said in previous devlog, I decided to add all functionalities first and then adjust UI. So I improved security page. I also updated backend to be more secure. Two or three devlogs more and I finish functionalities, then i am going on one week holiday. I’m targeting at 15-18 August to deploy
Added Recent and important page. Added folder soft deletion. Added ransomware detector(I hope). Added word files preview. Added sounds files preview.
Made skysync work with custom domain and SSL certificate. Updated security and UI a little. Updated docker files. Now ready to ship!
Updated mobile UI. cant update demo link so here: https://skysync.dev
Ships:
Privacy-first encrypted cloud storage for securely uploading, organizing, previewing, and sharing files. Built with React, TypeScript, and Rust. Desktop view recommended :)...
|
1792968778.535996
|
1793055178.535996
|
|
15256
|
the way to teal(just kill) by @love | Stardance
|
love
|
2
|
60.67
|
877
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T00:30:44Z", "hours": 23.0, "multiplier": 18.83, "payout": 413, "blessing": "neutral", "text": "this is a movement shooter made in godot 4.6 about a blue man in a green world, i really poured my soul into it so i hope you like it:)", "repo": "https://github.com/IDoTweaks/the-way-to-teal-just-kill-", "demo": "https://idotweaks.itch.io/the-way-to-tealjust-kill"}, {"ship_num": 2, "ts": "2026-06-21T13:09:47Z", "hours": 25.0, "multiplier": 18.23, "payout": 464, "blessing": "neutral", "text": "i made a speedrunning game inspired by a song, i will add more bosses and levels but now its in a state i very much like because this is my first game that i actually like i focused on the game feel way more than the looks and it shows its so fun i made a ghost system without any tutorial something i could never dream of this project let me see that i can build things on my own also i am aiming for a 3d printer so i need like 3x the hours so expect updates!", "repo": "https://github.com/IDoTweaks/the-way-to-teal-just-kill-", "demo": "https://idotweaks.itch.io/the-way-to-tealjust-kill"}]...
|
[{"post_id": 31312, "ts": "202 [{"post_id": 31312, "ts": "2026-07-19T16:42:06Z", "hours": 4.2094, "text": "DEVLOG 18 - ig we got a lot of art now new things in the game so pretty much all i did was new ui, make the game fit into a cartoon art style and some cover art for it new itch.io page the itch.io page sucked so i made it again and its so much better now check it out so as always the downloadable version is much better but there is still web support try it out: https://idotweaks.itch.io/the-way-to-tealjust-kill AND I LEFT SOME OF THE ART HERE SO YOU CAN SEE"}, {"post_id": 30937, "ts": "2026-07-18T22:54:39Z", "hours": 8.4639, "text": "DEVLOG 17 - i cant stop working on this last devlog i said i am done with the game but after those reviews i just cant stop key insights from the reviews so the main complains are that the game isnt visually appealing in some devices it ran poorly some mechanics arent clear/ need better tutorial the sfx are annoying (also there were some balancing issues and little bugs) i still got a little less than 19 per hour meaning people really did like it and it needs little changes so what did i change? i changed the tutorial to MAKE you do each mechanic and added a ghost that shows you how to do it new sfx i changed all the art style to be cartoonist i buffed the shotgun i did so much more but its so little that i cant point to each one so lets just say qol changes planning next i have already made 2 mini bosses and currently am working on some more enemy types, i will change the current levels to be the story mode with added story and dialogue and add a completly new mode which i will talk about in later devlogs"}, {"post_id": 28633, "ts": "2026-07-15T00:29:18Z", "hours": 1.1447, "text": "mini DEVLOG 16 - da final straw important if you rate it please download it, the web version is much much worse new levels added levels 7-9 unfortunate losses: sadly the styling system was very bad and i couldnt make it work so i just took it out something i had to add you could cheese everything with the dashes so im sorry… i added stamina da end so yeah i wont work on this project anymore prob but i am starting my own asm docs! be sure to stay updated!"}, {"post_id": 28494, "ts": "2026-07-14T19:34:05Z", "hours": 5.3678, "text": "DEVLOG 15 - boss redesign boss update the boss now attacks with a couple of new attacks! you can see them in the video AND a new paralysis system da cool af part so the boss now takes you to his office where he will offer you a deal: for 20% of your health you can get your paralysis level down! ui update so it looks better now, thats it XD UPDATE! so it is now updated in both github and itch.io but its very bad in the web versionT_T please just download itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill github: https://github.com/IDoTweaks/the-way-to-teal-just-kill-/releases/tag/NEWEST video btw the video was compressed and then converted so its low quality"}, {"post_id": 26518, "ts": "2026-07-11T11:21:23Z", "hours": 5.4061, "text": "DEVLOG 14 - the project is super star! boss update the current boss is very lazy in design so i decided to change it completely! with a snake boss, what i did is create a self generating floor and a snake with custom pathfinding boring technical stuff the floor has a function that does holes in it and makes sure the snake cannot get soft locked(since it cant pass through its own body) then the snake turns its positon + the player’s position into a tile in the map and using breadth first search from the head’s tile to the player’s tile it finds the next tile it needs to travel to this sounds so simple why did it take 5 hours? the reason is that this mf floor does not like generating how i want it to and i am very bad at algorithms so i had to try again and again and again and then i had to do the same thing with the snake because i havnt touched bfs in like 1.5 years THANKS FOR THE SUPER STAR as you can see while i was on vacation this project got a super star! i am very grateful for it! when will it be in the game? as you can see in the video it just follows the player right now, it has no attacks or something like it so i hope i can get it done by the end of this week(its saturday now so by next saturday) and it isnt wired into the game yet so its still just the old boss"}, {"post_id": 17327, "ts": "2026-06-28T02:11:05Z", "hours": 11.3172, "text": "DEVLOG 13 - UPDATE 1.1! this is a large update 1.1 basically doubles the size of the game and makes it actually feel good to play heres everything: enemies/combat added 4 new enemy types: the charger (rushes you and dashes), the drone (flies around and shoots), the exploder (runs at you and goes boom), and the sniper (snipes. very creative ik) added a sniper weapon for the player too shotgun and sniper now play a little reload animation between shots the new style system grading is no longer based on time insted its based on a style meter that is affected by cool things like no scoping in the air your final grade now mixes score + style + your final health ranking up the meter pops and flashes like super cool game feel hit-stop on kills(like a tiny freeze frame) FOV widens when you’re moving fast and stuff like that low health throws up a red vignette and getting hit shows an arrow pointing at whoever hit you combo kills rise in pitch the longer chain camera rolls when you strafe and dips when you land levels redesigned level 1 from scratch added levels 2 through 6 added a proper boss fight at the end added a tutorial UI + quality of life completely new UI that looks 10x better weapon indicator in the side added sound effects and music pause menu, switching weapons with the scroll wheel, on screen enemy counter settings menu for sensitivity, fov, volume, resolution, etc progress (and your best-run ghosts) now save locally web version web version is now fixed BUT its still a desktop game so its worse download github release: https://github.com/IDoTweaks/the-way-to-teal-just-kill-/releases/tag/NEWEST itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill yeah thats it now go kill stuff"}, {"post_id": 13096, "ts": "2026-06-21T13:00:34Z", "hours": 2.7217, "text": "DEVLOG - 12 shipping soon notes if a reviewer sees this: i got a report about some web problems which did not happen to me, if you see the textures as too dark tho try downloading it i was not able to test the mac version as well changes i made a readme for the github added a text of damage done above enemies added a mage type enemy that shoots projectiles SHIPPING after this im shipping this so make sure to look at my github + itch.io github: https://github.com/IDoTweaks/the-way-to-teal-just-kill- itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill"}, {"post_id": 12239, "ts": "2026-06-19T23:54:55Z", "hours": 4.3089, "text": "DEVLOG - 11 (THE GAME IS ALMOST COMPLETE) + WINNER ANNOUNCEMENT so in the competition the only person that submitted a score was in the comments and late but he is now the winner:) @Connor you won! i will add you to the game soon major things i added: a ghost of your best run that plays back (if anyone is wondering i spent like an hour making it record every input with a timestamp and the WAY easier approach i ended up using is just saving the position + rotation + weapon used every frame (if animations were important to me i would have added them its not that hard) ground slam that does damage to enemies a jump orb to make levels feel less slow minor things i added: a health bar fixed enemies to know attack with a cooldown added a death screen now the enemies have black hands because animating csg shapes is expensive the state of the game now the game now is in what i feel full technicality ready the only things needed are: more levels, bosses, more enemies, more obstacles and interesting things in general and maybe a 3rd gun but other than that its basically ready so dont forget to playtest and lmk DOWNLOAD itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill side note:D also im the developer of the game so its not that hard for me to get s+ and im sure you can too so just spam ground slam its op(expect a patch soon🫣🫣🫣)so here is a clip of me getting s+ plus you can see the ghost after"}, {"post_id": 11305, "ts": "2026-06-18T14:29:13Z", "hours": 0.5894, "text": "THE TOURNAMENT IS STARTING NOW! as you can see in the last devlog the tournament said in it is starting right now! explanation this is a speedrunning competition in my 1 level demo game(very early in development) in that game you cant even die yet so go wild rules the clips must be unedited(unless you add like an edit of lebron and then its fine) submissions end when this post reaches 24 hours/2:30 pm utc and will be sent directly to me on slack/discord(which you can find in my bio) exploits are allowed! runs can only be in the current build in itch.io -runs that are on linux/windows must not use the web version because its super bad changes this version press r to restart + finished the end gui + fixed some score calculation bugs controls: wasd + space - normal movement ngl ctrl - slide lmb - shoot(with shotgun you get knockback btw) shift - dash 1/2 - switch weapons r - restart winner the winner will be the one with highest score by the end of the 24 hours/2:30 pm utc or the first person to reach a perfect score and he will win being inside the game + in the next devlog itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill now for the general stuff my discord: swiftfishi3 my slack: loveTheGodotDeveloper (if there will be any edits i will put them here) for now take a look at my fastest run(you have to wait a bit and its mid development)- runs can only be in the current build in itch.io like and repost so more people see it:D"}, {"post_id": 10797, "ts": "2026-06-17T18:26:42Z", "hours": 2.7661, "text": "DEVLOG - 10 this is a large milestone! COMPETITION ANNOUNCEMENT AT THE END i updated the map textures to a retro-ish style and updated the bullet holes and steps to look much better too! i added a timer and score with a grading system that allows for better speedrunning! i added a custom finish level orb with a custom shader that makes it look super cool look at this gameplay it looks like a real game! now the competition: so the competition will start in the next devlog because i plan to add a restart button to make it easier to speedrun and more now THE WINNER AND PRIZE: the winner will be the person that will get the highest score in 24 hours after the devlog is posted or the first person to get a perfect score of 20k(which is very hard gl) and the prize will be (imagine a drum roll) yeah you will just be on a wall or something its not that huge i will also write about you in the next devlog if thats important to you CLARIFICATIONS BECAUSE CLAUDE SAID THIS DEVLOG IS SHIT: 1.the competition will not be in the current build and will be submitted directly to me through slack/discord with the name you have in stardance 2.the prize is shit idk why claude treats it like i should try to deceive you into thinking its good, its bad i promise 3.if someone sends me they got a 20k score it will end idk whats confusing about it anyway only like 3 people will submit probably itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill (textures in web version are bugged please download!) if you have anything to say about this devlog you may comment it and i will ignore it(unless its a real question) anyway look at this clippp its happening now look at next devlog!"}, {"post_id": 10574, "ts": "2026-06-17T11:42:16Z", "hours": 1.5328, "text": "DEVLOG - 09 i added a shotgun! the shotgun has a large cooldown + it applies force on you! + itch.io update IF YOU DONT CARE ABOUT THE TECHNICAL STUFF WATCH THE VIDEO DOWN HERE TO JUST SEE THE COOL SHOTGUN it was much easier to implement because all i did was add a bunch of raycasts and randomize them with this simple code: func randomizeRays(): var i : int = 0 for ray in children: if ray is RayCast3D: ray.target_position.x = orgPos[i] + randf_range(-spread,spread) i+=1 ray.target_position.y = orgPos[i] + randf_range(-spread,spread) i+=1 the actual hard part was getting both guns to work with eachother but i managed to do that the force function was also interesting because i use a chartacterbody3d in godot i have to make this stuff myself with basically only velocity so the code is pretty easy to understand i dont think i need to explain much func _applyForce(point :Vector3,force , maxRange:float = 10): var dir = global_position - point var dist = dir.length() if dist > maxRange: return dir = dir.normalized() var fallOff = clamp(1 - (dist/ maxRange),0,1) velocity += dir * force * fallOff knockbackTimer = KNOCKBACK_LOCK_TIME also the game is now updated and free on itch.io! link: https://idotweaks.itch.io/the-way-to-tealjust-kill (please download it its much better than the web version because i cant solve some web specific bugs)"}, {"post_id": 9462, "ts": "2026-06-15T20:27:16Z", "hours": 1.6878, "text": "DEVLOG - 08 added an interesting navigation optimization script i encountered some lag even with 4 enemies so sadly i had to optimize it on the bright side i saw yesterday a video about exactly that and omfg it saved me and explains the general idea of what i do its just that i do it worse and in a different way video: https://www.youtube.com/watch?v=BPNr_txi6TU&t=813s time 33(already in link) how it works? ok so its not the MOST OPTIMAL but it is good i mean i can every time an enemy die to resort it blah blah blah and use the modulo but this works good enough even though i spent half an hour fixing a bug that doesnt exist(turns out if you select a navigation region and bake navigation mesh it does that to all regions and not just the one you selected) but for some reason i did have to use a raycast down the enemy’s feet for it to work so they wont fall probably because of friction so anyways here is the code: extends Node3D var tickAssigned = [] var tickCount = [] var currentTick = 0; var tickTimer = 0.0 const TICK_RATE = 0.025 func _ready() -> void: tickAssigned.resize(navObjects.size()) tickAssigned.fill(0) tickCount.resize(20); tickCount.fill(0) var length = navObjects.size() for i in tickAssigned.size(): tickAssigned[i] = -1 var num = 20.0 /length var current = 0.0 for i in length: if current >= 20: current -= 20 tickAssigned[i] = int(current) tickCount[int(current)]+=1 current += num``` # Called every frame. 'delta' is the elapsed time since the previous frame. ```func _process(delta: float) -> void: tickTimer +=delta if tickTimer < TICK_RATE: return tickTimer = 0.0 var tickDelta = TICK_RATE var count = 0 for entity in navObjects: if entity != null: if tickAssigned[count] == currentTick: var target = entity.target if target != null: var navAgent = entity.navAgent var mode = entity.mode var gotShot = entity.gotShot var SPEED = entity.SPEED var accelaration = entity.accelaration var velocity = entity.velocity if mode == \"chase\" or gotShot: navAgent.target_position = Vector3(target.global_position.x,target.global_position.y,target.global_position.z) var dir = (navAgent.get_next_path_position() - entity.global_position).normalized() print(entity.name, navAgent.get_next_path_position()) entity.velocity = velocity.lerp(dir * SPEED, tickDelta * accelaration) entity.look_at(Vector3(target.global_position.x,entity.global_position.y,target.global_position.z),Vector3.UP,true) entity.shouldMove = true elif mode == \"attack\": navAgent.target_position = Vector3(target.global_position.x,target.global_position.y,target.global_position.z) var dir = (navAgent.get_next_path_position() - entity.global_position).normalized() print(entity.name, navAgent.get_next_path_position()) entity.velocity = velocity.lerp(dir * SPEED, tickDelta * accelaration) entity.look_at(Vector3(target.global_position.x,entity.global_position.y,target.global_position.z),Vector3.UP,true) entity.shouldMove = true count+=1 currentTick +=1 if currentTick >= 20: currentTick = 0 #@onready var body =$body #@onready var explosionParticles = preload(\"res://Particles/enemyExplode.tscn\") #var particleInstance #@export var navAgent : NavigationAgent3D #@export var damage = 10 #@export var accelaration = 10 #var target #var mode : String = \"idle\" #var gotShot = false``` and the enemy code is too long so i cant put it here also here is a clip of the current state of the game"}, {"post_id": 9354, "ts": "2026-06-15T18:10:19Z", "hours": 2.9417, "text": "DEVLOG - 07 added vertical dash wall jumping and started with the tutorial level today i wanted to design the first level so i looked up what good level builders there are and saw trenchbroom and after like an hour of trying to make it work on fedora i gave up and tried something called cyclops but it doesnt support my current godot version so i spent MORE TIME diving into its code because there was only 1 small error(or so i thought) which i managed to fix but then every like 3 minutes of using it it just crashed so i guess im sticking with normal godot AND it took me like 20 versions and about 5 commits that i thought i fixed it to get to a working version of the 4 line code that lets me dash vertically but setting it up based on camera lets you dash up and gain insane momentum instantly so i tried a system of my own which calculated you vertical velocity using your horizontal one and tried a bunch of formulas and ended up with this fine version so the wall jumping was very easy to do because i just reflect the current movement and add a boost the hard part was that every time before hitting the wall i would already switch in my keyboard to the other other direction so to deal with that i “predicted the future” like i did with the slopes so that the movement feels smoother but to deal with the problem of the keyboard switching i also checked for the opposite directions(which is bassicly copy paste with minuses)so here is the code for that: if is_on_floor(): canWallJump = false return var veloc = Vector3(velocity.x,velocity.y,velocity.z) #var future = self.global_position + veloc for i in get_slide_collision_count(): var collision = get_slide_collision(i) if collision.get_normal().y < .3: wallNormal = collision.get_normal() canWallJump = true return if veloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + veloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return var altVeloc = Vector3(-velocity.x,velocity.y,velocity.z) if altVeloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + altVeloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return altVeloc = Vector3(velocity.x,velocity.y,-velocity.z) if altVeloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + altVeloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return canWallJump = false``` anyway here is a clip of the tutorial level now(compressed cause it was somehow 155mb): **NOTE**: it will be updated on itch.io after i finish making this tutorial level im just a little tired today and couldnt work on the project yesterday so i uploaded this devlog early"}, {"post_id": 8257, "ts": "2026-06-13T18:56:58Z", "hours": 1.4006, "text": "DEVLOG - 06 added a main menu! now as you can see THERE IS A MAIN MENU and it doesnt work very good on linux but my eye hurts so thats a problem for tommorow and let me know how it is on windows itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill"}, {"post_id": 8086, "ts": "2026-06-13T14:35:14Z", "hours": 2.2019, "text": "DEVLOG - 05 (it should’ve taken like 30 minutes wth) i added enemies that chase you and animations to your movements the animations were the easy part… but can someone tell me why godot uses the exact same shader to all of my models? so it took me like 50 god damn minutes to realise i need to just duplicate it and then i had a typo and i thought duplicating it doesnt work because of that so i gave up and sent it to chatgpt AND THEN I WAS RIGHT I DO NEED TO DUPLICATE IT anyways here is a clip of the game now and you have to like it ALSO SPECIAL THANKS TO CONNOR - thank him he is the reason the downloads now work in itch.io at least thats what i hope because if they dont idfk what to do itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill"}, {"post_id": 7998, "ts": "2026-06-13T10:48:12Z", "hours": 1.0583, "text": "DEVLOG - 04 HUGE MILESTONE movement is now finished with all new momentum logic and added dashing wait… why wont you just see for your selves? try out the movement in the link here and tell me if you like it:) https://idotweaks.itch.io/the-way-to-tealjust-kill note: i added downloadable versions and a web version the game is generally for windows/linux(i am on linux so i kinda have to XD) so i will not be fixing any only web only bugs anyways i have to put an image here so watch my first attempt of a crosshairT_T"}, {"post_id": 7964, "ts": "2026-06-13T09:10:34Z", "hours": 0.4461, "text": "mini devlog - 03.5 i wanted some art to the game so i made this banner it isnt proffesional at all and took me a damn hour for something thats kinda bad but this is what i cam up with i hope you like it (if you are interested in the project go check out my profile:)"}, {"post_id": 7754, "ts": "2026-06-12T23:03:36Z", "hours": 0.6658, "text": "DEVLOG - 03 added enemies that turn teal with time read devlog 00 to understand the game:) for this game i didnt want a boring health bar what i wanted was a visual indicator and well the green enemies are the health bar now you can see easily how much health they have as you can see in the video its a simple use of shaders and its my first time! I REALLY HATE THOSE but it works also look at those particles(i<3particles) –please like if you liked it and comment suggestions it really makes me feel better and improve the game"}, {"post_id": 7503, "ts": "2026-06-12T14:46:54Z", "hours": 1.8969, "text": "DEVLOG - 02 (still day one of the project i just do a lot:) IF YOU DONT KNOW WHAT THE GAME IS ABOUT GO TO DEVLOG - 00 added teal footsteps and teal bullet holes to emphasize the mix of blue and green it was implemented using decals which it is the first time i use them so they arent the greatest as you may have noticed i also added a gun with a simple animation+particles and a raycast currently it has nothing to shoot at but i might fix it soon… so the basics are done but i do need to add movement like double jump because after all it is a movement shooter and figure out how i can copy ultrakill’s movement so my game doesnt feel so “slow” next devlog will probably be today againT_T i just cant stop working on itttt"}, {"post_id": 7442, "ts": "2026-06-12T12:05:00Z", "hours": 0.9031, "text": "DEVLOG - 01 – how the way to teal(just kill) calculates sliding i added sliding and right now it isnt as smooth and polished as it might be at the end but i came up with a method that works quite well and im certain i will use it until the end how it works : if you are sliding a script checks what will be your position if you will continue in your current motion without changing the y if you wont be on the ground it means you will probably be on a slope how do we know how “sloppy”(hehe just like the game) it is? we shoot a raycast starting at the player’s feet down about 5 units(you may do whatever number you like) afterwards we check the position in which the raycast intersected with the floor and use it to calculate the force/boost we will give the player using that i can calculate everything i need to slide the player note :if you end up using it check my github because in the code you will need to adjust some things like more downward force in order for the player to not fly anyway here is a clip of it in action the game is in a newborn stage so no judging! –CODE TIME– (I NEVER USE COMMENTS BE GRATEFUL) #calculate the position in the future var horizontalVel = Vector3(velocity.x,0,velocity.z) var future = feet.global_position + horizontalVel #raycast prep var spaceState = get_world_3d().direct_space_state #starting above the future pos in case of upward slopes var rayStart = future + Vector3(0,1,0) var rayEnd = future + Vector3(0,-5,0) #setUp rayCast var rayQuery = PhysicsRayQueryParameters3D.create(rayStart,rayEnd) #so we dont hit ourselves xd rayQuery.exclude = [self.get_rid()] #now lets shoot this bad boyyy var intersect = spaceState.intersect_ray(rayQuery) #results time!!!! if intersect: #we want to return the distance from now to the future return feet.global_position.y - intersect.position.y else: #if it hits nothing we are fucking flying lets return so fucking much return 0```"}, {"post_id": 7416, "ts": "2026-06-12T10:55:30Z", "hours": 0.325, "text": "devlog - 00 today i thought about the idea of the game it will be inspired by a song i heard as a kid of a green man in a green world and he encounters a blue man “from a whole different story” the story is that you are a blue man who is sick from the inequality so you go to a mission killing all the green top % to get to a teal world from which comes the name: the way to teal(just kill) it will be a movement shooter made in godot i will try to create the assets myself but i might end up using some free models for now we will just use this bean with hands"}]...
|
Title: the way to teal(just kill) by @love | Stard Title: the way to teal(just kill) by @love | Stardance
Devlogs:
devlog - 00 today i thought about the idea of the game it will be inspired by a song i heard as a kid of a green man in a green world and he encounters a blue man “from a whole different story” the story is that you are a blue man who is sick from the inequality so you go to a mission killing all the green top % to get to a teal world from which comes the name: the way to teal(just kill) it will be a movement shooter made in godot i will try to create the assets myself but i might end up using some free models for now we will just use this bean with hands
DEVLOG - 01 – how the way to teal(just kill) calculates sliding i added sliding and right now it isnt as smooth and polished as it might be at the end but i came up with a method that works quite well and im certain i will use it until the end how it works : if you are sliding a script checks what will be your position if you will continue in your current motion without changing the y if you wont be on the ground it means you will probably be on a slope how do we know how “sloppy”(hehe just like the game) it is? we shoot a raycast starting at the player’s feet down about 5 units(you may do whatever number you like) afterwards we check the position in which the raycast intersected with the floor and use it to calculate the force/boost we will give the player using that i can calculate everything i need to slide the player note :if you end up using it check my github because in the code you will need to adjust some things like more downward force in order for the player to not fly anyway here is a clip of it in action the game is in a newborn stage so no judging! –CODE TIME– (I NEVER USE COMMENTS BE GRATEFUL) #calculate the position in the future var horizontalVel = Vector3(velocity.x,0,velocity.z) var future = feet.global_position + horizontalVel #raycast prep var spaceState = get_world_3d().direct_space_state #starting above the future pos in case of upward slopes var rayStart = future + Vector3(0,1,0) var rayEnd = future + Vector3(0,-5,0) #setUp rayCast var rayQuery = PhysicsRayQueryParameters3D.create(rayStart,rayEnd) #so we dont hit ourselves xd rayQuery.exclude = [self.get_rid()] #now lets shoot this bad boyyy var intersect = spaceState.intersect_ray(rayQuery) #results time!!!! if intersect: #we want to return the distance from now to the future return feet.global_position.y - intersect.position.y else: #if it hits nothing we are fucking flying lets return so fucking much return 0```
DEVLOG - 02 (still day one of the project i just do a lot:) IF YOU DONT KNOW WHAT THE GAME IS ABOUT GO TO DEVLOG - 00 added teal footsteps and teal bullet holes to emphasize the mix of blue and green it was implemented using decals which it is the first time i use them so they arent the greatest as you may have noticed i also added a gun with a simple animation+particles and a raycast currently it has nothing to shoot at but i might fix it soon… so the basics are done but i do need to add movement like double jump because after all it is a movement shooter and figure out how i can copy ultrakill’s movement so my game doesnt feel so “slow” next devlog will probably be today againT_T i just cant stop working on itttt
DEVLOG - 03 added enemies that turn teal with time read devlog 00 to understand the game:) for this game i didnt want a boring health bar what i wanted was a visual indicator and well the green enemies are the health bar now you can see easily how much health they have as you can see in the video its a simple use of shaders and its my first time! I REALLY HATE THOSE but it works also look at those particles(i<3particles) –please like if you liked it and comment suggestions it really makes me feel better and improve the game
mini devlog - 03.5 i wanted some art to the game so i made this banner it isnt proffesional at all and took me a damn hour for something thats kinda bad but this is what i cam up with i hope you like it (if you are interested in the project go check out my profile:)
DEVLOG - 04 HUGE MILESTONE movement is now finished with all new momentum logic and added dashing wait… why wont you just see for your selves? try out the movement in the link here and tell me if you like it:) https://idotweaks.itch.io/the-way-to-tealjust-kill note: i added downloadable versions and a web version the game is generally for windows/linux(i am on linux so i kinda have to XD) so i will not be fixing any only web only bugs anyways i have to put an image here so watch my first attempt of a crosshairT_T
DEVLOG - 05 (it should’ve taken like 30 minutes wth) i added enemies that chase you and animations to your movements the animations were the easy part… but can someone tell me why godot uses the exact same shader to all of my models? so it took me like 50 god damn minutes to realise i need to just duplicate it and then i had a typo and i thought duplicating it doesnt work because of that so i gave up and sent it to chatgpt AND THEN I WAS RIGHT I DO NEED TO DUPLICATE IT anyways here is a clip of the game now and you have to like it ALSO SPECIAL THANKS TO CONNOR - thank him he is the reason the downloads now work in itch.io at least thats what i hope because if they dont idfk what to do itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill
DEVLOG - 06 added a main menu! now as you can see THERE IS A MAIN MENU and it doesnt work very good on linux but my eye hurts so thats a problem for tommorow and let me know how it is on windows itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill
DEVLOG - 07 added vertical dash wall jumping and started with the tutorial level today i wanted to design the first level so i looked up what good level builders there are and saw trenchbroom and after like an hour of trying to make it work on fedora i gave up and tried something called cyclops but it doesnt support my current godot version so i spent MORE TIME diving into its code because there was only 1 small error(or so i thought) which i managed to fix but then every like 3 minutes of using it it just crashed so i guess im sticking with normal godot AND it took me like 20 versions and about 5 commits that i thought i fixed it to get to a working version of the 4 line code that lets me dash vertically but setting it up based on camera lets you dash up and gain insane momentum instantly so i tried a system of my own which calculated you vertical velocity using your horizontal one and tried a bunch of formulas and ended up with this fine version so the wall jumping was very easy to do because i just reflect the current movement and add a boost the hard part was that every time before hitting the wall i would already switch in my keyboard to the other other direction so to deal with that i “predicted the future” like i did with the slopes so that the movement feels smoother but to deal with the problem of the keyboard switching i also checked for the opposite directions(which is bassicly copy paste with minuses)so here is the code for that: if is_on_floor(): canWallJump = false return var veloc = Vector3(velocity.x,velocity.y,velocity.z) #var future = self.global_position + veloc for i in get_slide_collision_count(): var collision = get_slide_collision(i) if collision.get_normal().y < .3: wallNormal = collision.get_normal() canWallJump = true return if veloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + veloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return var altVeloc = Vector3(-velocity.x,velocity.y,velocity.z) if altVeloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + altVeloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return altVeloc = Vector3(velocity.x,velocity.y,-velocity.z) if altVeloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + altVeloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return canWallJump = false``` anyway here is a clip of the tutorial level now(compressed cause it was somehow 155mb): **NOTE**: it will be updated on itch.io after i finish making this tutorial level im just a little tired today and couldnt work on the project yesterday so i uploaded this devlog early
DEVLOG - 08 added an interesting navigation optimization script i encountered some lag even with 4 enemies so sadly i had to optimize it on the bright side i saw yesterday a video about exactly that and omfg it saved me and explains the general idea of what i do its just that i do it worse and in a different way video: https://www.youtube.com/watch?v=BPNr_txi6TU&t=813s time 33(already in link) how it works? ok so its not the MOST OPTIMAL but it is good i mean i can every time an enemy die to resort it blah blah blah and use the modulo but this works good enough even though i spent half an hour fixing a bug that doesnt exist(turns out if you select a navigation region and bake navigation mesh it does that to all regions and not just the one you selected) but for some reason i did have to use a raycast down the enemy’s feet for it to work so they wont fall probably because of friction so anyways here is the code: extends Node3D var tickAssigned = [] var tickCount = [] var currentTick = 0; var tickTimer = 0.0 const TICK_RATE = 0.025 func _ready() -> void: tickAssigned.resize(navObjects.size()) tickAssigned.fill(0) tickCount.resize(20); tickCount.fill(0) var length = navObjects.size() for i in tickAssigned.size(): tickAssigned[i] = -1 var num = 20.0 /length var current = 0.0 for i in length: if current >= 20: current -= 20 tickAssigned[i] = int(current) tickCount[int(current)]+=1 current += num``` # Called every frame. 'delta' is the elapsed time since the previous frame. ```func _process(delta: float) -> void: tickTimer +=delta if tickTimer < TICK_RATE: return tickTimer = 0.0 var tickDelta = TICK_RATE var count = 0 for entity in navObjects: if entity != null: if tickAssigned[count] == currentTick: var target = entity.target if target != null: var navAgent = entity.navAgent var mode = entity.mode var gotShot = entity.gotShot var SPEED = entity.SPEED var accelaration = entity.accelaration var velocity = entity.velocity if mode == "chase" or gotShot: navAgent.target_position = Vector3(target.global_position.x,target.global_position.y,target.global_position.z) var dir = (navAgent.get_next_path_position() - entity.global_position).normalized() print(entity.name, navAgent.get_next_path_position()) entity.velocity = velocity.lerp(dir * SPEED, tickDelta * accelaration) entity.look_at(Vector3(target.global_position.x,entity.global_position.y,target.global_position.z),Vector3.UP,true) entity.shouldMove = true elif mode == "attack": navAgent.target_position = Vector3(target.global_position.x,target.global_position.y,target.global_position.z) var dir = (navAgent.get_next_path_position() - entity.global_position).normalized() print(entity.name, navAgent.get_next_path_position()) entity.velocity = velocity.lerp(dir * SPEED, tickDelta * accelaration) entity.look_at(Vector3(target.global_position.x,entity.global_position.y,target.global_position.z),Vector3.UP,true) entity.shouldMove = true count+=1 currentTick +=1 if currentTick >= 20: currentTick = 0 #@onready var body =$body #@onready var explosionParticles = preload("res://Particles/enemyExplode.tscn") #var particleInstance #@export var navAgent : NavigationAgent3D #@export var damage = 10 #@export var accelaration = 10 #var target #var mode : String = "idle" #var gotShot = false``` and the enemy code is too long so i cant put it here also here is a clip of the current state of the game
DEVLOG - 09 i added a shotgun! the shotgun has a large cooldown + it applies force on you! + itch.io update IF YOU DONT CARE ABOUT THE TECHNICAL STUFF WATCH THE VIDEO DOWN HERE TO JUST SEE THE COOL SHOTGUN it was much easier to implement because all i did was add a bunch of raycasts and randomize them with this simple code: func randomizeRays(): var i : int = 0 for ray in children: if ray is RayCast3D: ray.target_position.x = orgPos[i] + randf_range(-spread,spread) i+=1 ray.target_position.y = orgPos[i] + randf_range(-spread,spread) i+=1 the actual hard part was getting both guns to work with eachother but i managed to do that the force function was also interesting because i use a chartacterbody3d in godot i have to make this stuff myself with basically only velocity so the code is pretty easy to understand i dont think i need to explain much func _applyForce(point :Vector3,force , maxRange:float = 10): var dir = global_position - point var dist = dir.length() if dist > maxRange: return dir = dir.normalized() var fallOff = clamp(1 - (dist/ maxRange),0,1) velocity += dir * force * fallOff knockbackTimer = KNOCKBACK_LOCK_TIME also the game is now updated and free on itch.io! link: https://idotweaks.itch.io/the-way-to-tealjust-kill (please download it its much better than the web version because i cant solve some web specific bugs)
DEVLOG - 10 this is a large milestone! COMPETITION ANNOUNCEMENT AT THE END i updated the map textures to a retro-ish style and updated the bullet holes and steps to look much better too! i added a timer and score with a grading system that allows for better speedrunning! i added a custom finish level orb with a custom shader that makes it look super cool look at this gameplay it looks like a real game! now the competition: so the competition will start in the next devlog because i plan to add a restart button to make it easier to speedrun and more now THE WINNER AND PRIZE: the winner will be the person that will get the highest score in 24 hours after the devlog is posted or the first person to get a perfect score of 20k(which is very hard gl) and the prize will be (imagine a drum roll) yeah you will just be on a wall or something its not that huge i will also write about you in the next devlog if thats important to you CLARIFICATIONS BECAUSE CLAUDE SAID THIS DEVLOG IS SHIT: 1.the competition will not be in the current build and will be submitted directly to me through slack/discord with the name you have in stardance 2.the prize is shit idk why claude treats it like i should try to deceive you into thinking its good, its bad i promise 3.if someone sends me they got a 20k score it will end idk whats confusing about it anyway only like 3 people will submit probably itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill (textures in web version are bugged please download!) if you have anything to say about this devlog you may comment it and i will ignore it(unless its a real question) anyway look at this clippp its happening now look at next devlog!
THE TOURNAMENT IS STARTING NOW! as you can see in the last devlog the tournament said in it is starting right now! explanation this is a speedrunning competition in my 1 level demo game(very early in development) in that game you cant even die yet so go wild rules the clips must be unedited(unless you add like an edit of lebron and then its fine) submissions end when this post reaches 24 hours/2:30 pm utc and will be sent directly to me on slack/discord(which you can find in my bio) exploits are allowed! runs can only be in the current build in itch.io -runs that are on linux/windows must not use the web version because its super bad changes this version press r to restart + finished the end gui + fixed some score calculation bugs controls: wasd + space - normal movement ngl ctrl - slide lmb - shoot(with shotgun you get knockback btw) shift - dash 1/2 - switch weapons r - restart winner the winner will be the one with highest score by the end of the 24 hours/2:30 pm utc or the first person to reach a perfect score and he will win being inside the game + in the next devlog itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill now for the general stuff my discord: swiftfishi3 my slack: loveTheGodotDeveloper (if there will be any edits i will put them here) for now take a look at my fastest run(you have to wait a bit and its mid development)- runs can only be in the current build in itch.io like and repost so more people see it:D
DEVLOG - 11 (THE GAME IS ALMOST COMPLETE) + WINNER ANNOUNCEMENT so in the competition the only person that submitted a score was in the comments and late but he is now the winner:) @Connor you won! i will add you to the game soon major things i added: a ghost of your best run that plays back (if anyone is wondering i spent like an hour making it record every input with a timestamp and the WAY easier approach i ended up using is just saving the position + rotation + weapon used every frame (if animations were important to me i would have added them its not that hard) ground slam that does damage to enemies a jump orb to make levels feel less slow minor things i added: a health bar fixed enemies to know attack with a cooldown added a death screen now the enemies have black hands because animating csg shapes is expensive the state of the game now the game now is in what i feel full technicality ready the only things needed are: more levels, bosses, more enemies, more obstacles and interesting things in general and maybe a 3rd gun but other than that its basically ready so dont forget to playtest and lmk DOWNLOAD itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill side note:D also im the developer of the game so its not that hard for me to get s+ and im sure you can too so just spam ground slam its op(expect a patch soon🫣🫣🫣)so here is a clip of me getting s+ plus you can see the ghost after
DEVLOG - 12 shipping soon notes if a reviewer sees this: i got a report about some web problems which did not happen to me, if you see the textures as too dark tho try downloading it i was not able to test the mac version as well changes i made a readme for the github added a text of damage done above enemies added a mage type enemy that shoots projectiles SHIPPING after this im shipping this so make sure to look at my github + itch.io github: https://github.com/IDoTweaks/the-way-to-teal-just-kill- itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill
DEVLOG 13 - UPDATE 1.1! this is a large update 1.1 basically doubles the size of the game and makes it actually feel good to play heres everything: enemies/combat added 4 new enemy types: the charger (rushes you and dashes), the drone (flies around and shoots), the exploder (runs at you and goes boom), and the sniper (snipes. very creative ik) added a sniper weapon for the player too shotgun and sniper now play a little reload animation between shots the new style system grading is no longer based on time insted its based on a style meter that is affected by cool things like no scoping in the air your final grade now mixes score + style + your final health ranking up the meter pops and flashes like super cool game feel hit-stop on kills(like a tiny freeze frame) FOV widens when you’re moving fast and stuff like that low health throws up a red vignette and getting hit shows an arrow pointing at whoever hit you combo kills rise in pitch the longer chain camera rolls when you strafe and dips when you land levels redesigned level 1 from scratch added levels 2 through 6 added a proper boss fight at the end added a tutorial UI + quality of life completely new UI that looks 10x better weapon indicator in the side added sound effects and music pause menu, switching weapons with the scroll wheel, on screen enemy counter settings menu for sensitivity, fov, volume, resolution, etc progress (and your best-run ghosts) now save locally web version web version is now fixed BUT its still a desktop game so its worse download github release: https://github.com/IDoTweaks/the-way-to-teal-just-kill-/releases/tag/NEWEST itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill yeah thats it now go kill stuff
DEVLOG 14 - the project is super star! boss update the current boss is very lazy in design so i decided to change it completely! with a snake boss, what i did is create a self generating floor and a snake with custom pathfinding boring technical stuff the floor has a function that does holes in it and makes sure the snake cannot get soft locked(since it cant pass through its own body) then the snake turns its positon + the player’s position into a tile in the map and using breadth first search from the head’s tile to the player’s tile it finds the next tile it needs to travel to this sounds so simple why did it take 5 hours? the reason is that this mf floor does not like generating how i want it to and i am very bad at algorithms so i had to try again and again and again and then i had to do the same thing with the snake because i havnt touched bfs in like 1.5 years THANKS FOR THE SUPER STAR as you can see while i was on vacation this project got a super star! i am very grateful for it! when will it be in the game? as you can see in the video it just follows the player right now, it has no attacks or something like it so i hope i can get it done by the end of this week(its saturday now so by next saturday) and it isnt wired into the game yet so its still just the old boss
DEVLOG 15 - boss redesign boss update the boss now attacks with a couple of new attacks! you can see them in the video AND a new paralysis system da cool af part so the boss now takes you to his office where he will offer you a deal: for 20% of your health you can get your paralysis level down! ui update so it looks better now, thats it XD UPDATE! so it is now updated in both github and itch.io but its very bad in the web versionT_T please just download itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill github: https://github.com/IDoTweaks/the-way-to-teal-just-kill-/releases/tag/NEWEST video btw the video was compressed and then converted so its low quality
mini DEVLOG 16 - da final straw important if you rate it please download it, the web version is much much worse new levels added levels 7-9 unfortunate losses: sadly the styling system was very bad and i couldnt make it work so i just took it out something i had to add you could cheese everything with the dashes so im sorry… i added stamina da end so yeah i wont work on this project anymore prob but i am starting my own asm docs! be sure to stay updated!
DEVLOG 17 - i cant stop working on this last devlog i said i am done with the game but after those reviews i just cant stop key insights from the reviews so the main complains are that the game isnt visually appealing in some devices it ran poorly some mechanics arent clear/ need better tutorial the sfx are annoying (also there were some balancing issues and little bugs) i still got a little less than 19 per hour meaning people really did like it and it needs little changes so what did i change? i changed the tutorial to MAKE you do each mechanic and added a ghost that shows you how to do it new sfx i changed all the art style to be cartoonist i buffed the shotgun i did so much more but its so little that i cant point to each one so lets just say qol changes planning next i have already made 2 mini bosses and currently am working on some more enemy types, i will change the current levels to be the story mode with added story and dialogue and add a completly new mode which i will talk about in later devlogs
DEVLOG 18 - ig we got a lot of art now new things in the game so pretty much all i did was new ui, make the game fit into a cartoon art style and some cover art for it new itch.io page the itch.io page sucked so i made it again and its so much better now check it out so as always the downloadable version is much better but there is still web support try it out: https://idotweaks.itch.io/the-way-to-tealjust-kill AND I LEFT SOME OF THE ART HERE SO YOU CAN SEE
Ships:
i made a speedrunning game inspired by a song, i will add more bosses and levels but now its in a state i very much like because this is my first game that i actually like i focused on the game feel way more than the looks and it shows its so fun i made a ghost system without any tutorial something i could never dream of this project let me see that i can build things on my own also i am aiming for a 3d printer so i need like 3x the hours so expect updates!
this is a movement shooter made in godot 4.6 about a blue man in a green world, i really poured my soul into it so i hope you like it:)...
|
1793000990.3584545
|
1793087390.3584545
|
|
52655
|
Sakura Productivity Dashboard by @Rezz | Stardance
|
Rezz
|
1
|
54.8
|
876
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-01T17:59:06Z", "hours": 52.0, "multiplier": 16.9, "payout": 876, "blessing": "neutral", "text": "Sakura Productivity Dashboard!! A Sakura-inspired productivity dashboard built with HTML, CSS & JavaScript. A single dashboard combining To-Do List, Pomodoro timer, weather, and music into one workspace to improve productivity! I started this project as a simple To-Do List, but I kept thinking of things I could add to it until it turned into a full productivity dashboard. The main idea was to have everything I would need while studying in one place: a To-Do List, Pomodoro timer, weather, and music. I also wanted it to actually look nice, because I know I personally wouldn’t want to use a boring productivity app every day. What I Built: :>To-Do List with adding, deleting and completing tasks :>Tasks saved using Local Storage :>25-minute Pomodoro timer :>Weather search using the Open-Meteo API :>Automatic location detection :>Humidity, temperature, wind and weather conditions :>Lo-fi music player :>Play/pause, volume and progress controls :>Animated Sakura petals Making It Easy to Use: I have deployed it on github pages and made sure it works smoothly so anyone can just open and use with no need of a tutorial. I made many changes to make user experience wayy better: :>You can press Enter instead of having to click the buttons every time. :>Tasks stay saved even after refreshing the page. :>The To-Do List scrolls instead of making the whole dashboard keep getting bigger. :>Weather can either be searched manually or found automatically using your location. :>The important information is visible without having to open different pages. :>I kept the layout compact so the whole project can be demonstrated on one screen. The Theme!! The Sakura theme my favourite part of the design. It is the entire reason I made this in the first place. I always imagined an app like this and I will use this theme in the future as well. The falling petals and the tree and the seemingly morning sky looks very nice to me I hope everyone else likes it as well!!! Technical things used and learned! :>DOM manipulation and dynamically creating elements :>Local Storage for persistent data :>Managing application state :>Timers using setInterval() and clearInterval() :>sync JavaScript with async/await :>Fetch API and working with JSON data :>Error handling with try/catch :>Browser Geolocation API :>HTML Audio API and audio controls :>Connecting JavaScript with CSS animations :>Open-Meteo weather API :>Geocoding and reverse geocoding :>Using latitude and longitude :>Browser location permissions :>Working with external API data :>CSS Grid for dashboard layouts :>Flexbox :>Responsive design and media queries :>Scrollable containers and overflow :>Positioning and z-index :>Gradients and transparency :>CSS animations and @keyframes :>Transitions and transforms :>Creating consistent UI components", "repo": "https://github.com/KartikeyaMishra-Ark/Focus-App", "demo": "https://kartikeyamishra-ark.github.io/Focus-App/"}]...
|
[{"post_id": 72592, "ts": "202 [{"post_id": 72592, "ts": "2026-09-23T09:35:19Z", "hours": 2.8031, "text": "Back to this after long! I have added a few features to the to-do list. Added task priorities which can be selected when adding the tasks and can also be edited directly on the task. Also added task filtering for filtering based on task completion and priority. Added similar css to match my theme as everyone loved the theme when i shipped. I plan to add more songs and also add more features to the pomodoro and weather app and then ship the update!"}, {"post_id": 59707, "ts": "2026-09-01T17:10:43Z", "hours": 4.0942, "text": "Final Devlog!! I am finally done with this one! I have polished UI as much as I could. The CSS is a nightmare. I tried to change the entire UI but it broke the entire thing and I kept adding new attributes at the bottom instead to redoing the already existing ones so it became so messed up that I could not tell what was working and what was not. So I just kept adding until everything just worked out and it somehow works and I am not going to touch it. I also tried to make audio play instantly as site opens but failed. The grid in which the main three apps are placed is a nightmare I have made it symmetrical after at least 20 tries. The weather and pomodoro kept fighting each other. I also added the scroll feature to the to do list so whenever too many tasks are added it will just become scrollable. And I removed the scroll bar because it looks bad. With this it is officially over. This project was way out of my league as a beginner. Thanks for reading!!!!!"}, {"post_id": 59216, "ts": "2026-08-31T21:45:43Z", "hours": 8.1783, "text": "I am tired of CSS now. After the last devlog I first redesigned the layout of the music player. Then I decided that my weather app missed an important functionality which was location detection. So I had to learn how to do that and then I also made it so that when the user opens the website it will automatically ask for location. If the user denies it will default to Tokyo. Then I added song progress control and refined the UI of the music player. Then I remade it 5 more times until what we have here. Still not satisfied. I did the. background again to make it look like the sky a little bit. Plain pink looked bad. I am going to make it again. Then started my nightmare. I tried to make my three apps into a dashboard so I created a new div and made it into a grid and then tried to fit all three inside the grid and make it look like it does now. Firstly I had to learn all about how this works and then I had to try it for the first time. The pomodoro and weather kept breaking. All their contents kept spilling out. No matter what I did it was not working. I could not understand what the error was so I wrote new rules at the bottom of the css and due to all that My css is now a 1000 lines long. I am afraid to clean it up because I don’t want it to break. There were so many problems with creating the dashboard. The background was moving when scrolling. The credits are now inside the music player for some reason. When adding the location detector I broke the code and spent 2 hours figuring out what the problem was only for it to be wrong linking of html id of a div. My CSS currently must have at least 4 duplicates of the the Pomo and weather and the dashboard. There is still refinement to do. But it’s almost over. I think this was too much as a second project. Thanks for reading."}, {"post_id": 58257, "ts": "2026-08-30T16:58:14Z", "hours": 1.6878, "text": "Added background music. Selected a few royalty free quality lofi songs from the yt channel Tama’s little music shop. I will credit them in the readme. Adding the music and its basic ui was fairly simple. I just created a div, added two options and linked the music. Added a button to play and an input to set volume. Then added all their functionality in the javascript took very simple functions and It is all working properly. I am going to add a couple more sings maybe but for now All the features I wanted to add are there and I just have to polish the UI properly so it looks like a proper focus dashboard instead of a 4-in-1 project. Thanks for reading!!"}, {"post_id": 57672, "ts": "2026-08-29T21:55:16Z", "hours": 4.9972, "text": "I have finally added petals to the project and boy was it tough. Maybe the most difficult thing I have done in this project. They are still not perfect after hours of making nd remaking. Trying to make different petals, animating their flow in the wind. Making them look like they are falling from the tree. At first I made them look horrendous so I had to design them a bit. They still look not good enough so maybe I will change the look. But the most difficult part was the animation. I must have written the keyframes more than a hundred times because it looks so unnatural every time. I just could not figure out how to make it look natural. But I have now reached a point where I believe it looks decent enough for me to move forward towards the completion of the project and after I have finally added everything I want in there I will polish it and possibly assign an sig to each petal. I am not sure tho. Thank you for reading!!"}, {"post_id": 57142, "ts": "2026-08-29T07:42:42Z", "hours": 1.6889, "text": "Added the sakura tree properly. I tried to make an svg myself but I heavily underestimated the skill requirement to do it. So I gave up and added a free premade sakura tree svg which has been attributed in the bottom of the page as asked by the source website. I have given is -1 z index so it appears properly and gave my cards an alpha value so that I can have transparency as it look pretty. And I have to say sag is some serious stuff. All these vectors were destroying me and I couldn’t do any better than before so I decided I should use this. I hope it is allowed. Going to add the falling petals next. Thanks for reading!! Credit: https://www.vecteezy.com/free-vector/sakura-tree"}, {"post_id": 56866, "ts": "2026-08-28T20:48:06Z", "hours": 3.39, "text": "This is kind of an embarrassing devlog. I have been trying to polish the theme so I decided to add a sakura tree and also reverse the pallets in the background and the cards. Well as you can see the tree looks nothing like it should because what I tried to do was create a few new divs in html for the tree like the trunk, branches and the blossoms. I created individual classes and spans for each and tried to design them in css and I failed miserably as we can see there. I have now found out that in these situations we are supposed to use an svg file to make the tree which is what I am gonna do next. I really regret the past three hours I spent rotating branches to make it look like I wanted to. My vision is to make a tree and then change the background into a sky and have all three of my applications under the tree with petals falling and loft music playing. I hope I can reach there. I genuinely spent so much time in the html and css to make this tree which looks like a brown explosion. Thanks for reading."}, {"post_id": 56714, "ts": "2026-08-28T16:09:04Z", "hours": 1.9969, "text": "No visible changes this time but I added Data persistence finally. I was holding up on it because it was looking too complicated but it was no too bad, took me a couple of hours. Did break my code once when I tried to change my previous functions but then found out that I can just add new ones to do the work instead of modifying the old ones. THAT is something important I learnt. I am going to do devlogs more often as in this project I have posted too less. I tried to add recommendations for search in the weather search but it’s too complicated. Thanks for reading!!"}, {"post_id": 56234, "ts": "2026-08-27T22:14:24Z", "hours": 7.9103, "text": "Added the weather app. I am getting way faster than before. This would have taken me so much time before but this worked out fairly simply. I am more efficient in function building now. I sped through it this time while I struggled with it before. CSS was also way easier as I just copied the theme of my previous two features. Most of the time of spent learning and experimenting with all the new things like Async, Await, JSON data, APIs etc. Of course it was not as smooth sailing as I am saying I of course ran into a lot of problems as a beginner with a weak base and weak concepts but it was way better than before. I am not going to add more features after this. I am going to make it aesthetically pleasing and ship it as I want to try a new project. I still have to add a few more features like a default weather display, search recommendations, revamp of the entire aesthetic, background music and I want to add sakura petals floating on the screen falling from a tree. I have no idea how to do it right now but I will when I finish. Thanks for reading everyone!!"}, {"post_id": 54107, "ts": "2026-08-24T22:13:52Z", "hours": 7.9386, "text": "Finally added the pomodoro. It was more complicated than I thought it would be. I had to learn a lot of how JavaScript processes math. I had to find help to do it because I was unable to make the timer run properly. Sleep deprivation didn’t help as well. I want to make it sakura theme but that is kinds hard cause I don’t know my colour theory. It’s still very hard to add features to this. I cannot think about how I would format this because they are kinda awkward like this. It was fun understanding how to convert seconds into unites and seconds in Javascript and make it display on screen like that. also had to learn about how the interval works I still don’t understand is very properly but I know I how to make it work in this situation. Next up a little bug fixes with the pomodoro and then another feature will be added to this. Thanks for reading!!:>"}, {"post_id": 53162, "ts": "2026-08-23T16:34:11Z", "hours": 5.2589, "text": "Hello everyone! I am done with the to-do list now. It now functions properly. You can add tasks, delete tasks. complete tasks. The javascript for it was very easy to do once I looked back at my previous project but the CSS destroyed me. I have spent so many hours on it. It is so difficult to design it because I don’t have a tutorial to copy the design from. Also damn is everything so difficult. I spend two hours trying everything to figure out how to add different properties to different things which were essentially in the same list because I had appended them from Javascript. After figuring that out. I got into trouble with the delete button. I was using the general button class in CSS not realising that the add task button falls under the same category and was wondering why whenever I add a margin to the delete button the add task button started moving. I eventually figured out I had to add a different class to the delete button which I now realise is so obvious. I added hover animations to everything, click animation to everything. And now everything works perfectly. I do think I should add a better animation to when we complete a task so I will work on it. Oh I forgot one thing. It is so freaking Hard to make a theme from scratch. like I was so lost trying to making everything look good. every text every hover. every button every background it look so long to perfect. thankfully I can select the rep visually instead of having to type it down everytime. Next I am going to work on adding the pomodoro. Let’s see what new things I learn! Thank you for reading!"}, {"post_id": 52132, "ts": "2026-08-22T07:02:31Z", "hours": 4.6989, "text": "Starting development on a to-do app. I believe it’s a good project for a beginner like me. For now I have added just added container, input box, add task button and the task list in the HTML. I have also done the basic CSS styling so it currently looks like the image below. After that I have added the basic function of a todo list in javascript. The button adds the text from the input text box to the test list which exists below. That is all I have done for now. I am not using any tutorials this time I am using the knowledge from the previous project I built. I plan on adding a lot of features to this project. I plan to add pomodoro. Background music. Weather. And a calendar. Let’s see how many I actually am able to add by the end."}]...
|
Title: Sakura Productivity Dashboard by @Rezz | St Title: Sakura Productivity Dashboard by @Rezz | Stardance
Devlogs:
Starting development on a to-do app. I believe it’s a good project for a beginner like me. For now I have added just added container, input box, add task button and the task list in the HTML. I have also done the basic CSS styling so it currently looks like the image below. After that I have added the basic function of a todo list in javascript. The button adds the text from the input text box to the test list which exists below. That is all I have done for now. I am not using any tutorials this time I am using the knowledge from the previous project I built. I plan on adding a lot of features to this project. I plan to add pomodoro. Background music. Weather. And a calendar. Let’s see how many I actually am able to add by the end.
Hello everyone! I am done with the to-do list now. It now functions properly. You can add tasks, delete tasks. complete tasks. The javascript for it was very easy to do once I looked back at my previous project but the CSS destroyed me. I have spent so many hours on it. It is so difficult to design it because I don’t have a tutorial to copy the design from. Also damn is everything so difficult. I spend two hours trying everything to figure out how to add different properties to different things which were essentially in the same list because I had appended them from Javascript. After figuring that out. I got into trouble with the delete button. I was using the general button class in CSS not realising that the add task button falls under the same category and was wondering why whenever I add a margin to the delete button the add task button started moving. I eventually figured out I had to add a different class to the delete button which I now realise is so obvious. I added hover animations to everything, click animation to everything. And now everything works perfectly. I do think I should add a better animation to when we complete a task so I will work on it. Oh I forgot one thing. It is so freaking Hard to make a theme from scratch. like I was so lost trying to making everything look good. every text every hover. every button every background it look so long to perfect. thankfully I can select the rep visually instead of having to type it down everytime. Next I am going to work on adding the pomodoro. Let’s see what new things I learn! Thank you for reading!
Finally added the pomodoro. It was more complicated than I thought it would be. I had to learn a lot of how JavaScript processes math. I had to find help to do it because I was unable to make the timer run properly. Sleep deprivation didn’t help as well. I want to make it sakura theme but that is kinds hard cause I don’t know my colour theory. It’s still very hard to add features to this. I cannot think about how I would format this because they are kinda awkward like this. It was fun understanding how to convert seconds into unites and seconds in Javascript and make it display on screen like that. also had to learn about how the interval works I still don’t understand is very properly but I know I how to make it work in this situation. Next up a little bug fixes with the pomodoro and then another feature will be added to this. Thanks for reading!!:>
Added the weather app. I am getting way faster than before. This would have taken me so much time before but this worked out fairly simply. I am more efficient in function building now. I sped through it this time while I struggled with it before. CSS was also way easier as I just copied the theme of my previous two features. Most of the time of spent learning and experimenting with all the new things like Async, Await, JSON data, APIs etc. Of course it was not as smooth sailing as I am saying I of course ran into a lot of problems as a beginner with a weak base and weak concepts but it was way better than before. I am not going to add more features after this. I am going to make it aesthetically pleasing and ship it as I want to try a new project. I still have to add a few more features like a default weather display, search recommendations, revamp of the entire aesthetic, background music and I want to add sakura petals floating on the screen falling from a tree. I have no idea how to do it right now but I will when I finish. Thanks for reading everyone!!
No visible changes this time but I added Data persistence finally. I was holding up on it because it was looking too complicated but it was no too bad, took me a couple of hours. Did break my code once when I tried to change my previous functions but then found out that I can just add new ones to do the work instead of modifying the old ones. THAT is something important I learnt. I am going to do devlogs more often as in this project I have posted too less. I tried to add recommendations for search in the weather search but it’s too complicated. Thanks for reading!!
This is kind of an embarrassing devlog. I have been trying to polish the theme so I decided to add a sakura tree and also reverse the pallets in the background and the cards. Well as you can see the tree looks nothing like it should because what I tried to do was create a few new divs in html for the tree like the trunk, branches and the blossoms. I created individual classes and spans for each and tried to design them in css and I failed miserably as we can see there. I have now found out that in these situations we are supposed to use an svg file to make the tree which is what I am gonna do next. I really regret the past three hours I spent rotating branches to make it look like I wanted to. My vision is to make a tree and then change the background into a sky and have all three of my applications under the tree with petals falling and loft music playing. I hope I can reach there. I genuinely spent so much time in the html and css to make this tree which looks like a brown explosion. Thanks for reading.
Added the sakura tree properly. I tried to make an svg myself but I heavily underestimated the skill requirement to do it. So I gave up and added a free premade sakura tree svg which has been attributed in the bottom of the page as asked by the source website. I have given is -1 z index so it appears properly and gave my cards an alpha value so that I can have transparency as it look pretty. And I have to say sag is some serious stuff. All these vectors were destroying me and I couldn’t do any better than before so I decided I should use this. I hope it is allowed. Going to add the falling petals next. Thanks for reading!! Credit: https://www.vecteezy.com/free-vector/sakura-tree
I have finally added petals to the project and boy was it tough. Maybe the most difficult thing I have done in this project. They are still not perfect after hours of making nd remaking. Trying to make different petals, animating their flow in the wind. Making them look like they are falling from the tree. At first I made them look horrendous so I had to design them a bit. They still look not good enough so maybe I will change the look. But the most difficult part was the animation. I must have written the keyframes more than a hundred times because it looks so unnatural every time. I just could not figure out how to make it look natural. But I have now reached a point where I believe it looks decent enough for me to move forward towards the completion of the project and after I have finally added everything I want in there I will polish it and possibly assign an sig to each petal. I am not sure tho. Thank you for reading!!
Added background music. Selected a few royalty free quality lofi songs from the yt channel Tama’s little music shop. I will credit them in the readme. Adding the music and its basic ui was fairly simple. I just created a div, added two options and linked the music. Added a button to play and an input to set volume. Then added all their functionality in the javascript took very simple functions and It is all working properly. I am going to add a couple more sings maybe but for now All the features I wanted to add are there and I just have to polish the UI properly so it looks like a proper focus dashboard instead of a 4-in-1 project. Thanks for reading!!
I am tired of CSS now. After the last devlog I first redesigned the layout of the music player. Then I decided that my weather app missed an important functionality which was location detection. So I had to learn how to do that and then I also made it so that when the user opens the website it will automatically ask for location. If the user denies it will default to Tokyo. Then I added song progress control and refined the UI of the music player. Then I remade it 5 more times until what we have here. Still not satisfied. I did the. background again to make it look like the sky a little bit. Plain pink looked bad. I am going to make it again. Then started my nightmare. I tried to make my three apps into a dashboard so I created a new div and made it into a grid and then tried to fit all three inside the grid and make it look like it does now. Firstly I had to learn all about how this works and then I had to try it for the first time. The pomodoro and weather kept breaking. All their contents kept spilling out. No matter what I did it was not working. I could not understand what the error was so I wrote new rules at the bottom of the css and due to all that My css is now a 1000 lines long. I am afraid to clean it up because I don’t want it to break. There were so many problems with creating the dashboard. The background was moving when scrolling. The credits are now inside the music player for some reason. When adding the location detector I broke the code and spent 2 hours figuring out what the problem was only for it to be wrong linking of html id of a div. My CSS currently must have at least 4 duplicates of the the Pomo and weather and the dashboard. There is still refinement to do. But it’s almost over. I think this was too much as a second project. Thanks for reading.
Final Devlog!! I am finally done with this one! I have polished UI as much as I could. The CSS is a nightmare. I tried to change the entire UI but it broke the entire thing and I kept adding new attributes at the bottom instead to redoing the already existing ones so it became so messed up that I could not tell what was working and what was not. So I just kept adding until everything just worked out and it somehow works and I am not going to touch it. I also tried to make audio play instantly as site opens but failed. The grid in which the main three apps are placed is a nightmare I have made it symmetrical after at least 20 tries. The weather and pomodoro kept fighting each other. I also added the scroll feature to the to do list so whenever too many tasks are added it will just become scrollable. And I removed the scroll bar because it looks bad. With this it is officially over. This project was way out of my league as a beginner. Thanks for reading!!!!!
Back to this after long! I have added a few features to the to-do list. Added task priorities which can be selected when adding the tasks and can also be edited directly on the task. Also added task filtering for filtering based on task completion and priority. Added similar css to match my theme as everyone loved the theme when i shipped. I plan to add more songs and also add more features to the pomodoro and weather app and then ship the update!
Ships:
Sakura Productivity Dashboard!! A Sakura-inspired productivity dashboard built with HTML, CSS & JavaScript. A single dashboard combining To-Do List, Pomodoro timer, weather, and music into one workspace to improve productivity! I started this project as a simple To-Do List, but I kept thinking of things I could add to it until it turned into a full productivity dashboard. The main idea was to have everything I would need while studying in one place: a To-Do List, Pomodoro timer, weather, and music. I also wanted it to actually look nice, because I know I personally wouldn’t want to use a boring productivity app every day. What I Built: :>To-Do List with adding, deleting and completing tasks :>Tasks saved using Local Storage :>25-minute Pomodoro timer :>Weather search using the Open-Meteo API :>Automatic location detection :>Humidity, temperature, wind and weather conditions :>Lo-fi music player :>Play/pause, volume and progress controls :>Animated Sakura petals Making It Easy to Use: I have deployed it on github pages and made sure it works smoothly so anyone can just open and use with no need of a tutorial. I made many changes to make user experience wayy better: :>You can press Enter instead of having to click the buttons every time. :>Tasks stay saved even after refreshing the page. :>The To-Do List scrolls instead of making the whole dashboard keep getting bigger. :>Weather can either be searched manually or found automatically using your location. :>The important information is visible without having to open different pages. :>I kept the layout compact so the whole project can be demonstrated on one screen. The Theme!! The Sakura theme my favourite part of the design. It is the entire reason I made this in the first place. I always imagined an app like this and I will use this theme in the future as well. The falling petals and the tree and the seemingly morning sky looks very nice to me I hope everyone else likes it as well!!! Technical things used and learned! :>DOM manipulation and dynamically creating elements :>Local Storage for persistent data :>Managing application state :>Timers using setInterval() and clearInterval() :>sync JavaScript with async/await :>Fetch API and working with JSON data :>Error handling with try/catch :>Browser Geolocation API :>HTML Audio API and audio controls :>Connecting JavaScript with CSS animations :>Open-Meteo weather API :>Geocoding and reverse geocoding :>Using latitude and longitude :>Browser location permissions :>Working with external API data :>CSS Grid for dashboard layouts :>Flexbox :>Responsive design and media queries :>Scrollable containers and overflow :>Positioning and z-index :>Gradients and transparency :>CSS animations and @keyframes :>Transitions and transforms :>Creating consistent UI components...
|
1792972082.5220735
|
1793058482.5220735
|
|
24819
|
cmdRelay by @ashish-raj-singh | Stardance
|
ashish-raj-singh
|
1
|
50.38
|
875
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-29T20:32:01Z", "hours": 49.0, "multiplier": 18.02, "payout": 875, "blessing": "neutral", "text": "cmdRelay I built a cross-platform PC remote control and macro engine using Rust, Tauri, and React. It pairs your mobile device to your desktop via WebSockets on your local network, executes system-level operations and custom macros with zero noticeable latency. I have added some pre-loaded with layouts for VS Code, Photoshop, Media Controls, and Presentations there is also a Layout Settings option to edit and create your own custom control decks. What was challenging? Fighting the operating systems to make them behave! Cross platform I have worked with C++, so the core Rust WebSocket server was fun, but true cross-platform compatibility was very frustrating, as in to implement 3 algos for most system interactions. Github Actions & git well this was like a challange + learning i used github actions to automate build process of the application for all the platform and learned how to tag versions in git UI/UX This sounds like a small thing with no logic, but actually its really rough and requries a lot of time and design theory to make it perfect. i learned how discoverability of a feature is more important then the feature itself to a genereal user Honestly i realised, any of other stardance participants who will review this project, wont give like more then 5 min to the application so i had to improve the UX, and show the features and powers of the application beacuse if a user can’t find a feature easily, they will just thing that my application lacks that feature Core Features Leanign and fix bugs arising due to differences in interpretation of keypress from virtual keyboad and physical keyboards Trackpad : it required some maths to smooth out the cursor movement (Took AI help in maths) Multithreading : This was toughest concept to grasp for me in rust, i mainly used this to run macros, as macros can be longs and blocking. Blind on Linux I don’t even have access to a Linux machine, so I basically coded it, stared at AI analysis to check if standard commands (like playerctl and x-terminal-emulator) would work, crossed my fingers, and called it a day to ensure the “cross-platform” promise wasn’t a lie.shipLog.md Proud? Comming form Web Development background, i actually create a cross platform desktop application in rust, is like a huge confidence booster for me When i participated in this event i decided only to make things which require some tech which i dont alredy know and this descision is going good till now Beyond Data Structures and Algorithims Learning all these low-level OS interaction concepts. Not just doing Data Structure and Algorithm, but actually going beyond basic code logic to inject raw virtual keycodes, query active window telemetry in real-time, and spawn detached background processes without blowing up the computer Desktop Application Desktop or android/ios developers are generally considered superior then web Developer, knowing basics and actualy bulding a cross platform desktop applicaiton is a benchmark for myself Using old Concepts from Web Dev The truly seamless local network bridge. Right now, I can tap a button on a React frontend on my phone and instantly trigger a native system lock, launch an executable, or fire a crazy complex macro on a host PC over port 42911. It actually feels production-ready.", "repo": "https://github.com/ashish757/cmdRelay", "demo": "https://github.com/ashish757/cmdRelay/releases"}]...
|
[{"post_id": 58287, "ts": "202 [{"post_id": 58287, "ts": "2026-08-30T17:36:14Z", "hours": 0.4553, "text": "updated some UI (added a button to open the layout editor directly instead of going to system tray) to help users find features to edit the layout more easily"}, {"post_id": 56758, "ts": "2026-08-28T17:18:55Z", "hours": 0.9253, "text": "Tried to fix the linux binaries but as I lack the machine to test it out myself and due to recurring errors, I have dropped the linux support for now,"}, {"post_id": 37258, "ts": "2026-07-29T20:30:57Z", "hours": 4.0383, "text": "Final Devlog Honestly its gettin boring now nothing is challanging now Cross Platform: did what i can without any access to windows and linux machines Optmizations last devlog was also about optimization because its all that left now, nothing challenging in that, its jsut a boring work. there are still a lot of ideas i have for this , but i think its time to move onto somethign else my learnings in this project has stopped things which are left right now are either certain things which I don’t understand and which I know are out of my league or things which I already know, and I just need to keep on repeating myself, so my learning has kind of stopped and i am bored. Here’s what I did this time improve the README file and included demo video because I realised that as I have not tested my application on Windows and Linux, it might not run so i just uploaded a demo video, but I am like 95% certain that it will run improve the pre-buillt layouts that the application has and change them according to Windows and Linux recorded and edited (first time) a demo video (at the bottom of readme file) Handled permissions on the mac, (nicely) I would like to mention that this application request a lot of system settings and network permissions, so that is also reason that some people may be uncomfortable to execute this application. That’s why I provided the demo video."}, {"post_id": 35334, "ts": "2026-07-26T17:30:55Z", "hours": 2.6314, "text": "Devlog 10 - Near completion Optimizations Linux i had almost forgotten that i got to handle linux as well, mac and windows does not mean corss platform although linux is completely optional and i will try as i have promised the cross platform like 100 times i will try, i cant promise, as i dont have access to linux so i will code, do AI analysis to check if its gonna work on linux and that is all linux gonna get from me. I will test the application on windows soon, (i have mac , i am gonna borrow from a friend) Bug Fixes Adding new pre built layouts won’t nullify user editing on the layouts changed the server port from 3000 to more random port, as 3000 is commonly busy Special Function can now be executed on the Linux Moved the Layout Builder/Settings to the main application from web client to make it feel like a native app instead of a web UI Handled some of the observed edge cases in key mappings for cross platform support assets were not loading in the producition build , moved the assets to the public directory for direct access after produciton build"}, {"post_id": 34734, "ts": "2026-07-25T18:10:45Z", "hours": 2.8531, "text": "Devlog 9 - Will it Survive The Winter? A lot of time, this time went on fixing mistakes, which I did by making this application just for macOS, but I was building this to support different platforms, I can’t survives other platforms 1. Just had one JSON file for the complete configuration of the layouts. I realised that certain layouts which I am giving pre built were going to have different keys bindings for different platforms so I just separated my layouts into different files for Mac, Linux and Windows. 2. While talking to Claude, I got to know that the data of the applications which are edited are supposed to be saved in a different location other than the installation location. It is different for Mac and Windows, I was actually saving my data where my application is installed, so I fixed this issue and stored layout configs data at their appropriate location in the different system 3. So the special function keys, if you reading my devlogs, you are aware about this special function, such as increasing or decreasing volume and brightness, skipping and pausing and playing media these functions cannot be triggered by virtual keyboard. They are bounded to pressing keys in physical keyboard. to trigger these special function, I used Apple script on macOS, but Apple script are still failing on some cases so I used a swift language code , I did not understand how I could write swift inside rust but, stack overflow works . I got the code from stack overflow. I also added some pre-layouts for various tasks and helping in application such as VS code , Photoshop , fusion 360 and while giving presentations ."}, {"post_id": 34464, "ts": "2026-07-25T06:08:08Z", "hours": 3.9247, "text": "Devlog 8 - Polishing is really Boring The project is near completion on terms of features Now i am just Polishing the app doing things like improving UX, Text Content, adding minor features. Despite that here are two major things i did 1. Special Function Support remember my earlier devlog where i mentioned that, increasing and decreasing the brightness or vol is not as simple as just some keypress on keyboard These comes under special fucniton and although you can trigger then via physical keyboard, but can’t via the virtual ones. to do that you need to run some special code, on macos via Applescript and on window vis winShell, i am still figuring it out for linux. 2. Appearance settings user can now customize button’s color, bg, add icon and images (custom images are under dev) i did all this with backward compatibility in mind (Big Brains) CI/CD Pipeline Used Github Action to build the application for major platforms (macos, windows, linux) yeah all that, thousand build erros , waiting 10 min for each github action just to see a red X, i will not rant i am past that now Future i will be straight forward add custom image support verify and improve the cross platform functionality add some pre built layouts maybe add a guide/tour for the layout builder"}, {"post_id": 32884, "ts": "2026-07-22T10:33:18Z", "hours": 5.1594, "text": "Devlog 7 - There is always a Solution Focus V/S Feature Dilemma I thought it would be a cool feature addition to display the current resource consumption (CPU/RAM) and some other system details of the computer right on the mobile app. but my concern was that these features are basically \"extras\" and I really didn’t want to slow down my core functionality. I was about to drop the idea entirely, but at the last minute I decided to ask Gemini about it and guess what? There is always a solution I mean, what did I expect? Its engineering after all Smart Subscription Architecture - the solution well, my main concern was the wastage of resources and WebSocket bandwidth, which might bottleneck my main selling point: ultra low latency under 5ms control command communication But this architecture perfectly solves that. so basically, the server will only blast data at me if I am explicitly subscribed to it. Otherwise, it sleeps. and since this project uses WebSockets on a local network, there is generally only one user. So, if I unsubscribe from the service (like closing the telemetry component), that particular data broadcast will completely pause, saving precious resources on both the mobile client and the computer server forgot to mention : the server updates this system data every second if user is subscribed, else sleepyy The Scalability FOMO I am well aware my app won’t probably be used by more than 10 people for 10 minutes , but my Senior Software Engineer came shouting - “Your current method to render different views, that too without using react-router , it will become scalability issue as application grow” in my initial HL system design i was going to use a single page and conditional rendering for different layouts on same page to avoide a package i decided not to use the react-router for my client web page but now i have like 5 pages and as i am building i keep getting more and more ideas… I fixed this issue by creating a standard state for different viewModes and changing props/types to support it (nothing just some painful refactoring) implementing a component mapping (view registry) for all the views. Now I can just plug in any number of views without writing spaghetti if/else statements. The important thing is as i am not using the react-router, i will to keep an eye on memory and component lifecycle to free up the space in memory from components which are not in view. I should have used react-router from beginning 😭 I am thinking to add a button to force kill a process from the phone, but again i am standing at a point where these features are kind of feelign like extras and note my core application attached image of the QR code that i use to pair the mobile with the computer, will add some security in future"}, {"post_id": 31527, "ts": "2026-07-20T00:26:34Z", "hours": 10.3972, "text": "Devlog 6 My this session was so exciting that i only stopped because I reached the 10 hour limit of the hackclub . Well, I think throughout this project, I have been doing things which I don’t understand, things which were boring but right now this is the point when everything clicked, finally got the hang of RUST Its gonna be long Devlog read at your own risk(10 hours dump. Note: the maximum limit is 4000 characters so I cannot write everything here just this much) 1. Crazy things this time So if you may know that in this project, one of the things is to simulate the actual keyboard through the application Here is a interesting thing i found about special fucniton keys those special functionalities keys work strangly, on MacBook , we press F1 to decrease brightness , so i coded my applicaiton to to press the F1 but nothing happened in reality, most OS do not registers the F1 and F2 key for changing the brightness but it actually uses some code tied to hardware to trigger the special fucitionality How did i solve this? well, I read about how actually a Operating systems register the keys, and trigger those special functions. And this was the reason pressing the shortcuts were not triggering those special functionalities into the computer. As the OS was not looking for me to press F1 . it looks for a special code which is tied with the keyboard itself, which was not in virtual keyboard , solution is simple. You have to find out what code is used by a particular operating system to increase or decrease the brightness , and then you will have to trigger that code when the key is pressed. 2. Macros I implemented macros , you can basically press a sequence of keys with control delay . Just on a single click. It is spamming a key running some keyboard shortcuts on a single click. I created different thread to run this macro so that it does not freeze my main application this is the point which like frustrated me for very long as it is been like three years when I learned concurrency and threading in Python and I did it again in rust this time. I used MPSC (Multi-Producer, Single-Consumer) here. I don’t fully understand it, though, but yeah, I know why I used it and how I used it 3. App Lanucher So I just liked a button, which upon clicking will open up any application on your computer but the main thing was not actually opening the application, it was which application to open , Open an application by running a command on operating system , you have to know their exact official names , and a normal user does not know that so, I scanned the whole application folder onto the operating system and found out the official names of each application. Then I showed the list in a dropdown to user, from where user can select the names of applications. -well, it took me a lot of time because this was my third approach which worked my initial implementaion were like I would force the user to open up that application and then my application can register it, but obviously, the above approach is better than this, so I dropped it. Jupiter (idk, maybe because its big, and who doesnt like sloar system?) 4. Context Aware Layouts This is it. The big one. This was the most important, most time-consuming, and absolute flagship feature of the entire project. so, what is context aware layouts ? So in the application, one of the parts is to create layouts , which helps with your work aespecially in the productivity/professional applications so lets say you are coding or working, constantly shuffling between multiple desktop apps , with your phone sitting on your desk acting as your custom macro pad . This feature actively extracts the currently focused application on your computer and instantly switches the layout on your phone to match it."}, {"post_id": 29559, "ts": "2026-07-16T16:08:19Z", "hours": 2.46, "text": "Devlog 5 Loking back and accepting this time I saw what happens when you build a project without any proper system design , things were so clunky in my application that I was not in mood of creating another groundbreaking feature i just spent time improving existing features and make them actually usable What went down So basically, I had done a dumb thing very dumb thing. I did not realize that the buttons on the actual keyboard have different states, you know when they are being held down OR they’re being pressed OR they are being released, this info matters and I completely missed it. so now, basically, my key presses have a state Down (pressing down) Up (releasing the key) Pressed (holding the key) So the SHIFT button which I had implemented earlier was only clickable , user couldn’t hold it, but the shift button is meant to be held, so I fixed this and other similar buttons like alt , control and command Improved the portrait and landscape switching between the views in layout builder. This is just normal UI improvement Nothing special here Other than these two improvements above, there has been numerous other small little improvements which took me a lot of time, so I don’t really have much to write on this devlog, changes are like I improved the whole conditional rendering thing, it was messy as I decided not to use react router for this project as there weren’t any actual pages or URLs, just bunch of different control layouts. Improve my state management to handle menu overlay properly Overall code quality improvement, creating utility functions and type safety . and a lot of my time is invested in learning Rust as this is like my second project in rust (i leanred rust like a year ago and now i remember nothing, thanks to my good c++, i have held my ground so far) Bottom line → Better UI and UX , button can now be held and tracked weather they are being pressed or released"}, {"post_id": 20753, "ts": "2026-07-02T13:28:12Z", "hours": 6.7092, "text": "Devlog 4 Control Layout first i would like to define what i call a control layout, as i reliased i never relly defined it properly Control Layout: It is a layout of buttons and other control elements like For Example control layout for playback control will have button/controls like volume up/down, play/pause, fast forwarding and controling playback Maybe some specifi button to help while editing video Or controls for some particular Applications So basically, these controls can trigger and functionality or a shortcut or a macro onto the computer that the client is connected with Single click on the phone screen will be able to run a complex keyboard shortcut User can map shortcuts based on particular applications, and he does not need to remember keyboard shortcut. They don’t even need to click anywhere on their screen. The phone will act as a secondary keyboard or a small macropad. Customizable Control Layout The application contains some prebuilt control layouts But different user user different application and have different workflow, so i created a featrure to let users create his own custom layouts where he can place different buttons anywhere on the screen and assign what work each button will be doing. As of now the current active applicaiton detection is not present but i will add this feature soon. Details basically, I have an interface which tries to mimic a mobile screen, and I have divided that screen into grids with CSS I can move the elements around and resize them. I track the position , height and width of those elements and store them in a JSON config file upon saving these layouts. This JSON config is sent over local web socket to the Rust server . Along with just the information about the UI, there is also working information, like name of button, its functionality etc I have a component which is quite opposite of a builder which is a renderer . This renderer takes up JSON config and renderes the different components and maps the functionality, in smple word it takes json and create UI."}, {"post_id": 17012, "ts": "2026-06-27T16:43:10Z", "hours": 6.3219, "text": "Devlog 3 Trackpad Control Cursor Movement: Simply dragging on the mobile phone, moves the pointer on the desktop Clicks: supports Single Click , Double Click , Two-Tap Secondary Click Gestures: As of now only Two Finger scroll gesture is s supported Used a blocking thread to offlaod the hardware control operations (60 times per second) The hardest part now is supporting the ability to drag and supporting more gestures , It will requires complex math and numerous trial & error iterations. Live Typing a simple textarea where user can type with his native keyboard of the phone and the text gets typed live on the on computer. Buttons like Backspace , Enter required different approach as they cant be clubed with normal text typing feature of Enigo.text() several other improvements trachpad data sending is more optimized to send cursor cordinates efficiently scroll has kind of accelaration detection for smooth scrolling detecting the difference between drag, scroll and just basic move NEXT Implement a fully customizable control layout Implement PWA Improve connectivity settings for the rust server"}, {"post_id": 15565, "ts": "2026-06-25T09:37:01Z", "hours": 2.6828, "text": "Devlog 2 Magic well in my last devlog in mentioned i wanted to improve code quality and modularity, but guess what its still spaghetti code. But i did some other cool things actully too cool I impelmented a simple interace in client, and create button controls for the Arrow Keys The client can now talk with the server and send data server recieves the data and use Enigo to simulates key presses So basically now i can contorl the keys of my laptop with phone over local network and that under 5ms latency the flow is very simple Client Sends data over websocket –> Rust appliaction listening to the socket recieves it –> formats the incoming data to decide the appropirate action –> uses Enigo to simulate Key presses Next Target Improve code quality and modularity make the communication between client and rust app based on certain standards make more layouts for the client implement trackpad Below gif shows a demo"}, {"post_id": 15064, "ts": "2026-06-24T14:05:16Z", "hours": 1.8122, "text": "Devlog 1 Making a Remote Human Interface Device (HID): cmdRelay basically a controlling a device with another device, here controlling a computer with mobile phone Idea Problem: On my desk i have a windos pc (with top tier monitor) and i also have a macbook, and i lie on the bed and play movies on the monitor, but then i cant control the playback, volume, and cant scroll youtube. some of the soltions are platform dependent. some of them are paid only one solution kde connect , was usable, but it uses an ios app on the iphone and due to app store restriction, it offers limited functionlality on ios, compares to android, also its complex to use and consumes more battery and lack modern features and UI. how cmdRelay solves these problems Modern features and Better UI. No need to install an app, a PWA (Progressive Web App) is used in my idea, which solves the app store’s restrictions a very lightweight and efficient background process written in Rust , cross platform support. (an installation is required on the desktop, though its under 10 MB) lesser battery consumption and sleep mode feature. Details?? it uses an conection over LAN , to reduce latency to about 5ms User can control trackpad , keyboard , run big keyboard shortcuts on just a click, i will try for `gesture₹₹ support as well can’t promise anything right now. communicaiton will happen via a local websocket connecion. Client on mobiles phones A React based PWA Background process on mac and windows Rust and Tauri based background process, with minimal settings Current Status I have make a basic websocket server in Rust and React js client, and establised the connection successfuly wahts next improve code quality and modularity build the client side and send the json data to the computer via web sockets"}]...
|
Title: cmdRelay by @ashish-raj-singh | Stardance
Title: cmdRelay by @ashish-raj-singh | Stardance
Devlogs:
Devlog 1 Making a Remote Human Interface Device (HID): cmdRelay basically a controlling a device with another device, here controlling a computer with mobile phone Idea Problem: On my desk i have a windos pc (with top tier monitor) and i also have a macbook, and i lie on the bed and play movies on the monitor, but then i cant control the playback, volume, and cant scroll youtube. some of the soltions are platform dependent. some of them are paid only one solution kde connect , was usable, but it uses an ios app on the iphone and due to app store restriction, it offers limited functionlality on ios, compares to android, also its complex to use and consumes more battery and lack modern features and UI. how cmdRelay solves these problems Modern features and Better UI. No need to install an app, a PWA (Progressive Web App) is used in my idea, which solves the app store’s restrictions a very lightweight and efficient background process written in Rust , cross platform support. (an installation is required on the desktop, though its under 10 MB) lesser battery consumption and sleep mode feature. Details?? it uses an conection over LAN , to reduce latency to about 5ms User can control trackpad , keyboard , run big keyboard shortcuts on just a click, i will try for `gesture₹₹ support as well can’t promise anything right now. communicaiton will happen via a local websocket connecion. Client on mobiles phones A React based PWA Background process on mac and windows Rust and Tauri based background process, with minimal settings Current Status I have make a basic websocket server in Rust and React js client, and establised the connection successfuly wahts next improve code quality and modularity build the client side and send the json data to the computer via web sockets
Devlog 2 Magic well in my last devlog in mentioned i wanted to improve code quality and modularity, but guess what its still spaghetti code. But i did some other cool things actully too cool I impelmented a simple interace in client, and create button controls for the Arrow Keys The client can now talk with the server and send data server recieves the data and use Enigo to simulates key presses So basically now i can contorl the keys of my laptop with phone over local network and that under 5ms latency the flow is very simple Client Sends data over websocket –> Rust appliaction listening to the socket recieves it –> formats the incoming data to decide the appropirate action –> uses Enigo to simulate Key presses Next Target Improve code quality and modularity make the communication between client and rust app based on certain standards make more layouts for the client implement trackpad Below gif shows a demo
Devlog 3 Trackpad Control Cursor Movement: Simply dragging on the mobile phone, moves the pointer on the desktop Clicks: supports Single Click , Double Click , Two-Tap Secondary Click Gestures: As of now only Two Finger scroll gesture is s supported Used a blocking thread to offlaod the hardware control operations (60 times per second) The hardest part now is supporting the ability to drag and supporting more gestures , It will requires complex math and numerous trial & error iterations. Live Typing a simple textarea where user can type with his native keyboard of the phone and the text gets typed live on the on computer. Buttons like Backspace , Enter required different approach as they cant be clubed with normal text typing feature of Enigo.text() several other improvements trachpad data sending is more optimized to send cursor cordinates efficiently scroll has kind of accelaration detection for smooth scrolling detecting the difference between drag, scroll and just basic move NEXT Implement a fully customizable control layout Implement PWA Improve connectivity settings for the rust server
Devlog 4 Control Layout first i would like to define what i call a control layout, as i reliased i never relly defined it properly Control Layout: It is a layout of buttons and other control elements like For Example control layout for playback control will have button/controls like volume up/down, play/pause, fast forwarding and controling playback Maybe some specifi button to help while editing video Or controls for some particular Applications So basically, these controls can trigger and functionality or a shortcut or a macro onto the computer that the client is connected with Single click on the phone screen will be able to run a complex keyboard shortcut User can map shortcuts based on particular applications, and he does not need to remember keyboard shortcut. They don’t even need to click anywhere on their screen. The phone will act as a secondary keyboard or a small macropad. Customizable Control Layout The application contains some prebuilt control layouts But different user user different application and have different workflow, so i created a featrure to let users create his own custom layouts where he can place different buttons anywhere on the screen and assign what work each button will be doing. As of now the current active applicaiton detection is not present but i will add this feature soon. Details basically, I have an interface which tries to mimic a mobile screen, and I have divided that screen into grids with CSS I can move the elements around and resize them. I track the position , height and width of those elements and store them in a JSON config file upon saving these layouts. This JSON config is sent over local web socket to the Rust server . Along with just the information about the UI, there is also working information, like name of button, its functionality etc I have a component which is quite opposite of a builder which is a renderer . This renderer takes up JSON config and renderes the different components and maps the functionality, in smple word it takes json and create UI.
Devlog 5 Loking back and accepting this time I saw what happens when you build a project without any proper system design , things were so clunky in my application that I was not in mood of creating another groundbreaking feature i just spent time improving existing features and make them actually usable What went down So basically, I had done a dumb thing very dumb thing. I did not realize that the buttons on the actual keyboard have different states, you know when they are being held down OR they’re being pressed OR they are being released, this info matters and I completely missed it. so now, basically, my key presses have a state Down (pressing down) Up (releasing the key) Pressed (holding the key) So the SHIFT button which I had implemented earlier was only clickable , user couldn’t hold it, but the shift button is meant to be held, so I fixed this and other similar buttons like alt , control and command Improved the portrait and landscape switching between the views in layout builder. This is just normal UI improvement Nothing special here Other than these two improvements above, there has been numerous other small little improvements which took me a lot of time, so I don’t really have much to write on this devlog, changes are like I improved the whole conditional rendering thing, it was messy as I decided not to use react router for this project as there weren’t any actual pages or URLs, just bunch of different control layouts. Improve my state management to handle menu overlay properly Overall code quality improvement, creating utility functions and type safety . and a lot of my time is invested in learning Rust as this is like my second project in rust (i leanred rust like a year ago and now i remember nothing, thanks to my good c++, i have held my ground so far) Bottom line → Better UI and UX , button can now be held and tracked weather they are being pressed or released
Devlog 6 My this session was so exciting that i only stopped because I reached the 10 hour limit of the hackclub . Well, I think throughout this project, I have been doing things which I don’t understand, things which were boring but right now this is the point when everything clicked, finally got the hang of RUST Its gonna be long Devlog read at your own risk(10 hours dump. Note: the maximum limit is 4000 characters so I cannot write everything here just this much) 1. Crazy things this time So if you may know that in this project, one of the things is to simulate the actual keyboard through the application Here is a interesting thing i found about special fucniton keys those special functionalities keys work strangly, on MacBook , we press F1 to decrease brightness , so i coded my applicaiton to to press the F1 but nothing happened in reality, most OS do not registers the F1 and F2 key for changing the brightness but it actually uses some code tied to hardware to trigger the special fucitionality How did i solve this? well, I read about how actually a Operating systems register the keys, and trigger those special functions. And this was the reason pressing the shortcuts were not triggering those special functionalities into the computer. As the OS was not looking for me to press F1 . it looks for a special code which is tied with the keyboard itself, which was not in virtual keyboard , solution is simple. You have to find out what code is used by a particular operating system to increase or decrease the brightness , and then you will have to trigger that code when the key is pressed. 2. Macros I implemented macros , you can basically press a sequence of keys with control delay . Just on a single click. It is spamming a key running some keyboard shortcuts on a single click. I created different thread to run this macro so that it does not freeze my main application this is the point which like frustrated me for very long as it is been like three years when I learned concurrency and threading in Python and I did it again in rust this time. I used MPSC (Multi-Producer, Single-Consumer) here. I don’t fully understand it, though, but yeah, I know why I used it and how I used it 3. App Lanucher So I just liked a button, which upon clicking will open up any application on your computer but the main thing was not actually opening the application, it was which application to open , Open an application by running a command on operating system , you have to know their exact official names , and a normal user does not know that so, I scanned the whole application folder onto the operating system and found out the official names of each application. Then I showed the list in a dropdown to user, from where user can select the names of applications. -well, it took me a lot of time because this was my third approach which worked my initial implementaion were like I would force the user to open up that application and then my application can register it, but obviously, the above approach is better than this, so I dropped it. Jupiter (idk, maybe because its big, and who doesnt like sloar system?) 4. Context Aware Layouts This is it. The big one. This was the most important, most time-consuming, and absolute flagship feature of the entire project. so, what is context aware layouts ? So in the application, one of the parts is to create layouts , which helps with your work aespecially in the productivity/professional applications so lets say you are coding or working, constantly shuffling between multiple desktop apps , with your phone sitting on your desk acting as your custom macro pad . This feature actively extracts the currently focused application on your computer and instantly switches the layout on your phone to match it.
Devlog 7 - There is always a Solution Focus V/S Feature Dilemma I thought it would be a cool feature addition to display the current resource consumption (CPU/RAM) and some other system details of the computer right on the mobile app. but my concern was that these features are basically "extras" and I really didn’t want to slow down my core functionality. I was about to drop the idea entirely, but at the last minute I decided to ask Gemini about it and guess what? There is always a solution I mean, what did I expect? Its engineering after all Smart Subscription Architecture - the solution well, my main concern was the wastage of resources and WebSocket bandwidth, which might bottleneck my main selling point: ultra low latency under 5ms control command communication But this architecture perfectly solves that. so basically, the server will only blast data at me if I am explicitly subscribed to it. Otherwise, it sleeps. and since this project uses WebSockets on a local network, there is generally only one user. So, if I unsubscribe from the service (like closing the telemetry component), that particular data broadcast will completely pause, saving precious resources on both the mobile client and the computer server forgot to mention : the server updates this system data every second if user is subscribed, else sleepyy The Scalability FOMO I am well aware my app won’t probably be used by more than 10 people for 10 minutes , but my Senior Software Engineer came shouting - “Your current method to render different views, that too without using react-router , it will become scalability issue as application grow” in my initial HL system design i was going to use a single page and conditional rendering for different layouts on same page to avoide a package i decided not to use the react-router for my client web page but now i have like 5 pages and as i am building i keep getting more and more ideas… I fixed this issue by creating a standard state for different viewModes and changing props/types to support it (nothing just some painful refactoring) implementing a component mapping (view registry) for all the views. Now I can just plug in any number of views without writing spaghetti if/else statements. The important thing is as i am not using the react-router, i will to keep an eye on memory and component lifecycle to free up the space in memory from components which are not in view. I should have used react-router from beginning 😭 I am thinking to add a button to force kill a process from the phone, but again i am standing at a point where these features are kind of feelign like extras and note my core application attached image of the QR code that i use to pair the mobile with the computer, will add some security in future
Devlog 8 - Polishing is really Boring The project is near completion on terms of features Now i am just Polishing the app doing things like improving UX, Text Content, adding minor features. Despite that here are two major things i did 1. Special Function Support remember my earlier devlog where i mentioned that, increasing and decreasing the brightness or vol is not as simple as just some keypress on keyboard These comes under special fucniton and although you can trigger then via physical keyboard, but can’t via the virtual ones. to do that you need to run some special code, on macos via Applescript and on window vis winShell, i am still figuring it out for linux. 2. Appearance settings user can now customize button’s color, bg, add icon and images (custom images are under dev) i did all this with backward compatibility in mind (Big Brains) CI/CD Pipeline Used Github Action to build the application for major platforms (macos, windows, linux) yeah all that, thousand build erros , waiting 10 min for each github action just to see a red X, i will not rant i am past that now Future i will be straight forward add custom image support verify and improve the cross platform functionality add some pre built layouts maybe add a guide/tour for the layout builder
Devlog 9 - Will it Survive The Winter? A lot of time, this time went on fixing mistakes, which I did by making this application just for macOS, but I was building this to support different platforms, I can’t survives other platforms 1. Just had one JSON file for the complete configuration of the layouts. I realised that certain layouts which I am giving pre built were going to have different keys bindings for different platforms so I just separated my layouts into different files for Mac, Linux and Windows. 2. While talking to Claude, I got to know that the data of the applications which are edited are supposed to be saved in a different location other than the installation location. It is different for Mac and Windows, I was actually saving my data where my application is installed, so I fixed this issue and stored layout configs data at their appropriate location in the different system 3. So the special function keys, if you reading my devlogs, you are aware about this special function, such as increasing or decreasing volume and brightness, skipping and pausing and playing media these functions cannot be triggered by virtual keyboard. They are bounded to pressing keys in physical keyboard. to trigger these special function, I used Apple script on macOS, but Apple script are still failing on some cases so I used a swift language code , I did not understand how I could write swift inside rust but, stack overflow works . I got the code from stack overflow. I also added some pre-layouts for various tasks and helping in application such as VS code , Photoshop , fusion 360 and while giving presentations .
Devlog 10 - Near completion Optimizations Linux i had almost forgotten that i got to handle linux as well, mac and windows does not mean corss platform although linux is completely optional and i will try as i have promised the cross platform like 100 times i will try, i cant promise, as i dont have access to linux so i will code, do AI analysis to check if its gonna work on linux and that is all linux gonna get from me. I will test the application on windows soon, (i have mac , i am gonna borrow from a friend) Bug Fixes Adding new pre built layouts won’t nullify user editing on the layouts changed the server port from 3000 to more random port, as 3000 is commonly busy Special Function can now be executed on the Linux Moved the Layout Builder/Settings to the main application from web client to make it feel like a native app instead of a web UI Handled some of the observed edge cases in key mappings for cross platform support assets were not loading in the producition build , moved the assets to the public directory for direct access after produciton build
Final Devlog Honestly its gettin boring now nothing is challanging now Cross Platform: did what i can without any access to windows and linux machines Optmizations last devlog was also about optimization because its all that left now, nothing challenging in that, its jsut a boring work. there are still a lot of ideas i have for this , but i think its time to move onto somethign else my learnings in this project has stopped things which are left right now are either certain things which I don’t understand and which I know are out of my league or things which I already know, and I just need to keep on repeating myself, so my learning has kind of stopped and i am bored. Here’s what I did this time improve the README file and included demo video because I realised that as I have not tested my application on Windows and Linux, it might not run so i just uploaded a demo video, but I am like 95% certain that it will run improve the pre-buillt layouts that the application has and change them according to Windows and Linux recorded and edited (first time) a demo video (at the bottom of readme file) Handled permissions on the mac, (nicely) I would like to mention that this application request a lot of system settings and network permissions, so that is also reason that some people may be uncomfortable to execute this application. That’s why I provided the demo video.
Tried to fix the linux binaries but as I lack the machine to test it out myself and due to recurring errors, I have dropped the linux support for now,
updated some UI (added a button to open the layout editor directly instead of going to system tray) to help users find features to edit the layout more easily
Ships:
cmdRelay I built a cross-platform PC remote control and macro engine using Rust, Tauri, and React. It pairs your mobile device to your desktop via WebSockets on your local network, executes system-level operations and custom macros with zero noticeable latency. I have added some pre-loaded with layouts for VS Code, Photoshop, Media Controls, and Presentations there is also a Layout Settings option to edit and create your own custom control decks. What was challenging? Fighting the operating systems to make them behave! Cross platform I have worked with C++, so the core Rust WebSocket server was fun, but true cross-platform compatibility was very frustrating, as in to implement 3 algos for most system interactions. Github Actions & git well this was like a challange + learning i used github actions to automate build process of the application for all the platform and learned how to tag versions in git UI/UX This sounds like a small thing with no logic, but actually its really rough and requries a lot of time and design theory to make it perfect. i learned how discoverability of a feature is more important then the feature itself to a genereal user Honestly i realised, any of other stardance participants who will review this project, wont give like more then 5 min to the application so i had to improve the UX, and show the features and powers of the application beacuse if a user can’t find a feature easily, they will just thing that my application lacks that feature Core Features Leanign and fix bugs arising due to differences in interpretation of keypress from virtual keyboad and physical keyboards Trackpad : it required some maths to smooth out the cursor movement (Took AI help in maths) Multithreading : This was toughest concept to grasp for me in rust, i mainly used this to run macros, as macros can be longs and blocking. Blind on Linux I don’t even have access to a Linux machine, so I basically coded it, stared at AI analysis to check if standard commands (like playerctl and x-terminal-emulator) would work, crossed my fingers, and called it a day to ensure the “cross-platform” promise wasn’t a lie.shipLog.md Proud? Comming form Web Development background, i actually create a cross platform desktop application in rust, is like a huge confidence booster for me When i participated in this event i decided only to make things which require some tech which i dont alredy know and this descision is going good till now Beyond Data Structures and Algorithims Learning all these low-level OS interaction concepts. Not just doing Data Structure and Algorithm, but actually going beyond basic code logic to inject raw virtual keycodes, query active window telemetry in real-time, and spawn detached background processes without blowing up the computer Desktop Application Desktop or android/ios developers are generally considered superior then web Developer, knowing basics and actualy bulding a cross platform desktop applicaiton is a benchmark for myself Using old Concepts from Web Dev The truly seamless local network bridge. Right now, I can tap a button on a React frontend on my phone and instantly trigger a native system lock, launch an executable, or fire a crazy complex macro on a host PC over port 42911. It actually feels production-ready....
|
1793001057.8218806
|
1793087457.8218806
|
|
28709
|
Ecostream by @Mang0o | Stardance
|
Mang0o
|
1
|
57.0
|
872
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-26T05:39:16Z", "hours": 57.0, "multiplier": 16.01, "payout": 872, "blessing": "neutral", "text": "This is Ecostream. An open-source cross-platform music streaming app and server made to provide a simple, intuitive interface as well as cool features such as cross-device control, automatic music downloading, and smart shuffle.", "repo": "https://github.com/Mang00oo/Ecostream", "demo": "https://mang00oo.github.io/ecostream-demo/"}]...
|
[{"post_id": 54928, "ts": "202 [{"post_id": 54928, "ts": "2026-08-26T05:01:31Z", "hours": 2.6372, "text": "Made and troubleshooted a Windows build, as well as publishing the first release on Github"}, {"post_id": 54212, "ts": "2026-08-25T03:05:41Z", "hours": 2.6297, "text": "Made a demo website that doesn’t use the server, adding a popup to avoid confusion and showing a message when trying to use unavailable features"}, {"post_id": 51990, "ts": "2026-08-22T00:18:41Z", "hours": 1.815, "text": "User details editing in settings + revamped user selection screen + creating new users at login screen"}, {"post_id": 51432, "ts": "2026-08-21T04:12:27Z", "hours": 3.5828, "text": "Fixed touchbar button + added desktop app names in device selection screen"}, {"post_id": 49970, "ts": "2026-08-18T23:42:40Z", "hours": 1.8125, "text": "Settings page with server url customization"}, {"post_id": 48517, "ts": "2026-08-16T22:20:47Z", "hours": 6.5758, "text": "Removing songs from playlists and adding songs to your queue"}, {"post_id": 45554, "ts": "2026-08-12T03:45:50Z", "hours": 2.6967, "text": "Fixed search results + added search on mobile, improved skip/previous animation on mobile, and finished offline implementation."}, {"post_id": 41788, "ts": "2026-08-06T05:59:16Z", "hours": 9.3053, "text": "Playlist name editing + started offline playback implementation"}, {"post_id": 39937, "ts": "2026-08-03T08:11:46Z", "hours": 3.38, "text": "Re-coded smart shuffle + made the queue show the currently playing song"}, {"post_id": 33775, "ts": "2026-07-23T23:16:12Z", "hours": 11.8772, "text": "Cross-device sync with playback on multiple clients, as well as some (pretty bad) latency compensation"}, {"post_id": 23428, "ts": "2026-07-06T12:00:46Z", "hours": 10.7633, "text": "Coded my own audio player component for the desktop app from scratch and added preloading the next song for faster navigation"}]...
|
Title: Ecostream by @Mang0o | Stardance
Devlogs:
Title: Ecostream by @Mang0o | Stardance
Devlogs:
Coded my own audio player component for the desktop app from scratch and added preloading the next song for faster navigation
Cross-device sync with playback on multiple clients, as well as some (pretty bad) latency compensation
Re-coded smart shuffle + made the queue show the currently playing song
Playlist name editing + started offline playback implementation
Fixed search results + added search on mobile, improved skip/previous animation on mobile, and finished offline implementation.
Removing songs from playlists and adding songs to your queue
Settings page with server url customization
Fixed touchbar button + added desktop app names in device selection screen
User details editing in settings + revamped user selection screen + creating new users at login screen
Made a demo website that doesn’t use the server, adding a popup to avoid confusion and showing a message when trying to use unavailable features
Made and troubleshooted a Windows build, as well as publishing the first release on Github
Ships:
This is Ecostream. An open-source cross-platform music streaming app and server made to provide a simple, intuitive interface as well as cool features such as cross-device control, automatic music downloading, and smart shuffle....
|
1792986790.6849687
|
1793073190.6849687
|
|
58676
|
Wanderlust OS by @Shreya_Nair | Stardance
|
Shreya_Nair
|
2
|
54.0
|
869
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-30T18:58:05Z", "hours": 50.0, "multiplier": 17.3, "payout": 869, "blessing": "neutral", "text": "Wanderlust OS is my fantasy world themed WebOS project inspired by the Lord of the Rings universe (people who haven’t heard of the lord of the rings can use it too!). I wanted to make something that felt like a little world of its own while being very easy to use. I started with a basic webOS for Ship #1 where I built the main foundation. It had draggable and resizable windows, a taskbar and very few apps. From there for Ship #2 I completely transformed it adding many interactive features, music and plenty of easter eggs and fun apps. The Apps include Notes, Gallery, Timer, Map of Middle-earth, Palantir (weather app but as a crystal ball!), Calendar, Doodle, Library (with book excerpts related to lotr) and Settings. Main Features Light mode and Dark mode- Both are very different and the music and many elements completely changes between light and dark. Imo the dark mode is the most fun part of the project. The Fun parts- There are many things flying across the screen once you open the OS. Also there many clickable things I’ve added to make it fun and interactive to those who visit (like flowers, butterflies and some themed things). Clicking the arkenstone (the glowy rock) at the top opens the journey window and tracks all the apps and easter eggs u opened (wanted to add smth to let the user know whether they’ve found all the features). What was challenging? I started learning HTML and CSS through the personal site mission and I feel like I’ve improved a lot. In the beginning I found it hard to get a hang of it (the functionality and the design part, for eg light/ dark mode) and I believe Ive come a long way! Yes I encountered lot of problems in between but it was a learning experience. What am I proud of? Im very proud of all the interactive features I thought of and built on my own (especially dark mode). They arent necessary for the OS to function but they made a huge difference and I enjoyed building them tooo. For more details, please read the readme. I believe I’ve covered everything there is to cover but I’ll take feedback to improve the project and make it as user friendly as possible. Make sure to click around the desktop and see what you find! And to everyone who read till here…thank you! ^ o^/", "repo": "https://github.com/Shreya-Nair-28/Middle-earth-OS", "demo": "https://shreya-nair-28.github.io/Middle-earth-OS/"}, {"ship_num": 2, "ts": "2026-09-08T12:16:26Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Middle-earth OS is a browser based operating system inspired by the world of the Lord of the Rings. I built it with HTML, CSS and JS (I became pretty confident with these 3 after completing the personal site mission) Ship #1 focused on fulfilling the basic requirements. It has draggable and resizable windows, a taskbar, time display at the bottom. Also has 3 simple apps: Notes, Timer and Gallery. So far, it’s super basic. I’m developing this in multiple ships adding smth new each time. You can already see I have two other apps in the working(Map and Palantir). I will definitely make it more polished visually and technically. (Ship #2 will have more lotr themed apps and more unique features (ive already thought of a few amazing ones)). The goal is to turn this simple OS into a full immersive one.", "repo": "https://github.com/Shreya-Nair-28/Middle-earth-OS", "demo": "https://shreya-nair-28.github.io/Middle-earth-OS/"}]...
|
[{"post_id": 75617, "ts": "202 [{"post_id": 75617, "ts": "2026-09-30T15:50:18Z", "hours": 2.9361, "text": "Last devlog before I ship! I added yet another easter egg (i couldnt help myself 😅) They change depending on what mode you’re in (light/dark). Besides that, I fixed a couple of errors that i was saving for the end. I wanted the OS to be as smooth as possible (enjoyable as well but that comes second). Biggest change of all: I changed the name from Middle-earth OS to Wanderlust OS because I felt it fit my project better. I’m ready to ship!"}, {"post_id": 73676, "ts": "2026-09-25T17:32:13Z", "hours": 7.3336, "text": "I’m getting closer to shipping. I added two more fun buttons near the top: one is a memory window that tracks all the apps u opened and all the easter eggs u foundd , (i connected all the apps, buttons and easter eggs to this window; it counts each first time u click on it) the other is kinda like another easter egg. I fixed up a lot of the layering i didnt want the easter eggs/animations to get in the way of the user when theyre using any apps so i fixed up a lot of that as well. I cleaned up a lot of other code as well. I also learnt that I kept typing ‘colour’ instead of ‘color’ in a lot of places 😅😅 so i hit find & replace for those. I then spent some time improving the intro window and intro video I made it more appealing. Im happy with the work now actually. Ive come along way from the personal site mission. (o゜▽゜)o☆"}, {"post_id": 71849, "ts": "2026-09-21T17:25:42Z", "hours": 4.0397, "text": "flyButterfly(){ Today i added i worked on the js for the easter eggs and and added a few more interactive features. the OS looks more alive now!!!! i love itttttt. They’re still kinda glitchy and i will be trying to figure out the problemmm.. toodles!} 🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋"}, {"post_id": 71340, "ts": "2026-09-20T17:37:57Z", "hours": 6.2211, "text": "phew, added plenty of easter eggs today. some of them fly across the screen and some are hidden and takes a little exploring to find them. I want to make my os as interactive and not boring as possible so im gonna work more on that from tmrw. oKiE"}, {"post_id": 70734, "ts": "2026-09-19T17:46:41Z", "hours": 1.2517, "text": "hiya. i was fixing the sizing and locations of a few widgets. I spent most time trying to place the location pins on the right places in the map. i was able to do it for a couple of locations but not all. (it TAKES a long time). i also uploaded the images for the icons. I still havent thought of a good idea for the doodle app icon but itll hit me soooon. 🫨🫨"}, {"post_id": 70200, "ts": "2026-09-18T18:05:28Z", "hours": 1.9644, "text": "hellooooo. i added an intro video today. (idk why i didnt think to add one until now, i only remembered when i went through all the amazing projects uploaded to this mission). Besides the 2 hrs logged, i spent designing the leftover logos (i didnt find the emojis to fit the style). The coding mostly involved me trying to get the widgets to cooperate. The dragging was glitchy then there would some random small error that made everything else stop working. basically today wasnt really coding heavy but fixing a lot of things and improving the feel. (o゜▽゜)o"}, {"post_id": 69733, "ts": "2026-09-17T17:45:14Z", "hours": 4.1083, "text": "i worked on adding widgets today. was really difficult cuz i had no experience with that level. I wanted to reuse functions from the weather app for the weather widget. I tried but i couldnt :(. I wrote a whole new function for the widget itself. for now, i added some basic widgets such as calendar, weather and clock (they arent draggable yet tho, also im not feeling the clock design, prolly will change it later). Will definitely add more creative ones along the way :)"}, {"post_id": 69265, "ts": "2026-09-16T18:16:14Z", "hours": 2.4936, "text": "i added an interactive sparkly cursor today. Also added features within 2 apps : user can add their own events to the calendar, a clear all feature in the doodle app. i was also on the hunt for excerpts to add to the library app."}, {"post_id": 68756, "ts": "2026-09-15T17:56:28Z", "hours": 5.0167, "text": "was putting out fires all over the place today. Some windows kept opening INSIDE other windows! turns out it was because of a single missing closing div tag🙇♀️it took me soooo long, Besides all that i fixed up the library app and added a new map app. I improved some of the other apps as well."}, {"post_id": 68194, "ts": "2026-09-14T18:02:39Z", "hours": 3.7514, "text": "Got more work done today than the past few days. I added two apps! a doodle app and a a library app (just lotr excerpts for now). The pdf viewer seriously did not want to open. It really took some time to get that working. also the window resizing isnt really that great there are a lot of problems. More tomorrow!"}, {"post_id": 67563, "ts": "2026-09-13T18:17:36Z", "hours": 1.0639, "text": "I added a calendar app today! only worked on the html and js. need to finish the css as well to match the overall theme. its also still kinda buggy."}, {"post_id": 66750, "ts": "2026-09-12T17:16:10Z", "hours": 1.4025, "text": "today i worked on fixing up the weather app and modifying most of the error handling code. I also debugged a lot of the window opening and closing issues."}, {"post_id": 66114, "ts": "2026-09-11T18:36:02Z", "hours": 1.3075, "text": "mainly worked on improving the css and ui today. also spent an hour or two on design a few elements in canva."}, {"post_id": 65500, "ts": "2026-09-10T18:03:18Z", "hours": 2.0506, "text": "Add little glowy effects and little animations to the windows and the app icons. I also added light mode and dark mode to the os. Also, it may say I spent 2 hours coding but besides that I have spent another two working on the design aspect in canva (i wanted to add easter eggs like i did in my personal site mission). I still feel the UI just isnt…it. ig itll take a bit more trial and error to get it there. :))"}, {"post_id": 64961, "ts": "2026-09-09T18:15:25Z", "hours": 4.0447, "text": "Worked on improving the weather app today (i learned how to connect one to a site firstt). Then i worked on adding a settings app that can allow the user to choose wallpapers and light/dark mode. it looks pretty okay now but i definitely need to improve the ui BY FAR. tomorrow!"}, {"post_id": 64368, "ts": "2026-09-08T17:52:46Z", "hours": 1.2239, "text": "Added hover effects to the app icons. Started working on making the palantir a weather forecast app. I went through the article about it on geeksforgeeks first (because i was kinda clueless) and i learnt that it’s not super difficult. I started work on it and it’s actually going good. more tomorrow!"}, {"post_id": 64161, "ts": "2026-09-08T11:41:20Z", "hours": 1.2461, "text": "Now the os has 3 simple apps: Notes, Timer and Gallery. Current time is displayed on the bottom right. The windows are draggable and resizable."}, {"post_id": 63730, "ts": "2026-09-07T17:49:29Z", "hours": 1.5861, "text": "More work done. The windows are now draggable and can be opened and closed. I added a simple note taker (with add, delete, clear and view functions). I started working on a timer app today. (but there’s some error (it better not be a missing bracket/letter in a variable cuz those are so hard to find 🙏)). More work tomorroww."}, {"post_id": 63065, "ts": "2026-09-06T17:34:50Z", "hours": 0.3992, "text": "today i worked getting the windows to open. I could not work for a long time today. I was simply able to add windows and a bit of text. Tomorrow I will work on including the dragging and the design aspect."}, {"post_id": 62366, "ts": "2026-09-05T18:09:55Z", "hours": 0.4464, "text": "baby steps started work on lotr-os (the name needs work). I finished the personal site mission and now i have more experience with HTML and CSS (ESPECIALLY CSS). I hope it turns out good!"}]...
|
Title: Wanderlust OS by @Shreya_Nair | Stardance
Title: Wanderlust OS by @Shreya_Nair | Stardance
Devlogs:
baby steps started work on lotr-os (the name needs work). I finished the personal site mission and now i have more experience with HTML and CSS (ESPECIALLY CSS). I hope it turns out good!
today i worked getting the windows to open. I could not work for a long time today. I was simply able to add windows and a bit of text. Tomorrow I will work on including the dragging and the design aspect.
More work done. The windows are now draggable and can be opened and closed. I added a simple note taker (with add, delete, clear and view functions). I started working on a timer app today. (but there’s some error (it better not be a missing bracket/letter in a variable cuz those are so hard to find 🙏)). More work tomorroww.
Now the os has 3 simple apps: Notes, Timer and Gallery. Current time is displayed on the bottom right. The windows are draggable and resizable.
Added hover effects to the app icons. Started working on making the palantir a weather forecast app. I went through the article about it on geeksforgeeks first (because i was kinda clueless) and i learnt that it’s not super difficult. I started work on it and it’s actually going good. more tomorrow!
Worked on improving the weather app today (i learned how to connect one to a site firstt). Then i worked on adding a settings app that can allow the user to choose wallpapers and light/dark mode. it looks pretty okay now but i definitely need to improve the ui BY FAR. tomorrow!
Add little glowy effects and little animations to the windows and the app icons. I also added light mode and dark mode to the os. Also, it may say I spent 2 hours coding but besides that I have spent another two working on the design aspect in canva (i wanted to add easter eggs like i did in my personal site mission). I still feel the UI just isnt…it. ig itll take a bit more trial and error to get it there. :))
mainly worked on improving the css and ui today. also spent an hour or two on design a few elements in canva.
today i worked on fixing up the weather app and modifying most of the error handling code. I also debugged a lot of the window opening and closing issues.
I added a calendar app today! only worked on the html and js. need to finish the css as well to match the overall theme. its also still kinda buggy.
Got more work done today than the past few days. I added two apps! a doodle app and a a library app (just lotr excerpts for now). The pdf viewer seriously did not want to open. It really took some time to get that working. also the window resizing isnt really that great there are a lot of problems. More tomorrow!
was putting out fires all over the place today. Some windows kept opening INSIDE other windows! turns out it was because of a single missing closing div tag🙇♀️it took me soooo long, Besides all that i fixed up the library app and added a new map app. I improved some of the other apps as well.
i added an interactive sparkly cursor today. Also added features within 2 apps : user can add their own events to the calendar, a clear all feature in the doodle app. i was also on the hunt for excerpts to add to the library app.
i worked on adding widgets today. was really difficult cuz i had no experience with that level. I wanted to reuse functions from the weather app for the weather widget. I tried but i couldnt :(. I wrote a whole new function for the widget itself. for now, i added some basic widgets such as calendar, weather and clock (they arent draggable yet tho, also im not feeling the clock design, prolly will change it later). Will definitely add more creative ones along the way :)
hellooooo. i added an intro video today. (idk why i didnt think to add one until now, i only remembered when i went through all the amazing projects uploaded to this mission). Besides the 2 hrs logged, i spent designing the leftover logos (i didnt find the emojis to fit the style). The coding mostly involved me trying to get the widgets to cooperate. The dragging was glitchy then there would some random small error that made everything else stop working. basically today wasnt really coding heavy but fixing a lot of things and improving the feel. (o゜▽゜)o
hiya. i was fixing the sizing and locations of a few widgets. I spent most time trying to place the location pins on the right places in the map. i was able to do it for a couple of locations but not all. (it TAKES a long time). i also uploaded the images for the icons. I still havent thought of a good idea for the doodle app icon but itll hit me soooon. 🫨🫨
phew, added plenty of easter eggs today. some of them fly across the screen and some are hidden and takes a little exploring to find them. I want to make my os as interactive and not boring as possible so im gonna work more on that from tmrw. oKiE
flyButterfly(){ Today i added i worked on the js for the easter eggs and and added a few more interactive features. the OS looks more alive now!!!! i love itttttt. They’re still kinda glitchy and i will be trying to figure out the problemmm.. toodles!} 🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋
I’m getting closer to shipping. I added two more fun buttons near the top: one is a memory window that tracks all the apps u opened and all the easter eggs u foundd , (i connected all the apps, buttons and easter eggs to this window; it counts each first time u click on it) the other is kinda like another easter egg. I fixed up a lot of the layering i didnt want the easter eggs/animations to get in the way of the user when theyre using any apps so i fixed up a lot of that as well. I cleaned up a lot of other code as well. I also learnt that I kept typing ‘colour’ instead of ‘color’ in a lot of places 😅😅 so i hit find & replace for those. I then spent some time improving the intro window and intro video I made it more appealing. Im happy with the work now actually. Ive come along way from the personal site mission. (o゜▽゜)o☆
Last devlog before I ship! I added yet another easter egg (i couldnt help myself 😅) They change depending on what mode you’re in (light/dark). Besides that, I fixed a couple of errors that i was saving for the end. I wanted the OS to be as smooth as possible (enjoyable as well but that comes second). Biggest change of all: I changed the name from Middle-earth OS to Wanderlust OS because I felt it fit my project better. I’m ready to ship!
Ships:
Middle-earth OS is a browser based operating system inspired by the world of the Lord of the Rings. I built it with HTML, CSS and JS (I became pretty confident with these 3 after completing the personal site mission) Ship #1 focused on fulfilling the basic requirements. It has draggable and resizable windows, a taskbar, time display at the bottom. Also has 3 simple apps: Notes, Timer and Gallery. So far, it’s super basic. I’m developing this in multiple ships adding smth new each time. You can already see I have two other apps in the working(Map and Palantir). I will definitely make it more polished visually and technically. (Ship #2 will have more lotr themed apps and more unique features (ive already thought of a few amazing ones)). The goal is to turn this simple OS into a full immersive one.
Wanderlust OS is my fantasy world themed WebOS project inspired by the Lord of the Rings universe (people who haven’t heard of the lord of the rings can use it too!). I wanted to make something that felt like a little world of its own while being very easy to use. I started with a basic webOS for Ship #1 where I built the main foundation. It had draggable and resizable windows, a taskbar and very few apps. From there for Ship #2 I completely transformed it adding many interactive features, music and plenty of easter eggs and fun apps. The Apps include Notes, Gallery, Timer, Map of Middle-earth, Palantir (weather app but as a crystal ball!), Calendar, Doodle, Library (with book excerpts related to lotr) and Settings. Main Features Light mode and Dark mode- Both are very different and the music and many elements completely changes between light and dark. Imo the dark mode is the most fun part of the project. The Fun parts- There are many things flying across the screen once you open the OS. Also there many clickable things I’ve added to make it fun and interactive to those who visit (like flowers, butterflies and some themed things). Clicking the arkenstone (the glowy rock) at the top opens the journey window and tracks all the apps and easter eggs u opened (wanted to add smth to let the user know whether they’ve found all the features). What was challenging? I started learning HTML and CSS through the personal site mission and I feel like I’ve improved a lot. In the beginning I found it hard to get a hang of it (the functionality and the design part, for eg light/ dark mode) and I believe Ive come a long way! Yes I encountered lot of problems in between but it was a learning experience. What am I proud of? Im very proud of all the interactive features I thought of and built on my own (especially dark mode). They arent necessary for the OS to function but they made a huge difference and I enjoyed building them tooo. For more details, please read the readme. I believe I’ve covered everything there is to cover but I’ll take feedback to improve the project and make it as user friendly as possible. Make sure to click around the desktop and see what you find! And to everyone who read till here…thank you! ^ o^/...
|
1792976144.3116612
|
1793062544.3116612
|
|
21938
|
lockrs by @confused-ace-noises | Stardance
|
confused-ace-noises
|
2
|
49.0
|
865
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-23T18:19:09Z", "hours": 16.0, "multiplier": 15.58, "payout": 249, "blessing": "neutral", "text": "This ship adds some new functionality! Namely, the ability to take a screenshot of the lockscreen (if you dont want this, it can be disabled through the disabling of the default screenshot feature), new builtin widgets, and some stuff buried a bit more deeply in the logic, such as adding a worker thread for slow operations, fixing some bad output-dependant handling and adding support for more keyboard keys. The most challenging thing about this ship was trying to understand how to make vulkan play nice with ext_session_lock_v1 when setting the buffer scaling, it took me a long time for like- no reason TuT. Anyways, here’s two screenshots of lockscreens i made while developing lockrs:", "repo": "https://github.com/confused-ace-noises/lockrs/", "demo": "https://crates.io/crates/lockrs"}, {"ship_num": 2, "ts": "2026-06-30T14:45:51Z", "hours": 33.0, "multiplier": 18.69, "payout": 616, "blessing": "neutral", "text": "Lockrs is a library that aims to make Wayland screen lockers as customizable as possible. First of all, it’s written in the Rust language, and it’s essentially an implementation of the egui crate for lock screen surfaces; This means it can be truly used for anything (or well, anything egui can possibly do). This project was born out of frustration of the little customizability that other projects offer, relying at most on a simple config file to define everything. It is based on the wayland-client, wgpu and egui crates, which make it compatible with practically any modern Wayland compositor (to be specific, all compositors implementing the ext-session-lock-v1 protocol); using wayland-client was quite hard, as it was really my first time making something that supports graphics and juggling communications with an outside application in the meantime. I think this project was very successful in helping me learn about how Wayland works, and a little bit of how rendering works too. Overall, I’m quite proud of how it turned out, and i have already made my own lock screen (see picture below).", "repo": "https://github.com/confused-ace-noises/lockrs/", "demo": "https://crates.io/crates/lockrs"}]...
|
[{"post_id": 72759, "ts": "202 [{"post_id": 72759, "ts": "2026-09-23T17:56:49Z", "hours": 0.5272, "text": "Reviewed the code before the ship! noting much to report, i’ll just put the new lockscreen again"}, {"post_id": 71234, "ts": "2026-09-20T14:25:17Z", "hours": 10.2025, "text": "A lot of big changes! these 10 hours of coding felt like a constant rabbit hole, but i finally fixed all the things i found TuT. First of all, i made some new widgets: namely, a text input for the password that reserves space for the “login failed” failure text, an uptime widget and widget that fetches the default network interface. While making an example lock screen using these new widgets, i noticed that taking a screenshot was just a huge pain; One had to go do gpu texture copying magic and it was just A Bad Time in general. So, i decided to bake that functionality into lockrs itself, so now there’s a screenshot feature (enabled by default) which makes it able to save screenshots. But while implementing the screenshot feature, i noticed that there were some inconsistencies in the multiple output logic and in the buffer scaling logic, so i fixed those (this took surprisingly long :p). After implementing that, i went to take that screenshot, and noticed that the UI would freeze for a bit while the disk I/O of saving the image was running. This was quite annoying, so i also decided to make a whole ass worker thread that handles password checking (which also used to hang the UI thread, albeit for a short time) and to save the screenshot. Anyways, after this journey of a few days of coding, here’s the example screenshot, finally: P.S.: while trying to put an image here, firefox crashed and i had to rewrite this whole thing… to anyone seeing this, save your devlogs somewhere before adding pics :p"}, {"post_id": 61515, "ts": "2026-09-04T13:55:26Z", "hours": 5.4758, "text": "Well, im at it again with this project. I took quite a long break to make another project, and now have had the time to come back to this. I’ve finally written some in-depth docs, and will review them later today with a fresh mind to be sure that they’re as right as possible. I also fixed a design flaw, but im not very sure if how i did it really fixed it. Before, this is the old way it’s doing it: app .ui (| _ , ui | { // put stuff inside some ui levels egui :: CentralPanel :: default () .frame ( egui :: Frame :: NONE ) .show ( ui , | ui | { // maybe make new ui levels // inside the levels, return TryExit TryExit :: Force }) .inner.inner.inner //as many .inner as ui levels // TryExit is in, because you need to return the inner TryExit }) this felt extremely clunky. So, i solved it like this: // mutable reference to a TryExit app .ui (| _ , ui , exit : & mut TryExit | { // as many levels as you want egui :: CentralPanel :: default () .frame ( egui :: Frame :: NONE ) .show ( ui , | ui | { // instead of returning it, mutate the passed-in reference * exit = TryExit :: Force ; }); // no need to return anything, so no .inner }) this feels a bit better, but idrk still. For the time being, the API will be the latter. Anyways, have a look at the new docs:"}, {"post_id": 19151, "ts": "2026-06-30T12:13:07Z", "hours": 5.495, "text": "After taking a small break, i finally finished this project. I decided to turn it into a library instead of a really customizable lockscreen, because what would be the purpose in making something that could very well work in any number of ways and then limiting it to a few widgets? I’m quite satisfied with how it turned out, even if there are a few rough spots. Also, i decided to license it under MIT or Apache 2.0, as per convention for rust libraries. In the end, i’ll be definitely using lockrs, and i hope some other people will too."}, {"post_id": 15087, "ts": "2026-06-24T14:53:06Z", "hours": 3.2564, "text": "I managed to add PAM authentication. I also tried to add support for shaders and in general gpu work, and discovering i bit off way more than i can chew, i just decided not to. So, i tried to add a background, but i stumbled upon an obstacle which sent me diving into egui’s source code, because it kept claiming that it couldn’t load images with side bigger than 2048px; turns out this is only a limitation of the WebGPU API, that, as the name suggests, runs on browsers, not on desktops. Anyways, after a lot of fiddling with egui’s components, i managed to make it use images with sides up to 8000px. Now i’ll probably customize the bar a little, and maybe make a few egui widgets for it."}, {"post_id": 14354, "ts": "2026-06-23T13:37:48Z", "hours": 9.2189, "text": "After wrecking my mind unnecessarily over how to handle pointer events for a ridiculous amount of time, I finally got something that somehow works; now i also have a working text input! It just prints the input to the terminal for now, but I’ll be messing with PAM a bit to do authentication now. wish me luck!"}, {"post_id": 12838, "ts": "2026-06-21T00:42:13Z", "hours": 8.1453, "text": "I finally got the keyboard to work! for now, it just exits as soon as a key is pressed, but i’m working on implementing full functionality. also, now the code is much much cleaner, properly divided in functions instead of being all chucked into main. I don’t really have a way to display this with a screenshot, so i’ll just reuse an old one unfortunately :p"}, {"post_id": 11926, "ts": "2026-06-19T13:25:36Z", "hours": 2.0419, "text": "Well, i managed to render to the lock screen with egui instead of using the raw buffer; for now, it’s still a mess of spaghetti code that barely works and will turn into a footgun very quickly if i don’t get working on the lower level part of it instead of throwing stuff at the wall and seeing if it sticks. The next step is tidying the code up instead of throwing everything into main, so that i can get some customization going. Also, i should probably add the authentication part of the lock screen instead of having it unlock after a few seconds."}, {"post_id": 11649, "ts": "2026-06-19T00:01:07Z", "hours": 4.8064, "text": "I finished a first proof of concept for wl-lock; right now, it locks the user out for two seconds while displaying a mauve screen. For now, it’s still fully cpu rendered, but i plan on adding gpu-accelerated background blur and general effects. The next step is hooking egui into it!"}]...
|
Title: lockrs by @confused-ace-noises | Stardance
Title: lockrs by @confused-ace-noises | Stardance
Devlogs:
I finished a first proof of concept for wl-lock; right now, it locks the user out for two seconds while displaying a mauve screen. For now, it’s still fully cpu rendered, but i plan on adding gpu-accelerated background blur and general effects. The next step is hooking egui into it!
Well, i managed to render to the lock screen with egui instead of using the raw buffer; for now, it’s still a mess of spaghetti code that barely works and will turn into a footgun very quickly if i don’t get working on the lower level part of it instead of throwing stuff at the wall and seeing if it sticks. The next step is tidying the code up instead of throwing everything into main, so that i can get some customization going. Also, i should probably add the authentication part of the lock screen instead of having it unlock after a few seconds.
I finally got the keyboard to work! for now, it just exits as soon as a key is pressed, but i’m working on implementing full functionality. also, now the code is much much cleaner, properly divided in functions instead of being all chucked into main. I don’t really have a way to display this with a screenshot, so i’ll just reuse an old one unfortunately :p
After wrecking my mind unnecessarily over how to handle pointer events for a ridiculous amount of time, I finally got something that somehow works; now i also have a working text input! It just prints the input to the terminal for now, but I’ll be messing with PAM a bit to do authentication now. wish me luck!
I managed to add PAM authentication. I also tried to add support for shaders and in general gpu work, and discovering i bit off way more than i can chew, i just decided not to. So, i tried to add a background, but i stumbled upon an obstacle which sent me diving into egui’s source code, because it kept claiming that it couldn’t load images with side bigger than 2048px; turns out this is only a limitation of the WebGPU API, that, as the name suggests, runs on browsers, not on desktops. Anyways, after a lot of fiddling with egui’s components, i managed to make it use images with sides up to 8000px. Now i’ll probably customize the bar a little, and maybe make a few egui widgets for it.
After taking a small break, i finally finished this project. I decided to turn it into a library instead of a really customizable lockscreen, because what would be the purpose in making something that could very well work in any number of ways and then limiting it to a few widgets? I’m quite satisfied with how it turned out, even if there are a few rough spots. Also, i decided to license it under MIT or Apache 2.0, as per convention for rust libraries. In the end, i’ll be definitely using lockrs, and i hope some other people will too.
Well, im at it again with this project. I took quite a long break to make another project, and now have had the time to come back to this. I’ve finally written some in-depth docs, and will review them later today with a fresh mind to be sure that they’re as right as possible. I also fixed a design flaw, but im not very sure if how i did it really fixed it. Before, this is the old way it’s doing it: app .ui (| _ , ui | { // put stuff inside some ui levels egui :: CentralPanel :: default () .frame ( egui :: Frame :: NONE ) .show ( ui , | ui | { // maybe make new ui levels // inside the levels, return TryExit TryExit :: Force }) .inner.inner.inner //as many .inner as ui levels // TryExit is in, because you need to return the inner TryExit }) this felt extremely clunky. So, i solved it like this: // mutable reference to a TryExit app .ui (| _ , ui , exit : & mut TryExit | { // as many levels as you want egui :: CentralPanel :: default () .frame ( egui :: Frame :: NONE ) .show ( ui , | ui | { // instead of returning it, mutate the passed-in reference * exit = TryExit :: Force ; }); // no need to return anything, so no .inner }) this feels a bit better, but idrk still. For the time being, the API will be the latter. Anyways, have a look at the new docs:
A lot of big changes! these 10 hours of coding felt like a constant rabbit hole, but i finally fixed all the things i found TuT. First of all, i made some new widgets: namely, a text input for the password that reserves space for the “login failed” failure text, an uptime widget and widget that fetches the default network interface. While making an example lock screen using these new widgets, i noticed that taking a screenshot was just a huge pain; One had to go do gpu texture copying magic and it was just A Bad Time in general. So, i decided to bake that functionality into lockrs itself, so now there’s a screenshot feature (enabled by default) which makes it able to save screenshots. But while implementing the screenshot feature, i noticed that there were some inconsistencies in the multiple output logic and in the buffer scaling logic, so i fixed those (this took surprisingly long :p). After implementing that, i went to take that screenshot, and noticed that the UI would freeze for a bit while the disk I/O of saving the image was running. This was quite annoying, so i also decided to make a whole ass worker thread that handles password checking (which also used to hang the UI thread, albeit for a short time) and to save the screenshot. Anyways, after this journey of a few days of coding, here’s the example screenshot, finally: P.S.: while trying to put an image here, firefox crashed and i had to rewrite this whole thing… to anyone seeing this, save your devlogs somewhere before adding pics :p
Reviewed the code before the ship! noting much to report, i’ll just put the new lockscreen again
Ships:
Lockrs is a library that aims to make Wayland screen lockers as customizable as possible. First of all, it’s written in the Rust language, and it’s essentially an implementation of the egui crate for lock screen surfaces; This means it can be truly used for anything (or well, anything egui can possibly do). This project was born out of frustration of the little customizability that other projects offer, relying at most on a simple config file to define everything. It is based on the wayland-client, wgpu and egui crates, which make it compatible with practically any modern Wayland compositor (to be specific, all compositors implementing the ext-session-lock-v1 protocol); using wayland-client was quite hard, as it was really my first time making something that supports graphics and juggling communications with an outside application in the meantime. I think this project was very successful in helping me learn about how Wayland works, and a little bit of how rendering works too. Overall, I’m quite proud of how it turned out, and i have already made my own lock screen (see picture below).
This ship adds some new functionality! Namely, the ability to take a screenshot of the lockscreen (if you dont want this, it can be disabled through the disabling of the default screenshot feature), new builtin widgets, and some stuff buried a bit more deeply in the logic, such as adding a worker thread for slow operations, fixing some bad output-dependant handling and adding support for more keyboard keys. The most challenging thing about this ship was trying to understand how to make vulkan play nice with ext_session_lock_v1 when setting the buffer scaling, it took me a long time for like- no reason TuT. Anyways, here’s two screenshots of lockscreens i made while developing lockrs:...
|
1792972058.6081924
|
1793058458.6081924
|
|
42717
|
Flujo by @jupeme6 | Stardance
|
jupeme6
|
2
|
65.0
|
864
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-09T01:07:38Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? A local-first expense tracker called Flujo with an editorial / ledger aesthetic. It tracks income and expenses, has a Sankey diagram drawn from scratch on canvas (no libraries), an OCR ticket scanner, a debt settlement system for flatmates, budgets with alerts, savings goals, statistics, and CSV/JSON backup. Six betas in total. Everything is in localStorage, no backend, no account, PWA installable for offline use. What was challenging? The Sankey diagram was the hardest. Built it with bezier curves on canvas, had to fix proportional sizing and ribbon flow. The OCR scanner had a bug where it would hang forever because I was calling a boolean instead of the Tesseract library. The i18n had a sneaky bug where early betas left some sections in Spanish even after switching to English. What are you proud of? The Sankey diagram with zero dependencies, the greedy algorithm that settles debts with the minimum number of transfers, and the statistics dashboard comparing month-over-month spending. The whole thing works offline. What should people know so they can test your project? Open the demo. Choose language on first launch. The resumen tab has charts, budgets, goals, stats, and backup. The apuntes tab is for expenses. The tickets tab scans receipts via OCR. The deudas tab tracks shared expenses and suggests minimum transfers to settle. Gear icon for dark mode and language. Live demo: https://notjuangamer10.github.io/flujo/ Source: https://github.com/notjuangamer10/flujo", "repo": "https://github.com/NOTJuangamer10/flujo", "demo": "https://notjuangamer10.github.io/flujo/"}, {"ship_num": 2, "ts": "2026-08-10T14:12:57Z", "hours": 54.0, "multiplier": 16.01, "payout": 864, "blessing": "neutral", "text": "What did you make? A personal expense tracker called Flujo, built with an editorial / ledger aesthetic. The app tracks income and expenses with categories, a 5-day forecast visualization, an OCR ticket scanner, and a full debt and shared expenses system for tracking who owes whom between flatmates or friends. Everything is local-first, stored in localStorage, no account, no server, no tracking. Built in four betas. Beta 1 was the basics: add expenses, browse by month, summary totals. Beta 2 added a Sankey diagram showing money flow from income to expense categories, a stacked bar chart for the last 6 months, and a donut chart for category breakdown, all drawn on canvas with vanilla JS (no charting library). Beta 3 added a tabbed interface (resumen, apuntes, tickets, deudas) and an OCR ticket scanner using Tesseract.js that extracts products and prices from receipt photos. Beta 4 added the debts system with four split methods (equal, by shares, exact, by percentage), a greedy algorithm to settle debts with minimum transfers, pattern detection for subscriptions and recurring expenses, plus a dark mode and ES/EN language toggle. What was challenging? The Sankey diagram was the hardest part. My first version drew two separate bezier curves joined at the ends, which looked angular and flat and kinda ugly ngl. Asked another AI for help and it spotted a missing lineTo, but the real fix was using a single bezierCurveTo per ribbon with control points at 42 percent of the horizontal distance (the same proportion D3 uses). Also had to make both sides share the same scale so ribbons flow horizontally instead of diagonal. The proportional sizing was another bug: I had a minimum height of 38px, so a 10 euro expense looked the same as a 400 euro income. Fixed by dropping the minimum to 3px. The OCR scanner had a silent bug where it would hang forever on “procesando imagen”. I was calling tesseractCargado.createWorker where tesseractCargado is a boolean, not the Tesseract library object. So I was doing true.createWorker which throws a TypeError that nobody caught. Fixed by calling Tesseract.createWorker and added a 90 second timeout. The internationalization had a sneaky bug too. The language toggle translated the main UI but left the forecast and debts sections in Spanish because that code was hardcoded from earlier betas. Had to re-translate every section separately. What are you proud of? The Sankey diagram, drawn entirely with vanilla canvas, no D3 or any charting library. About 200 lines of math and bezier curves, but the result looks professional. The debt settlement algorithm that minimizes transfers, so if three people owe each other small amounts it suggests the minimum set of payments instead of everyone paying everyone. The pattern detection that finds subscriptions and projects their annual cost, which is a sobering number to see. And the whole thing works offline with no backend, no account, no tracking. What should people know so they can test your project? Open the demo URL. The resumen tab shows the Sankey diagram, bar chart and donut chart. The apuntes tab lets you add expenses and browse them by month. The tickets tab lets you upload a receipt photo and the OCR extracts products and prices automatically. The deudas tab is where you add people and track shared expenses with four split methods, then see the minimum transfers needed to settle all debts. The gear icon in the header opens settings with a dark mode toggle and ES/EN language switch. Everything is stored locally in the browser, nothing is sent anywhere. Live demo: https://notjuangamer10.github.io/flujo/ Source: https://github.com/notjuangamer10/flujo", "repo": "https://github.com/NOTJuangamer10/flujo", "demo": "https://notjuangamer10.github.io/flujo/"}]...
|
[{"post_id": 64538, "ts": "202 [{"post_id": 64538, "ts": "2026-09-09T01:02:58Z", "hours": 3.3525, "text": "Flujo 6.2. Statistics, backup, and custom categories. Statistics dashboard. The resumen tab now shows six stat cards: total spent across all time, comparison vs last month (with up/down arrows and percentage), daily average for the current month, the most expensive day of the month, number of entries this month, and average per entry. The cards update automatically when you add or remove expenses. Backup. You can export all your data to CSV (for spreadsheets) or JSON (for a full backup that includes expenses, income, people, debts, budgets, and goals). You can also import a JSON file to restore everything. Useful for moving your data to another browser or just keeping a safe copy. Custom categories. You can now create your own expense categories with a custom name and a custom color using a color picker. The new categories appear automatically in the expense form and the ticket scanner. The charts and Sankey diagram will use your custom colors."}, {"post_id": 59025, "ts": "2026-08-31T16:40:42Z", "hours": 3.5872, "text": "Flujo 6.1. Budgets and savings goals. Budgets. Set a monthly limit per category. A progress bar shows how much you have spent vs the limit. The bar changes color: category color under 80 percent, ochre at 80 to 100 (almost there warning), red over 100 (over budget). The percentage and a short warning message appear next to each bar. Delete a budget with the x button on hover. Savings goals. Set a goal with a name, target amount and optional deadline. The app calculates your current savings (total income minus total expenses across all time) and shows a green progress bar toward the goal. When you hit 100 percent the goal name turns green with a checkmark. Useful for things like save 500 for summer trip. Both features appear in the resumen tab below the charts. They update automatically when you add or remove expenses. Everything is stored in localStorage, no server."}, {"post_id": 52733, "ts": "2026-08-23T01:54:52Z", "hours": 3.9356, "text": "Beta 5 of Flujo. Improvements based on reviewer feedback.PWA installable. A service worker now caches the core files so the app works offline on desktop and Android. The manifest is generated dynamically. CDN assets like Tesseract.js and Google Fonts are not cached to avoid bloat. The app itself, your expenses and charts all work offline.Language prompt on first launch. New users now see a modal asking them to choose Spanish or English before the app loads. This was the top complaint from reviewers on my other projects, who said the language toggle was hard to find.Onboarding overlay. First-time visitors get a welcome screen explaining the four tabs (resumen, apuntes, tickets, deudas) with a short description of each, plus tips like adding income sources first to see the Sankey diagram. Dismissible with a single click.Fixed incomplete translations. The canvas text “sin datos para mostrar” and “sin gastos” now respect the language setting. The footer and header subtitle also translate. Everything visible to the user is now either English or Spanish based on the preference."}, {"post_id": 44493, "ts": "2026-08-10T09:19:08Z", "hours": 8.0956, "text": "Beta 4 of Flujo is up. The biggest one yet, split into two parts because of the autoescritor’s 10 hour session limit. Beta 4a added the settings panel with dark mode and language toggle (ES/EN). The dark mode uses a warm dark brown palette instead of the usual cold gray, so it still feels editorial. The language toggle reloads the page to re-translate static text. Beta 4b added the debts and shared expenses system. You can add people (flatmates, friends) and track who owes whom. Shared expenses support four split methods: equal, by shares (e.g. 2:1:1 means one person pays double), exact amounts per person, and by percentage. The settle-up section uses a greedy algorithm to minimize the number of transfers needed to clear all debts, so if three people owe each other small amounts, it suggests the minimum set of transfers instead of everyone paying everyone. Also added pattern detection. The app analyzes your expenses and finds recurring ones, things you pay the same amount for multiple times. It separates them into likely subscriptions (same exact amount, repeated) and general recurring expenses (same description, similar amounts). Shows the projected annual cost for subscriptions, which is a sobering number to see. Next version will be the last: FastAPI backend for sync between phone and laptop, plus PWA installable."}, {"post_id": 43704, "ts": "2026-08-09T03:31:43Z", "hours": 7.7708, "text": "Beta 4a of Flujo is up. I’m starting to get tired of being all day coding. Started the debts and shared expenses feature, plus two settings that were requested on my other projects. First, a theme toggle. The app now supports a dark mode alongside the default cream paper look. The toggle is in a small settings panel in the header. The dark palette uses a warm dark brown instead of the usual cold gray, so it still feels like the editorial aesthetic.Second, multi-language support. The interface can switch between Spanish and English. Switching reloads the page so all the static text gets re-translated. The dynamic content (expenses, descriptions) stays in whatever language the user typed it in.Third, the structure for the debts tab is in place. A new “deudas” tab appears next to resumen, apuntes and tickets. The HTML is there (persons form, shared expense form with split method selector, movements list, settle-up section, patterns section) but the JavaScript logic comes in Beta 4b. The shared expense form supports four split methods: equal, by shares (e.g. 2:1:1 means one person pays double), exact amounts per person, and by percentage.Split this into two parts because of the autoescritor session limit. 4b comes next with all the logic for shared expenses, debt settlement and pattern detection."}, {"post_id": 43184, "ts": "2026-08-08T09:33:02Z", "hours": 6.4356, "text": "Beta 4a of Flujo is up. Started the debts and shared expenses feature, plus two settings that were requested on my other projects. First, a theme toggle. The app now supports a dark mode alongside the default cream paper look. The toggle is in a small settings panel in the header. The dark palette uses a warm dark brown instead of the usual cold gray, so it still feels like the editorial aesthetic. Second, multi-language support. The interface can switch between Spanish and English. Switching reloads the page so all the static text gets re-translated. The dynamic content (expenses, descriptions) stays in whatever language the user typed it in. Third, the structure for the debts tab is in place. A new “deudas” tab appears next to resumen, apuntes and tickets. The HTML is there (persons form, shared expense form with split method selector, movements list, settle-up section, patterns section) but the JavaScript logic comes in Beta 4b. The shared expense form supports four split methods: equal, by shares (e.g. 2:1:1), exact amounts per person, and by percentage. The settle-up section will use a greedy algorithm to minimize the number of transfers needed to clear all debts."}, {"post_id": 42943, "ts": "2026-08-07T22:39:17Z", "hours": 4.0389, "text": "Beta 3.1 is a bugfix release. Two issues. First, the OCR ticket scanner was completely broken. When you uploaded a photo it would say “procesando imagen” forever and never finish. Turned out I was calling tesseractCargado.createWorker where tesseractCargado is a boolean (true), not the Tesseract library object. So I was doing true.createWorker which is undefined.createWorker which throws a TypeError that nobody caught. Switched to Tesseract.createWorker and added a 90 second timeout plus proper try/catch so it can never hang again. Second, the Sankey text was blurry. Canvas draws with whatever font is available at draw time, and if Google Fonts was still loading on the first render it fell back to Arial which looked bad when scaled by devicePixelRatio. Fixed by waiting for document.fonts.ready before the first draw, rounding all Y coordinates to integers so they align with physical pixels, and redrawing on window resize so the DPR stays correct."}, {"post_id": 42609, "ts": "2026-08-07T12:57:34Z", "hours": 7.0344, "text": "Beta 3 is up Tabs and OCR Update!! Three changes. First, the Sankey is now proportional. Before, every node had a minimum height of 38px, so a 10 euro expense looked the same as a 400 euro income. Now the minimum is 3px and both sides use the global total as their scale, so node heights actually reflect the amounts. A 10 euro category is a tiny sliver next to a 400 euro income source. Second, added tabs. The app was getting long with everything in one column. Now there are three tabs: resumen (income sources and charts), apuntes (the expense form and list), and tickets (new). The tab bar uses the same editorial styling, lowercase text with an ochre underline on the active tab. Third, the big one: OCR ticket scanning. On the tickets tab you upload a photo of a supermarket receipt and Tesseract.js extracts the text, then a regex parser pulls out product names and prices. Each detected item shows up in a list with a checkbox, you pick a category, hit save, and all items become individual expenses. The parser looks for lines ending in a decimal number (the classic receipt format) and skips lines that look like totals, subtotals or payment info. Tesseract loads from CDN the first time you use it. It runs entirely in the browser, no server involved, which keeps the local-first promise. The recognition is decent for clean photos, struggles with crumpled receipts. The parser is basic but catches most supermarket formats. If it fails, there is a details panel showing the raw OCR text so you can see what went wrong."}, {"post_id": 41662, "ts": "2026-08-06T01:01:30Z", "hours": 4.3533, "text": "Beta 2.1 is a visual rework of the Sankey diagram. Charts Update!: The previous version worked but looked rough: the flow ribbons were angular, the nodes were plain rectangles, and the two sides used independent scales so the ribbons went diagonal instead of horizontal. I asked another AI for help with the algorithm and it suggested a cleaner approach. Each ribbon is now a single bezier curve with control points at 42 percent of the horizontal distance (the same proportion D3 uses in its Sankey layout), instead of two curves joined at the ends. The nodes are rounded rectangles with a soft shadow. Both sides share the same scale so the ribbons flow straight. Nodes are centered vertically instead of pinned to the top. I kept the editorial palette: dark green for income nodes, black ink for the center “total” node, cream with a colored accent stripe for each expense category. The ribbons use the category color at 30 percent opacity so overlaps create natural layering. Also fixed a timezone bug in the 6 month bar chart. I was using toISOString to build the month key, which converts to UTC and can return the wrong month near midnight. Switched to getFullYear and getMonth which stay in local time. The bars were technically drawing before but some months were mismatched, now they line up correctly. I still have to work that better, but it isnt thaaat bad"}, {"post_id": 41274, "ts": "2026-08-05T11:58:13Z", "hours": 8.9636, "text": "Beta 2 of Flujo is up. The big one: a Sankey diagram showing the flow of your money, income sources on the left, expense categories on the right, with smooth flowing ribbons in between. Drawn on canvas with vanilla JS, no D3 or any charting library. Just bezierCurveTo and a lot of math. Also added two more charts: a stacked bar chart showing the last 6 months (each bar broken down by category, with the monthly total on top), and a donut chart for the current month’s category breakdown with a legend. To make the Sankey meaningful I had to add an income system, a small form where you register your income sources (scholarship, parents, job, etc.). The balance section now shows five numbers: spent, count, average, income, and balance (green if positive, red if negative). The Sankey was the hardest part. My first version drew two separate bezier curves (top and bottom) and joined them at the ends, the ribbons looked flat and angular, like triangles. I asked Gemini for help and it spotted a missing lineTo at the destination node, which fixed the pinch. But the ribbons still looked off. Turned out the real problem was the algorithm: each ribbon needs to be ONE single bezierCurveTo with four control points (not two curves joined), and both sides need to share the same scale (not normalize independently). Once I fixed that, the ribbons flowed organically like a real Sankey. The bar chart had a sneaky bug too: it drew the grid lines but no bars. Took me a while, I was using canvas.clientWidth (DOM size) instead of canvas.width (drawing context size). The CSS makes the canvas visually smaller than its internal resolution, so the bars were being drawn outside the visible area. Classic canvas gotcha. Used a muted, desaturated palette for the 8 categories (ochre, dusty blue, sage green, etc.) instead of bright primary colors, keeps the editorial aesthetic intact. Next version will be the OCR ticket scanner, organized in tabs so the charts don’t compete with the expense list for space. And also redigning the sankey because i dont like how it looks."}, {"post_id": 40077, "ts": "2026-08-03T13:40:22Z", "hours": 7.2981, "text": "Started a new project called Flujo, a personal expense tracker. The idea was to make something that doesn’t look like every other finance app most of them use blue or green with cards and Material-style shadows. I went with an “editorial ledger” aesthetic: paper cream background, dark ink text, an ochre accent, and three typefaces working together Fraunces (a serif) for titles, Inter Tight for UI, and JetBrains Mono with tabular numerals for the amounts so they align like a real accounting book. Beta 1 is the basics: a form to add an expense (amount, category, description, date), a list of expenses for the current month with running numbers (001, 002…), and three totals on top spent, count, and average. There’s a month selector in the header. Everything lives in localStorage, no backend, no server, no tracking. The list is called “libro mayor” (general ledger) and each entry is an “apunte” (bookkeeping entry) small details that lean into the book metaphor. Next version will add the Sankey diagram and bar charts."}]...
|
Title: Flujo by @jupeme6 | Stardance
Devlogs:
Sta Title: Flujo by @jupeme6 | Stardance
Devlogs:
Started a new project called Flujo, a personal expense tracker. The idea was to make something that doesn’t look like every other finance app most of them use blue or green with cards and Material-style shadows. I went with an “editorial ledger” aesthetic: paper cream background, dark ink text, an ochre accent, and three typefaces working together Fraunces (a serif) for titles, Inter Tight for UI, and JetBrains Mono with tabular numerals for the amounts so they align like a real accounting book. Beta 1 is the basics: a form to add an expense (amount, category, description, date), a list of expenses for the current month with running numbers (001, 002…), and three totals on top spent, count, and average. There’s a month selector in the header. Everything lives in localStorage, no backend, no server, no tracking. The list is called “libro mayor” (general ledger) and each entry is an “apunte” (bookkeeping entry) small details that lean into the book metaphor. Next version will add the Sankey diagram and bar charts.
Beta 2 of Flujo is up. The big one: a Sankey diagram showing the flow of your money, income sources on the left, expense categories on the right, with smooth flowing ribbons in between. Drawn on canvas with vanilla JS, no D3 or any charting library. Just bezierCurveTo and a lot of math. Also added two more charts: a stacked bar chart showing the last 6 months (each bar broken down by category, with the monthly total on top), and a donut chart for the current month’s category breakdown with a legend. To make the Sankey meaningful I had to add an income system, a small form where you register your income sources (scholarship, parents, job, etc.). The balance section now shows five numbers: spent, count, average, income, and balance (green if positive, red if negative). The Sankey was the hardest part. My first version drew two separate bezier curves (top and bottom) and joined them at the ends, the ribbons looked flat and angular, like triangles. I asked Gemini for help and it spotted a missing lineTo at the destination node, which fixed the pinch. But the ribbons still looked off. Turned out the real problem was the algorithm: each ribbon needs to be ONE single bezierCurveTo with four control points (not two curves joined), and both sides need to share the same scale (not normalize independently). Once I fixed that, the ribbons flowed organically like a real Sankey. The bar chart had a sneaky bug too: it drew the grid lines but no bars. Took me a while, I was using canvas.clientWidth (DOM size) instead of canvas.width (drawing context size). The CSS makes the canvas visually smaller than its internal resolution, so the bars were being drawn outside the visible area. Classic canvas gotcha. Used a muted, desaturated palette for the 8 categories (ochre, dusty blue, sage green, etc.) instead of bright primary colors, keeps the editorial aesthetic intact. Next version will be the OCR ticket scanner, organized in tabs so the charts don’t compete with the expense list for space. And also redigning the sankey because i dont like how it looks.
Beta 2.1 is a visual rework of the Sankey diagram. Charts Update!: The previous version worked but looked rough: the flow ribbons were angular, the nodes were plain rectangles, and the two sides used independent scales so the ribbons went diagonal instead of horizontal. I asked another AI for help with the algorithm and it suggested a cleaner approach. Each ribbon is now a single bezier curve with control points at 42 percent of the horizontal distance (the same proportion D3 uses in its Sankey layout), instead of two curves joined at the ends. The nodes are rounded rectangles with a soft shadow. Both sides share the same scale so the ribbons flow straight. Nodes are centered vertically instead of pinned to the top. I kept the editorial palette: dark green for income nodes, black ink for the center “total” node, cream with a colored accent stripe for each expense category. The ribbons use the category color at 30 percent opacity so overlaps create natural layering. Also fixed a timezone bug in the 6 month bar chart. I was using toISOString to build the month key, which converts to UTC and can return the wrong month near midnight. Switched to getFullYear and getMonth which stay in local time. The bars were technically drawing before but some months were mismatched, now they line up correctly. I still have to work that better, but it isnt thaaat bad
Beta 3 is up Tabs and OCR Update!! Three changes. First, the Sankey is now proportional. Before, every node had a minimum height of 38px, so a 10 euro expense looked the same as a 400 euro income. Now the minimum is 3px and both sides use the global total as their scale, so node heights actually reflect the amounts. A 10 euro category is a tiny sliver next to a 400 euro income source. Second, added tabs. The app was getting long with everything in one column. Now there are three tabs: resumen (income sources and charts), apuntes (the expense form and list), and tickets (new). The tab bar uses the same editorial styling, lowercase text with an ochre underline on the active tab. Third, the big one: OCR ticket scanning. On the tickets tab you upload a photo of a supermarket receipt and Tesseract.js extracts the text, then a regex parser pulls out product names and prices. Each detected item shows up in a list with a checkbox, you pick a category, hit save, and all items become individual expenses. The parser looks for lines ending in a decimal number (the classic receipt format) and skips lines that look like totals, subtotals or payment info. Tesseract loads from CDN the first time you use it. It runs entirely in the browser, no server involved, which keeps the local-first promise. The recognition is decent for clean photos, struggles with crumpled receipts. The parser is basic but catches most supermarket formats. If it fails, there is a details panel showing the raw OCR text so you can see what went wrong.
Beta 3.1 is a bugfix release. Two issues. First, the OCR ticket scanner was completely broken. When you uploaded a photo it would say “procesando imagen” forever and never finish. Turned out I was calling tesseractCargado.createWorker where tesseractCargado is a boolean (true), not the Tesseract library object. So I was doing true.createWorker which is undefined.createWorker which throws a TypeError that nobody caught. Switched to Tesseract.createWorker and added a 90 second timeout plus proper try/catch so it can never hang again. Second, the Sankey text was blurry. Canvas draws with whatever font is available at draw time, and if Google Fonts was still loading on the first render it fell back to Arial which looked bad when scaled by devicePixelRatio. Fixed by waiting for document.fonts.ready before the first draw, rounding all Y coordinates to integers so they align with physical pixels, and redrawing on window resize so the DPR stays correct.
Beta 4a of Flujo is up. Started the debts and shared expenses feature, plus two settings that were requested on my other projects. First, a theme toggle. The app now supports a dark mode alongside the default cream paper look. The toggle is in a small settings panel in the header. The dark palette uses a warm dark brown instead of the usual cold gray, so it still feels like the editorial aesthetic. Second, multi-language support. The interface can switch between Spanish and English. Switching reloads the page so all the static text gets re-translated. The dynamic content (expenses, descriptions) stays in whatever language the user typed it in. Third, the structure for the debts tab is in place. A new “deudas” tab appears next to resumen, apuntes and tickets. The HTML is there (persons form, shared expense form with split method selector, movements list, settle-up section, patterns section) but the JavaScript logic comes in Beta 4b. The shared expense form supports four split methods: equal, by shares (e.g. 2:1:1), exact amounts per person, and by percentage. The settle-up section will use a greedy algorithm to minimize the number of transfers needed to clear all debts.
Beta 4a of Flujo is up. I’m starting to get tired of being all day coding. Started the debts and shared expenses feature, plus two settings that were requested on my other projects. First, a theme toggle. The app now supports a dark mode alongside the default cream paper look. The toggle is in a small settings panel in the header. The dark palette uses a warm dark brown instead of the usual cold gray, so it still feels like the editorial aesthetic.Second, multi-language support. The interface can switch between Spanish and English. Switching reloads the page so all the static text gets re-translated. The dynamic content (expenses, descriptions) stays in whatever language the user typed it in.Third, the structure for the debts tab is in place. A new “deudas” tab appears next to resumen, apuntes and tickets. The HTML is there (persons form, shared expense form with split method selector, movements list, settle-up section, patterns section) but the JavaScript logic comes in Beta 4b. The shared expense form supports four split methods: equal, by shares (e.g. 2:1:1 means one person pays double), exact amounts per person, and by percentage.Split this into two parts because of the autoescritor session limit. 4b comes next with all the logic for shared expenses, debt settlement and pattern detection.
Beta 4 of Flujo is up. The biggest one yet, split into two parts because of the autoescritor’s 10 hour session limit. Beta 4a added the settings panel with dark mode and language toggle (ES/EN). The dark mode uses a warm dark brown palette instead of the usual cold gray, so it still feels editorial. The language toggle reloads the page to re-translate static text. Beta 4b added the debts and shared expenses system. You can add people (flatmates, friends) and track who owes whom. Shared expenses support four split methods: equal, by shares (e.g. 2:1:1 means one person pays double), exact amounts per person, and by percentage. The settle-up section uses a greedy algorithm to minimize the number of transfers needed to clear all debts, so if three people owe each other small amounts, it suggests the minimum set of transfers instead of everyone paying everyone. Also added pattern detection. The app analyzes your expenses and finds recurring ones, things you pay the same amount for multiple times. It separates them into likely subscriptions (same exact amount, repeated) and general recurring expenses (same description, similar amounts). Shows the projected annual cost for subscriptions, which is a sobering number to see. Next version will be the last: FastAPI backend for sync between phone and laptop, plus PWA installable.
Beta 5 of Flujo. Improvements based on reviewer feedback.PWA installable. A service worker now caches the core files so the app works offline on desktop and Android. The manifest is generated dynamically. CDN assets like Tesseract.js and Google Fonts are not cached to avoid bloat. The app itself, your expenses and charts all work offline.Language prompt on first launch. New users now see a modal asking them to choose Spanish or English before the app loads. This was the top complaint from reviewers on my other projects, who said the language toggle was hard to find.Onboarding overlay. First-time visitors get a welcome screen explaining the four tabs (resumen, apuntes, tickets, deudas) with a short description of each, plus tips like adding income sources first to see the Sankey diagram. Dismissible with a single click.Fixed incomplete translations. The canvas text “sin datos para mostrar” and “sin gastos” now respect the language setting. The footer and header subtitle also translate. Everything visible to the user is now either English or Spanish based on the preference.
Flujo 6.1. Budgets and savings goals. Budgets. Set a monthly limit per category. A progress bar shows how much you have spent vs the limit. The bar changes color: category color under 80 percent, ochre at 80 to 100 (almost there warning), red over 100 (over budget). The percentage and a short warning message appear next to each bar. Delete a budget with the x button on hover. Savings goals. Set a goal with a name, target amount and optional deadline. The app calculates your current savings (total income minus total expenses across all time) and shows a green progress bar toward the goal. When you hit 100 percent the goal name turns green with a checkmark. Useful for things like save 500 for summer trip. Both features appear in the resumen tab below the charts. They update automatically when you add or remove expenses. Everything is stored in localStorage, no server.
Flujo 6.2. Statistics, backup, and custom categories. Statistics dashboard. The resumen tab now shows six stat cards: total spent across all time, comparison vs last month (with up/down arrows and percentage), daily average for the current month, the most expensive day of the month, number of entries this month, and average per entry. The cards update automatically when you add or remove expenses. Backup. You can export all your data to CSV (for spreadsheets) or JSON (for a full backup that includes expenses, income, people, debts, budgets, and goals). You can also import a JSON file to restore everything. Useful for moving your data to another browser or just keeping a safe copy. Custom categories. You can now create your own expense categories with a custom name and a custom color using a color picker. The new categories appear automatically in the expense form and the ticket scanner. The charts and Sankey diagram will use your custom colors.
Ships:
What did you make? A personal expense tracker called Flujo, built with an editorial / ledger aesthetic. The app tracks income and expenses with categories, a 5-day forecast visualization, an OCR ticket scanner, and a full debt and shared expenses system for tracking who owes whom between flatmates or friends. Everything is local-first, stored in localStorage, no account, no server, no tracking. Built in four betas. Beta 1 was the basics: add expenses, browse by month, summary totals. Beta 2 added a Sankey diagram showing money flow from income to expense categories, a stacked bar chart for the last 6 months, and a donut chart for category breakdown, all drawn on canvas with vanilla JS (no charting library). Beta 3 added a tabbed interface (resumen, apuntes, tickets, deudas) and an OCR ticket scanner using Tesseract.js that extracts products and prices from receipt photos. Beta 4 added the debts system with four split methods (equal, by shares, exact, by percentage), a greedy algorithm to settle debts with minimum transfers, pattern detection for subscriptions and recurring expenses, plus a dark mode and ES/EN language toggle. What was challenging? The Sankey diagram was the hardest part. My first version drew two separate bezier curves joined at the ends, which looked angular and flat and kinda ugly ngl. Asked another AI for help and it spotted a missing lineTo, but the real fix was using a single bezierCurveTo per ribbon with control points at 42 percent of the horizontal distance (the same proportion D3 uses). Also had to make both sides share the same scale so ribbons flow horizontally instead of diagonal. The proportional sizing was another bug: I had a minimum height of 38px, so a 10 euro expense looked the same as a 400 euro income. Fixed by dropping the minimum to 3px. The OCR scanner had a silent bug where it would hang forever on “procesando imagen”. I was calling tesseractCargado.createWorker where tesseractCargado is a boolean, not the Tesseract library object. So I was doing true.createWorker which throws a TypeError that nobody caught. Fixed by calling Tesseract.createWorker and added a 90 second timeout. The internationalization had a sneaky bug too. The language toggle translated the main UI but left the forecast and debts sections in Spanish because that code was hardcoded from earlier betas. Had to re-translate every section separately. What are you proud of? The Sankey diagram, drawn entirely with vanilla canvas, no D3 or any charting library. About 200 lines of math and bezier curves, but the result looks professional. The debt settlement algorithm that minimizes transfers, so if three people owe each other small amounts it suggests the minimum set of payments instead of everyone paying everyone. The pattern detection that finds subscriptions and projects their annual cost, which is a sobering number to see. And the whole thing works offline with no backend, no account, no tracking. What should people know so they can test your project? Open the demo URL. The resumen tab shows the Sankey diagram, bar chart and donut chart. The apuntes tab lets you add expenses and browse them by month. The tickets tab lets you upload a receipt photo and the OCR extracts products and prices automatically. The deudas tab is where you add people and track shared expenses with four split methods, then see the minimum transfers needed to settle all debts. The gear icon in the header opens settings with a dark mode toggle and ES/EN language switch. Everything is stored locally in the browser, nothing is sent anywhere. Live demo: https://notjuangamer10.github.io/flujo/ Source: https://github.com/notjuangamer10/flujo
What did you make? A local-first expense tracker called Flujo with an editorial / ledger aesthetic. It tracks income and expenses, has a Sankey diagram drawn from scratch on canvas (no libraries), an OCR ticket scanner, a debt settlement system for flatmates, budgets with alerts, savings goals, statistics, and CSV/JSON backup. Six betas in total. Everything is in localStorage, no backend, no account, PWA installable for offline use. What was challenging? The Sankey diagram was the hardest. Built it with bezier curves on canvas, had to fix proportional sizing and ribbon flow. The OCR scanner had a bug where it would hang forever because I was calling a boolean instead of the Tesseract library. The i18n had a sneaky bug where early betas left some sections in Spanish even after switching to English. What are you proud of? The Sankey diagram with zero dependencies, the greedy algorithm that settles debts with the minimum number of transfers, and the statistics dashboard comparing month-over-month spending. The whole thing works offline. What should people know so they can test your project? Open the demo. Choose language on first launch. The resumen tab has charts, budgets, goals, stats, and backup. The apuntes tab is for expenses. The tickets tab scans receipts via OCR. The deudas tab tracks shared expenses and suggests minimum transfers to settle. Gear icon for dark mode and language. Live demo: https://notjuangamer10.github.io/flujo/ Source: https://github.com/notjuangamer10/flujo...
|
1792878584.0517979
|
1793742584.0517979
|
|
36815
|
Samourai-On-A-Budget by @barseghian_daniel | Stard Samourai-On-A-Budget by @barseghian_daniel | Stardance...
|
barseghian_daniel
|
1
|
58.0
|
862
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-17T21:30:35Z", "hours": 58.0, "multiplier": 14.91, "payout": 862, "blessing": "neutral", "text": "I made a Unity game after 3 years! I really loved relearning C# and Unity. The hardest part was designing, I HAD SO MUCH PAIN, I suck at 3D modeling and making good maps, but I went through a lot of effort and time to make an acceptable map. You can directly try the project in the web or download it for Windows/Mac/Linux in the GitHub release! You can read the Gameplay section of the README if you are lost!", "repo": "https://github.com/danielbarseghian/Kill-The-Monkey", "demo": "https://play.unity.com/en/games/8dd04e48-e69a-4a05-9a92-8c9d7a5b3e64/kill-the-monkey"}]...
|
[{"post_id": 49208, "ts": "202 [{"post_id": 49208, "ts": "2026-08-17T21:19:23Z", "hours": 0.9833, "text": "README IS DONE i feel kinda sad but happy at the same time that its finishing.."}, {"post_id": 48991, "ts": "2026-08-17T16:10:14Z", "hours": 1.6167, "text": "Its on the web ! you can try it out here"}, {"post_id": 48878, "ts": "2026-08-17T13:23:40Z", "hours": 4.9692, "text": "ITS REALEAAAAAASED i did alot of small adjustmenets for release check it out here . Its tested for windows and linux, unfortantly i don’t own any mac devices."}, {"post_id": 47756, "ts": "2026-08-15T21:51:34Z", "hours": 0.8167, "text": "Made Start menu is this a W menu? i worked really hard on the background. btw the quit button moves every 1.5 secondes so its harder to quit :)"}, {"post_id": 47595, "ts": "2026-08-15T16:12:36Z", "hours": 1.0767, "text": "10 humans vs 1 monkey We can finally know who will win 10 humans vs 1 monkey (but the monkey doesn’t attack…) i wonder who will win!"}, {"post_id": 47507, "ts": "2026-08-15T13:48:03Z", "hours": 6.0758, "text": "Why the game is so ugly I CAN’T MODEL, my designing skills are soooo bad and let’s not talk about modeling….. But i still took a lot of time and effort to make an “ ok ” map, it may be ugly, but its the best i could! please don’t try to understand the storyline…."}, {"post_id": 46548, "ts": "2026-08-13T21:10:58Z", "hours": 1.5986, "text": "Full level 2 implementation and transition between levels and heart system with vulnarability! I added a heart system with a 10s vulnability each time you get heart! The level 2 is kinda hard (even as a pro gamer) Added transition between the levels when you reach the end :)"}, {"post_id": 46224, "ts": "2026-08-13T09:43:58Z", "hours": 2.9506, "text": "IM BACKKKKKKKK i reinstalled windows, repasted graphics card (dropped 30°C), in the past week. Look at all this dust, no wonder why it was overheating…"}, {"post_id": 42160, "ts": "2026-08-06T19:23:13Z", "hours": 3.3222, "text": "Deleted it all yes i said hey free 16gb on my pc and minutes later realized the big mistake…"}, {"post_id": 40411, "ts": "2026-08-03T21:48:54Z", "hours": 1.0839, "text": "Added buch of things Now when you parry the bullet will reverse and go where you look. Added sword swing sound effect & Started making level 2!"}, {"post_id": 40366, "ts": "2026-08-03T20:32:51Z", "hours": 0.4014, "text": "Added the music"}, {"post_id": 40128, "ts": "2026-08-03T15:05:15Z", "hours": 1.15, "text": "Monkey dancing Gangnam Style before GTA 6 ?? It took 1h30, was it worth it? Absolutly."}, {"post_id": 40083, "ts": "2026-08-03T13:53:20Z", "hours": 0.8836, "text": "Level 1 is now working it may be bad but i put alot of effort on this one :)"}, {"post_id": 39166, "ts": "2026-08-01T22:18:53Z", "hours": 1.3286, "text": "MADE MY FIRST MODEL it may be ugly, but I MADE IT"}, {"post_id": 39121, "ts": "2026-08-01T20:33:13Z", "hours": 2.2506, "text": "Going to keep the basic model I find the basic model, he has mega aura so im going to keep it (and it helps with performance!)"}, {"post_id": 37620, "ts": "2026-07-30T14:12:46Z", "hours": 6.0686, "text": "Yes didn’t know animations were that hard"}, {"post_id": 35796, "ts": "2026-07-27T13:45:30Z", "hours": 1.3506, "text": "Made Parrying you can now parry and i added a sound effect! What is so fun about making a game is that you can do anything with it like i made an enemy shoot infinity and it created this cool effect!"}, {"post_id": 35458, "ts": "2026-07-26T21:54:16Z", "hours": 0.7667, "text": "Migrated to windows My pc was overheating on linux since my fan sensors weren’t working on linux, and now i use Direct X12 and not OpenGL 4.5 . I don’t know if i should be happy or sad."}, {"post_id": 34837, "ts": "2026-07-25T21:06:13Z", "hours": 1.55, "text": "Made Katana and Enemies ! Now if your in distance enemies will shoot you and you can attack them by left clicking when you are close. Next I’m going to implement parrying!"}, {"post_id": 34780, "ts": "2026-07-25T19:28:20Z", "hours": 1.1, "text": "PC overheating…. So my pc overheights since im on linux and they don’t have my motherboard drivers so my fans don’t work si my gpu overheats! I can’t switch to windows where fans are working normally :("}, {"post_id": 34694, "ts": "2026-07-25T16:51:32Z", "hours": 1.4889, "text": "Im not really having fun… So i’ve been folowing tutorials for movement and i wasn’t having fun and quickly get distracted so i just made a fun parcour with a boucing mechanic (myself btw). The 360 at the end was so sick!"}, {"post_id": 34646, "ts": "2026-07-25T15:22:20Z", "hours": 1.5272, "text": "Dear NVIDIA… 3 times, i reinstalled debian 3 times because of the stupid drivers, one time it just didn’t work then got it working but secure boot coudn’t be enabled. But it was all worth it :)"}, {"post_id": 34110, "ts": "2026-07-24T16:23:11Z", "hours": 5.1444, "text": "Made sliding mechanic So you can Slide now there is a cooldown of 1.25 seconds so its not OP!"}, {"post_id": 32872, "ts": "2026-07-22T09:56:56Z", "hours": 2.1167, "text": "Finally finished the movment I finished basic movement and Added sprinting!"}, {"post_id": 32380, "ts": "2026-07-21T14:52:56Z", "hours": 4.5417, "text": "Made basic movement So you can move and jump now ! jumping still needs a bit of adjustment."}, {"post_id": 30935, "ts": "2026-07-18T22:47:32Z", "hours": 1.6833, "text": "WHY IS IT SOOOOO COMPLICATED First, I installed it on Omarchy , but I had problems since it’s not officially supported. Then I installed Debian , which took way longer than expected. I also tried it on Windows , but Lapse and Lookout didn’t work :( Now back on Debian , I’m getting some artifacting bugs, but it’s usable :D"}]...
|
Title: Samourai-On-A-Budget by @barseghian_daniel Title: Samourai-On-A-Budget by @barseghian_daniel | Stardance
Devlogs:
WHY IS IT SOOOOO COMPLICATED First, I installed it on Omarchy , but I had problems since it’s not officially supported. Then I installed Debian , which took way longer than expected. I also tried it on Windows , but Lapse and Lookout didn’t work :( Now back on Debian , I’m getting some artifacting bugs, but it’s usable :D
Made basic movement So you can move and jump now ! jumping still needs a bit of adjustment.
Finally finished the movment I finished basic movement and Added sprinting!
Made sliding mechanic So you can Slide now there is a cooldown of 1.25 seconds so its not OP!
Dear NVIDIA… 3 times, i reinstalled debian 3 times because of the stupid drivers, one time it just didn’t work then got it working but secure boot coudn’t be enabled. But it was all worth it :)
Im not really having fun… So i’ve been folowing tutorials for movement and i wasn’t having fun and quickly get distracted so i just made a fun parcour with a boucing mechanic (myself btw). The 360 at the end was so sick!
PC overheating…. So my pc overheights since im on linux and they don’t have my motherboard drivers so my fans don’t work si my gpu overheats! I can’t switch to windows where fans are working normally :(
Made Katana and Enemies ! Now if your in distance enemies will shoot you and you can attack them by left clicking when you are close. Next I’m going to implement parrying!
Migrated to windows My pc was overheating on linux since my fan sensors weren’t working on linux, and now i use Direct X12 and not OpenGL 4.5 . I don’t know if i should be happy or sad.
Made Parrying you can now parry and i added a sound effect! What is so fun about making a game is that you can do anything with it like i made an enemy shoot infinity and it created this cool effect!
Yes didn’t know animations were that hard
Going to keep the basic model I find the basic model, he has mega aura so im going to keep it (and it helps with performance!)
MADE MY FIRST MODEL it may be ugly, but I MADE IT
Level 1 is now working it may be bad but i put alot of effort on this one :)
Monkey dancing Gangnam Style before GTA 6 ?? It took 1h30, was it worth it? Absolutly.
Added the music
Added buch of things Now when you parry the bullet will reverse and go where you look. Added sword swing sound effect & Started making level 2!
Deleted it all yes i said hey free 16gb on my pc and minutes later realized the big mistake…
IM BACKKKKKKKK i reinstalled windows, repasted graphics card (dropped 30°C), in the past week. Look at all this dust, no wonder why it was overheating…
Full level 2 implementation and transition between levels and heart system with vulnarability! I added a heart system with a 10s vulnability each time you get heart! The level 2 is kinda hard (even as a pro gamer) Added transition between the levels when you reach the end :)
Why the game is so ugly I CAN’T MODEL, my designing skills are soooo bad and let’s not talk about modeling….. But i still took a lot of time and effort to make an “ ok ” map, it may be ugly, but its the best i could! please don’t try to understand the storyline….
10 humans vs 1 monkey We can finally know who will win 10 humans vs 1 monkey (but the monkey doesn’t attack…) i wonder who will win!
Made Start menu is this a W menu? i worked really hard on the background. btw the quit button moves every 1.5 secondes so its harder to quit :)
ITS REALEAAAAAASED i did alot of small adjustmenets for release check it out here . Its tested for windows and linux, unfortantly i don’t own any mac devices.
Its on the web ! you can try it out here
README IS DONE i feel kinda sad but happy at the same time that its finishing..
Ships:
I made a Unity game after 3 years! I really loved relearning C# and Unity. The hardest part was designing, I HAD SO MUCH PAIN, I suck at 3D modeling and making good maps, but I went through a lot of effort and time to make an acceptable map. You can directly try the project in the web or download it for Windows/Mac/Linux in the GitHub release! You can read the Gameplay section of the README if you are lost!...
|
1792969002.5505354
|
1793055402.5505354
|
|
14390
|
Pygame Platformer by @nishchaybhudia | Stardance
|
nishchaybhudia
|
1
|
94.0
|
850
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-17T14:16:32Z", "hours": 94.0, "multiplier": 9.02, "payout": 850, "blessing": "neutral", "text": "What I made: an “impossible” platformer in Python/pygame — 4 characters each with their own move (dash, wall cling, ground pound, frog leap), 2 player mode, 5 levels, and traps like saws, a sliding rock head and a swinging spiked ball. Packaged it so it also runs in a browser through GitHub Pages, not just as a local script. What was challenging: making the abilities feel actually different from each other but still fair took a lot of back and forth, and the web version being randomly laggy took a while to actually track down instead of just guessing. Turned out it was checking collisions against every object in the whole level every single frame instead of just the stuff near the player, plus redrawing the background from scratch 238 times a frame. What I’m proud of: getting it running properly in a browser instead of just as a local file makes it feel like an actual finished thing rather than a script sitting on my laptop. It’s still a bit laggy on the GitHub Pages version, but running it locally on my own machine there’s no lag at all, so the game itself is solid — it’s specifically the web packaging that still needs work.", "repo": "https://github.com/Hidden-Ghost-123/Impossible-Platformer", "demo": "https://hidden-ghost-123.github.io/Impossible-Platformer/"}]...
|
[{"post_id": 30143, "ts": "202 [{"post_id": 30143, "ts": "2026-07-17T14:12:03Z", "hours": 0.0, "text": "i worked on switching from itch.io to the github web to host my game"}, {"post_id": 30081, "ts": "2026-07-17T11:48:40Z", "hours": 2.0, "text": "i turned my code into a format that can be uploaded onto itch.io so i can begin getting ready for shipping this project … i then lowered the spiked swinging balls so its possible to jump across the gap in level 5 when finsihing the level … have a look !!"}, {"post_id": 29748, "ts": "2026-07-16T20:49:48Z", "hours": 2.0, "text": "i fixed placement of traps and enemies to make the levels dooable and also make the levels harder … im also planning to add and have started to add different level screens , so each level takes you to a different screen each time you complete it … also i made it so that you have to collect 40% of the coins available in each level to move onto the next level so dont be skipping coins … i also made all the characters have double jump because i felt bad for all you guys that will be playing the game …"}, {"post_id": 29437, "ts": "2026-07-16T11:48:28Z", "hours": 6.0, "text": "i have nearly finished the game !!! We’re getting really close to finishing the game now! This session was focused on adding the final gameplay features before polishing everything up.The biggest addition was the 2-player system, which is now fully implemented. It still needs a few tweaks and bug fixes, but the core mechanics are working well and make the game much more enjoyable.I also added a sprite selection screen, allowing players to choose their character before starting. Each sprite now has its own unique special ability, making every character feel different and encouraging players to experiment with different playstyles.Content-wise, I created two brand new levels, giving players more challenges to complete. To make these levels more interesting, I also introduced two new trap types along with another enemy variant, adding more variety and requiring players to think more carefully about how they progress through each stage.At this point, the game is almost complete. The remaining work is mainly polishing, balancing gameplay, fixing bugs, and making sure everything feels smooth before the final release."}, {"post_id": 29080, "ts": "2026-07-15T18:49:01Z", "hours": 1.0, "text": "i have fully gone over each level refining the placement of each and every object … i then played the game multiple times just to make sure it is actually possible …. i set up the code so that i can begin adding the abilities for each new characer … i then made sure there are no bugs so that when the second player is added nothing silly happens because there will be more inputs and more possibility of things going pear shaped … i know this is a boring devlog but it is neccesary … please come back for the next one it will be good .. i promise …"}, {"post_id": 28971, "ts": "2026-07-15T16:19:35Z", "hours": 4.0, "text": "ok … lets get this going … today i done a full code run thru as i could not find out why the player was still being immune to the spikes when double jumping .. but its now fixed .. not suprising for a genuis like me lol …. anyways - then i added yet ANOTHER level … making it the hardest one yet which includes all the traps and enemies and hard to reach coins .. i then implemented a theash hold which makes it so you have to get a certain amount of coins befroet the checkpoint activates … then i added a sprite selector to make it so that the player can choose the sprite and each sprite has a special move … still not yet fully decided the moves but they will be decided soon - hopefully next devloog … then i went ahead and tried to add a 2 player mode where 2 players can play on the same keyboard (player 1 : up , left , right ) (player 2 : w, a ,d) … there are a total of 6 enemies to face throughout … lets get this going .. we are nearly there at he end …. woooooooooooooooohooooo"}, {"post_id": 28530, "ts": "2026-07-14T20:49:52Z", "hours": 1.0, "text": "i finished working on the level i was working on in the previous devlog . i then came across a major issue … if i spam doublejump on spikes - i dont die … like i become superman - not good at all … i had to fix this , and i fixed it to have a longer cooldown when using you double jump so , basically you have enough time for your sprite to hit the trap …"}, {"post_id": 28441, "ts": "2026-07-14T18:04:24Z", "hours": 3.0, "text": "i feel like a real dev that spends hours in the cave and comes out with 2-3 new features lol … today i worked on yet another level and added some new respawning and eliminating animations … i also animated the coins and added some secret special easter eggs within the game … you will need to wait for the game to be fully developed before finding out … again - any other features be sure to comment below on what features to add ."}, {"post_id": 27784, "ts": "2026-07-13T17:18:47Z", "hours": 1.0, "text": "i worked on implementing the new traps i mensioned in the previous devlog … i then continued adding a new level … this then led me to an idea of a level selector so you can replay levels if you wanted to . - genuis …. which i started to implement … thanks ;)"}, {"post_id": 27621, "ts": "2026-07-13T11:24:44Z", "hours": 6.0, "text": "i worked on creating a token/coin that you collect while trying to complete the level , i am debating wether to have a coin threthhold . so if you dont collect x amount of coints in the level you cannot activate the checkpoint … i also worked on a reset character reset game , resume interface where you can click esc to pause then you have the 3 options … i then created more sprites for the user to select what chatacter they want to play as … i am looking at adding different powers for each character in the next devlog … i added another level and i added smarter and more enemies that come to delete you off the game … lol … let me know what else i should add !!!….also i almost forgot , i added some new traps that i havnt put in the game yet but i have added the backend logic for - cant wait … thanks again!!"}, {"post_id": 27061, "ts": "2026-07-12T08:34:30Z", "hours": 4.0, "text": "Another long session finished. This time it was all about the little details that make a game actually feel good to play. I spent most of the time polishing existing features rather than adding new ones. I adjusted movement, tweaked animations, cleaned up the UI, and made small improvements throughout the game that most players probably won’t even notice—but together they make a huge difference.I also tracked down a few more bugs that somehow managed to sneak in. There were some visual glitches, a couple of edge cases where objects weren’t behaving correctly, and a few issues with level transitions. After a lot of testing (and breaking the game several times), everything is now much more stable.It’s funny because I barely added any “new” content today, but the game honestly feels so much smoother than it did this morning. I guess this is what real game development is like—hours of polishing for improvements that are hard to see but easy to feel.Anyway… that’s another 5 hours gone. Time to call it a day. Thanks for watching, and I’ll see you in the next devlog!"}, {"post_id": 26162, "ts": "2026-07-10T19:59:54Z", "hours": 5.0, "text": "i5 hours later … and this devlog is mainly focused on polishing, fixing bugs and making the game feel much smoother. First, I spent a lot of time going through the code and cleaning up some problems that were starting to appear as the game got bigger. I improved the overall efficiency of the game by removing unnecessary checks, optimising some of the update loops and making sure objects were not being processed when they did not need to be. This should help the game run better, especially when more enemies and level elements are added later. …. Next, I worked on fixing a bunch of smaller bugs that were affecting gameplay. I fixed some collision issues where the player could sometimes get stuck inside blocks, improved the respawn system so the player resets properly every time, and fixed some problems with the enemy behaviour after the player dies. There were also some annoying issues with jumping and movement that caused inconsistent results, so I spent time making the controls feel more reliable. …. WOW , i feel like a real game dev working ovetime lol …. Thank you , see you in the next one . that was a mouthful …"}, {"post_id": 25962, "ts": "2026-07-10T14:24:35Z", "hours": 6.0, "text": "wow this is going to be a big devlog ! …. first i created a homescreen that players can log in / sign up for future scoreboard featuers …. and possible 2 player or singleplayer selector ….. next i began adding sound effects to the game - like when you die and respawn and jump - there is a delay but i will fix that in the next devlog …. then i made the enemy smarter and i decided to allow it to pass through block like a ghost …. the only block it doesnt pass through is you so it can elimiate you when its hitbox crosses your hitbox …. i then fixed some major respawning and hit box bugs that come about after double jumping which took FOREVER ….i finished completing level 2 which i have to say , well done to the creator of the game lol because this game is going to be epic !!! , see you in the next one !"}, {"post_id": 25467, "ts": "2026-07-09T19:06:53Z", "hours": 1.0, "text": "i worked on improving the self moving enemy … im still deciding wether to give it the ability ro move through objects or if i should have it move like a nomral player … i managed to get it to float so it can easily move terrain and it has got immunity to traps so it can even follow you through traps … but (theres always a but) you can easily get rid of the enemy by jumping over it from left to right a few times …. i want to fix this in the next devlog …"}, {"post_id": 25409, "ts": "2026-07-09T17:46:48Z", "hours": 4.0, "text": "i worked on creating the program that works in the background … it is a program that powers and gives the enemy its own brain… it follows the enemy (YOU!) , i am working on making it smarter and faster - its a bit dopey at the moment :( ….. the enemy kills you just by you touching it or it touching you - still working on that (give it some time !!) ….. i then worked on making the second level (i made it hard for you , yes YOU) …. hopefully we have a little enemy running around next devlog ?!"}, {"post_id": 25212, "ts": "2026-07-09T10:19:56Z", "hours": 1.0, "text": "i fully fixed the trampoline bug that gives you immunity to traps after jumping on it [i actually did now :) ] …. i then had some trouble with making more objects with the new layout of the code …. i then got around that and began tweaking the first level and planning the second level . i then began addind a enemy block - the green one in the image , and a new spikey enemy which follows you like a mario bloomba . i havnt added the logic for this but i will hope to add it in the next devlog :-)"}, {"post_id": 24783, "ts": "2026-07-08T16:08:59Z", "hours": 2.0, "text": "i worked on fixing the oop problem i had in the previous devlog … i then changed the whole structure of the code to make it easy to read and add changes in future devlogs …. i then added the animation for the trampolines and tested them … they change your gravity when you jump on them making it like a trampoline u jump on … there is a image attached of me testing one over a floor of spikes … the animation works perfectly now …. and before u would survive afrer falling on spikes when coming off the trampoline for some reason , i have that fixed now …… i hope ;D"}, {"post_id": 24663, "ts": "2026-07-08T12:11:27Z", "hours": 1.0, "text": "i finished creating the first level … and the checkpoint actually works !!!, . i then had a problem with the creation of the objects , i decided to change the way the objects are created from lists into OOP , so classed and objects , this then broke my entire game :( …. i began fixing this and will hopefully be finished by the next devlog …. ;)"}, {"post_id": 24318, "ts": "2026-07-07T20:28:29Z", "hours": 2.0, "text": "i worked on adding more the very first level , i made it decently simple with a hint* double jump involved … i fixed the saw animation as it looked like it was a glitchy looped gif but now a smooth continuos animation …. i added a wall of blocks so you cannot go the other way …. i am hoping to replace this with a wall of invisible blocks which you cannot pass instead of visible blocks …. i also want the platform to extend on for many more blocks which i added which allows me to create more levels in sequence . next i hope to finish level 2 so i have 2 fully working levels to play . the end goal is “impossible” levels which are close to impossible to complete and keep sane while playing them"}, {"post_id": 24014, "ts": "2026-07-07T09:24:56Z", "hours": 1.0, "text": "i worked on fixing major respawning bugs , the character respawns back where it is supposed to respawn but the character sprite disppears , this was really hard and long to debug . i also created the animation for the saw trap which allows the saw blade to spin which makes the game more realsitic and enjoyable to play"}, {"post_id": 23671, "ts": "2026-07-06T19:40:44Z", "hours": 4.0, "text": "i continued creating the level … i added 2 paths , a harder bottom path with required speed and accuracy or a easier top path which is easier but requires patience …. i am yet to finish the top layer on the level as i need to code the logic and animation for the trampoline which will be the core for most of the game … it gives you a jump boost + float which allows you to travel quite some distance when jumping off of it . the flame of the fire wasnt dealing damage so i fixed that by updating its hitbox . i then added a standing player animation so it moves up and down as if its breathing when idle …."}, {"post_id": 23498, "ts": "2026-07-06T14:52:42Z", "hours": 8.0, "text": "i worked on a log in / sign up screen which authenticates users before they play the game to allow for future add ons such as leaderboards etc etc … i then added trap logic and a checkpoint flag which i didnt quite get to work … hopefully i get it to work in the next devlog , this will allow me to create lots of levels … i also added spikes with spike logic .. so if the player touches any part of the spikes the spirte detects it and the character respawns to the latest touches checkpoint … i later want to add lives so if u fail more than 3 times you respawn right back to the very beginning …. i also added 2 more traps that are spinning saws and a fire … which opperate the same way spikes do but are of different dimentions - the fire is smaller and the saw is bigger and wider … a mixture of these will hopefully begin to create a really hard level to completre … i also added double jump for the character / fixed double jump …. to stop players from abbusing double jump there is a small cooldown for double jump so its not exploited …. for the next devlog i would like to create a working level with a checkpoit that works on the other end ."}, {"post_id": 12434, "ts": "2026-06-20T09:23:44Z", "hours": 1.0, "text": "I started by creating a new object type called Checkpoint. Unlike blocks and traps, checkpoints don’t damage the player. Instead they: Detect collision with the player Store a respawn location Become “activated” when touched This is the first non-hazard interactive object in the game. Added Respawn Position Variable Previously the player always returned to:"}, {"post_id": 11898, "ts": "2026-06-19T12:00:48Z", "hours": 1.0, "text": "Added Collision-Based Damage System Until now, traps were purely visual. The player could walk through fire without consequence. I extended the collision system so that objects can now affect the player based on their name property. This is the first time the game starts behaving like an actual platformer. Introduced make_hit() Logic Instead of instantly killing the player, I added a hit state system: Player gets flagged as hit Small delay before respawn logic runs Allows future animation / sound integration This also prepares the system for: spikes saws lava checkpoints First Basic Death/Respawn Logic At this stage, respawning is still very simple: If player touches hazard → reset position No checkpoint system yet No lives system yet But this is the foundation for it. Problems Encountered Problem 1: Player kept dying multiple times per frame Cause Collision was being detected continuously every loop tick. Fix Added a simple hit lock"}, {"post_id": 11842, "ts": "2026-06-19T08:41:11Z", "hours": 1.0, "text": "Now that the level system is working, the next logical feature would be the first hazard. At this point in development, most students don’t immediately build fire, saws, spikes, trampolines, checkpoints, menus, sounds, etc. Instead, they usually start by experimenting with one animated trap to learn how animated world objects work. The fire trap is the most likely candidate because it uses the same sprite-sheet system you’ve already built for the player."}, {"post_id": 10676, "ts": "2026-06-17T15:13:38Z", "hours": 1.0, "text": "After implementing the camera system, I noticed that the level still looked very basic because platforms were being drawn as plain black rectangles. During this development session I focused on creating a more professional level system using actual game assets. I created a general-purpose Object class that could be used as the foundation for future game elements such as blocks, traps, checkpoints, and interactive objects. This significantly improved the organisation of the project and reduced code duplication. I then created a Block class which inherits from the Object class. Instead of drawing rectangles, blocks now load an image from the terrain sprite sheet. This made the level look much closer to the final game. To support this, I also created a helper function called get_block() which extracts a specific terrain tile from the terrain sprite sheet and scales it appropriately."}, {"post_id": 10569, "ts": "2026-06-17T11:30:01Z", "hours": 1.0, "text": "up until this point the game world was effectively limited to a single screen. While the player could move and jump on platforms, the entire level was always visible at once. To fix this and move closer to a real platformer, I implemented a camera system using an offset value (offset_x). This allows the player to move through a much larger world while the screen follows them smoothly. Instead of drawing everything at fixed positions, all objects are now rendered relative to the camera position. This is one of the most important structural changes in the entire project, because it transforms the game from a “static scene” into a scrolling level. Problems Encountered Problem 1: Everything moved incorrectly after adding camera After introducing offset_x, all objects appeared shifted or misaligned. Cause: Objects were still being drawn using absolute coordinates. Fix: Updated draw calls to subtract camera offset:"}, {"post_id": 10064, "ts": "2026-06-16T17:20:33Z", "hours": 2.0, "text": "focused on expanding the system into a full animation framework. Instead of using one image, I implemented a sprite sheet loader that splits images into multiple frames. This allows the character to animate smoothly while running, jumping, and idling. A major improvement in this session was introducing direction-based sprite flipping, which means the same animation can be reused for left and right movement without duplicating assets. I also started restructuring the Player class so that animation is handled separately from movement logic. This makes the code much more scalable for future additions like enemies and traps. Problems Encountered Problem 1: Sprite sheets not splitting correctly At first, animations were broken because frames were not being sliced properly. Cause: Incorrect calculation of sprite width division."}, {"post_id": 9840, "ts": "2026-06-16T09:28:01Z", "hours": 1.0, "text": "I spent this development session researching sprite sheets and learning how animations are typically handled in platformer games. I downloaded the character assets and experimented with loading images into Pygame. To avoid repeating code for every animation, I created a function that loads images from a folder and stores them in a dictionary. This will eventually become the foundation of the final load_sprite_sheets() function used throughout the project. I also replaced the rectangle with a single idle sprite. At this stage there are no animations yet—the player simply displays one image. Problems Encountered Problem 1: Images not loading When first attempting to load the sprite, Pygame returned a file path error. Cause The image folder was not in the same location as the Python file. Fix Used the os.path.join() function to create file paths more reliably."}, {"post_id": 9481, "ts": "2026-06-15T20:42:32Z", "hours": 1.0, "text": "introducing platform objects. Instead of relying only on the bottom of the screen as a floor, I created a simple Block system. Each block represents a solid object in the world that the player can stand on. This required restructuring collision logic so that the player is no longer only interacting with the screen boundary, but with multiple objects. I also started separating the world into a list of objects, which is an important step toward building full levels later. Key Improvements Made …: Added Block System A simple block class was introduced to represent platforms. Object List System Instead of hardcoding collisions, all blocks are stored in a list so the level can be expanded easily. Basic Collision Detection A simple collision check was added to stop the player falling through platforms. Problems Encountered … Problem : Player clipping through platforms When first adding blocks, the player would sometimes fall through them or “stick” inside them. Cause: Collision was only being checked after movement, not corrected properly. Fix: Added positional correction after detecting collision:"}, {"post_id": 9250, "ts": "2026-06-15T15:11:22Z", "hours": 1.0, "text": "started turning the simple movement demo into a real platformer by adding physics. The first majour feature added was gravity. Instead of the player staying in the air after a jump or falling instantly at a fixed speed, I introduced a vertical velocity system. This allows the player to accelerate downwards over time, making movement feel more natural. After implementing gravity, i added a jump system. When the player presses the space bar or up arrow key, an upward velocity is applied. Gravity then gradually pulls the player back down. However, after adding jumping and gravity, the player was able to fall infinitely off the screen. To fix this, I implemented a basic floor collision system using the bottom of the screen as a temporary ground. This ensured the player always lands correctly and resets vertical velocity when touching the ground."}, {"post_id": 9204, "ts": "2026-06-15T13:33:17Z", "hours": 1.0, "text": "focused on making the game interactive by allowing the player to move around the screen. I first created a player velocity constant which controls the movement speed of the player. Using a constant means the speed can easily be adjusted later without modifying multiple parts of the code. I then implemented keyboard input detection using pygame.key.get_pressed(). This allowed the left and right arrow keys to move the player across the screen. To improve code organisation I added movement methods inside the Player class rather than directly modifying the player’s position inside the main game loop. This makes the program easier to maintain as more functionality is added later."}, {"post_id": 6761, "ts": "2026-06-11T10:15:09Z", "hours": 1.0, "text": "Objectives : Add FPS control Create project constants Improve game loop structure Add a background colour Prepare the codebase for future player development Progress. After successfully creating the game window, (after a long long time) I focused on improving the structure of the program. A frame rate limit was added using “ pygame.time.Clock() “to ensure the game runs consistently on different computers. I created constants for the screen width, screen height and fps rather than hard coding values throughout the program. This will make future changes easier. I also replaced the plain black screen with a temporary sky blue background. This makes the project feel more like a game environment and provides a better foundation for testing future features. Although no player has been added yet, the game loop is now stable and organised enough to begin implementing movement systems. Problems Encountered Initially the game was running as fast as the computer would allow, causing unnecessary CPU usage. Adding FPS control fixed this issue and ensures consistent performance. Testing Performed Verified the game window opens correctly. Verified the frame rate remains stable at 60 fps. Confirmed the window closes without errors. Next Steps Create the player object. Draw the player on screen. Begin implementing horizontal movement using keyboard controls."}, {"post_id": 6405, "ts": "2026-06-10T19:33:44Z", "hours": 0.0, "text": "I started the project by setting up the basic Pygame environment. The first goal was simply to get a window appearing on screen. After importing Pygame and initialising it, I created a 1000×800 game window and added a title to the window. I then created a basic game loop which keeps the program running until the player closes the window. At this stage there are no graphics, characters or levels. The project currently only displays a blank screen. Problems Encountered No major issues were encountered during this stage. The main focus was confirming that Pygame was installed correctly and that the game window could be opened and closed safely."}]...
|
Title: Pygame Platformer by @nishchaybhudia | Star Title: Pygame Platformer by @nishchaybhudia | Stardance
Devlogs:
I started the project by setting up the basic Pygame environment. The first goal was simply to get a window appearing on screen. After importing Pygame and initialising it, I created a 1000×800 game window and added a title to the window. I then created a basic game loop which keeps the program running until the player closes the window. At this stage there are no graphics, characters or levels. The project currently only displays a blank screen. Problems Encountered No major issues were encountered during this stage. The main focus was confirming that Pygame was installed correctly and that the game window could be opened and closed safely.
Objectives : Add FPS control Create project constants Improve game loop structure Add a background colour Prepare the codebase for future player development Progress. After successfully creating the game window, (after a long long time) I focused on improving the structure of the program. A frame rate limit was added using “ pygame.time.Clock() “to ensure the game runs consistently on different computers. I created constants for the screen width, screen height and fps rather than hard coding values throughout the program. This will make future changes easier. I also replaced the plain black screen with a temporary sky blue background. This makes the project feel more like a game environment and provides a better foundation for testing future features. Although no player has been added yet, the game loop is now stable and organised enough to begin implementing movement systems. Problems Encountered Initially the game was running as fast as the computer would allow, causing unnecessary CPU usage. Adding FPS control fixed this issue and ensures consistent performance. Testing Performed Verified the game window opens correctly. Verified the frame rate remains stable at 60 fps. Confirmed the window closes without errors. Next Steps Create the player object. Draw the player on screen. Begin implementing horizontal movement using keyboard controls.
focused on making the game interactive by allowing the player to move around the screen. I first created a player velocity constant which controls the movement speed of the player. Using a constant means the speed can easily be adjusted later without modifying multiple parts of the code. I then implemented keyboard input detection using pygame.key.get_pressed(). This allowed the left and right arrow keys to move the player across the screen. To improve code organisation I added movement methods inside the Player class rather than directly modifying the player’s position inside the main game loop. This makes the program easier to maintain as more functionality is added later.
started turning the simple movement demo into a real platformer by adding physics. The first majour feature added was gravity. Instead of the player staying in the air after a jump or falling instantly at a fixed speed, I introduced a vertical velocity system. This allows the player to accelerate downwards over time, making movement feel more natural. After implementing gravity, i added a jump system. When the player presses the space bar or up arrow key, an upward velocity is applied. Gravity then gradually pulls the player back down. However, after adding jumping and gravity, the player was able to fall infinitely off the screen. To fix this, I implemented a basic floor collision system using the bottom of the screen as a temporary ground. This ensured the player always lands correctly and resets vertical velocity when touching the ground.
introducing platform objects. Instead of relying only on the bottom of the screen as a floor, I created a simple Block system. Each block represents a solid object in the world that the player can stand on. This required restructuring collision logic so that the player is no longer only interacting with the screen boundary, but with multiple objects. I also started separating the world into a list of objects, which is an important step toward building full levels later. Key Improvements Made …: Added Block System A simple block class was introduced to represent platforms. Object List System Instead of hardcoding collisions, all blocks are stored in a list so the level can be expanded easily. Basic Collision Detection A simple collision check was added to stop the player falling through platforms. Problems Encountered … Problem : Player clipping through platforms When first adding blocks, the player would sometimes fall through them or “stick” inside them. Cause: Collision was only being checked after movement, not corrected properly. Fix: Added positional correction after detecting collision:
I spent this development session researching sprite sheets and learning how animations are typically handled in platformer games. I downloaded the character assets and experimented with loading images into Pygame. To avoid repeating code for every animation, I created a function that loads images from a folder and stores them in a dictionary. This will eventually become the foundation of the final load_sprite_sheets() function used throughout the project. I also replaced the rectangle with a single idle sprite. At this stage there are no animations yet—the player simply displays one image. Problems Encountered Problem 1: Images not loading When first attempting to load the sprite, Pygame returned a file path error. Cause The image folder was not in the same location as the Python file. Fix Used the os.path.join() function to create file paths more reliably.
focused on expanding the system into a full animation framework. Instead of using one image, I implemented a sprite sheet loader that splits images into multiple frames. This allows the character to animate smoothly while running, jumping, and idling. A major improvement in this session was introducing direction-based sprite flipping, which means the same animation can be reused for left and right movement without duplicating assets. I also started restructuring the Player class so that animation is handled separately from movement logic. This makes the code much more scalable for future additions like enemies and traps. Problems Encountered Problem 1: Sprite sheets not splitting correctly At first, animations were broken because frames were not being sliced properly. Cause: Incorrect calculation of sprite width division.
up until this point the game world was effectively limited to a single screen. While the player could move and jump on platforms, the entire level was always visible at once. To fix this and move closer to a real platformer, I implemented a camera system using an offset value (offset_x). This allows the player to move through a much larger world while the screen follows them smoothly. Instead of drawing everything at fixed positions, all objects are now rendered relative to the camera position. This is one of the most important structural changes in the entire project, because it transforms the game from a “static scene” into a scrolling level. Problems Encountered Problem 1: Everything moved incorrectly after adding camera After introducing offset_x, all objects appeared shifted or misaligned. Cause: Objects were still being drawn using absolute coordinates. Fix: Updated draw calls to subtract camera offset:
After implementing the camera system, I noticed that the level still looked very basic because platforms were being drawn as plain black rectangles. During this development session I focused on creating a more professional level system using actual game assets. I created a general-purpose Object class that could be used as the foundation for future game elements such as blocks, traps, checkpoints, and interactive objects. This significantly improved the organisation of the project and reduced code duplication. I then created a Block class which inherits from the Object class. Instead of drawing rectangles, blocks now load an image from the terrain sprite sheet. This made the level look much closer to the final game. To support this, I also created a helper function called get_block() which extracts a specific terrain tile from the terrain sprite sheet and scales it appropriately.
Now that the level system is working, the next logical feature would be the first hazard. At this point in development, most students don’t immediately build fire, saws, spikes, trampolines, checkpoints, menus, sounds, etc. Instead, they usually start by experimenting with one animated trap to learn how animated world objects work. The fire trap is the most likely candidate because it uses the same sprite-sheet system you’ve already built for the player.
Added Collision-Based Damage System Until now, traps were purely visual. The player could walk through fire without consequence. I extended the collision system so that objects can now affect the player based on their name property. This is the first time the game starts behaving like an actual platformer. Introduced make_hit() Logic Instead of instantly killing the player, I added a hit state system: Player gets flagged as hit Small delay before respawn logic runs Allows future animation / sound integration This also prepares the system for: spikes saws lava checkpoints First Basic Death/Respawn Logic At this stage, respawning is still very simple: If player touches hazard → reset position No checkpoint system yet No lives system yet But this is the foundation for it. Problems Encountered Problem 1: Player kept dying multiple times per frame Cause Collision was being detected continuously every loop tick. Fix Added a simple hit lock
I started by creating a new object type called Checkpoint. Unlike blocks and traps, checkpoints don’t damage the player. Instead they: Detect collision with the player Store a respawn location Become “activated” when touched This is the first non-hazard interactive object in the game. Added Respawn Position Variable Previously the player always returned to:
i worked on a log in / sign up screen which authenticates users before they play the game to allow for future add ons such as leaderboards etc etc … i then added trap logic and a checkpoint flag which i didnt quite get to work … hopefully i get it to work in the next devlog , this will allow me to create lots of levels … i also added spikes with spike logic .. so if the player touches any part of the spikes the spirte detects it and the character respawns to the latest touches checkpoint … i later want to add lives so if u fail more than 3 times you respawn right back to the very beginning …. i also added 2 more traps that are spinning saws and a fire … which opperate the same way spikes do but are of different dimentions - the fire is smaller and the saw is bigger and wider … a mixture of these will hopefully begin to create a really hard level to completre … i also added double jump for the character / fixed double jump …. to stop players from abbusing double jump there is a small cooldown for double jump so its not exploited …. for the next devlog i would like to create a working level with a checkpoit that works on the other end .
i continued creating the level … i added 2 paths , a harder bottom path with required speed and accuracy or a easier top path which is easier but requires patience …. i am yet to finish the top layer on the level as i need to code the logic and animation for the trampoline which will be the core for most of the game … it gives you a jump boost + float which allows you to travel quite some distance when jumping off of it . the flame of the fire wasnt dealing damage so i fixed that by updating its hitbox . i then added a standing player animation so it moves up and down as if its breathing when idle ….
i worked on fixing major respawning bugs , the character respawns back where it is supposed to respawn but the character sprite disppears , this was really hard and long to debug . i also created the animation for the saw trap which allows the saw blade to spin which makes the game more realsitic and enjoyable to play
i worked on adding more the very first level , i made it decently simple with a hint* double jump involved … i fixed the saw animation as it looked like it was a glitchy looped gif but now a smooth continuos animation …. i added a wall of blocks so you cannot go the other way …. i am hoping to replace this with a wall of invisible blocks which you cannot pass instead of visible blocks …. i also want the platform to extend on for many more blocks which i added which allows me to create more levels in sequence . next i hope to finish level 2 so i have 2 fully working levels to play . the end goal is “impossible” levels which are close to impossible to complete and keep sane while playing them
i finished creating the first level … and the checkpoint actually works !!!, . i then had a problem with the creation of the objects , i decided to change the way the objects are created from lists into OOP , so classed and objects , this then broke my entire game :( …. i began fixing this and will hopefully be finished by the next devlog …. ;)
i worked on fixing the oop problem i had in the previous devlog … i then changed the whole structure of the code to make it easy to read and add changes in future devlogs …. i then added the animation for the trampolines and tested them … they change your gravity when you jump on them making it like a trampoline u jump on … there is a image attached of me testing one over a floor of spikes … the animation works perfectly now …. and before u would survive afrer falling on spikes when coming off the trampoline for some reason , i have that fixed now …… i hope ;D
i fully fixed the trampoline bug that gives you immunity to traps after jumping on it [i actually did now :) ] …. i then had some trouble with making more objects with the new layout of the code …. i then got around that and began tweaking the first level and planning the second level . i then began addind a enemy block - the green one in the image , and a new spikey enemy which follows you like a mario bloomba . i havnt added the logic for this but i will hope to add it in the next devlog :-)
i worked on creating the program that works in the background … it is a program that powers and gives the enemy its own brain… it follows the enemy (YOU!) , i am working on making it smarter and faster - its a bit dopey at the moment :( ….. the enemy kills you just by you touching it or it touching you - still working on that (give it some time !!) ….. i then worked on making the second level (i made it hard for you , yes YOU) …. hopefully we have a little enemy running around next devlog ?!
i worked on improving the self moving enemy … im still deciding wether to give it the ability ro move through objects or if i should have it move like a nomral player … i managed to get it to float so it can easily move terrain and it has got immunity to traps so it can even follow you through traps … but (theres always a but) you can easily get rid of the enemy by jumping over it from left to right a few times …. i want to fix this in the next devlog …
wow this is going to be a big devlog ! …. first i created a homescreen that players can log in / sign up for future scoreboard featuers …. and possible 2 player or singleplayer selector ….. next i began adding sound effects to the game - like when you die and respawn and jump - there is a delay but i will fix that in the next devlog …. then i made the enemy smarter and i decided to allow it to pass through block like a ghost …. the only block it doesnt pass through is you so it can elimiate you when its hitbox crosses your hitbox …. i then fixed some major respawning and hit box bugs that come about after double jumping which took FOREVER ….i finished completing level 2 which i have to say , well done to the creator of the game lol because this game is going to be epic !!! , see you in the next one !
i5 hours later … and this devlog is mainly focused on polishing, fixing bugs and making the game feel much smoother. First, I spent a lot of time going through the code and cleaning up some problems that were starting to appear as the game got bigger. I improved the overall efficiency of the game by removing unnecessary checks, optimising some of the update loops and making sure objects were not being processed when they did not need to be. This should help the game run better, especially when more enemies and level elements are added later. …. Next, I worked on fixing a bunch of smaller bugs that were affecting gameplay. I fixed some collision issues where the player could sometimes get stuck inside blocks, improved the respawn system so the player resets properly every time, and fixed some problems with the enemy behaviour after the player dies. There were also some annoying issues with jumping and movement that caused inconsistent results, so I spent time making the controls feel more reliable. …. WOW , i feel like a real game dev working ovetime lol …. Thank you , see you in the next one . that was a mouthful …
Another long session finished. This time it was all about the little details that make a game actually feel good to play. I spent most of the time polishing existing features rather than adding new ones. I adjusted movement, tweaked animations, cleaned up the UI, and made small improvements throughout the game that most players probably won’t even notice—but together they make a huge difference.I also tracked down a few more bugs that somehow managed to sneak in. There were some visual glitches, a couple of edge cases where objects weren’t behaving correctly, and a few issues with level transitions. After a lot of testing (and breaking the game several times), everything is now much more stable.It’s funny because I barely added any “new” content today, but the game honestly feels so much smoother than it did this morning. I guess this is what real game development is like—hours of polishing for improvements that are hard to see but easy to feel.Anyway… that’s another 5 hours gone. Time to call it a day. Thanks for watching, and I’ll see you in the next devlog!
i worked on creating a token/coin that you collect while trying to complete the level , i am debating wether to have a coin threthhold . so if you dont collect x amount of coints in the level you cannot activate the checkpoint … i also worked on a reset character reset game , resume interface where you can click esc to pause then you have the 3 options … i then created more sprites for the user to select what chatacter they want to play as … i am looking at adding different powers for each character in the next devlog … i added another level and i added smarter and more enemies that come to delete you off the game … lol … let me know what else i should add !!!….also i almost forgot , i added some new traps that i havnt put in the game yet but i have added the backend logic for - cant wait … thanks again!!
i worked on implementing the new traps i mensioned in the previous devlog … i then continued adding a new level … this then led me to an idea of a level selector so you can replay levels if you wanted to . - genuis …. which i started to implement … thanks ;)
i feel like a real dev that spends hours in the cave and comes out with 2-3 new features lol … today i worked on yet another level and added some new respawning and eliminating animations … i also animated the coins and added some secret special easter eggs within the game … you will need to wait for the game to be fully developed before finding out … again - any other features be sure to comment below on what features to add .
i finished working on the level i was working on in the previous devlog . i then came across a major issue … if i spam doublejump on spikes - i dont die … like i become superman - not good at all … i had to fix this , and i fixed it to have a longer cooldown when using you double jump so , basically you have enough time for your sprite to hit the trap …
ok … lets get this going … today i done a full code run thru as i could not find out why the player was still being immune to the spikes when double jumping .. but its now fixed .. not suprising for a genuis like me lol …. anyways - then i added yet ANOTHER level … making it the hardest one yet which includes all the traps and enemies and hard to reach coins .. i then implemented a theash hold which makes it so you have to get a certain amount of coins befroet the checkpoint activates … then i added a sprite selector to make it so that the player can choose the sprite and each sprite has a special move … still not yet fully decided the moves but they will be decided soon - hopefully next devloog … then i went ahead and tried to add a 2 player mode where 2 players can play on the same keyboard (player 1 : up , left , right ) (player 2 : w, a ,d) … there are a total of 6 enemies to face throughout … lets get this going .. we are nearly there at he end …. woooooooooooooooohooooo
i have fully gone over each level refining the placement of each and every object … i then played the game multiple times just to make sure it is actually possible …. i set up the code so that i can begin adding the abilities for each new characer … i then made sure there are no bugs so that when the second player is added nothing silly happens because there will be more inputs and more possibility of things going pear shaped … i know this is a boring devlog but it is neccesary … please come back for the next one it will be good .. i promise …
i have nearly finished the game !!! We’re getting really close to finishing the game now! This session was focused on adding the final gameplay features before polishing everything up.The biggest addition was the 2-player system, which is now fully implemented. It still needs a few tweaks and bug fixes, but the core mechanics are working well and make the game much more enjoyable.I also added a sprite selection screen, allowing players to choose their character before starting. Each sprite now has its own unique special ability, making every character feel different and encouraging players to experiment with different playstyles.Content-wise, I created two brand new levels, giving players more challenges to complete. To make these levels more interesting, I also introduced two new trap types along with another enemy variant, adding more variety and requiring players to think more carefully about how they progress through each stage.At this point, the game is almost complete. The remaining work is mainly polishing, balancing gameplay, fixing bugs, and making sure everything feels smooth before the final release.
i fixed placement of traps and enemies to make the levels dooable and also make the levels harder … im also planning to add and have started to add different level screens , so each level takes you to a different screen each time you complete it … also i made it so that you have to collect 40% of the coins available in each level to move onto the next level so dont be skipping coins … i also made all the characters have double jump because i felt bad for all you guys that will be playing the game …
i turned my code into a format that can be uploaded onto itch.io so i can begin getting ready for shipping this project … i then lowered the spiked swinging balls so its possible to jump across the gap in level 5 when finsihing the level … have a look !!
i worked on switching from itch.io to the github web to host my game
Ships:
What I made: an “impossible” platformer in Python/pygame — 4 characters each with their own move (dash, wall cling, ground pound, frog leap), 2 player mode, 5 levels, and traps like saws, a sliding rock head and a swinging spiked ball. Packaged it so it also runs in a browser through GitHub Pages, not just as a local script. What was challenging: making the abilities feel actually different from each other but still fair took a lot of back and forth, and the web version being randomly laggy took a while to actually track down instead of just guessing. Turned out it was checking collisions against every object in the whole level every single frame instead of just the stuff near the player, plus redrawing the background from scratch 238 times a frame. What I’m proud of: getting it running properly in a browser instead of just as a local file makes it feel like an actual finished thing rather than a script sitting on my laptop. It’s still a bit laggy on the GitHub Pages version, but running it locally on my own machine there’s no lag at all, so the game itself is solid — it’s specifically the web packaging that still needs work....
|
1792878778.141592
|
1793742778.141592
|
|
33771
|
AtomSim by @yaasshh | Stardance
|
yaasshh
|
2
|
79.17
|
847
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-05T11:10:43Z", "hours": 12.0, "multiplier": 13.8, "payout": 163, "blessing": "neutral", "text": "AtomSim is a website I built that lets you actually see what an atom looks like. You pick an element, or hydrogen, and pick which electron shell you want to look at. Then it draws it. Not a cartoon of dots going around a circle like the diagrams in school, the real shape, the cloud where the electron actually is. Some of them look like spheres, some look like dumbbells, some look like weird four leaf clovers. All of that is real, it just falls out of the math. You can spin it around, slice it in half, look at it as a graph instead, or look at the colored lines of light the atom gives off when it gets hot. That last one is how we know what stars are made of, and you can watch it happen. The part I care about most is that it never fakes anything. Every single number on the screen carries a label saying how it was made. Some are exact, straight from the equations. Some are computed numerically with an error bar attached. Some are approximations, and it says which physical effects it left out. And a few are deliberate “what if” experiments, like turning off the rule that stops two electrons sitting in the same place, just to see the atom collapse. Those are labeled too. So if a picture is pretty rather than true, the app tells you. I wanted something a curious fifteen year old could poke at for an hour and come away with a correct picture in their head, not a comfortable wrong one. It runs in a browser, works on a phone, and every view has its own link you can share. PS: It also has mobile view now!", "repo": "https://github.com/yaasshh09/AtomSim", "demo": "https://atomsim.fly.dev"}, {"ship_num": 2, "ts": "2026-08-07T18:00:05Z", "hours": 58.0, "multiplier": 18.43, "payout": 684, "blessing": "neutral", "text": "Atom Sim is a browser app that solves atoms from scratch and shows you the result. Hydrogen comes out of closed-form math, real atoms like carbon and argon come out of a Hartree-Fock solver I wrote, and you can look at any of them as a 3D electron cloud, a 2D slice, a radial plot, an energy-level diagram or an emission spectrum. You can also break physics on purpose: switch off the Pauli exclusion principle, switch off electron exchange, or type in your own potential V(r) and see what kind of atom falls out. The rule I built everything around is that the model never quietly lies. Every number carries a tag saying how it was made: exact, numerical, approximation, counterfactual, or just a visual choice. That tag follows the number from the solver all the way to the label on screen. What was challenging Hartree-Fock was brutal. The angular coefficients in the Fock operator are easy to get slightly wrong, and when you do, the solver still converges and hands you smooth, beautiful, completely wrong orbitals. Nothing crashes, nothing warns you. I had to re-derive the algebra instead of nudging numbers until a benchmark matched. Error bars were the other trap. Mine looked great for a while and were simply lying, because the real error was coming from the box size, not the grid spacing I was measuring. Argon also took about an hour on a uniform grid until I moved to an exponential mesh, which cut it to seconds. What I’m proud of That it’s honest. Plenty of simulators draw a pretty orbital and say nothing about where it came from. Mine tells you, and the tests enforce it. The spectra are checked against real NIST data inside the test suite, so a physics regression fails CI rather than shipping quietly. How to test it It’s live at https://atomsim.fly.dev . The server sleeps when nobody is using it, so the very first load can take around 15 seconds. After that it’s quick. Good things to try: pick n=3, l=1 and rotate the cloud, then flip to Plane view for the cross-section. Switch the element to argon. Open a guided tour if you want the short version. Every view is a shareable URL, so you can link someone to an exact state.", "repo": "https://github.com/yaasshh09/AtomSim", "demo": "https://atomsim.fly.dev"}]...
|
[{"post_id": 82647, "ts": "202 [{"post_id": 82647, "ts": "2026-10-25T14:39:55Z", "hours": 2.1, "text": "Devlog #10 Since last time I’ve mostly been adding new physics, so here’s the list. Momentum space: The Radial view now shows how fast the electron is likely to be moving, not just where it is. This one is exact math too. Decay cascade: An excited hydrogen atom doesn’t fall straight to the bottom. It drops down step by step, and now you can watch every path it might take and how likely each one is. Lasers: There’s a new laser panel where you shine light on the atom and watch the electron flip back and forth between two levels (these are called Rabi oscillations). Relativity: For one-electron atoms you can now see the Dirac version of the wavefunction, which is what you get when you add Einstein’s relativity to quantum mechanics. The proton radius puzzle: The nucleus isn’t a perfect point. It has a size, and that shifts the energy levels a tiny bit. Two different experiments measured the proton’s size and got different answers, and you can see both predictions side by side. Antihydrogen: You can now make an atom out of antimatter. It matches normal hydrogen exactly, and the app explains why. Nuclear mass slider: You can drag the nucleus mass anywhere from as light as an electron to heavier than tritium and watch the atom change as you go. All of this is getting pushed to the live site now, so it should be up soon!"}, {"post_id": 82281, "ts": "2026-10-24T13:30:25Z", "hours": 5.4447, "text": "Devlog #9 God Ive got a lot show since the last update. First, the atom moves now. If you mix two states, you can watch the electron cloud slosh back and forth. Arrows show where the electron is flowing, and you can color the cloud by its phase. I also changed the look to seem more natural and less AI, I added a plain white theme with a dark mode, grids on every graph, and buttons to save any graph as a picture or a spreadsheet. Then I added a bunch of other features such as: Potassium and calcium, the first atoms past argon. There’s a mini experiment showing why 4s fills before 3d, even when 3d is lower in energy. A table that checks my calculations against real lab measurements for every atom from helium to calcium. sp, sp2 and sp3 hybrid orbitals, the shapes chemists use for bonds. Lines showing exactly where the electron can never be (nodes), and a scale bar in real units. A “measure the electron” button that drops dots one at a time until they build up the real shape. Some smaller things: Every graph has a “Reproduce in Python” box with code you can copy. Any number can be cited with one click. You can export 3D models for printing. Shared links now preview the actual orbital. There’s an API guide, a changelog and a feedback link. I also made the site faster by saving common results, and I fixed the phase colors so colorblind people can tell them apart. I still need to test it in a browser and then deploy it so stay tuned for that!"}, {"post_id": 79261, "ts": "2026-10-13T07:33:52Z", "hours": 1.625, "text": "Devlog #8 This update was mostly about cleaning things up. Firstly, I went through the whole site with a checklist of things that make websites feel cheap or fake. I took out the gradients, made the rounded pill-shaped buttons and badges square, and replaced an emoji warning icon with a normal one. Then I added a Terms page and a Privacy page, linked at the bottom of the side panel. The privacy page explains what the app does and doesn’t track, which isn’t much. All of this was to remove any “ALL AI” msgs ive received I also changed the license. AtomSim used to be MIT, which meant anyone could take it and sell it. Now it’s CC BY-NC 4.0, so people can still use it, share it and change it, as long as they credit me and don’t make money off it. Every font on the site is now Poppins, and it’s bundled with the app so it doesn’t have to load from Google. After that I reread all the text on the site and in the README and fixed anything that sounded robotic. That included a few curly quotes and one sentence that sounded like a press release. I also rewrote the line explaining “provenance” so it just says what it means. All of that is live on the site now. Next up is making the atom move. If you mix two states, the electron cloud sloshes back and forth at the exact frequency of the light the atom gives off. I’ve planned it out and I’m starting on it next. I also wrote down a big list of other ideas for later."}, {"post_id": 62105, "ts": "2026-09-05T11:07:13Z", "hours": 5.0147, "text": "DEVLOG : 7? Since that last update, the cleanup turned into actual features. I finished the frontend narrator pass. Every disclosure string, every physics note, every view intro is now plain prose instead of the app talking about itself in first person. Then I went after the parts of the app that were just annoying to use. Plots are zoomable now. Wheel to zoom, drag to pan, on all five analytic views. I also built a small notation layer so the ASCII the engine emits gets typeset properly at render time, subscripts and superscripts where they belong, without dragging in a whole math library. The big one was mobile. The app used to just refuse to render below a certain width. Now it works down to 320px: a proper mobile shell, view tabs instead of a sidebar list, controls that collapse, and per-view width floors so nothing spills sideways. That took a lot of small fixes I did not expect, a fixed SVG viewBox that hid fixed-width text, and an overflow rule that was already scrolling the page sideways before I touched anything. After that, the URL got a real history. Back and Forward actually work now, and moving between orbitals pushes a history entry while flipping a display toggle just replaces one. Added a copy-link button and keyboard shortcuts for stepping through n, l, m and switching views. Last thing, the title is now just AtomSim. The tagline was doing nothing for anyone."}, {"post_id": 61040, "ts": "2026-09-03T19:03:50Z", "hours": 6.8269, "text": "Devlog #5 or 6??? Since the site went live, most of the work has been cleanup rather than new physics. The whole app used to talk in first person. Every explanation said “I compute this” or “what I’m showing you.” It read like the code was narrating itself, which was odd. So I went through the entire Python engine module by module and rewrote it in plain technical prose. That’s done. Then I started on the frontend, which had way more of it. The disclosure text, the physics notes under each equation, the view intros. That’s still in progress. there were 2 things I had to be extra careful about. Some of those strings are checked word-for-word by tests, so rewording one has potential to break complete the build by itself. In addition, I also tidied the repo layout for public viewing, fixed a deploy pipeline failure, and added privacy-safe visitor counting. Right now i’m cutting padding, and pitching it so a high schooler can follow it without boring a physics grad."}, {"post_id": 42762, "ts": "2026-08-07T17:14:45Z", "hours": 7.2728, "text": "Devlog: Phase 30 to now Phase 30, Instrument frontend. Redesigned the UI to read like a physics instrument. Bundled the fonts, dropped four fields nothing actually measured, and learned that text-transform: uppercase turns 3d into 3D and α² into A², so uppercase is now confined to section headings only. Phase 31, Guided tours. Added walkthroughs that drive the app for you. Nearly shipped a tour that quoted the wrong hydrogen energy because it skipped reduced mass, and fixed two spotlight rings that measured their target before layout settled. Absorption band cleanup. Abutting sub-pixel SVG rects were drawing lines that weren’t in the data. Settled the mean vs deepest-per-column question and fixed decade ticks that failed at both ends of the axis. Housekeeping. Moved specs and plans out to docs/specs and docs/plans. Personal ignores went into .git/info/exclude so no tracked file carries tooling names. Rate limiting. Sized the burst from the app’s real fan-out per action rather than from click counts. The n=6 row plus an auto-refetch was quietly doubling the load. Web hosting. Containerized and deployed to Fly.io as a single process. Cold start from a snapshot is about 1.6s, occasionally up to 22s if the snapshot gets discarded. Argon solves in 2.8s on the deployed box against 1.4s locally. Suspended machines cost nothing, so occasional use stays near a dollar or two a month. Also added rate-limiter logging that identifies refused clients, and confirmed the proxy overwrites forged IP headers, so spoofing doesn’t get you past the limit."}, {"post_id": 41525, "ts": "2026-08-05T19:44:43Z", "hours": 10.8628, "text": "DevLog #3: New Frontend, Plus Small Bits Phase 22 to now. P22, distinguishable electrons. Turned off exchange in Hartree-Fock. Electrons still repel, they just stop being identical. Marked COUNTERFACTUAL. Helium came back exactly zero, so it was gone. P24, Pauli off. Dropped the occupancy cap and everything falls into the 1s. Argon becomes 1s^18 and the periodic table stops existing. P22’s slow convergence was shells, not exchange. P25, isosurfaces. Never size a box on the grid you draw on. The fraction error bar is blind to the box. A 90% p orbital is one piece, not two lobes. P26, HF in 3D. Now in Cloud, Plane, Radial and Surface. Whole-atom and one-orbital radii move opposite ways. Fidelity tiers were literals under the solve. P27, total density. Added D(r), the shape both models describe. A uniform grid steps over the 1s peak, so the test asserts convergence rate, not tolerance. P28, screened density. GSZ gets its own D(r). A density needs its own box. A log axis quietly breaks area = electron count. P29, comparison. Both models on one axis, gap measured. Caught a noise floor, a real number printing as zero, and a wrong caption. Sulfur, chlorine. Split ATOM_KEYS into identity and capability. Derive flags, never pass them. A client check exposed a deep-link race. P30, instrument frontend. Fonts bundled for offline. –edge is a border colour, never a fill. Dropped four fields with no engine behind them. Uppercase turned 3d into 3D, so headings only now. Plot polish. Zoomed line profile labels offsets from window centre, since absolute wavelengths printed the same string six times. Drew xyz axes through the cloud. Absorption, curve of growth. Stopped a zero equivalent width stretching the axis 300 decades. The band drew anti-aliasing seams as absorption lines where transmission was really 0.98 to 1.00. It now bins one column per unit and draws the deepest sample, beside what a real detector pixel would see."}, {"post_id": 38322, "ts": "2026-07-31T17:22:25Z", "hours": 11.9403, "text": "DevLog: Phase 18 to now P18, line shapes. Real lines are not infinitely thin spikes. Atoms move (Doppler) and get jostled by neighbours (pressure), so each line spreads into a bell shape, a Voigt profile. I added that, plus a zoom so you can look at one line up close. The useful trick was a flux-closure check: whatever area a line has before broadening, it has to still have after. That caught two grid bugs that were invisible on screen. P19, optical depth. Until now every line acted as if light escaped freely. In a thick gas strong lines saturate, so doubling the atoms stops doubling the brightness. That is the curve of growth. Lesson: decide which regime a line sits in from the physics, not by eyeballing the slope. Also the wavelength window has to widen as the column thickens, or you clip the wings you are trying to measure. P20, absorption. The mirror of emission. Shine a continuum through the gas, look at what is missing. The trap was that 14 hydrogen lines land on only 6 distinct wavelengths, so matching a profile to its source line by wavelength quietly pairs the wrong ones. I key on the transition instead. P21, Hartree-Fock. The big one. Instead of a fitted screening formula, each electron feels a potential built from all the others, solved over and over until it stops changing. That gets me sulfur and chlorine, which the old model could not touch, plus ions with no preset. Two things worth remembering: the solver’s own error bar was lying to me and needed re-deriving, and what made convergence fast was not a clever algorithm, it was the right mixing constant. P22, cleanup. Made features honest about where they apply. The classical ghost and the force-law lab only make sense for one-electron atoms, so they explain themselves now instead of erroring on a screened atom. Fixed He+ breaking every API call, because the “+” was never URL-encoded. Unknown systems say so instead of spinning. Right now I am fixing hint text that escapes its panel on narrow screens."}, {"post_id": 35332, "ts": "2026-07-26T17:27:28Z", "hours": 27.8683, "text": "Atom_Sim: Physics Simulator Dev Log An atom simulator built on one rule: Every number has a label ( exact , numerical , approximation , counterfactual , or visual_liberty ). Unlabeled numbers are treated as bugs. Stack: Python physics engine -> React + Three.js frontend. Phase Logs Phases 1–3: The Hydrogen Foundation Hydrogen Core: Uses exact math for energies and wavefunctions. Validates its electron clouds using statistical KS tests. Numerical Solver: Solves the Schrödinger equation for custom shapes. It calculates its own accuracy by halving the grid spacing. Constants Lab: Allows changing fundamental constants (hbar, e, c). It proves that changing individual units changes nothing if the ratio between them stays the same. Classical Ghost: Shows old Bohr orbits collapsing, proving why classical physics cannot explain atoms. Phases 4–6: Altered Potential & Real Atoms Fake Physics: Simulates universes with non-standard forces (like Yukawa or power laws) under a clear warning banner. Screened Atoms: Models elements from Helium to Argon using historic 1974 data. If an element (like Sulfur or Chlorine) lacks clean data, it is left out entirely rather than guessed. Phases 7–12: Fields, Relativity & Nuance Dirac Math: Tracks exact relativistic shifts and highlights what the math misses (the Lamb shift). External Fields: Simulates atoms splitting under magnetic fields (Zeeman effect) and electric fields (Stark effect). Hyperfine: Models the 21 cm hydrogen line using the precise electron-to-proton mass ratio. Phases 13–17: Light, Speed & Thermodynamics Fast Math: Uses a custom integration trick to calculate atomic lifetimes exactly and 13x faster. Doublet Ratios: Proves via quantum math (Wigner 6j) why certain spectral lines are twice as bright as others. Heat Sliders: Combines Saha and Boltzmann equations to turn raw rates into actual visible light. Dragging the temperature slider smoothly hands Lyman lines over to Balmer lines. Phase 18: Line Profiles (Current Work) Replaces infinitely sharp lines with realistic Voigt profiles using three combined factors: Natural Width: A Lorentzian shape caused by how fast an excited state decays. Doppler Width: A Gaussian shape caused by thermal motion. Works perfectly for normal hydrogen, positronium, and muonic hydrogen. Instrumental Width: A Gaussian blur based on the user’s chosen telescope or sensor resolution. Note on Missing Physics: Collision/pressure broadening is not simulated. Instead of a text disclaimer, the app calculates how large that missing effect would be and prints the raw margin of error right next to the chart. Core Development Rules No Smoke Tests: Every physics feature must pass an automated math test. No Live Fetches: All reference data is saved locally with a hard citation. No Silent Approximations: If the code cannot calculate something honestly, it stops and prints exactly what data is missing."}]...
|
Title: AtomSim by @yaasshh | Stardance
Devlogs:
A Title: AtomSim by @yaasshh | Stardance
Devlogs:
Atom_Sim: Physics Simulator Dev Log An atom simulator built on one rule: Every number has a label ( exact , numerical , approximation , counterfactual , or visual_liberty ). Unlabeled numbers are treated as bugs. Stack: Python physics engine -> React + Three.js frontend. Phase Logs Phases 1–3: The Hydrogen Foundation Hydrogen Core: Uses exact math for energies and wavefunctions. Validates its electron clouds using statistical KS tests. Numerical Solver: Solves the Schrödinger equation for custom shapes. It calculates its own accuracy by halving the grid spacing. Constants Lab: Allows changing fundamental constants (hbar, e, c). It proves that changing individual units changes nothing if the ratio between them stays the same. Classical Ghost: Shows old Bohr orbits collapsing, proving why classical physics cannot explain atoms. Phases 4–6: Altered Potential & Real Atoms Fake Physics: Simulates universes with non-standard forces (like Yukawa or power laws) under a clear warning banner. Screened Atoms: Models elements from Helium to Argon using historic 1974 data. If an element (like Sulfur or Chlorine) lacks clean data, it is left out entirely rather than guessed. Phases 7–12: Fields, Relativity & Nuance Dirac Math: Tracks exact relativistic shifts and highlights what the math misses (the Lamb shift). External Fields: Simulates atoms splitting under magnetic fields (Zeeman effect) and electric fields (Stark effect). Hyperfine: Models the 21 cm hydrogen line using the precise electron-to-proton mass ratio. Phases 13–17: Light, Speed & Thermodynamics Fast Math: Uses a custom integration trick to calculate atomic lifetimes exactly and 13x faster. Doublet Ratios: Proves via quantum math (Wigner 6j) why certain spectral lines are twice as bright as others. Heat Sliders: Combines Saha and Boltzmann equations to turn raw rates into actual visible light. Dragging the temperature slider smoothly hands Lyman lines over to Balmer lines. Phase 18: Line Profiles (Current Work) Replaces infinitely sharp lines with realistic Voigt profiles using three combined factors: Natural Width: A Lorentzian shape caused by how fast an excited state decays. Doppler Width: A Gaussian shape caused by thermal motion. Works perfectly for normal hydrogen, positronium, and muonic hydrogen. Instrumental Width: A Gaussian blur based on the user’s chosen telescope or sensor resolution. Note on Missing Physics: Collision/pressure broadening is not simulated. Instead of a text disclaimer, the app calculates how large that missing effect would be and prints the raw margin of error right next to the chart. Core Development Rules No Smoke Tests: Every physics feature must pass an automated math test. No Live Fetches: All reference data is saved locally with a hard citation. No Silent Approximations: If the code cannot calculate something honestly, it stops and prints exactly what data is missing.
DevLog: Phase 18 to now P18, line shapes. Real lines are not infinitely thin spikes. Atoms move (Doppler) and get jostled by neighbours (pressure), so each line spreads into a bell shape, a Voigt profile. I added that, plus a zoom so you can look at one line up close. The useful trick was a flux-closure check: whatever area a line has before broadening, it has to still have after. That caught two grid bugs that were invisible on screen. P19, optical depth. Until now every line acted as if light escaped freely. In a thick gas strong lines saturate, so doubling the atoms stops doubling the brightness. That is the curve of growth. Lesson: decide which regime a line sits in from the physics, not by eyeballing the slope. Also the wavelength window has to widen as the column thickens, or you clip the wings you are trying to measure. P20, absorption. The mirror of emission. Shine a continuum through the gas, look at what is missing. The trap was that 14 hydrogen lines land on only 6 distinct wavelengths, so matching a profile to its source line by wavelength quietly pairs the wrong ones. I key on the transition instead. P21, Hartree-Fock. The big one. Instead of a fitted screening formula, each electron feels a potential built from all the others, solved over and over until it stops changing. That gets me sulfur and chlorine, which the old model could not touch, plus ions with no preset. Two things worth remembering: the solver’s own error bar was lying to me and needed re-deriving, and what made convergence fast was not a clever algorithm, it was the right mixing constant. P22, cleanup. Made features honest about where they apply. The classical ghost and the force-law lab only make sense for one-electron atoms, so they explain themselves now instead of erroring on a screened atom. Fixed He+ breaking every API call, because the “+” was never URL-encoded. Unknown systems say so instead of spinning. Right now I am fixing hint text that escapes its panel on narrow screens.
DevLog #3: New Frontend, Plus Small Bits Phase 22 to now. P22, distinguishable electrons. Turned off exchange in Hartree-Fock. Electrons still repel, they just stop being identical. Marked COUNTERFACTUAL. Helium came back exactly zero, so it was gone. P24, Pauli off. Dropped the occupancy cap and everything falls into the 1s. Argon becomes 1s^18 and the periodic table stops existing. P22’s slow convergence was shells, not exchange. P25, isosurfaces. Never size a box on the grid you draw on. The fraction error bar is blind to the box. A 90% p orbital is one piece, not two lobes. P26, HF in 3D. Now in Cloud, Plane, Radial and Surface. Whole-atom and one-orbital radii move opposite ways. Fidelity tiers were literals under the solve. P27, total density. Added D(r), the shape both models describe. A uniform grid steps over the 1s peak, so the test asserts convergence rate, not tolerance. P28, screened density. GSZ gets its own D(r). A density needs its own box. A log axis quietly breaks area = electron count. P29, comparison. Both models on one axis, gap measured. Caught a noise floor, a real number printing as zero, and a wrong caption. Sulfur, chlorine. Split ATOM_KEYS into identity and capability. Derive flags, never pass them. A client check exposed a deep-link race. P30, instrument frontend. Fonts bundled for offline. –edge is a border colour, never a fill. Dropped four fields with no engine behind them. Uppercase turned 3d into 3D, so headings only now. Plot polish. Zoomed line profile labels offsets from window centre, since absolute wavelengths printed the same string six times. Drew xyz axes through the cloud. Absorption, curve of growth. Stopped a zero equivalent width stretching the axis 300 decades. The band drew anti-aliasing seams as absorption lines where transmission was really 0.98 to 1.00. It now bins one column per unit and draws the deepest sample, beside what a real detector pixel would see.
Devlog: Phase 30 to now Phase 30, Instrument frontend. Redesigned the UI to read like a physics instrument. Bundled the fonts, dropped four fields nothing actually measured, and learned that text-transform: uppercase turns 3d into 3D and α² into A², so uppercase is now confined to section headings only. Phase 31, Guided tours. Added walkthroughs that drive the app for you. Nearly shipped a tour that quoted the wrong hydrogen energy because it skipped reduced mass, and fixed two spotlight rings that measured their target before layout settled. Absorption band cleanup. Abutting sub-pixel SVG rects were drawing lines that weren’t in the data. Settled the mean vs deepest-per-column question and fixed decade ticks that failed at both ends of the axis. Housekeeping. Moved specs and plans out to docs/specs and docs/plans. Personal ignores went into .git/info/exclude so no tracked file carries tooling names. Rate limiting. Sized the burst from the app’s real fan-out per action rather than from click counts. The n=6 row plus an auto-refetch was quietly doubling the load. Web hosting. Containerized and deployed to Fly.io as a single process. Cold start from a snapshot is about 1.6s, occasionally up to 22s if the snapshot gets discarded. Argon solves in 2.8s on the deployed box against 1.4s locally. Suspended machines cost nothing, so occasional use stays near a dollar or two a month. Also added rate-limiter logging that identifies refused clients, and confirmed the proxy overwrites forged IP headers, so spoofing doesn’t get you past the limit.
Devlog #5 or 6??? Since the site went live, most of the work has been cleanup rather than new physics. The whole app used to talk in first person. Every explanation said “I compute this” or “what I’m showing you.” It read like the code was narrating itself, which was odd. So I went through the entire Python engine module by module and rewrote it in plain technical prose. That’s done. Then I started on the frontend, which had way more of it. The disclosure text, the physics notes under each equation, the view intros. That’s still in progress. there were 2 things I had to be extra careful about. Some of those strings are checked word-for-word by tests, so rewording one has potential to break complete the build by itself. In addition, I also tidied the repo layout for public viewing, fixed a deploy pipeline failure, and added privacy-safe visitor counting. Right now i’m cutting padding, and pitching it so a high schooler can follow it without boring a physics grad.
DEVLOG : 7? Since that last update, the cleanup turned into actual features. I finished the frontend narrator pass. Every disclosure string, every physics note, every view intro is now plain prose instead of the app talking about itself in first person. Then I went after the parts of the app that were just annoying to use. Plots are zoomable now. Wheel to zoom, drag to pan, on all five analytic views. I also built a small notation layer so the ASCII the engine emits gets typeset properly at render time, subscripts and superscripts where they belong, without dragging in a whole math library. The big one was mobile. The app used to just refuse to render below a certain width. Now it works down to 320px: a proper mobile shell, view tabs instead of a sidebar list, controls that collapse, and per-view width floors so nothing spills sideways. That took a lot of small fixes I did not expect, a fixed SVG viewBox that hid fixed-width text, and an overflow rule that was already scrolling the page sideways before I touched anything. After that, the URL got a real history. Back and Forward actually work now, and moving between orbitals pushes a history entry while flipping a display toggle just replaces one. Added a copy-link button and keyboard shortcuts for stepping through n, l, m and switching views. Last thing, the title is now just AtomSim. The tagline was doing nothing for anyone.
Devlog #8 This update was mostly about cleaning things up. Firstly, I went through the whole site with a checklist of things that make websites feel cheap or fake. I took out the gradients, made the rounded pill-shaped buttons and badges square, and replaced an emoji warning icon with a normal one. Then I added a Terms page and a Privacy page, linked at the bottom of the side panel. The privacy page explains what the app does and doesn’t track, which isn’t much. All of this was to remove any “ALL AI” msgs ive received I also changed the license. AtomSim used to be MIT, which meant anyone could take it and sell it. Now it’s CC BY-NC 4.0, so people can still use it, share it and change it, as long as they credit me and don’t make money off it. Every font on the site is now Poppins, and it’s bundled with the app so it doesn’t have to load from Google. After that I reread all the text on the site and in the README and fixed anything that sounded robotic. That included a few curly quotes and one sentence that sounded like a press release. I also rewrote the line explaining “provenance” so it just says what it means. All of that is live on the site now. Next up is making the atom move. If you mix two states, the electron cloud sloshes back and forth at the exact frequency of the light the atom gives off. I’ve planned it out and I’m starting on it next. I also wrote down a big list of other ideas for later.
Devlog #9 God Ive got a lot show since the last update. First, the atom moves now. If you mix two states, you can watch the electron cloud slosh back and forth. Arrows show where the electron is flowing, and you can color the cloud by its phase. I also changed the look to seem more natural and less AI, I added a plain white theme with a dark mode, grids on every graph, and buttons to save any graph as a picture or a spreadsheet. Then I added a bunch of other features such as: Potassium and calcium, the first atoms past argon. There’s a mini experiment showing why 4s fills before 3d, even when 3d is lower in energy. A table that checks my calculations against real lab measurements for every atom from helium to calcium. sp, sp2 and sp3 hybrid orbitals, the shapes chemists use for bonds. Lines showing exactly where the electron can never be (nodes), and a scale bar in real units. A “measure the electron” button that drops dots one at a time until they build up the real shape. Some smaller things: Every graph has a “Reproduce in Python” box with code you can copy. Any number can be cited with one click. You can export 3D models for printing. Shared links now preview the actual orbital. There’s an API guide, a changelog and a feedback link. I also made the site faster by saving common results, and I fixed the phase colors so colorblind people can tell them apart. I still need to test it in a browser and then deploy it so stay tuned for that!
Devlog #10 Since last time I’ve mostly been adding new physics, so here’s the list. Momentum space: The Radial view now shows how fast the electron is likely to be moving, not just where it is. This one is exact math too. Decay cascade: An excited hydrogen atom doesn’t fall straight to the bottom. It drops down step by step, and now you can watch every path it might take and how likely each one is. Lasers: There’s a new laser panel where you shine light on the atom and watch the electron flip back and forth between two levels (these are called Rabi oscillations). Relativity: For one-electron atoms you can now see the Dirac version of the wavefunction, which is what you get when you add Einstein’s relativity to quantum mechanics. The proton radius puzzle: The nucleus isn’t a perfect point. It has a size, and that shifts the energy levels a tiny bit. Two different experiments measured the proton’s size and got different answers, and you can see both predictions side by side. Antihydrogen: You can now make an atom out of antimatter. It matches normal hydrogen exactly, and the app explains why. Nuclear mass slider: You can drag the nucleus mass anywhere from as light as an electron to heavier than tritium and watch the atom change as you go. All of this is getting pushed to the live site now, so it should be up soon!
Ships:
Atom Sim is a browser app that solves atoms from scratch and shows you the result. Hydrogen comes out of closed-form math, real atoms like carbon and argon come out of a Hartree-Fock solver I wrote, and you can look at any of them as a 3D electron cloud, a 2D slice, a radial plot, an energy-level diagram or an emission spectrum. You can also break physics on purpose: switch off the Pauli exclusion principle, switch off electron exchange, or type in your own potential V(r) and see what kind of atom falls out. The rule I built everything around is that the model never quietly lies. Every number carries a tag saying how it was made: exact, numerical, approximation, counterfactual, or just a visual choice. That tag follows the number from the solver all the way to the label on screen. What was challenging Hartree-Fock was brutal. The angular coefficients in the Fock operator are easy to get slightly wrong, and when you do, the solver still converges and hands you smooth, beautiful, completely wrong orbitals. Nothing crashes, nothing warns you. I had to re-derive the algebra instead of nudging numbers until a benchmark matched. Error bars were the other trap. Mine looked great for a while and were simply lying, because the real error was coming from the box size, not the grid spacing I was measuring. Argon also took about an hour on a uniform grid until I moved to an exponential mesh, which cut it to seconds. What I’m proud of That it’s honest. Plenty of simulators draw a pretty orbital and say nothing about where it came from. Mine tells you, and the tests enforce it. The spectra are checked against real NIST data inside the test suite, so a physics regression fails CI rather than shipping quietly. How to test it It’s live at https://atomsim.fly.dev . The server sleeps when nobody is using it, so the very first load can take around 15 seconds. After that it’s quick. Good things to try: pick n=3, l=1 and rotate the cloud, then flip to Plane view for the cross-section. Switch the element to argon. Open a guided tour if you want the short version. Every view is a shareable URL, so you can link someone to an exact state.
AtomSim is a website I built that lets you actually see what an atom looks like. You pick an element, or hydrogen, and pick which electron shell you want to look at. Then it draws it. Not a cartoon of dots going around a circle like the diagrams in school, the real shape, the cloud where the electron actually is. Some of them look like spheres, some look like dumbbells, some look like weird four leaf clovers. All of that is real, it just falls out of the math. You can spin it around, slice it in half, look at it as a graph instead, or look at the colored lines of light the atom gives off when it gets hot. That last one is how we know what stars are made of, and you can watch it happen. The part I care about most is that it never fakes anything. Every single number on the screen carries a label saying how it was made. Some are exact, straight from the equations. Some are computed numerically with an error bar attached. Some are approximations, and it says which physical effects it left out. And a few are deliberate “what if” experiments, like turning off the rule that stops two electrons sitting in the same place, just to see the atom collapse. Those are labeled too. So if a picture is pretty rather than true, the app tells you. I wanted something a curious fifteen year old could poke at for an hour and come away with a correct picture in their head, not a comfortable wrong one. It runs in a browser, works on a phone, and every view has its own link you can share. PS: It also has mobile view now!...
|
1792990059.5776522
|
1793076459.5776522
|
|
21500
|
HCR2 Setups Guide by @Alloy | Stardance
|
Alloy
|
1
|
63.0
|
846
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-25T11:58:58Z", "hours": 63.0, "multiplier": 13.44, "payout": 846, "blessing": "neutral", "text": "I made a web based information app that shows setups for each vehicle and track combination in the time attack game mode of Hill Climb Racing 2 (HCR2). The hardest thing was all of the queries for specific statistics, and since some of them also filtered by world records I just made a function to make world record queries cleaner and less messy. A second major problem was the filters on the search page, at the start were just simple select elements but they only take one value so the user can’t filter by more than one of each at once, to fix this I wanted to add a checkbox to each option but selects don’t support that so I needed to break my entire css by switching to details elements and restyling them so they stack nicely like the select elements before.", "repo": "https://github.com/Alloy-MVP/HCR2-Setups-Guide", "demo": "https://frenchtoast.pythonanywhere.com/"}]...
|
[{"post_id": 73537, "ts": "202 [{"post_id": 73537, "ts": "2026-09-25T10:57:09Z", "hours": 0.8028, "text": "FINAL DEVLOG: Added the new parts; Echo and Amplifier, added another part slot, increasing it to 4 since all world records use 4 parts now instead of 3. Took 4 hours to insert the world record setups (only all vehicle world records) for all 197 tracks as of 25/9/2026."}, {"post_id": 73425, "ts": "2026-09-25T02:03:28Z", "hours": 4.7644, "text": "Fixed a bug where inserting setups with a negative number were getting through because they are the only inputs not validated by sqlalchemy. Changed the validation to use the database data instead of the lists at the top of the .py, and therefore also added every single vehicle, part, and track to replace it in the db. Installed pylint to help my code look cleaner and changed everything it was complaining about. Also cleared the database so its empty and added all of the in game tracks and vehicles to replace the test data."}, {"post_id": 52034, "ts": "2026-08-22T02:16:53Z", "hours": 2.0461, "text": "Changed the tuning parts on setups and search page to icons, reversed the order of setups on the setups page so recently added ones are shown at the top, added a max time limit (32 bit integer limit). Tons of bug fixes: the search filters now handle more than one value, checking “World Records” doesnt wipe other filters, filters arent wiped when the page reloads after searching for a setup, rows per page defaults to 50, fixed the settings returning the error statement if rows per page is empty."}, {"post_id": 51494, "ts": "2026-08-21T07:31:36Z", "hours": 0.7431, "text": "Small tweak to the backend validation for the settings inputs, database path is now relative instead of absolute, added a second SQLAlchemy error catcher on top of the python ones, removed the .venv so a new one is made when the repository is cloned. (now it should be runable)"}, {"post_id": 51359, "ts": "2026-08-20T23:45:02Z", "hours": 0.8308, "text": "Changed most of the lists to now use list comprehension, made the error handler handle every error code from 400 to 599. Updated the error page to not break the flow. The app is now fully runable (hopefully) with instructions on the readme."}, {"post_id": 50800, "ts": "2026-08-20T06:19:49Z", "hours": 2.0058, "text": "Added a clear filters button to the insert form, added a shadow to the home page title. Changed the backend for time to not allow times > 32 bit int limit, changed the rows per page setting to be able to type custom amounts while still suggesting 5,10,20,30,40,50 with back end validation. Added a small section in information about insert field parameters. The setups table order is now reversed so new inserts are shown at the top. Settings errors are now shown on pages. Cleaned up some backend validation, the error messages now dont show for empty fields, created a requrements.txt and a readme on how to run the app."}, {"post_id": 49273, "ts": "2026-08-17T23:45:16Z", "hours": 0.8703, "text": "Added a 404 error handler and images of tuning parts to replace the text."}, {"post_id": 47929, "ts": "2026-08-16T06:12:15Z", "hours": 3.1731, "text": "Finished most of the home page, added a information section with a video, added 3 containers with quick navigation links, statistics, and fastest times on the home page, also added a background."}, {"post_id": 47790, "ts": "2026-08-15T23:28:52Z", "hours": 1.8481, "text": "Made the button borders brighter to be more visible, changed the content backgrounds to a gradient. Changed the setups table to look identical to search. Added a delete button to the all setups table to easily delete specific setups."}, {"post_id": 47320, "ts": "2026-08-15T06:19:10Z", "hours": 4.9217, "text": "Big Update: Moved links to the right and added a settings menu, added a title, made all inputs and filters have hover effects. Settings menu has a toggle for light/dark theme, and a way to select how many rows are shown in all tables (default is 10). Changed all of the css colors to variables for the settings."}, {"post_id": 46610, "ts": "2026-08-13T23:34:27Z", "hours": 2.1578, "text": "Search bar now fully supports searching for more than one word."}, {"post_id": 45471, "ts": "2026-08-11T23:30:33Z", "hours": 1.6261, "text": "The player, vehicle, and track filters can all take more than one filter so the search page can now show results from multiple players, vehicles, and tracks."}, {"post_id": 43698, "ts": "2026-08-09T03:15:24Z", "hours": 2.5139, "text": "Revamped the css again, the insert and delete forms are being moved to the setups table. No screenshot until the next devlog because its a mess right now."}, {"post_id": 43069, "ts": "2026-08-08T04:14:05Z", "hours": 1.5303, "text": "Added a leaderboard for the most used part setups, Changed how the parts are submitted, they are now sorted so there cant be multiple setups of the same parts combination but different orders, duplicates will just reuse an already existing one."}, {"post_id": 42928, "ts": "2026-08-07T22:11:58Z", "hours": 2.7381, "text": "Added a script that counts how many wrs every single player has and displays on the leaderboard page. Made the player field autoselect a name if you type it with wrong capitalization, for example ndwg will autoswitch to Ndwg."}, {"post_id": 39258, "ts": "2026-08-02T03:35:36Z", "hours": 2.9344, "text": "Completely finished styling the search page, also changed the filters to details instead of select so i can use checkboxes inside."}, {"post_id": 39170, "ts": "2026-08-01T22:55:05Z", "hours": 0.7469, "text": "World records filter is fully finished"}, {"post_id": 38508, "ts": "2026-07-31T22:44:24Z", "hours": 3.4031, "text": "Finished the backend of the wr filter, the fastest time with x vehicle and y track is highlighted in yellow."}, {"post_id": 36188, "ts": "2026-07-28T03:29:06Z", "hours": 1.2111, "text": "Finally found out about back_populates, players that arent currently in a setup now get deleted."}, {"post_id": 35045, "ts": "2026-07-26T06:34:23Z", "hours": 1.4058, "text": "Styled the filters section, added hover styling for links, buttons, and table data."}, {"post_id": 34983, "ts": "2026-07-26T03:54:43Z", "hours": 3.9231, "text": "Completely restarted the css, started styling the search bar filters and navigation bar."}, {"post_id": 29886, "ts": "2026-07-17T01:32:40Z", "hours": 1.055, "text": "Changed the filters to only show players,tracks, and vehicles that actually have a setup. Made the vehicle and track filter setups by time (lowest to highes) so the first time (fastest) is at the top."}, {"post_id": 29282, "ts": "2026-07-16T02:58:34Z", "hours": 0.8175, "text": "Added warnings for invalid filters (changed the values using inspect)"}, {"post_id": 28723, "ts": "2026-07-15T05:01:13Z", "hours": 1.4858, "text": "Made the filter fields functional but are misssing back end validation"}, {"post_id": 26951, "ts": "2026-07-12T01:24:49Z", "hours": 2.71, "text": "Added a stats/search page and moved the search bar there, also added a way to filter by players and vehicles (unfuctional)."}, {"post_id": 21229, "ts": "2026-07-03T02:00:51Z", "hours": 1.4261, "text": "Added a search bar to filter specific setups but still has some bugs (first table is all data, second table is data from the search)"}, {"post_id": 19058, "ts": "2026-06-30T07:43:15Z", "hours": 1.2028, "text": "Made the delete table functional and removes rows from setups but not the sub tables where the individual data is."}, {"post_id": 16718, "ts": "2026-06-27T05:02:23Z", "hours": 2.5661, "text": "Added checks for duplicates, missing fields, and times automatically updates if a time that is faster than the previous for a specific setup is submitted. Automatically adds the data to the setups table and puts the individual field data into their respective tables as well."}, {"post_id": 15998, "ts": "2026-06-25T23:45:29Z", "hours": 2.5778, "text": "Added some back end validation checks and added a list to check if the track field matches what can actually be inserted, also used a jinja loop to make options for each individual track in the list for the form."}, {"post_id": 14169, "ts": "2026-06-23T04:56:34Z", "hours": 2.9508, "text": "Basic input form for the database if every field is filled and correct"}]...
|
Title: HCR2 Setups Guide by @Alloy | Stardance
De Title: HCR2 Setups Guide by @Alloy | Stardance
Devlogs:
Basic input form for the database if every field is filled and correct
Added some back end validation checks and added a list to check if the track field matches what can actually be inserted, also used a jinja loop to make options for each individual track in the list for the form.
Added checks for duplicates, missing fields, and times automatically updates if a time that is faster than the previous for a specific setup is submitted. Automatically adds the data to the setups table and puts the individual field data into their respective tables as well.
Made the delete table functional and removes rows from setups but not the sub tables where the individual data is.
Added a search bar to filter specific setups but still has some bugs (first table is all data, second table is data from the search)
Added a stats/search page and moved the search bar there, also added a way to filter by players and vehicles (unfuctional).
Made the filter fields functional but are misssing back end validation
Added warnings for invalid filters (changed the values using inspect)
Changed the filters to only show players,tracks, and vehicles that actually have a setup. Made the vehicle and track filter setups by time (lowest to highes) so the first time (fastest) is at the top.
Completely restarted the css, started styling the search bar filters and navigation bar.
Styled the filters section, added hover styling for links, buttons, and table data.
Finally found out about back_populates, players that arent currently in a setup now get deleted.
Finished the backend of the wr filter, the fastest time with x vehicle and y track is highlighted in yellow.
World records filter is fully finished
Completely finished styling the search page, also changed the filters to details instead of select so i can use checkboxes inside.
Added a script that counts how many wrs every single player has and displays on the leaderboard page. Made the player field autoselect a name if you type it with wrong capitalization, for example ndwg will autoswitch to Ndwg.
Added a leaderboard for the most used part setups, Changed how the parts are submitted, they are now sorted so there cant be multiple setups of the same parts combination but different orders, duplicates will just reuse an already existing one.
Revamped the css again, the insert and delete forms are being moved to the setups table. No screenshot until the next devlog because its a mess right now.
The player, vehicle, and track filters can all take more than one filter so the search page can now show results from multiple players, vehicles, and tracks.
Search bar now fully supports searching for more than one word.
Big Update: Moved links to the right and added a settings menu, added a title, made all inputs and filters have hover effects. Settings menu has a toggle for light/dark theme, and a way to select how many rows are shown in all tables (default is 10). Changed all of the css colors to variables for the settings.
Made the button borders brighter to be more visible, changed the content backgrounds to a gradient. Changed the setups table to look identical to search. Added a delete button to the all setups table to easily delete specific setups.
Finished most of the home page, added a information section with a video, added 3 containers with quick navigation links, statistics, and fastest times on the home page, also added a background.
Added a 404 error handler and images of tuning parts to replace the text.
Added a clear filters button to the insert form, added a shadow to the home page title. Changed the backend for time to not allow times > 32 bit int limit, changed the rows per page setting to be able to type custom amounts while still suggesting 5,10,20,30,40,50 with back end validation. Added a small section in information about insert field parameters. The setups table order is now reversed so new inserts are shown at the top. Settings errors are now shown on pages. Cleaned up some backend validation, the error messages now dont show for empty fields, created a requrements.txt and a readme on how to run the app.
Changed most of the lists to now use list comprehension, made the error handler handle every error code from 400 to 599. Updated the error page to not break the flow. The app is now fully runable (hopefully) with instructions on the readme.
Small tweak to the backend validation for the settings inputs, database path is now relative instead of absolute, added a second SQLAlchemy error catcher on top of the python ones, removed the .venv so a new one is made when the repository is cloned. (now it should be runable)
Changed the tuning parts on setups and search page to icons, reversed the order of setups on the setups page so recently added ones are shown at the top, added a max time limit (32 bit integer limit). Tons of bug fixes: the search filters now handle more than one value, checking “World Records” doesnt wipe other filters, filters arent wiped when the page reloads after searching for a setup, rows per page defaults to 50, fixed the settings returning the error statement if rows per page is empty.
Fixed a bug where inserting setups with a negative number were getting through because they are the only inputs not validated by sqlalchemy. Changed the validation to use the database data instead of the lists at the top of the .py, and therefore also added every single vehicle, part, and track to replace it in the db. Installed pylint to help my code look cleaner and changed everything it was complaining about. Also cleared the database so its empty and added all of the in game tracks and vehicles to replace the test data.
FINAL DEVLOG: Added the new parts; Echo and Amplifier, added another part slot, increasing it to 4 since all world records use 4 parts now instead of 3. Took 4 hours to insert the world record setups (only all vehicle world records) for all 197 tracks as of 25/9/2026.
Ships:
I made a web based information app that shows setups for each vehicle and track combination in the time attack game mode of Hill Climb Racing 2 (HCR2). The hardest thing was all of the queries for specific statistics, and since some of them also filtered by world records I just made a function to make world record queries cleaner and less messy. A second major problem was the filters on the search page, at the start were just simple select elements but they only take one value so the user can’t filter by more than one of each at once, to fix this I wanted to add a checkbox to each option but selects don’t support that so I needed to break my entire css by switching to details elements and restyling them so they stack nicely like the select elements before....
|
1792856965.1590054
|
1792943365.1590054
|
|
28785
|
DEADLINE by @ASOM | Stardance
|
ASOM
|
1
|
45.0
|
846
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-10T16:46:42Z", "hours": 45.0, "multiplier": 18.96, "payout": 846, "blessing": "neutral", "text": "DEADLINE is a fast-paced, top-down arcade shooter inspired by classic zombie survival modes. It features many types of weapons and perks. Defeat zombies, unlock map regions, buy better weapons, and survive as long as you can!", "repo": "https://github.com/ASOM846/DEADLINE", "demo": "https://asom846.itch.io/deadline"}]...
|
[{"post_id": 26032, "ts": "202 [{"post_id": 26032, "ts": "2026-07-10T16:44:16Z", "hours": 5.6908, "text": "DEADLINE V1.0.0 READY TO SHIP !!! Changes since last version Key features implemented Fully implemented Menu and corresponding friend classes Implemented Map selection Limited web build to small map Added README Key fixes Fixed commonly reported issues Checkout Git log for additional and more complete info Cheers"}, {"post_id": 25533, "ts": "2026-07-09T21:01:36Z", "hours": 7.175, "text": "DEADLINE V0.15.0 Latest commit Changes since last version Key features implemented Started implementing LoadingScreen Implemented Menu Added virtual screen boundary for Menu elements Added Pickups textures Implemented DoubleBarrel weapon Added v-sync Implemented better UI aiming for more minimalist look Implemented dynamic Vignette color depends on current HP and starts pulsing when hp is low Implemented dynamic transition between LoadingScreen and Game Added more night like look to the game by applying NightTint on textures and colors Key fixes Misspelled word in UI Key refactors Simplified LevelMap drawing logic Checkout Git log for additional and more complete info Cheers"}, {"post_id": 24108, "ts": "2026-07-07T13:57:37Z", "hours": 3.4833, "text": "DEADLINE V0.14.0 Latest commit Changes since last version Key features implemented Wall textures interpreter Door and barricade textures (temp probably) Grass and floor textures Key bug fixes Text in UI being unreadable due to new Player texture Key refactors Precashing biymask for wall textures Optimized some collisions (no more O^2 ) Implemented emscripten adapt for WebBuild Checkout Git log for additional and more complete info Cheers"}, {"post_id": 23623, "ts": "2026-07-06T18:04:52Z", "hours": 6.2789, "text": "DEADLINE V0.13.0 Latest commit Changes since last version Key features implemented Player textures Zombies textures Floating numbers Lose condition Lose screen Mystery box taking money to open Potions EffectManager for dealing with floating numbers and ScreenShake in the future Key bug fixes Implemented missing Reset functions Weapon indexes messed up by the addition of potions Key refactors Moved WeaponManager functions bodies to separate file Changed WeaponManager system from single inventory to templates and copping etc. Checkout Git log for additional and more complete info Cheers"}, {"post_id": 22837, "ts": "2026-07-05T13:33:03Z", "hours": 5.5431, "text": "DEADLINE V0.12.0 Key features implemented since last version Improved game balance Added ScreenShake effect Started implementing RandomWeaponSpawner witch is just a mystery box:D Created new map Implemented knife weapon, triggered by v Fully implement PickUp Key bug fixed since last version Bullet flying through closed doors Weapon reloading not stopping working when changing weapon Key refactors since last version Moved information drawing logic from Game to UI Simplified UI into single call function Moved PickUp drawing from from manager to class"}, {"post_id": 21657, "ts": "2026-07-03T18:42:29Z", "hours": 3.4197, "text": "DEADLINE V0.11.1 Key features implemented since last Dev Log V0.11.1 Cleaned up Player struct V0.11.0 Created Zombie Blockade collision V0.10.4 Started working on blockade interactions V0.10.3 Added basic pick up item interactions V0.10.2 Updated pick ups drawing V0.10.1 Started working on pick ups V0.10.0 Implemented independent CameraManager V0.9.6 Implemented camera auto offset when resizing window Implemented drawing information about DOOR possible interaction V0.9.5 Updated variables initialization logic when unlocking neighboring doors V0.9.4 Implemented auto opening neighboring doors V0.9.3 Updated pause, now pausing enemies on P Switching cam mode on SPACE Checkout Git log for additional info Cheers"}, {"post_id": 20958, "ts": "2026-07-02T18:09:33Z", "hours": 2.6914, "text": "DEADLINE V0.9.2 Key features implemented since last Dev Log V0.9.2 Work on finishing DOOR implementation Simplified LevelMap class V0.9.1 Started implementing DOOR Updated map V0.9.0 Fully implemented Weapon Shop mechanic V0.8.5 Added weapon price Added magazine price Started working on Weapon Shop Checkout Git log for additional info Cheers"}, {"post_id": 20661, "ts": "2026-07-02T10:01:22Z", "hours": 5.1783, "text": "DEADLINE V0.8.4 Key features implemented in previous versions V0.8.4 Updated map Changed weapon spawner logic from randomly assigning weapon to spawner to predefined weapon for each spawner on map V0.8.3 Added player money Money increment when killing zombie Added val variable to zombie class, it represents zombie’s “money” value Started work on weapon shop mechanic Added secondary weapon index Removed cycling through all weapons V0.8.2 Added weapon type enum Added weapon spawners vector Added weapon spawner vs player collision system Added ammo addition when pressing E when standing on weapon spawner V0.8.1 Moved weapon initialization to WeaponManager V0.8.0 Added WeaponManager Removed unused code from Player Added WEAPON_SHOP tile type V0.7.0 Added Player and Zombie collision Added hp to Player Added damage to Zombie Updated map Updated Player spawn point V0.6.5 Added AK47 weapon Added weapon reloading Added cycling through weapons vector V0.6.4 Changed weapon from holding pointer to index in weapons vector V0.6.3 Added basic weapon reloading V0.6.2 Added weapons: UZI SNIPER SHOTGUN Added weapon switching using keyboard Updated Bullet vs Zombie collision system Added temporary pause solution by pressing space key Added BulletManager for managing bullets For now I will continue to post dev logs in form of summary, because progress is currently very slow Checkout Git log for additional info Cheers"}, {"post_id": 19295, "ts": "2026-06-30T15:46:57Z", "hours": 5.2464, "text": "DEADLINE V0.6.1 Features implemented in previous versions V0.6.1 Started working on weapon system V0.6.0 Implemented bullet wall collision V0.5.1 Improved wave manager V0.5.0 Implemented BLOCKADE and ZOMBIE_SPAWNER TileType Implemented simple wave manager V0.4.0 Implemented player-wall collision system Implemented zombie live cycle Updated LevelMap V0.3.0 Implemented following camera V0.2.1 Updated grid logic - now operating on TileType instead on int V0.2.0 Implemented map loading Created MapBuilder as separate project V0.1.0 Implemented entity movement Implemented basic rendering systems Implemented flood field Implemented zombie collision V0.0.0 (Initial commit) Implemented player Implemented player movement Implemented basic zombie Checkout Git log for additional info Cheers"}]...
|
Title: DEADLINE by @ASOM | Stardance
Devlogs:
DEA Title: DEADLINE by @ASOM | Stardance
Devlogs:
DEADLINE V0.6.1 Features implemented in previous versions V0.6.1 Started working on weapon system V0.6.0 Implemented bullet wall collision V0.5.1 Improved wave manager V0.5.0 Implemented BLOCKADE and ZOMBIE_SPAWNER TileType Implemented simple wave manager V0.4.0 Implemented player-wall collision system Implemented zombie live cycle Updated LevelMap V0.3.0 Implemented following camera V0.2.1 Updated grid logic - now operating on TileType instead on int V0.2.0 Implemented map loading Created MapBuilder as separate project V0.1.0 Implemented entity movement Implemented basic rendering systems Implemented flood field Implemented zombie collision V0.0.0 (Initial commit) Implemented player Implemented player movement Implemented basic zombie Checkout Git log for additional info Cheers
DEADLINE V0.8.4 Key features implemented in previous versions V0.8.4 Updated map Changed weapon spawner logic from randomly assigning weapon to spawner to predefined weapon for each spawner on map V0.8.3 Added player money Money increment when killing zombie Added val variable to zombie class, it represents zombie’s “money” value Started work on weapon shop mechanic Added secondary weapon index Removed cycling through all weapons V0.8.2 Added weapon type enum Added weapon spawners vector Added weapon spawner vs player collision system Added ammo addition when pressing E when standing on weapon spawner V0.8.1 Moved weapon initialization to WeaponManager V0.8.0 Added WeaponManager Removed unused code from Player Added WEAPON_SHOP tile type V0.7.0 Added Player and Zombie collision Added hp to Player Added damage to Zombie Updated map Updated Player spawn point V0.6.5 Added AK47 weapon Added weapon reloading Added cycling through weapons vector V0.6.4 Changed weapon from holding pointer to index in weapons vector V0.6.3 Added basic weapon reloading V0.6.2 Added weapons: UZI SNIPER SHOTGUN Added weapon switching using keyboard Updated Bullet vs Zombie collision system Added temporary pause solution by pressing space key Added BulletManager for managing bullets For now I will continue to post dev logs in form of summary, because progress is currently very slow Checkout Git log for additional info Cheers
DEADLINE V0.9.2 Key features implemented since last Dev Log V0.9.2 Work on finishing DOOR implementation Simplified LevelMap class V0.9.1 Started implementing DOOR Updated map V0.9.0 Fully implemented Weapon Shop mechanic V0.8.5 Added weapon price Added magazine price Started working on Weapon Shop Checkout Git log for additional info Cheers
DEADLINE V0.11.1 Key features implemented since last Dev Log V0.11.1 Cleaned up Player struct V0.11.0 Created Zombie Blockade collision V0.10.4 Started working on blockade interactions V0.10.3 Added basic pick up item interactions V0.10.2 Updated pick ups drawing V0.10.1 Started working on pick ups V0.10.0 Implemented independent CameraManager V0.9.6 Implemented camera auto offset when resizing window Implemented drawing information about DOOR possible interaction V0.9.5 Updated variables initialization logic when unlocking neighboring doors V0.9.4 Implemented auto opening neighboring doors V0.9.3 Updated pause, now pausing enemies on P Switching cam mode on SPACE Checkout Git log for additional info Cheers
DEADLINE V0.12.0 Key features implemented since last version Improved game balance Added ScreenShake effect Started implementing RandomWeaponSpawner witch is just a mystery box:D Created new map Implemented knife weapon, triggered by v Fully implement PickUp Key bug fixed since last version Bullet flying through closed doors Weapon reloading not stopping working when changing weapon Key refactors since last version Moved information drawing logic from Game to UI Simplified UI into single call function Moved PickUp drawing from from manager to class
DEADLINE V0.13.0 Latest commit Changes since last version Key features implemented Player textures Zombies textures Floating numbers Lose condition Lose screen Mystery box taking money to open Potions EffectManager for dealing with floating numbers and ScreenShake in the future Key bug fixes Implemented missing Reset functions Weapon indexes messed up by the addition of potions Key refactors Moved WeaponManager functions bodies to separate file Changed WeaponManager system from single inventory to templates and copping etc. Checkout Git log for additional and more complete info Cheers
DEADLINE V0.14.0 Latest commit Changes since last version Key features implemented Wall textures interpreter Door and barricade textures (temp probably) Grass and floor textures Key bug fixes Text in UI being unreadable due to new Player texture Key refactors Precashing biymask for wall textures Optimized some collisions (no more O^2 ) Implemented emscripten adapt for WebBuild Checkout Git log for additional and more complete info Cheers
DEADLINE V0.15.0 Latest commit Changes since last version Key features implemented Started implementing LoadingScreen Implemented Menu Added virtual screen boundary for Menu elements Added Pickups textures Implemented DoubleBarrel weapon Added v-sync Implemented better UI aiming for more minimalist look Implemented dynamic Vignette color depends on current HP and starts pulsing when hp is low Implemented dynamic transition between LoadingScreen and Game Added more night like look to the game by applying NightTint on textures and colors Key fixes Misspelled word in UI Key refactors Simplified LevelMap drawing logic Checkout Git log for additional and more complete info Cheers
DEADLINE V1.0.0 READY TO SHIP !!! Changes since last version Key features implemented Fully implemented Menu and corresponding friend classes Implemented Map selection Limited web build to small map Added README Key fixes Fixed commonly reported issues Checkout Git log for additional and more complete info Cheers
Ships:
DEADLINE is a fast-paced, top-down arcade shooter inspired by classic zombie survival modes. It features many types of weapons and perks. Defeat zombies, unlock map regions, buy better weapons, and survive as long as you can!...
|
1792994056.8990188
|
1793080456.8990188
|
|
33142
|
Monicraft by @Camiel | Stardance
|
Camiel
|
1
|
48.0
|
846
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-22T15:43:50Z", "hours": 48.0, "multiplier": 17.55, "payout": 846, "blessing": "neutral", "text": "Monicraft is a TUI based app that runs right in your terminal. It contains features like Real-Time Console Monitoring, Command Execution, Power Actions, Resource Monitoring, A Chat Mode, A Settings Page, A Mod Page and A Player Manager. It relies on the Pterodactyl Panel’s client API, which most rented servers run on, so it’s pretty useful if you prefer an alternate way of monitoring your server or want easier acces to things like player data and stats. I think it turned out to be a really great and pretty useful project. I run a minecraft server myself, and I think I could actually use this to monitor my minecraft server. The UI looks not that bad for a TUI tool and the features allow you to do almost anything you can do on the web Pterodactyl Panel. I learned alot of new things while making this project. I learned how to use an API and websockets. I also learned how to optimize networking and apps in general to make them run smoother. I think that my python skills also improved overall, together with the way of computational thinking. It was a really long project and I put alot of time in it, but I think it was worth it and look out to making more projects like this.", "repo": "https://github.com/Camiel13/Monicraft", "demo": "https://github.com/Camiel13/Monicraft/releases/tag/v1.0.0"}]...
|
[{"post_id": 52410, "ts": "202 [{"post_id": 52410, "ts": "2026-08-22T15:16:51Z", "hours": 7.4864, "text": "Monicraft - Offline Player Caching, More statistics, Better Exception Handling & More The final devlog for Monicraft is finally here. It has been a long, but really educational, journey. I’ve locked in for a last time and rewritten the whole player manager logic . It is now way more optimized and only updates the data for online players. I’ve switched from keeping everything apart to making a class for each player and storing all the data in it, and then keeping those objects in a dictionary with the player’s uuid as the key. New Features: Offline Player Caching: The data for all players is now cached at all times, right into memory. It then checks the online player list and updates it every 30 seconds (by default). More configuration: You can now change the interval for the player data fetching and the online player list fetching. You can also set a prefix for the chat mode, like Admin Camilio13 > {message} . More Resource Management: You can now also see the disk usage (total size of the server) and network inbound and outbound on the main screen. UI improvement: I gave the main screen a little overhaul to make it look a bit better. And I tried to make the buttons and everything else as stable as possible, but they’re still sometimes shifting or not perfectly centered depending on your screen size and terminal zoom. This is a problem I can’t fix and will always be there when using Textual. Fixed bugs: Several bugs with dummy mode, the app relied on non-existing API functions. Cursor kept shifting when player list refreshed. Pterodactyl client API rate limit was exceeded on big servers."}, {"post_id": 51217, "ts": "2026-08-20T19:06:09Z", "hours": 4.7794, "text": "Monicraft - Offline Player List, Async Player Data Fetching & More Monicraft’s second-to-last devlog has arrived . I’ve now added the last feature I wanted to add, the “include offline player list” button. It works by simply getting the whole usercache.json file and getting all the names and UUID’s in it. After that it’s just using my old function to retrieve the saved data and stats on the server. I still wanna optimize it and take some time to fix and improve the application overall. New Features: Include Offline Players: A toggle which toggles (yeah, the toggle toggles something ) the visibility of offline players in the Player List. Also added a extra column to the table to see who’s online and who’s not. Online players will allways show up at the top. You’re also able to use some of the Player Manager’s features on offline players. Async Player Data Fetching: The fetching of playerdata (stored in {UUID}.dat ) now operates in parralel, so bigger servers don’t have to wait for seconds every time the table is built. This brings up the problem that the default rate limit for the client API is 240 requests/min, so really big servers with more than 40 recent (offline) players or even online players will exceed this limit. This is why I wanted to implement offline player caching, more on that in future plans. Improved Stats UI: The statistics pop-up was a bit too small and not all the data could fit in. So I made it a bit cooler by making it bigger Small Fixes Only ping the server when it’s running to prevent errors. Fixed a problem where my Unicode characters got turned into ugly emoji’s . I didn’t discover this until I ran it in my native terminal, I’ve done all the testing in my built-in terminal in my IDE. Future Plans: I think I will be doing one more devlog where I will add these features and polish it for the first SHIP. Fix a bug where you suddenly select the first row of the table after rebuilding it Create a cache for offline players Add disk usage resource data Settings: Changing the loop delay Settings: Chat mode and message prefixes Make the GitHub workflow files Make an installation guide in the README"}, {"post_id": 50549, "ts": "2026-08-19T19:05:37Z", "hours": 7.2922, "text": "Monicraft - Player Statistics, Asynchronous Networking & More I’ve been working hard on some big changes to make the project, faster, more reliable and visually attractive. I’ve gone ahead and implemented one of the two final changes, the statistics screen for players. It was alot of repetitive work, but I managed to make it look good. At first I wanted to parse some of the saved stats (such as play time, deaths, etc.) manually, but I came to the conclusion that formatting the tag ( minecraft:damage_dealt –> Damage Dealt ) and showing them was a better idea. I found some naming logic in the tags so I could filter out time, distances and damage to format them into a readable format. All distance stats end with one_cm and are stored in centimeters (1/100 of a block). All time stats contain the substring \"time\" and are stored in ticks (1/20 of a second). And finally all the damage stats contain the substring \"damage\" and are stored as 10 times the damage for more precision (or 20 times the hearts damage). New Features: Statistics screen: This screen is accessed trough the “Stats” button in the player manager and contains 3 tabs: General, Entities and Items. General contains stats like amount of jumps, distance walked and interactions with special blocks, entities shows the kill count for every entity you’ve killed and the Items tab shows how many of each item you’ve crafted, mined, used, broken, picked up and dropped. Async Networking: I’ve switched from the requests library to the httpx library to make it so queries, server statuses and normal requests all operate separately. UUID caching: Monicraft will now no longer have to send a request to the API to figure out someones UUID. On the first request it caches every user and their names, which are stored in usercache.json on the server, right into RAM for faster acces and less requests. Small fixes and optimizations: When starting up without any credentials, it will now scan for credentials until inputted in the settings instead of crashing. The request headers are also updated when new credentials saved. I’ve fixed a logging issue with the API class which was trying to show notifications, without being part of the actual GUI. It is now fixed by passing the app class onto the API class and giving it acces to the GUI. Future Plans: Include offline players in player manager: Last real feature I want to add. Finalizing and polishing: I wanna make sure everything runs bug-free, the program doesn’t crash and also make it look good on most (I can’t make it look good on all screen sizes) screen sizes. I need to build the executables and make sure they’re working."}, {"post_id": 46840, "ts": "2026-08-14T11:20:00Z", "hours": 5.5733, "text": "Monicraft - Player Manager, Dummy Mode & More! I’m getting close to finishing this project (fr this time ). I think it will be one more devlog, it’s been a long ride. I randomly realised that not everyone has a minecraft server laying around, so I decided to make a dummy mode, so everyone can test out the Monicraft dashboard. I’ve now polished all the player manager buttons (except for Include offline players and Statistics , more on that in future plans). You’re now able to message, kick, ban and change gamemode with the player manager. I made this more user-friendly by using pop-ups. New Features: Pop-ups in Player Manager : You’re now able to give the reason for a kick or ban with the use of an interactive pop-up. The message feature also uses a pop-up to send a message directly to the selected player. Changing the gamemode is done trough a pop-up with a selection menu, which excludes the gamemode the player is currently in and let’s you choose between the other 3. Dummy Mode : This mode is accessed by adding the --dummy argument when running the program. This makes it so every command that is sent to the “server” is just displayed in the terminal, making you able to see what’s going on. I’ve added a stream_dummy_data() function that updates the stats every 2 seconds with random values. The mod list will be empty. The player list will display a random new player every 10 seconds (those are the default minecraft skins’ names + some random number). You’re able to use every feature from the player manager in dummy mode, everything being sent will be displayed in the console. Fixed Reconnect Logic : When the server disconnects for whatever reason, the dasboard will now try to reconnect every 5 seconds. Queries with statusses as fallback : The recent implementation used both queries and statusses if queries were enabled. It now only uses statusses if queries are not enabled. This makes it alot more optimized, using only one of two all the time. Future Plans: Implement the Include Offline Players button : This makes it so offline players (cached in usercache.json in the server’s root) will be displayed in the player list. Maby I’ll also add the ability to manage offline players, but I’m not sure. Implement the Statistics button : This button will show a pop-up that shows all the player’s stats (such as blocks broken, mobs killed, etc.)"}, {"post_id": 43851, "ts": "2026-08-09T09:13:38Z", "hours": 5.7478, "text": "Monicraft - Player Manager, NBT Parsing & More It’s been a few long session with alot of thinking and implementing . I never thought that getting the online players would be so hard. At first, I wanted to use minecraft’s list command and then parse the output from the terminal, but that was way too hard and would not work on big servers with terminals full of commands. So I decided to use the mcstatus library to get a list of all online players. This is done by: Sending a query to the server. If queries are disabled on the server or the query simply fails, it sends a normal status request (server list ping) to the server. I then use the name to get the UUID of a player stored in the usercache.json file in the root directory of every minecraft server. That UUID is then used to get the saved {UUID}.dat file in the worlds folder. All the player’s data (e.g. health, hunger, position, gamemode, etc.) is stored in there. This brings the restriction of the server’s autosave time (which is 5 minutes by default). So I’ve also added a refresh button which saves the game and updates the player list. The player list is automatically updated every ten seconds and based off the lastest safe file. New Features: Player Manager: A way to see all online players and their statistics. You can also kick and ban people by just selecting them and clicking a button. Future Plans: Adding the functionality to toggle the visibility of offline players in the player list. Adding functionality to the following buttons: Stats, Message, Gamemode Adding a player stats screen (viewed by clicking the stats button) which shows all the statistics of a single player (e.g. mobs killed, blocks broken, distance ran, etc.)"}, {"post_id": 35123, "ts": "2026-07-26T11:14:04Z", "hours": 3.625, "text": "Monicraft - Mods list, Server kill, Navigation buttons & UI/UX improvements I’ve added buttons to navigate between screens. I forgot to add this last time, so travelling between screens was a bit tricky. You’re now able to kill the server for when the server get’s stuck in a shutdown or crashes. It will sent a confirmation pop-up message upon the first click, telling you to click another time to confirm. This lasts for 10 seconds and then it will reset. I’ve also added a new screen with a list of all the mods you’ve installed on the server, including name, file size and last changed date. The UI/UX is now alot more stable. I had orginally designed everything on my monitor. But when I would use it on my laptop screen, the whole UI collapsed. So I made everything a bit smaller. Future plans: This project is close to being finished, but I want to add two last features. Player management: Quickly see who’s online on the server and manage them (kick, ban, whitelist, unwhitelist) Version manager: See what versions of Minecraft, Java and mod loader you’re using and modify them."}, {"post_id": 31839, "ts": "2026-07-20T15:10:56Z", "hours": 5.1731, "text": "Monicraft - Settings, Power action buttons, Visual Improvements I’ve added a settings page where you can configure your API key, Panel endpoint and Server ID. It has a save button and automatically saves when leaving the screen, which writes the inputs to an .env file. You can also reset these value’s. I’ve added power action buttons, which can be used to start, restart or stop your minecraft server. I’ve added pop-up toasts for errors and informative messages. I’ve improved the connection funtions to retry every 5 seconds when the connection is lost. Future Plans: Adding a button to navigate to the settings menu (it is now accessed by sending the settings command). Version manager for Java, Minecraft and Mods."}, {"post_id": 29411, "ts": "2026-07-16T10:53:28Z", "hours": 3.705, "text": "Monicraft - Server resources viewer, Sending commands, Chat mode & Styling The console now works properly. It now streams the console directly from your Minecraft server to your terminal trough websockets. The server resources (RAM usage, CPU usage and server state) are now visible in a sidebar and are constantly being updated. It’s now possible to send commands to the server using the input bar at the bottom. I also added a extra “Chat Mode”, it basically puts say in front of every command you send, which makes it easier to chat with the people that are online on your server. The style has been upgraded. I went for a green/nature looking style, because I like the color palette. Bugs and Future Plans: The Chat Mode button doesn’t change color until you move your cursor after you clicked it, not a big problem, but it is kinda confusing. I wanna add the option to view/update/remove your installed mods on the server and give more insight into the installed version of modloader."}, {"post_id": 27092, "ts": "2026-07-12T10:48:13Z", "hours": 4.8117, "text": "First devlog for Monicraft! How I came up with the idea: I was just thinking about what I could possibly make, I felt like coding, but I just didn’t know what I should make. So I just started playing minecraft as always, on the server with my friends. When I was changing something on the server panel, I was wondering how the panel really works. It turns out almost every hosting provider uses the Pterodactyl dashboard. It relies on a REST API, which is publicly available to anyone. I decided to try and recreate such a panel, but in Python. The foundation: The connection with the Pterodactyl API is established trough websockets. I decided to start with a screen which is an overview of the main server resources (such as CPU usage, RAM usage and Storage usage) and the console. The GUI is build with Textual and customized by the built-in TCSS. What I have done so far: Setup the main code space Do some research about the API and learn how Textual works Design the UI shape Connection with the API trough websockets (WIP) I initially started this project to learn more about API’s and specifically websockets. I also wanted to see how it would be to build a GUI app in python and if it’s really as hard/bad-looking as everyone says."}]...
|
Title: Monicraft by @Camiel | Stardance
Devlogs:
Title: Monicraft by @Camiel | Stardance
Devlogs:
First devlog for Monicraft! How I came up with the idea: I was just thinking about what I could possibly make, I felt like coding, but I just didn’t know what I should make. So I just started playing minecraft as always, on the server with my friends. When I was changing something on the server panel, I was wondering how the panel really works. It turns out almost every hosting provider uses the Pterodactyl dashboard. It relies on a REST API, which is publicly available to anyone. I decided to try and recreate such a panel, but in Python. The foundation: The connection with the Pterodactyl API is established trough websockets. I decided to start with a screen which is an overview of the main server resources (such as CPU usage, RAM usage and Storage usage) and the console. The GUI is build with Textual and customized by the built-in TCSS. What I have done so far: Setup the main code space Do some research about the API and learn how Textual works Design the UI shape Connection with the API trough websockets (WIP) I initially started this project to learn more about API’s and specifically websockets. I also wanted to see how it would be to build a GUI app in python and if it’s really as hard/bad-looking as everyone says.
Monicraft - Server resources viewer, Sending commands, Chat mode & Styling The console now works properly. It now streams the console directly from your Minecraft server to your terminal trough websockets. The server resources (RAM usage, CPU usage and server state) are now visible in a sidebar and are constantly being updated. It’s now possible to send commands to the server using the input bar at the bottom. I also added a extra “Chat Mode”, it basically puts say in front of every command you send, which makes it easier to chat with the people that are online on your server. The style has been upgraded. I went for a green/nature looking style, because I like the color palette. Bugs and Future Plans: The Chat Mode button doesn’t change color until you move your cursor after you clicked it, not a big problem, but it is kinda confusing. I wanna add the option to view/update/remove your installed mods on the server and give more insight into the installed version of modloader.
Monicraft - Settings, Power action buttons, Visual Improvements I’ve added a settings page where you can configure your API key, Panel endpoint and Server ID. It has a save button and automatically saves when leaving the screen, which writes the inputs to an .env file. You can also reset these value’s. I’ve added power action buttons, which can be used to start, restart or stop your minecraft server. I’ve added pop-up toasts for errors and informative messages. I’ve improved the connection funtions to retry every 5 seconds when the connection is lost. Future Plans: Adding a button to navigate to the settings menu (it is now accessed by sending the settings command). Version manager for Java, Minecraft and Mods.
Monicraft - Mods list, Server kill, Navigation buttons & UI/UX improvements I’ve added buttons to navigate between screens. I forgot to add this last time, so travelling between screens was a bit tricky. You’re now able to kill the server for when the server get’s stuck in a shutdown or crashes. It will sent a confirmation pop-up message upon the first click, telling you to click another time to confirm. This lasts for 10 seconds and then it will reset. I’ve also added a new screen with a list of all the mods you’ve installed on the server, including name, file size and last changed date. The UI/UX is now alot more stable. I had orginally designed everything on my monitor. But when I would use it on my laptop screen, the whole UI collapsed. So I made everything a bit smaller. Future plans: This project is close to being finished, but I want to add two last features. Player management: Quickly see who’s online on the server and manage them (kick, ban, whitelist, unwhitelist) Version manager: See what versions of Minecraft, Java and mod loader you’re using and modify them.
Monicraft - Player Manager, NBT Parsing & More It’s been a few long session with alot of thinking and implementing . I never thought that getting the online players would be so hard. At first, I wanted to use minecraft’s list command and then parse the output from the terminal, but that was way too hard and would not work on big servers with terminals full of commands. So I decided to use the mcstatus library to get a list of all online players. This is done by: Sending a query to the server. If queries are disabled on the server or the query simply fails, it sends a normal status request (server list ping) to the server. I then use the name to get the UUID of a player stored in the usercache.json file in the root directory of every minecraft server. That UUID is then used to get the saved {UUID}.dat file in the worlds folder. All the player’s data (e.g. health, hunger, position, gamemode, etc.) is stored in there. This brings the restriction of the server’s autosave time (which is 5 minutes by default). So I’ve also added a refresh button which saves the game and updates the player list. The player list is automatically updated every ten seconds and based off the lastest safe file. New Features: Player Manager: A way to see all online players and their statistics. You can also kick and ban people by just selecting them and clicking a button. Future Plans: Adding the functionality to toggle the visibility of offline players in the player list. Adding functionality to the following buttons: Stats, Message, Gamemode Adding a player stats screen (viewed by clicking the stats button) which shows all the statistics of a single player (e.g. mobs killed, blocks broken, distance ran, etc.)
Monicraft - Player Manager, Dummy Mode & More! I’m getting close to finishing this project (fr this time ). I think it will be one more devlog, it’s been a long ride. I randomly realised that not everyone has a minecraft server laying around, so I decided to make a dummy mode, so everyone can test out the Monicraft dashboard. I’ve now polished all the player manager buttons (except for Include offline players and Statistics , more on that in future plans). You’re now able to message, kick, ban and change gamemode with the player manager. I made this more user-friendly by using pop-ups. New Features: Pop-ups in Player Manager : You’re now able to give the reason for a kick or ban with the use of an interactive pop-up. The message feature also uses a pop-up to send a message directly to the selected player. Changing the gamemode is done trough a pop-up with a selection menu, which excludes the gamemode the player is currently in and let’s you choose between the other 3. Dummy Mode : This mode is accessed by adding the --dummy argument when running the program. This makes it so every command that is sent to the “server” is just displayed in the terminal, making you able to see what’s going on. I’ve added a stream_dummy_data() function that updates the stats every 2 seconds with random values. The mod list will be empty. The player list will display a random new player every 10 seconds (those are the default minecraft skins’ names + some random number). You’re able to use every feature from the player manager in dummy mode, everything being sent will be displayed in the console. Fixed Reconnect Logic : When the server disconnects for whatever reason, the dasboard will now try to reconnect every 5 seconds. Queries with statusses as fallback : The recent implementation used both queries and statusses if queries were enabled. It now only uses statusses if queries are not enabled. This makes it alot more optimized, using only one of two all the time. Future Plans: Implement the Include Offline Players button : This makes it so offline players (cached in usercache.json in the server’s root) will be displayed in the player list. Maby I’ll also add the ability to manage offline players, but I’m not sure. Implement the Statistics button : This button will show a pop-up that shows all the player’s stats (such as blocks broken, mobs killed, etc.)
Monicraft - Player Statistics, Asynchronous Networking & More I’ve been working hard on some big changes to make the project, faster, more reliable and visually attractive. I’ve gone ahead and implemented one of the two final changes, the statistics screen for players. It was alot of repetitive work, but I managed to make it look good. At first I wanted to parse some of the saved stats (such as play time, deaths, etc.) manually, but I came to the conclusion that formatting the tag ( minecraft:damage_dealt –> Damage Dealt ) and showing them was a better idea. I found some naming logic in the tags so I could filter out time, distances and damage to format them into a readable format. All distance stats end with one_cm and are stored in centimeters (1/100 of a block). All time stats contain the substring "time" and are stored in ticks (1/20 of a second). And finally all the damage stats contain the substring "damage" and are stored as 10 times the damage for more precision (or 20 times the hearts damage). New Features: Statistics screen: This screen is accessed trough the “Stats” button in the player manager and contains 3 tabs: General, Entities and Items. General contains stats like amount of jumps, distance walked and interactions with special blocks, entities shows the kill count for every entity you’ve killed and the Items tab shows how many of each item you’ve crafted, mined, used, broken, picked up and dropped. Async Networking: I’ve switched from the requests library to the httpx library to make it so queries, server statuses and normal requests all operate separately. UUID caching: Monicraft will now no longer have to send a request to the API to figure out someones UUID. On the first request it caches every user and their names, which are stored in usercache.json on the server, right into RAM for faster acces and less requests. Small fixes and optimizations: When starting up without any credentials, it will now scan for credentials until inputted in the settings instead of crashing. The request headers are also updated when new credentials saved. I’ve fixed a logging issue with the API class which was trying to show notifications, without being part of the actual GUI. It is now fixed by passing the app class onto the API class and giving it acces to the GUI. Future Plans: Include offline players in player manager: Last real feature I want to add. Finalizing and polishing: I wanna make sure everything runs bug-free, the program doesn’t crash and also make it look good on most (I can’t make it look good on all screen sizes) screen sizes. I need to build the executables and make sure they’re working.
Monicraft - Offline Player List, Async Player Data Fetching & More Monicraft’s second-to-last devlog has arrived . I’ve now added the last feature I wanted to add, the “include offline player list” button. It works by simply getting the whole usercache.json file and getting all the names and UUID’s in it. After that it’s just using my old function to retrieve the saved data and stats on the server. I still wanna optimize it and take some time to fix and improve the application overall. New Features: Include Offline Players: A toggle which toggles (yeah, the toggle toggles something ) the visibility of offline players in the Player List. Also added a extra column to the table to see who’s online and who’s not. Online players will allways show up at the top. You’re also able to use some of the Player Manager’s features on offline players. Async Player Data Fetching: The fetching of playerdata (stored in {UUID}.dat ) now operates in parralel, so bigger servers don’t have to wait for seconds every time the table is built. This brings up the problem that the default rate limit for the client API is 240 requests/min, so really big servers with more than 40 recent (offline) players or even online players will exceed this limit. This is why I wanted to implement offline player caching, more on that in future plans. Improved Stats UI: The statistics pop-up was a bit too small and not all the data could fit in. So I made it a bit cooler by making it bigger Small Fixes Only ping the server when it’s running to prevent errors. Fixed a problem where my Unicode characters got turned into ugly emoji’s . I didn’t discover this until I ran it in my native terminal, I’ve done all the testing in my built-in terminal in my IDE. Future Plans: I think I will be doing one more devlog where I will add these features and polish it for the first SHIP. Fix a bug where you suddenly select the first row of the table after rebuilding it Create a cache for offline players Add disk usage resource data Settings: Changing the loop delay Settings: Chat mode and message prefixes Make the GitHub workflow files Make an installation guide in the README
Monicraft - Offline Player Caching, More statistics, Better Exception Handling & More The final devlog for Monicraft is finally here. It has been a long, but really educational, journey. I’ve locked in for a last time and rewritten the whole player manager logic . It is now way more optimized and only updates the data for online players. I’ve switched from keeping everything apart to making a class for each player and storing all the data in it, and then keeping those objects in a dictionary with the player’s uuid as the key. New Features: Offline Player Caching: The data for all players is now cached at all times, right into memory. It then checks the online player list and updates it every 30 seconds (by default). More configuration: You can now change the interval for the player data fetching and the online player list fetching. You can also set a prefix for the chat mode, like Admin Camilio13 > {message} . More Resource Management: You can now also see the disk usage (total size of the server) and network inbound and outbound on the main screen. UI improvement: I gave the main screen a little overhaul to make it look a bit better. And I tried to make the buttons and everything else as stable as possible, but they’re still sometimes shifting or not perfectly centered depending on your screen size and terminal zoom. This is a problem I can’t fix and will always be there when using Textual. Fixed bugs: Several bugs with dummy mode, the app relied on non-existing API functions. Cursor kept shifting when player list refreshed. Pterodactyl client API rate limit was exceeded on big servers.
Ships:
Monicraft is a TUI based app that runs right in your terminal. It contains features like Real-Time Console Monitoring, Command Execution, Power Actions, Resource Monitoring, A Chat Mode, A Settings Page, A Mod Page and A Player Manager. It relies on the Pterodactyl Panel’s client API, which most rented servers run on, so it’s pretty useful if you prefer an alternate way of monitoring your server or want easier acces to things like player data and stats. I think it turned out to be a really great and pretty useful project. I run a minecraft server myself, and I think I could actually use this to monitor my minecraft server. The UI looks not that bad for a TUI tool and the features allow you to do almost anything you can do on the web Pterodactyl Panel. I learned alot of new things while making this project. I learned how to use an API and websockets. I also learned how to optimize networking and apps in general to make them run smoother. I think that my python skills also improved overall, together with the way of computational thinking. It was a really long project and I put alot of time in it, but I think it was worth it and look out to making more projects like this....
|
1792982858.8416657
|
1793069258.8416657
|
|
10684
|
Solve It by @Shish | Stardance
|
Shish
|
1
|
46.0
|
843
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-19T08:10:55Z", "hours": 46.0, "multiplier": 18.48, "payout": 843, "blessing": "neutral", "text": "As students, we all require notes and questions when we are practicing for any competitive exams, whenever I wanted the same, I had to ask my friends or I had to buy PYQs online. So to tackle that, I made a website where you can easily post notes and PYQs FOR FREE without even signing up. The website is called SolveIt. There are many things that can be done on the website like uploading PYQs or Notes or any other study related material for a specific competitive examination in a PDF format. If the exam is state specific, you can select the state too. Currently it is only available for India, USA, China, United Kingdom and Australia. It also includes many exams like Gaokao, NEET, JEE, SAT, ACT, QCE, etc. While uploading you can specify your country, state, examination name, year, class/grade and subject. In the settings page, you can make your own avatar (it is inspired by skribbl.io) and yes, the scribbles are hand drawn. You can also delete your account if you wish to, and many other things like changing the password, email and deleting previously uploaded papers. You can navigate easily on the browse page by using the searchbar as well as the filters. Filters will only show those options which are available. You can click on a card and view the paper inside the site itself if you don’t wish to download it. Moreover, you can see more details like uploaded by, uploaded on, length and size of the document and much more. The most challenging part of this project was the backend as always. Routes didn’t work initially when I started off, I couldn’t figure out a way to make scribbled borders so I took help of AI for that. MOST ANNOYING part was the avatar builder, I had to make hand drawn scribbles and convert it into svg paths and then modify those paths according to the container. I also took help of AI to encrypt the passwords of the user. I am very proud of the fact that I have self hosted this website, with the raspberry pi 5 that I received from Hackclub this year. I used Cloudflared private tunnel. Entire backend and database is on RPI. I really wanted to add more things to the project but due to academics and school work, I have to ship it now or else I won’t get time for my upcoming examinations. Before you test it, I would like to make a request that if you face any problem, please report it by going to Report a Bug page so that I come to know about it and can fix it as soon as possible. For more details about the project and if you want to know about it in detail, please read the README file.", "repo": "https://github.com/C0nfu5ing-5pring/SolveIt", "demo": "https://solve-it-nine.vercel.app"}]...
|
[{"post_id": 70459, "ts": "202 [{"post_id": 70459, "ts": "2026-09-19T07:27:32Z", "hours": 1.5328, "text": "v (0.7.0-Beta) Continue as Guest + README + more Updates Added hand drawn images to the home page reducing the white space that was looking ugly earlier Added continue as guest feature, if a user continues as guest, they won’t be able to delete their account or change their email address as well as password Wrote the README file I still do not consider this project as completely done, I will be adding more features to it once I am done with my academics What next? I’ll ship it most probably"}, {"post_id": 70419, "ts": "2026-09-19T04:55:34Z", "hours": 0.6714, "text": "v(0.6.0-Beta) Password change Updates I have decided not to include themes as I can no longer work on this project due to school work academics I just want to finish this project as soon as I can. Next devlog might be the last devlog of this project where I’ll add “Continue as guest” feature for shipwrights SO, in this update, I’ve just basically copy pasted the change email logic and made a change password feature. I literally copy pasted it and then modified it for password hence it took less time What next? I’ll be summing up this project by adding continue as guest feature"}, {"post_id": 69546, "ts": "2026-09-17T08:45:17Z", "hours": 4.2175, "text": "v(0.5.0-Beta) Avatar builder + bug fixes Updates Now you can make your own avatar just like skribbl.io!!!!! It took so much of my time tbh, I had to hand draw every doodle, I wanted to record it on lapse but couldn’t as screen recording wasn’t working on iPad for some reason and also when I screenshared, the screen went black for some reason. I contacted lapse-help on slack but didn’t find any solution so I decided not to let it go Added a new updateavatar component which lets you make your own avatar and update it if you want to!! Did layout fixes on large screen devices as only horizontal scroll was allowed and vertical scroll was disabled (my friend told me, I didn’t even notice it lol) Fixed frontend as well as backend bugs during the making of this avatar feature This devlog is toooooo big ik but i couldn’t find time daily due to school and assignments and all What next? I’ll work on themes, black white and system themes. The basic ones I’ll also work on “Continue as guest” so that shipwrights don’t have to login when they go through the project I’ll most probably end the project for now after these features are implemented as I need to prepare for upcoming examinations and also stardance is coming to an end :("}, {"post_id": 64001, "ts": "2026-09-08T03:22:18Z", "hours": 1.3669, "text": "v(0.4.4-Beta) Session expiry bug fix + responsiveness fixed Updates Fixed the responsiveness issue on small screen devices I also faced another issue, My friends were unable to download papers and it displayed “Error during downloading” So I took help of AI to know what the problem is and it said that It was because their token had expired SOOOOO…. I increased the token expiry limit to 30 days AND if the token is expired, you will be asked to login again. I applied this throughout the website, upload, browse, report and download I’ll also be switching to nest as I don’t fully trust my ISP and also because shipwright’s review policy said so. BUT i’ll do it towards the end once every feature is almost well built. I’ve applied to nest and hope they accept it as soon as possible! What next? Next, I’ll work on Avatar maker like skribbl.io (this is going to be tuffffffffff)"}, {"post_id": 62200, "ts": "2026-09-05T13:50:17Z", "hours": 1.7614, "text": "v(0.4.3-Beta) See uploads and delete them Updates Now you can see your uploads in the settings page and delete them if you wish to If you click on the card, it’ll redirect you to a separate page where you can see the paper in detail What next? Next, I’ll work on fixing the responsiveness issue on small screen devices"}, {"post_id": 62041, "ts": "2026-09-05T08:10:07Z", "hours": 0.8733, "text": "v(0.4.1-Beta) Delete account Updates Now you can permanently delete your account. Once you delete your account, all the posts from that account will be removed from the website. For this, I made /delete-me route What next? Next, I’ll make a section where users can manage their papers, they can delete their papers if they want After that, I’ll be working on fixing the responsiveness issue on small screen devices"}, {"post_id": 61935, "ts": "2026-09-05T03:30:17Z", "hours": 1.3983, "text": "v(0.4.1-Beta) Update Email address + Errors Updates Added errors and toasts throughout the website Added update email address feature I’ll be keeping next few devlogs small as I will be working on each feature one by one What next? Next, I’ll work on Delete account feature"}, {"post_id": 61644, "ts": "2026-09-04T17:18:43Z", "hours": 3.3133, "text": "(0.4.0-Beta) Settings page + 404 handling Updates Handled 404 error (I had to because my WiFi was down several times today. Many of my friends thought that it was my mistake but actually WiFi was down so my rpi couldn’t serve data) Made settings page and displayed user data on it. I have added an easter egg when the site is down, so basically when there’s an 404 err, you can see an easter can which I’ve added to the site. On the settings page, I have Apprearance settings, Account settings, Preference settings and Delete account. None of them are functional yet. Took a lot of time to create a route (/me). As I faced a lot of bugs while doing so. What next? I know i’ve again delayed making doodles, I WILL MAKE THEM istg I’ll also fix the resonsiveness issue on small screen devices I’ll work on making the settings page functional I have 2 days off at school so I am going yo use them very efficiently!!"}, {"post_id": 59537, "ts": "2026-09-01T12:41:50Z", "hours": 2.4753, "text": "v(0.3.0-Beta) Separate paper view + Searchbar Updates Added a searchbar (finally Now, you can view each paper separately inside the website itself Made very very very small changes in the design of the website Now you can click on the logo to direcly go back to the browse page (Yeah, I know it’s not something genius) What next? I REALLY want to add doodles but I have been delaying it TOO much now! I think I might be working on it (not sure tho) I also need to make a pfp maker, where users can make their own pfp kinda like the one on skribbl.io. Actually this entire design is inspired by skribbl.io I’ll also be adding user settings page and all where they can change theme, fonts and… okay, just font and themes for now."}, {"post_id": 57954, "ts": "2026-08-30T09:07:53Z", "hours": 3.155, "text": "v(0.2-Beta) Deployed + Reviews + More Updates Soooooo, the site it live. andithasalotofproblems!!! I made the site live and asked my friends to use it and fill it with notes. many of them complained about bugs so, I fixed some of them and NOW, I need to add a search bar on the site (I completely forgot lol). In these 3 hours, I deployed the website (this time didn’t get counted as I was working on the terminal. But it took around 1 and a half hour). So in 3 hours, I handled bugs and fixed some of them, enhanced responsiveness as some of my friends complained that they couldn’t scroll on the website or smthng. Added more information on the card, Added 2 new columns named description and type (as requested by a friend). Changed the layout of lower part of the card a little bit (made it a little bit clean). Made the upload code a bit efficient by removing repetitive code. What next? Next, I’ll work on making a search bar on the website so it is easy to use and navigate I’ll be taking inputs from friends and working on them I will be making a separate page where the user can see the pdf each separately insite the site Next devlog is going to be CHUNKY!!!"}, {"post_id": 55439, "ts": "2026-08-27T08:29:00Z", "hours": 2.7292, "text": "v(0.1.3-Alpha) Report bug feature and it’s backend + Enhanced responsiveness across the website + colours Updates Enhanced responsivess across the site Added colours and sketchy borders and colours wherever I could Added new report bug feature along with it’s backend (this one took time as WiFi went off and I couldn’t ssh into my rpi) What next? I’ll be making doodles (YES, i’ll be hand drawing them) I haven’t thought about anything else yet! BUT, I might be making the website public and push it into the beta version, for that, I’ll need to setup a cloudflare connection via my rpi (aghh i’ll look into it once I am fully convinced with the frontend."}, {"post_id": 55023, "ts": "2026-08-26T13:27:40Z", "hours": 2.46, "text": "v(0.1.2-Alpha) Scribbly Borders + New countries Updates Added scribbly lines/borders (used AI’s help) Added new countries and their examinations (UK, USA, Australia, China) Added mansory layout so that i don’t have to worry about responsiveness later What next? Next, i’ll work on adding colours to the site and add doodle"}, {"post_id": 54456, "ts": "2026-08-25T14:03:23Z", "hours": 3.4747, "text": "(v.0.1.1-Alpha) New UI + Notifications+ More info about the file Updates Added new design inspired by scribbles and doodles. (Still figuring out how to make scribbled borders) Enhanced responsiveness for new design Displayed more information about the file uploaded by the user such as File size and no. of pages file contains. Fixed a few bugs related to login and logout pages Added notifications (Yet to design it, atp, it’s just a basic design and not synced to the project design) Deleted unwanted files that I had made earlier during setting up the folder structure. What next? Next, I’ll work on adding design to the notification componentk Then, I’ll be adding doodles and stuff to fill up the white space I also wish to add more countries like The USA, Canada, UK, which have competitive exams."}, {"post_id": 48046, "ts": "2026-08-16T10:24:38Z", "hours": 1.7575, "text": "(v0.1.0-Alpha) Responsiveness + Fixed a loop hole + Showing more details in the card Updates Enhanced responsivess (sidebar, header, browse page for mob iles and large screen devices) Displayed more info like region, year, subject, uploaded by, uploaded at, exam name, etc. to the card Fixed loop hole, earlier, a user could access the browse page, basically entire website without logging in lol. Added a new field to the database in papers table which stores the user’s name instead of just storing the id number of that person What next? I am thinking of adding notifications using react-toastify and sound effects I’ll work on designing the card. I am considering to change the entire design and lean more towards a brutalist design Next update is going to be a major one Where was I since last 12 days? I have been busy with school work and also my mid-terms are commencing from 1st of September so, I couldn’t give more time to thr project. This could also happen in the near future until my exams are completed (11th Sept)"}, {"post_id": 40839, "ts": "2026-08-04T16:56:36Z", "hours": 1.3603, "text": "(v0.0.8-Alpha) Sidebar and Responsivenes Updates Added responsiveness to the login, signup, upload, home pages and header component Made the sidebar functional, you can now filter data based on year, country, state, exam i think currently, on smaller devices, the font size is a lot smaller, if you guys feel the same please give me a review so that I can improve it! What next? Next, I’ll work on enhancing the responsiveness And also, i’ll start designing the card which will contain details of the papers I also need to handle edge cases like not showing upload button to guest users and so many loop holes that are still there in this project."}, {"post_id": 40157, "ts": "2026-08-03T15:48:18Z", "hours": 1.5133, "text": "v(0.0.7-Alpha) Download Feature Updates Added the download feature. you can click on the card to open the PDF file on the browser What next? Next, I’ll work on responsiveness"}, {"post_id": 38911, "ts": "2026-08-01T14:31:53Z", "hours": 0.6728, "text": "v(0.0.6-Alpha) Log out + Showing data from db Update Added log out feature (it was quite easy just had to apply some display conditions to the buttons and remove the user’s token from the localStorage) Added data from the db in the form of cards on /browse. It is not at all good-looking. I’ll work on it once I implement the download feature in it. What next? I’ll be implementing the download files feature I’ll start working on making the website responsive"}, {"post_id": 38751, "ts": "2026-08-01T09:45:07Z", "hours": 2.0417, "text": "v(0.0.5) Frontend revamp Updates Revamped the frontend design Added drag and drop file submission feature The site is not yet responsive Log in and sign up pages are also changed Browse and home pages are changed (there are some white spaces that I hate rn but i’ll tackle that some other time) really loving working on this project can’t stop thinking about ideas!! Next steps Will enhance the functionality of the header (now it is static meaning even if the user is logged in, it will show login/sign up buttons) I’ll add a logout button or smthng. Currently, all the uploaded files don’t appear on the /browse section so i’ll have to deal with that too!"}, {"post_id": 38700, "ts": "2026-08-01T07:01:18Z", "hours": 0.6944, "text": "v(0.0.4-Alpha) Upload Feature - Frontend Updates Completed the frontend part of upload feature Added tags so that navigation is smoother Currently, i have only added india in the future, i’ll other countries too. I am not focusing much on design as well as responsiveness. I will tackle that towards the end. What next? Next, I’ll work on the home page + browse page Browse page will display all the files uploaded by people"}, {"post_id": 38679, "ts": "2026-08-01T05:58:47Z", "hours": 2.3167, "text": "v(0.0.4-Alpha) Upload Feature - Backend Updates Upload feature is working!!! (backend for now) that too smoothly! Used multer middleware to handle PDF uploads. Files up to 25MB are acceptable for now. PDFs are saved on /uploads folder on the server Only logged in logged in users can upload files Built /api/papers with filters like class, subject, exam_name, country, state, year and file_path. What next? Now i’ll work on the frontend part of this feature"}, {"post_id": 38386, "ts": "2026-07-31T18:48:52Z", "hours": 2.6156, "text": "v(0.0.3-Alpha) Layout Design Updates Making layouts is not a one time thing so I made a temporary layout which took a lot of trial and errors Don’t mind the colours/text size or fonts and all as it is still under development Currently it’s working only locally as the project is still in alpha version and also, nothing is responsive for smaller screen sizes What Next? Most probably next I will be working on the Upload feature along with it’s backend"}, {"post_id": 38145, "ts": "2026-07-31T12:00:46Z", "hours": 1.7397, "text": "v(0.0.2) Login and Sign up - Frontend Updates Almost lost the project (accidently deleted the repo Writing the logic for login/sign up for the first was kind of tough hence took more time! It works smoothly now What next? Most probably i’ll work on the landing page and the designing part"}, {"post_id": 38074, "ts": "2026-07-31T08:44:11Z", "hours": 0.8119, "text": "(v0.0.2-Alpha) Login and Sign up - Backend Updates Login and signup functionality completed and is functional I also used bcrypt to encrypt the user’s password What next? I will now work on the frontend part of the website so i will be making the dashboard, login and signup pages. I might have to look for good designs too"}, {"post_id": 38048, "ts": "2026-07-31T07:18:49Z", "hours": 0.6389, "text": "v(0.0.1-Alpha) Initial Setup Made a database on rpi with tables and their schemas Frontend basic setup completed with file structure What next? First I’ll work on the backend and then come to frontend so next few devlogs might be boring for some people :("}]...
|
Title: Solve It by @Shish | Stardance
Devlogs:
v( Title: Solve It by @Shish | Stardance
Devlogs:
v(0.0.1-Alpha) Initial Setup Made a database on rpi with tables and their schemas Frontend basic setup completed with file structure What next? First I’ll work on the backend and then come to frontend so next few devlogs might be boring for some people :(
(v0.0.2-Alpha) Login and Sign up - Backend Updates Login and signup functionality completed and is functional I also used bcrypt to encrypt the user’s password What next? I will now work on the frontend part of the website so i will be making the dashboard, login and signup pages. I might have to look for good designs too
v(0.0.2) Login and Sign up - Frontend Updates Almost lost the project (accidently deleted the repo Writing the logic for login/sign up for the first was kind of tough hence took more time! It works smoothly now What next? Most probably i’ll work on the landing page and the designing part
v(0.0.3-Alpha) Layout Design Updates Making layouts is not a one time thing so I made a temporary layout which took a lot of trial and errors Don’t mind the colours/text size or fonts and all as it is still under development Currently it’s working only locally as the project is still in alpha version and also, nothing is responsive for smaller screen sizes What Next? Most probably next I will be working on the Upload feature along with it’s backend
v(0.0.4-Alpha) Upload Feature - Backend Updates Upload feature is working!!! (backend for now) that too smoothly! Used multer middleware to handle PDF uploads. Files up to 25MB are acceptable for now. PDFs are saved on /uploads folder on the server Only logged in logged in users can upload files Built /api/papers with filters like class, subject, exam_name, country, state, year and file_path. What next? Now i’ll work on the frontend part of this feature
v(0.0.4-Alpha) Upload Feature - Frontend Updates Completed the frontend part of upload feature Added tags so that navigation is smoother Currently, i have only added india in the future, i’ll other countries too. I am not focusing much on design as well as responsiveness. I will tackle that towards the end. What next? Next, I’ll work on the home page + browse page Browse page will display all the files uploaded by people
v(0.0.5) Frontend revamp Updates Revamped the frontend design Added drag and drop file submission feature The site is not yet responsive Log in and sign up pages are also changed Browse and home pages are changed (there are some white spaces that I hate rn but i’ll tackle that some other time) really loving working on this project can’t stop thinking about ideas!! Next steps Will enhance the functionality of the header (now it is static meaning even if the user is logged in, it will show login/sign up buttons) I’ll add a logout button or smthng. Currently, all the uploaded files don’t appear on the /browse section so i’ll have to deal with that too!
v(0.0.6-Alpha) Log out + Showing data from db Update Added log out feature (it was quite easy just had to apply some display conditions to the buttons and remove the user’s token from the localStorage) Added data from the db in the form of cards on /browse. It is not at all good-looking. I’ll work on it once I implement the download feature in it. What next? I’ll be implementing the download files feature I’ll start working on making the website responsive
v(0.0.7-Alpha) Download Feature Updates Added the download feature. you can click on the card to open the PDF file on the browser What next? Next, I’ll work on responsiveness
(v0.0.8-Alpha) Sidebar and Responsivenes Updates Added responsiveness to the login, signup, upload, home pages and header component Made the sidebar functional, you can now filter data based on year, country, state, exam i think currently, on smaller devices, the font size is a lot smaller, if you guys feel the same please give me a review so that I can improve it! What next? Next, I’ll work on enhancing the responsiveness And also, i’ll start designing the card which will contain details of the papers I also need to handle edge cases like not showing upload button to guest users and so many loop holes that are still there in this project.
(v0.1.0-Alpha) Responsiveness + Fixed a loop hole + Showing more details in the card Updates Enhanced responsivess (sidebar, header, browse page for mob iles and large screen devices) Displayed more info like region, year, subject, uploaded by, uploaded at, exam name, etc. to the card Fixed loop hole, earlier, a user could access the browse page, basically entire website without logging in lol. Added a new field to the database in papers table which stores the user’s name instead of just storing the id number of that person What next? I am thinking of adding notifications using react-toastify and sound effects I’ll work on designing the card. I am considering to change the entire design and lean more towards a brutalist design Next update is going to be a major one Where was I since last 12 days? I have been busy with school work and also my mid-terms are commencing from 1st of September so, I couldn’t give more time to thr project. This could also happen in the near future until my exams are completed (11th Sept)
(v.0.1.1-Alpha) New UI + Notifications+ More info about the file Updates Added new design inspired by scribbles and doodles. (Still figuring out how to make scribbled borders) Enhanced responsiveness for new design Displayed more information about the file uploaded by the user such as File size and no. of pages file contains. Fixed a few bugs related to login and logout pages Added notifications (Yet to design it, atp, it’s just a basic design and not synced to the project design) Deleted unwanted files that I had made earlier during setting up the folder structure. What next? Next, I’ll work on adding design to the notification componentk Then, I’ll be adding doodles and stuff to fill up the white space I also wish to add more countries like The USA, Canada, UK, which have competitive exams.
v(0.1.2-Alpha) Scribbly Borders + New countries Updates Added scribbly lines/borders (used AI’s help) Added new countries and their examinations (UK, USA, Australia, China) Added mansory layout so that i don’t have to worry about responsiveness later What next? Next, i’ll work on adding colours to the site and add doodle
v(0.1.3-Alpha) Report bug feature and it’s backend + Enhanced responsiveness across the website + colours Updates Enhanced responsivess across the site Added colours and sketchy borders and colours wherever I could Added new report bug feature along with it’s backend (this one took time as WiFi went off and I couldn’t ssh into my rpi) What next? I’ll be making doodles (YES, i’ll be hand drawing them) I haven’t thought about anything else yet! BUT, I might be making the website public and push it into the beta version, for that, I’ll need to setup a cloudflare connection via my rpi (aghh i’ll look into it once I am fully convinced with the frontend.
v(0.2-Beta) Deployed + Reviews + More Updates Soooooo, the site it live. andithasalotofproblems!!! I made the site live and asked my friends to use it and fill it with notes. many of them complained about bugs so, I fixed some of them and NOW, I need to add a search bar on the site (I completely forgot lol). In these 3 hours, I deployed the website (this time didn’t get counted as I was working on the terminal. But it took around 1 and a half hour). So in 3 hours, I handled bugs and fixed some of them, enhanced responsiveness as some of my friends complained that they couldn’t scroll on the website or smthng. Added more information on the card, Added 2 new columns named description and type (as requested by a friend). Changed the layout of lower part of the card a little bit (made it a little bit clean). Made the upload code a bit efficient by removing repetitive code. What next? Next, I’ll work on making a search bar on the website so it is easy to use and navigate I’ll be taking inputs from friends and working on them I will be making a separate page where the user can see the pdf each separately insite the site Next devlog is going to be CHUNKY!!!
v(0.3.0-Beta) Separate paper view + Searchbar Updates Added a searchbar (finally Now, you can view each paper separately inside the website itself Made very very very small changes in the design of the website Now you can click on the logo to direcly go back to the browse page (Yeah, I know it’s not something genius) What next? I REALLY want to add doodles but I have been delaying it TOO much now! I think I might be working on it (not sure tho) I also need to make a pfp maker, where users can make their own pfp kinda like the one on skribbl.io. Actually this entire design is inspired by skribbl.io I’ll also be adding user settings page and all where they can change theme, fonts and… okay, just font and themes for now.
(0.4.0-Beta) Settings page + 404 handling Updates Handled 404 error (I had to because my WiFi was down several times today. Many of my friends thought that it was my mistake but actually WiFi was down so my rpi couldn’t serve data) Made settings page and displayed user data on it. I have added an easter egg when the site is down, so basically when there’s an 404 err, you can see an easter can which I’ve added to the site. On the settings page, I have Apprearance settings, Account settings, Preference settings and Delete account. None of them are functional yet. Took a lot of time to create a route (/me). As I faced a lot of bugs while doing so. What next? I know i’ve again delayed making doodles, I WILL MAKE THEM istg I’ll also fix the resonsiveness issue on small screen devices I’ll work on making the settings page functional I have 2 days off at school so I am going yo use them very efficiently!!
v(0.4.1-Beta) Update Email address + Errors Updates Added errors and toasts throughout the website Added update email address feature I’ll be keeping next few devlogs small as I will be working on each feature one by one What next? Next, I’ll work on Delete account feature
v(0.4.1-Beta) Delete account Updates Now you can permanently delete your account. Once you delete your account, all the posts from that account will be removed from the website. For this, I made /delete-me route What next? Next, I’ll make a section where users can manage their papers, they can delete their papers if they want After that, I’ll be working on fixing the responsiveness issue on small screen devices
v(0.4.3-Beta) See uploads and delete them Updates Now you can see your uploads in the settings page and delete them if you wish to If you click on the card, it’ll redirect you to a separate page where you can see the paper in detail What next? Next, I’ll work on fixing the responsiveness issue on small screen devices
v(0.4.4-Beta) Session expiry bug fix + responsiveness fixed Updates Fixed the responsiveness issue on small screen devices I also faced another issue, My friends were unable to download papers and it displayed “Error during downloading” So I took help of AI to know what the problem is and it said that It was because their token had expired SOOOOO…. I increased the token expiry limit to 30 days AND if the token is expired, you will be asked to login again. I applied this throughout the website, upload, browse, report and download I’ll also be switching to nest as I don’t fully trust my ISP and also because shipwright’s review policy said so. BUT i’ll do it towards the end once every feature is almost well built. I’ve applied to nest and hope they accept it as soon as possible! What next? Next, I’ll work on Avatar maker like skribbl.io (this is going to be tuffffffffff)
v(0.5.0-Beta) Avatar builder + bug fixes Updates Now you can make your own avatar just like skribbl.io!!!!! It took so much of my time tbh, I had to hand draw every doodle, I wanted to record it on lapse but couldn’t as screen recording wasn’t working on iPad for some reason and also when I screenshared, the screen went black for some reason. I contacted lapse-help on slack but didn’t find any solution so I decided not to let it go Added a new updateavatar component which lets you make your own avatar and update it if you want to!! Did layout fixes on large screen devices as only horizontal scroll was allowed and vertical scroll was disabled (my friend told me, I didn’t even notice it lol) Fixed frontend as well as backend bugs during the making of this avatar feature This devlog is toooooo big ik but i couldn’t find time daily due to school and assignments and all What next? I’ll work on themes, black white and system themes. The basic ones I’ll also work on “Continue as guest” so that shipwrights don’t have to login when they go through the project I’ll most probably end the project for now after these features are implemented as I need to prepare for upcoming examinations and also stardance is coming to an end :(
v(0.6.0-Beta) Password change Updates I have decided not to include themes as I can no longer work on this project due to school work academics I just want to finish this project as soon as I can. Next devlog might be the last devlog of this project where I’ll add “Continue as guest” feature for shipwrights SO, in this update, I’ve just basically copy pasted the change email logic and made a change password feature. I literally copy pasted it and then modified it for password hence it took less time What next? I’ll be summing up this project by adding continue as guest feature
v (0.7.0-Beta) Continue as Guest + README + more Updates Added hand drawn images to the home page reducing the white space that was looking ugly earlier Added continue as guest feature, if a user continues as guest, they won’t be able to delete their account or change their email address as well as password Wrote the README file I still do not consider this project as completely done, I will be adding more features to it once I am done with my academics What next? I’ll ship it most probably
Ships:
As students, we all require notes and questions when we are practicing for any competitive exams, whenever I wanted the same, I had to ask my friends or I had to buy PYQs online. So to tackle that, I made a website where you can easily post notes and PYQs FOR FREE without even signing up. The website is called SolveIt. There are many things that can be done on the website like uploading PYQs or Notes or any other study related material for a specific competitive examination in a PDF format. If the exam is state specific, you can select the state too. Currently it is only available for India, USA, China, United Kingdom and Australia. It also includes many exams like Gaokao, NEET, JEE, SAT, ACT, QCE, etc. While uploading you can specify your country, state, examination name, year, class/grade and subject. In the settings page, you can make your own avatar (it is inspired by skribbl.io) and yes, the scribbles are hand drawn. You can also delete your account if you wish to, and many other things like changing the password, email and deleting previously uploaded papers. You can navigate easily on the browse page by using the searchbar as well as the filters. Filters will only show those options which are available. You can click on a card and view the paper inside the site itself if you don’t wish to download it. Moreover, you can see more details like uploaded by, uploaded on, length and size of the document and much more. The most challenging part of this project was the backend as always. Routes didn’t work initially when I started off, I couldn’t figure out a way to make scribbled borders so I took help of AI for that. MOST ANNOYING part was the avatar builder, I had to make hand drawn scribbles and convert it into svg paths and then modify those paths according to the container. I also took help of AI to encrypt the passwords of the user. I am very proud of the fact that I have self hosted this website, with the raspberry pi 5 that I received from Hackclub this year. I used Cloudflared private tunnel. Entire backend and database is on RPI. I really wanted to add more things to the project but due to academics and school work, I have to ship it now or else I won’t get time for my upcoming examinations. Before you test it, I would like to make a request that if you face any problem, please report it by going to Report a Bug page so that I come to know about it and can fix it as soon as possible. For more details about the project and if you want to know about it in detail, please read the README file....
|
1792853544.3373756
|
1792939944.3373756
|
|
23309
|
zzzclip by @nosrep | Stardance
|
nosrep
|
1
|
51.0
|
840
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-04T21:15:59Z", "hours": 51.0, "multiplier": 19.28, "payout": 840, "blessing": "neutral", "text": "ever since I was a wee lad I’ve never found a clipboard manager that’s fully worked how I wanted it. A lot can’t handle images correctly, and even fewer can handle multiple MIME types (multiple types of content) simultaneously. Not a lot can persist clipboard content properly either; some don’t wait until the program has exited to replace. So, in 2023, I decided to make my own clipboard manager! I wasn’t very good, though, so it never got to a usable state. This year, I picked the project back up, figured out the blockers (lazy persistence is a lot more annoying than it sounds), and finally added all the features needed for a proper clipboard manager. zzzclip can: store your history. hopefully this was obvious. persist clipboard content. another fun fact: the data in your clipboard doesn’t actually exist to your compositor/WM/DE. if a program exits while something is copied from it, that data is GONE unless it was backed up. that’s what zzzclip does! it backs up the clipboard data and “copies” it again once the program providing it exits. represent your clipboard as files. ever find a website that reaallly wants you to upload a file and won’t take your ctrl-v? zzzclip can fix that! zzzclip also has a configurable system to set which MIME types you really care about, so it won’t store the same image 10 times in different formats every time you copy something. THIS IS FOR WAYLAND USERS ON LINUX ONLY. IF YOU ARE NOT A WAYLAND USER ON LINUX (OR, LIKE, BSD, IF YOU CAN FIGURE IT OUT), THIS IS NOT FOR YOU.", "repo": "https://github.com/Osrepnay/zzzclip", "demo": "https://github.com/Osrepnay/zzzclip/releases/tag/v0.1.0"}]...
|
[{"post_id": 22353, "ts": "202 [{"post_id": 22353, "ts": "2026-07-04T19:44:20Z", "hours": 4.4239, "text": "I have no idea how this devlog ended up so long Anyway, I cleaned up some potential crashes/undefined behavior, fixed up the README, and finally tagged a release + published to AUR! Spent a lot of time wrestling with static linking. I remember using old versions of linux before and getting glibc problems so I wanted to link it statically. I first tried using musl-gcc, but I ended up needing too many static versions of libraries so I just made a Dockerfile with alpine (which has static versions of basically everything) and made the binary there. Did you know PKGBUILDs are just bash scripts? I didn’t."}, {"post_id": 21105, "ts": "2026-07-02T21:58:27Z", "hours": 3.8542, "text": "the clipboard-as-files thing is added! I originally wanted to use FUSE/libfuse, but i realized i could just change the storage format to have the data be in a single file. now i’m just using symlinks instead, no dependencies this was relatively easy, ran into a couple of bugs but nothing too crazy. Biggest thing I got hung up on was which directory to put it in ($XDG_STATE_HOME? $XDG_DATA_HOME? ~/clipboard?). I eventually decided on $XDG_RUNTIME_DIR which seems mostly appropriate - the only thing is that it’s kinda annoying to access, but you could just make your own symlink, change the path with $ZZZCLIP_SYMLINK_PATH, or add a bookmark like in the screenshot. Another thing was to add extensions (e.g. .png) to the file, because apps like discord won’t recognize them if they don’t have extensions. I was initially gonna take and process one of the giant lists online, but then i found out most systems have a /etc/mime.types so i parsed that instead."}, {"post_id": 20183, "ts": "2026-07-01T18:49:37Z", "hours": 2.9758, "text": "I added some more options to the CLI, which ended up being a lot more annoying than i expected. Here are the ones I added: added to zzzclip list : -v: verbose mode. Verbose mode also lists the mimetype for a clipboard item. added to zzzclip get : -f: runs in foreground. Here’s something you might not have known: wl-copy starts a background process when you run it. The clipboard contents aren’t owned by the compositor, so a process has to be running to supply the data. I made zzzclip get do the same thing, but like wl-copy I added an option to make it run in the foreground. -s: output summary. It’s basically zzzclip list -v but only for one item. -l: list stored mime types. It lists the mime types for an item. -m : directly prints the data for an item."}, {"post_id": 18165, "ts": "2026-06-29T05:56:47Z", "hours": 3.1797, "text": "big ticket is overhauling the config format. Previously, the index looked like this: 4a93d8d7 6b5d69df 2143c202 Each random string of 8 characters was a label for data under a particular mime type, and each line was a selection (a selection can have multiple mimetypes). Each label had its own file to store the actual clipboard data, with the mimetype included in that file. this worked fine, but I’ve been wanting to implement the feature where the current clipboard contents are accessible via file. If I moved the mimetype out of the data files, I could just use symlinks because each file has exactly the data I need; using the old format, i’d need to use libfuse to make “fake” files without the mimetypes instead. this was a lot more annoying than i expected (thank god for address sanitizer, caught many mistakes), but I eventually got it working. I think i’m nearing the finish line"}, {"post_id": 17963, "ts": "2026-06-28T22:31:36Z", "hours": 4.0781, "text": "lots of minor-ish stuff for this batch of changes. Biggest change is actually adding proper cli parsing and help messages! previously, the cli was extremely bare-bones and just good enough to actually work but didn’t have any decent error handling or help messages. I’ve also ditched the option that runs the selector program (e.g. rofi, fuzzel). I didn’t know about he -nth those programs have, which let you hide data from the selector, so that functionality was kinda redundant. (also the sizes are human-readable now, i.e. in kb/mb/gb instead of just raw bytes)"}, {"post_id": 16987, "ts": "2026-06-27T15:51:35Z", "hours": 6.7522, "text": "the tests were bad. I fixed them and now everything passes. hooray! Anyway, welcome to macro hell! i’ve been working through the todo list and one of the items I wanted to hit was to support the ext-data-control protocol on top of the wlr-data-control protocol. Wayland compositors work on “protocols,” and not every compositor supports every protocol; the *-data-control protocols are what allow clipboard managers to mess with the clipboard. wlr-data-control was first (i think) and is only supported by wlroots-based compositors, but ext-data-control is the standard now. (except the compositor I use, river, doesn’t support it yet…) The problem with supporting both is that C is not a very expressive language. I had to generate wrapper functions for every function supplied by the protocol, which was bad enough, but I also had to write wrapper functions for my own functions that were used in listeners. This part could have been so much worse, but I was able to hide some function pointers in the user data and cut down even more boilerplate. Not fun. 3/10."}, {"post_id": 14809, "ts": "2026-06-24T01:36:55Z", "hours": 3.3247, "text": "there’s always the boring janitorial stuff (e.g. i renamed a few files, moved some stuff around, fixed a mem leak and a potential crash, etc.) the cooler change is that I finally added testing! testing an app like this is infinitely more annoying than something like a chess engine (shameless plug) because it’s built around IO. I followed in fuzzel ’s footsteps and did integration testing in a shell script, which isn’t something i realized is practical until seeing it used there. the very sparse tests actually already did find a bug, but i’ll fix it later…… the testing is to set up more disruptive features i’ll add later, like implementing the ext-data-control protocol on top of wlr-data-control, and I want to make sure they won’t break anything without having to manually test"}, {"post_id": 14166, "ts": "2026-06-23T04:52:15Z", "hours": 1.7025, "text": "two things: finally got rid of libpcre2. For the people that didn’t read the previous devlog, I needed a regex implementation as part of the user-provided mimetype selection, but I didn’t realize POSIX had one in regex.h and pcre seemed like the standard. POSIX regexes should be more than enough, though, so that’s a dependency killed added locking and index refreshing. nothing was locked previously which is Not Good™️, but more importantly, the daemon never refreshed the index of clipboard data, so if i deleted one, the index would get rewritten anyway with the deleted file and corrupt it. Solution was to stop persisting the index and only read it when it’s used."}, {"post_id": 13561, "ts": "2026-06-22T06:20:10Z", "hours": 3.2839, "text": "minor changes for this devlog. spent way more time than is reasonable thinking of the best way to deal with allocation failures… it seems like everyone online has a different opinion on it. I tried doing it “properly” before seeing how many lines of checks that would require for a codepath that would realistically never get hit, so I gave up and just did xmalloc (basically, a wrapper around malloc that exits with an error message when it fails). Also in the theme of error handling, I did a sweep of the code and wrapped (most) of the io functions I missed to check for failure. it seems like overkill… there has to be a better way but maybe this is how it is. Finally, I switched from libpcre2 to posix regex.h. I didn’t realize POSIX had a regex.h and it’s way more than is required for this use-case (matching mimetypes)."}, {"post_id": 12902, "ts": "2026-06-21T04:06:31Z", "hours": 17.6878, "text": "I started this project much earlier than stardance (it’s years old by now), but it’s only recently become usable. think of this devlog as motivation/background the main goal was to make a clipboard manager that could persist clipboard selections after applications closed have configurable mimetype selection Here’s something interesting you might not have known about linux clipboards (both wayland and x11): the data doesn’t actually exist until a client requests it. This is how applications like firefox offer 20 morbillion image types; it’s converting the image on-the-fly. Given this, it’s impractical to request every offered type, so most clipboard managers I’ve found solve this by giving up and only doing text or text+hardcoded image mimetypes. zzzclip has a probably-overcomplicated system that lets you configure which mimetypes it’ll remember and priority between mimetypes (plus regexes). Another feature I want to add eventually is a FUSE clipboard system where it can make a “fake” (meaning it’s backed by the program, not something on disk) file holding the current clipboard contents. (as for what these 17 hours are actually for: it’s just adding config parsing and a load of cleanups.)"}]...
|
Title: zzzclip by @nosrep | Stardance
Devlogs:
I Title: zzzclip by @nosrep | Stardance
Devlogs:
I started this project much earlier than stardance (it’s years old by now), but it’s only recently become usable. think of this devlog as motivation/background the main goal was to make a clipboard manager that could persist clipboard selections after applications closed have configurable mimetype selection Here’s something interesting you might not have known about linux clipboards (both wayland and x11): the data doesn’t actually exist until a client requests it. This is how applications like firefox offer 20 morbillion image types; it’s converting the image on-the-fly. Given this, it’s impractical to request every offered type, so most clipboard managers I’ve found solve this by giving up and only doing text or text+hardcoded image mimetypes. zzzclip has a probably-overcomplicated system that lets you configure which mimetypes it’ll remember and priority between mimetypes (plus regexes). Another feature I want to add eventually is a FUSE clipboard system where it can make a “fake” (meaning it’s backed by the program, not something on disk) file holding the current clipboard contents. (as for what these 17 hours are actually for: it’s just adding config parsing and a load of cleanups.)
minor changes for this devlog. spent way more time than is reasonable thinking of the best way to deal with allocation failures… it seems like everyone online has a different opinion on it. I tried doing it “properly” before seeing how many lines of checks that would require for a codepath that would realistically never get hit, so I gave up and just did xmalloc (basically, a wrapper around malloc that exits with an error message when it fails). Also in the theme of error handling, I did a sweep of the code and wrapped (most) of the io functions I missed to check for failure. it seems like overkill… there has to be a better way but maybe this is how it is. Finally, I switched from libpcre2 to posix regex.h. I didn’t realize POSIX had a regex.h and it’s way more than is required for this use-case (matching mimetypes).
two things: finally got rid of libpcre2. For the people that didn’t read the previous devlog, I needed a regex implementation as part of the user-provided mimetype selection, but I didn’t realize POSIX had one in regex.h and pcre seemed like the standard. POSIX regexes should be more than enough, though, so that’s a dependency killed added locking and index refreshing. nothing was locked previously which is Not Good™️, but more importantly, the daemon never refreshed the index of clipboard data, so if i deleted one, the index would get rewritten anyway with the deleted file and corrupt it. Solution was to stop persisting the index and only read it when it’s used.
there’s always the boring janitorial stuff (e.g. i renamed a few files, moved some stuff around, fixed a mem leak and a potential crash, etc.) the cooler change is that I finally added testing! testing an app like this is infinitely more annoying than something like a chess engine (shameless plug) because it’s built around IO. I followed in fuzzel ’s footsteps and did integration testing in a shell script, which isn’t something i realized is practical until seeing it used there. the very sparse tests actually already did find a bug, but i’ll fix it later…… the testing is to set up more disruptive features i’ll add later, like implementing the ext-data-control protocol on top of wlr-data-control, and I want to make sure they won’t break anything without having to manually test
the tests were bad. I fixed them and now everything passes. hooray! Anyway, welcome to macro hell! i’ve been working through the todo list and one of the items I wanted to hit was to support the ext-data-control protocol on top of the wlr-data-control protocol. Wayland compositors work on “protocols,” and not every compositor supports every protocol; the *-data-control protocols are what allow clipboard managers to mess with the clipboard. wlr-data-control was first (i think) and is only supported by wlroots-based compositors, but ext-data-control is the standard now. (except the compositor I use, river, doesn’t support it yet…) The problem with supporting both is that C is not a very expressive language. I had to generate wrapper functions for every function supplied by the protocol, which was bad enough, but I also had to write wrapper functions for my own functions that were used in listeners. This part could have been so much worse, but I was able to hide some function pointers in the user data and cut down even more boilerplate. Not fun. 3/10.
lots of minor-ish stuff for this batch of changes. Biggest change is actually adding proper cli parsing and help messages! previously, the cli was extremely bare-bones and just good enough to actually work but didn’t have any decent error handling or help messages. I’ve also ditched the option that runs the selector program (e.g. rofi, fuzzel). I didn’t know about he -nth those programs have, which let you hide data from the selector, so that functionality was kinda redundant. (also the sizes are human-readable now, i.e. in kb/mb/gb instead of just raw bytes)
big ticket is overhauling the config format. Previously, the index looked like this: 4a93d8d7 6b5d69df 2143c202 Each random string of 8 characters was a label for data under a particular mime type, and each line was a selection (a selection can have multiple mimetypes). Each label had its own file to store the actual clipboard data, with the mimetype included in that file. this worked fine, but I’ve been wanting to implement the feature where the current clipboard contents are accessible via file. If I moved the mimetype out of the data files, I could just use symlinks because each file has exactly the data I need; using the old format, i’d need to use libfuse to make “fake” files without the mimetypes instead. this was a lot more annoying than i expected (thank god for address sanitizer, caught many mistakes), but I eventually got it working. I think i’m nearing the finish line
I added some more options to the CLI, which ended up being a lot more annoying than i expected. Here are the ones I added: added to zzzclip list : -v: verbose mode. Verbose mode also lists the mimetype for a clipboard item. added to zzzclip get : -f: runs in foreground. Here’s something you might not have known: wl-copy starts a background process when you run it. The clipboard contents aren’t owned by the compositor, so a process has to be running to supply the data. I made zzzclip get do the same thing, but like wl-copy I added an option to make it run in the foreground. -s: output summary. It’s basically zzzclip list -v but only for one item. -l: list stored mime types. It lists the mime types for an item. -m : directly prints the data for an item.
the clipboard-as-files thing is added! I originally wanted to use FUSE/libfuse, but i realized i could just change the storage format to have the data be in a single file. now i’m just using symlinks instead, no dependencies this was relatively easy, ran into a couple of bugs but nothing too crazy. Biggest thing I got hung up on was which directory to put it in ($XDG_STATE_HOME? $XDG_DATA_HOME? ~/clipboard?). I eventually decided on $XDG_RUNTIME_DIR which seems mostly appropriate - the only thing is that it’s kinda annoying to access, but you could just make your own symlink, change the path with $ZZZCLIP_SYMLINK_PATH, or add a bookmark like in the screenshot. Another thing was to add extensions (e.g. .png) to the file, because apps like discord won’t recognize them if they don’t have extensions. I was initially gonna take and process one of the giant lists online, but then i found out most systems have a /etc/mime.types so i parsed that instead.
I have no idea how this devlog ended up so long Anyway, I cleaned up some potential crashes/undefined behavior, fixed up the README, and finally tagged a release + published to AUR! Spent a lot of time wrestling with static linking. I remember using old versions of linux before and getting glibc problems so I wanted to link it statically. I first tried using musl-gcc, but I ended up needing too many static versions of libraries so I just made a Dockerfile with alpine (which has static versions of basically everything) and made the binary there. Did you know PKGBUILDs are just bash scripts? I didn’t.
Ships:
ever since I was a wee lad I’ve never found a clipboard manager that’s fully worked how I wanted it. A lot can’t handle images correctly, and even fewer can handle multiple MIME types (multiple types of content) simultaneously. Not a lot can persist clipboard content properly either; some don’t wait until the program has exited to replace. So, in 2023, I decided to make my own clipboard manager! I wasn’t very good, though, so it never got to a usable state. This year, I picked the project back up, figured out the blockers (lazy persistence is a lot more annoying than it sounds), and finally added all the features needed for a proper clipboard manager. zzzclip can: store your history. hopefully this was obvious. persist clipboard content. another fun fact: the data in your clipboard doesn’t actually exist to your compositor/WM/DE. if a program exits while something is copied from it, that data is GONE unless it was backed up. that’s what zzzclip does! it backs up the clipboard data and “copies” it again once the program providing it exits. represent your clipboard as files. ever find a website that reaallly wants you to upload a file and won’t take your ctrl-v? zzzclip can fix that! zzzclip also has a configurable system to set which MIME types you really care about, so it won’t store the same image 10 times in different formats every time you copy something. THIS IS FOR WAYLAND USERS ON LINUX ONLY. IF YOU ARE NOT A WAYLAND USER ON LINUX (OR, LIKE, BSD, IF YOU CAN FIGURE IT OUT), THIS IS NOT FOR YOU....
|
1792968809.0337737
|
1793055209.0337737
|
|
23588
|
LighterWebUI by @Capy | Stardance
|
Capy
|
1
|
45.0
|
838
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-01T20:45:07Z", "hours": 45.0, "multiplier": 18.87, "payout": 838, "blessing": "neutral", "text": "I made LighterWebUI, a lightweight local AI client based on Ollama. It uses as little as 70MB of RAM at idle, over 6x less than OpenWebUI, making it easy to run on a Pi Zero 2 W (512MB RAM). It uses Ollama, a well-known way to run inference locally. The profile system is similar to Neflix. IMPORTANT: For this demo, the AI models are run through an API, not locally, as I’m not able to run large LLMs reliably enough on my hardware. Please don’t use any swearing, slurs or otherwise bad language with the AI. You may create and delete your own chats and users, but please leave the existing ones as they are. The stack: SvelteKit frontend and backend, Ollama for inference, Acebase local (NoSQL) database.", "repo": "https://github.com/CapyGamesXD/LighterWebUI", "demo": "https://lighterwebui.capydesigns.com/home/"}]...
|
[{"post_id": 39117, "ts": "202 [{"post_id": 39117, "ts": "2026-08-01T20:30:17Z", "hours": 0.5122, "text": "Fixed final bugs before shipping! I sent the project to some friends to check that everything worked as expected. It didn’t. I fixed what didn’t and now I’m READY TO SHIP!!!! Thank you guys for reading all these devlogs! <3"}, {"post_id": 39022, "ts": "2026-08-01T18:00:21Z", "hours": 0.5603, "text": "Polished bugs! This might be my last devlog! I plan to write quite a specific ship note for the users telling them what they may and may not do. Thanks so much to everyone who was here from the start of LighterWebUI! I’ve really enjoyed this project and I’m looking forward to the next one! I’ve got some ideas, so keep an eye out! Anyway, I removed some excess logs, polished some code layout, just made the whole thing a little nicer. I also started hosting at https://lighterwebui.capydesigns.com ! I may have to take it down a couple times. I’ve made 3 profiles with a chat in each of them that the users can use to test the site. Bye guys! <3 Happy hacking!"}, {"post_id": 38970, "ts": "2026-08-01T16:18:24Z", "hours": 5.4911, "text": "HUGE devlog! I made a TON of changes, improvements, etc! First, mobile compatibility! The user can now change the system prompt. I added a nice (basic) loading screen . I improved a big database inefficiency with the messaging system. (before I continue, please consider the fact that it was probably 22:30 when I coded this, and I was likely somewhat delirious), the messaging system would take the current array from the DB, add the new messages, and replace the entire file. FOR EVERY MESSAGE. This is heavy on RAM, slow and way more operations than are needed, also getting slower the longer the chat is. Now, when the user sends a message and the AI replies, that pair of messages get sent over and pushed to the chat. 2 messages, not the entire chat! I finally added the Lighter, Web, and UI pages. I had a tag that bound to a routeSelect variable. This routeSelect variable would determine the apiRoute. The fix was to just get rid of the routeSelect and bind the to the apiRoute. (whoops!) OH! Something I totally almost forgot to mention! I made the starting pages! You now follow this flow: Press the PEAK start button, grab your admin code, get prompted to set up Ollama (or the cloud API), then enter your username, then finally, the last page gives you the same glorious button to finish the tutorial/intro, alongside the repo link. I also edited the README a bunch to add instructions for setup. I’m opting to recommend Bun over Node for running it. Also! I tested more for the RAM usage. I found that (after rebooting my Pi) I managed to get <70MB usage at idle. That is INSANE! This will - of course fluctuate with the number of concurrent users/prompts, but is really impressive nonetheless. I also tested in on my Pi Z2W to make sure it worked. Start-to-finish, I found a few missing dependencies in the package.json, which I quickly added. Now, the project can be downloaded and run in just 5 terminal commands! Finally, I ran a code review thingy using VSCode’s AI tool (I made sure to tell it not to generate code!) and it found a few minor bugs, so I fixed the main ones. I also ignored some because they’re incredibly unlikely to happen in general, let alone during the initial ship period. I’d rather not waste time fixing things like “what if the server dies midway through this exact token output and that goes kaboom” or whatever lol. Oh, one last thing, I removed my custom alerts. They were nice, but also very useless… I replaced them with the browser’s own confirmation dialog, since it’s simpler and honestly nicer to use! Also 100% cross-platform. Two little sub-notes, I can’t show all pages of the setup because of the attachment limit on Stardance, so you’ll just have to run the project yourself to see it (hehehe), and secondly, don’t worry, I’ll make sure to change the password shown in that image. I’m gonna delete the database entirely again before I ship! Anyway! Sorry again for the long devlog, I just have so much to say! I also omitted a TON of smaller optimisations/changes again, but they’re generally irrelevant to the user’s experience, and I doubt anyone would want to read a 10,000 word devlog like “and then I added another pixel to the offset… Then removed it… Then added it back…” If I remember something less brain-meltingly boring, I’ll make sure to add it! (P.S, this is me coming back and editing the project because I’d WAY surpassed the character limit!) Thanks so much for reading what’s possibly one of my last devlogs! Happy hacking everyone! I MIGHT see you in the next one!"}, {"post_id": 36518, "ts": "2026-07-28T18:00:34Z", "hours": 3.0181, "text": "# I FINISHED THE MAIN PAGE’S FEATURES!!! I added a create and remove user function. I also entirely overhauled how they’re stored. Time for the boring dev talk: Before, the DB ref was (‘/LighterWebUI/users/’) and now it’s (‘/LighterWebUI/users/${userId}’), meaning I can modify them as I need without having to first fetch the array, modify it and then re-send it to the db. It’s a TINY bit more efficient, and a lot easier to use. Also, STATISTICS! I took a few measurements, here are the results. <100MB idle (about 95MB) Idling with 10 browser tabs running it took it way up to… 105MB According to my very thorough single Google search, the average idle for OpenWebUI is 400-650MB, making mine 4-6x less RAM usage! I also improved some of the logic surrounding the presets for API endpoints. UX improvements too! I MASSIVELY improved the UI of certain things like the user profile system, which now doesn’t display the currently selected profile as an option (not super significant, but nice). I also added the option to add new users. The chats list now (finally) shows which chat you’re active in. It highlights it in a lighter gray. I also made it so that when you use the “override model selection”, the options disappear so you don’t have an empty element :) I fixed the colours and improved continuity across colourful elements (before I had like 4 different blue colours that were basically identical XD) I feel like the UI is kinda Discord-esque on the user page, which I quite like :D I also added a lil function to close all menus, which streamlines all the others instead of manually closing every one of them. As far as I can remember that’s basically it! OH WAIT NO I added a new settings menu! It’s totally different now. :) I organised some things and split it into two sides, regular and advanced. I’m very close to finishing the project! Probably <10 hours left on it. (I’m gonna fix the weird text spacing soon DW lol) I’ll also add a ‘cancel’ option to the New User menu. As usual, if I remember anything else I’ll add it in the comments :D Thanks for reading guys! <3 Happy hacking!"}, {"post_id": 35324, "ts": "2026-07-26T17:20:30Z", "hours": 4.8344, "text": "The grand settings, backend and UX update of ’26! I added a bunch of backup logic behind the custom route fetching! It’s working great now! I then also had to fix a bunch of things with the guest route, because that was all messed up from the settings stuff. I added a new tool! The AI can now run endChat() to stop the user and delete the chat if they ask/say something harmful. I would like to stop it before it reaches my API provider, but I don’t think HC would appreciate me putting a “slurs.txt” file into my repo When the AI calls the function, it fetches the current chat and simply deletes it. It also notifies the user through a simple error system I’ve made. From there, the user can currently create a new chat. I’m prepared to keep it this way for now, since I don’t want to limit other people from using their own local models for whatever they might want. I’m also considering providing the option to rely solely on the model’s guardrails. I’ve just gotta hope nobody wants to test that feature upon shipping… Speaking of which, I’ve massively changed my mind on how I’ll handle that! It’s NOT going to be hosted on-device for the ship, which I know sounds ironic (and frankly, is, given it’s a local AI client), but I don’t want any users saying “this local 0.5B AI is terrible, it must be a bad project!”, and will thus use Ollama’s official cloud API. Also, if my Pi were to receive multiple prompts at once, it would likely… Die. This would A: suck, because I’d need to restart it frequently and B: prevent any users from rating it while it’s off. If it dies at midnight, I won’t know until I wake up! Ollama’s Cloud API has seemingly good uptime (I couldn’t find any stats online, but it seems decent!) and provides me with much larger models, up to 120B (and likely higher) without having to pay. That brings me to one of the largest things I had to figure out! If a user selects an unavailable model (Kimi K2.6, for instance), the server returns an error (which was surprisingly difficult to actually parse/decode!) and fails. I created a system to return that the prompt failed, then check that the fallback model is different from the current model. If so, it warns the user, then goes to the fallback model and regenerates by itself, automatically. The default fallback is Gemma4:31B, since it’s a free Ollama model. I’m providing my own key, so users don’t need to enter their own. If the fallback is the SAME as the current, it’ll show an unexpected error. I also added auto scrolling, although I couldn’t figure it out, so I debugged using Gemini and managed to fix it. It’s a ChatGPT-style scrolling system! It binds you to the bottom while it’s generating, but if you scroll up, it’ll sever that binding, letting you scroll freely. If you want to continue following the AI’s text stream, simply scroll back down! I am considering adding a button to do so as well, since that could be a very easy feature to add and improve overall UX. Oh right, I also fixed the displaying of when the AI uses tools! I found out that the Vercel AI SDK has a new system for it in the newest version and used that instead. I think I added some more stuff, but I can’t really remember it all right now! Most of the time spent was debugging the things I broke while adding new features. I’ll add anything I remember as a comment on this devlog! Also check the changelog if you wanna see more stuff (and specifics!) :) I acknowledge that this is my longest devlog so far, but I just wanted to be thorough! If you have any questions, I’d love to answer them in the comments!!!"}, {"post_id": 34728, "ts": "2026-07-25T18:01:16Z", "hours": 4.57, "text": "URL UPDATEEEE! I FINALLY added custom URLs! I mentioned wanting to do that in the last devlog, but now you CAN! I finished the settings page’s content, including adding an entire auth system (painful) and trying to make the UX nicer (also painful), alongside encountering a TON of other bugs and having to fix those. I also made a system to generate passwords randomly to access the admin controls. It OFFICIALLY works with other APIs! Simply enter the route (e.g, https://ollama.com/api ) and your API key and it’ll handle the rest. This is just the main feature I added, but I added a TON of other things too! ANYWAY! Still on the “//TODO:” list: A TON OF STUFF! I plan to add customisable temperature next, then the into/“welcome” screens, then all the scrolling and animation stuff. I think I can do this in time though, which is a great feeling having coded less recently."}, {"post_id": 31736, "ts": "2026-07-20T11:36:36Z", "hours": 4.4872, "text": "Hey! Added web search integration, a settings menu, and I’m working on an admin page! I also added text formatting, which was a pain to test with the 0.5B model because of how disobedient it can be I plan to allow the user to change the API route (and key) through a locked admin page. I’m working through security issues with that, and spent a fair amount of time thinking of how to fix that. My current plan is: Generate a secret “key” during setup that unlocks the admin page. When the user visits the page, ask them for the key to submit the changes. If the user hasn’t been authenticated, do not allow them to change settings. The main concern is that they could use devtools to just toggle the variable, hence fetching it directly within the function. I think it’ll work, but I’ll need to do some testing. :) I also added a little icon if the user hasn’t got a Tavily API key for web search functionality. The image currently shows the route editable within the client side. I might go with that and have the same logic behind it on the home page instead of a separate /admin page. In all honesty, I’m kinda overwhelmed. This is the biggest project I’ve ever made, and I feel like I keep accidentally switching features and missing stuff out. Anyway, it’s still really fun, so I’m still going for that Flipper Zero and TRMNL kit! :D Thanks for reading!!!"}, {"post_id": 30631, "ts": "2026-07-18T11:01:58Z", "hours": 3.1933, "text": "MASSIVE overhaul of the backend! As you may recall, I previously spent a few hours trying (and failing) to implement tool calling. I did a bit of research (Google Gemini helped with the research portion!) and found that the Vercel AI SDK has the ability to stream text while tool calling, with WAY less code than doing it manually! The great conversion of ’26… That SUCKED!!! It worked great until I noticed that the database no longer worked… Anyway, as of 5 minutes ago, I just fixed that! I completely removed my local “messages” array and replaced it with chat.messages. I LOVE THE VERCEL AI SDK!! It’s amazing. I just need some tool ideas of what to add.. (Currently, there’s just a short pause and a gap above the messages to indicate a tool was used, but I plan to replace that with a nice “Tool used: ____” now! I also did a TON of other things, including fixing many bugs with the new user system, but that seems to OFFICIALLY be working now!! Only took me 20+ hours to get a working AI client T_T But now I can start getting it NICE! :) I’ll improve UI, add a TON of pages, etc! If you have any default tool suggestions, please do give them."}, {"post_id": 29011, "ts": "2026-07-15T17:39:29Z", "hours": 3.2464, "text": "I FINISHED THE USER SYSTEM after a ton of uhh.. Pain and suffering! :D JK, it wasn’t too bad. I did, however encounter a loop of failing code that I couldn’t figure out! Turns out, my localStorage thingy was broken! I accidentally set it wrong! Anyway, after finally fixing that, I kept going! I removed the DB from github too lol. Unfortunately I’ve made no UI changes yet, so there’s really nothing interesting to see. AI usage: I debugged a few errors using Gemini, finding the solution. Still no AI code was used. I found that I could use return functions with $effect runes, which I somehow missed before! That came in handy with the fancy system I added to not entirely break the website if you leave during a stream. :) For some reason, the page is UNBELIEVABLY slow to initially load on development mode, so that sucks… It works instantly on release though, so that’s great! I added a few new messages to the main screen. Some backups too, one of which is visible below. It tells you instantly what profile you’re on. I’ll consider varying that each time like most AI websites do, but I’ll make sure to keep it as small as possible. I have a LOT to do on my Trello board still, which is ironic. The more work I do, the more issues I find! The board gets longer each devlog T_T Somewhat interesting update: I’m gonna add some docs (likely on Github, unless I feel inclined to code them!) in which there’ll be an error code section. I’m making my own error codes, specific to the website. :) Currently got: A1: user error (not logged in, corrupt data, etc.) U1: unknown error M1: unavailable model P1: invalid prompt I plan to maybe add profanity filtering to the prompt validity checker (which I’ve also yet to implement)! I can also make a nice customisable theme across pages. Exciting devlog, because now I can get back onto the FUN STUFF!!! No more ‘why account no work T_T’ stuff! Thanks for reading, happy coding!"}, {"post_id": 28412, "ts": "2026-07-14T17:27:24Z", "hours": 4.5658, "text": "More work! :D As the image shows, I just finished implementing ‘guest’ mode and have started on the user profile system (on the right) I plan to: Finish adding it, fixing the UI, etc. Add it to the setup process :O Anyway, other things (massively summarised to fit a devlog… If you want to know more, check the repo!) I designed an icon! That wasn’t logged for time. :) I implemented the logo (it doubles as a guest profile picture thing on the top right!) It’s a bit generic, very “AI company”-esque, but still - pretty nice for my first Inkscape logo :D I’ve added some nice icons, as you can see in the sidebar. I forced alignment of the title, so that’s fixed! :) I fixed the bug where the user could enter a prompt without having a user object assigned to them. For Guest detection, I basically just say “if(!user.userId)”, since the Guest is the only profile that will NEVER have an automatically assigned user ID. I’ve totally revamped the user system: It’s now a JSON object called user, with various items like userName, userId, and userPlainNum. PlainNum is for ordering, and I was pretty sure I had something in mind, but I can’t remember why I added it so it might be removed. I’m at 571 lines of code! I made several new JS backend files for this user system, so I’m very excited to introduce it! I am posting this devlog only part of the way through coding that system. Suffice to say my Trello board is FULL! Also, heh… Embarrassing story: I kinda committed the database :) BUT! It wasn’t public anyway, so it’s just my debugging “uhhh… hello? HELLO??? Are you there?” prompts. Nothing secret. Also probably best that it happens during development and before I have users! Anyway, since I’m HORRIBLE with Git commands, I used Gemini to help fix it. Hopefully that worked. As I said in the AI declaration thingy, none of the code is copy-pasted from AI, and is all Capy-written :D (PS, I probably skipped over 500 tiny bug fixes and a few bigger features, but we’d both be here for a while if I hadn’t.) Thanks so much for reading my devlog! Happy coding!"}, {"post_id": 22863, "ts": "2026-07-05T14:16:18Z", "hours": 5.1, "text": "I added a BUNCH of stuff! I was so locked in that I forgot to make a devlog! Let’s make this one shorter: I added the left panel I added multiple new backend files for the DATABASE!!! I added a database (AceBase!) I improved the UI I’m testing with another AI model for now Okay, onto the detailed stuff. AceBase! It’s a really nice database package thingy! It has FireStore-like syntax but without the annoying stuff. :) I’ll definitely use it in future projects too! Anyway, using that I made a system to create, fetch, etc new chats! Now they’re stored in the database alongside their associated crypto-UUID key. That’s passed as a search parameter (kinda like YouTube videos!) and fetched, then the messages are loaded. I did way more that honestly can’t fit into this devlog, so that’s the main stuff out of the way. :) To do: UI! It’s still got some smaller issues (the title is off-centre :O) Fix a BUNCH of backend bugs Add auto-chat naming (just the first few words of the user’s prompt for now :D) Add a user profile system (like Netflix :O) Add a “guest mode” account. Make the URL customisable (in case someone’s hosting at a different address) Make a customisable system prompt! Decide what models are suitable for release. Add some nice (lucide.dev) icons! And a BUNCH more! Thanks for reading! :D Happy coding!"}, {"post_id": 22148, "ts": "2026-07-04T13:42:08Z", "hours": 4.6039, "text": "Devlog #2! This one was a challenge… I started by spending an hour or two trying to figure out a nice system for function calling, before coming to the sad realisation that it wouldn’t be very useful. I then experimented with AI models, and realised that SmoLLM is a nice balance between intelligence and size! I also discovered that Ollama (by default) doesn’t allow two prompts at once. I plan to keep this functionality, despite its obvious drawbacks. If I didn’t have it in place, two users using different (or even the same) models could totally crash the Pi. That would leave the site down for hours on end if I’m not available to fix it. With Ollama’s prevention, worst case scenario: one user waits a few extra seconds. Anyway, I also started working on the UI! I’ve also implemented a nice system that fetches the available models, which seems to work great! I’m currently getting a nice input box. The images of UI from the last devlog were the Figma designs, but now it’s time to actually make them in HTML and CSS! I’ve done a lot of other backend stuff, playing around with various experiments, but now I’m back to working on the frontend for now. One last thing: I’m still deciding how the website will work. I might add Firebase authentication. This would allow easy saving of chats. It would also, however make the development experience more complicated and the app itself less streamlined. Another concern is that people run local AI for security, so posting everything they’ve said off to Google is a little pointless. I’ve got two other options: local JSON (or SQL :P) database, and no storage at all. I think the SQL database will have to be made. :) Thanks so much for reading the devlog! Sorry I made it so long… Also! A feature I’m super proud of! The title card at the top of the image isn’t just a title! Each word lights up when you hover. If you click, it takes you to a page detailing the feature of the site. (E.g, ‘lighter’ will take you to the page describing how I made the site efficient and lightweight!) Thanks for reading!"}, {"post_id": 17631, "ts": "2026-06-28T14:44:42Z", "hours": 0.4275, "text": "First devlog! I FINALLY got the text streaming working! Unfortunately, Wakatime didn’t work for the first almost 2 hours of coding! Oh well! Not much I can do XD I am really happy with it! Currently running Qwen 2.5 coder 3B, which works great! This is all running on my Raspberry Pi 5 4gb (which I got from the last Hackclub event!!!), so I’m super grateful that my projects could get me such amazing hardware, thank you Hackclub! ❤️"}]...
|
Title: LighterWebUI by @Capy | Stardance
Devlogs: Title: LighterWebUI by @Capy | Stardance
Devlogs:
First devlog! I FINALLY got the text streaming working! Unfortunately, Wakatime didn’t work for the first almost 2 hours of coding! Oh well! Not much I can do XD I am really happy with it! Currently running Qwen 2.5 coder 3B, which works great! This is all running on my Raspberry Pi 5 4gb (which I got from the last Hackclub event!!!), so I’m super grateful that my projects could get me such amazing hardware, thank you Hackclub! ❤️
Devlog #2! This one was a challenge… I started by spending an hour or two trying to figure out a nice system for function calling, before coming to the sad realisation that it wouldn’t be very useful. I then experimented with AI models, and realised that SmoLLM is a nice balance between intelligence and size! I also discovered that Ollama (by default) doesn’t allow two prompts at once. I plan to keep this functionality, despite its obvious drawbacks. If I didn’t have it in place, two users using different (or even the same) models could totally crash the Pi. That would leave the site down for hours on end if I’m not available to fix it. With Ollama’s prevention, worst case scenario: one user waits a few extra seconds. Anyway, I also started working on the UI! I’ve also implemented a nice system that fetches the available models, which seems to work great! I’m currently getting a nice input box. The images of UI from the last devlog were the Figma designs, but now it’s time to actually make them in HTML and CSS! I’ve done a lot of other backend stuff, playing around with various experiments, but now I’m back to working on the frontend for now. One last thing: I’m still deciding how the website will work. I might add Firebase authentication. This would allow easy saving of chats. It would also, however make the development experience more complicated and the app itself less streamlined. Another concern is that people run local AI for security, so posting everything they’ve said off to Google is a little pointless. I’ve got two other options: local JSON (or SQL :P) database, and no storage at all. I think the SQL database will have to be made. :) Thanks so much for reading the devlog! Sorry I made it so long… Also! A feature I’m super proud of! The title card at the top of the image isn’t just a title! Each word lights up when you hover. If you click, it takes you to a page detailing the feature of the site. (E.g, ‘lighter’ will take you to the page describing how I made the site efficient and lightweight!) Thanks for reading!
I added a BUNCH of stuff! I was so locked in that I forgot to make a devlog! Let’s make this one shorter: I added the left panel I added multiple new backend files for the DATABASE!!! I added a database (AceBase!) I improved the UI I’m testing with another AI model for now Okay, onto the detailed stuff. AceBase! It’s a really nice database package thingy! It has FireStore-like syntax but without the annoying stuff. :) I’ll definitely use it in future projects too! Anyway, using that I made a system to create, fetch, etc new chats! Now they’re stored in the database alongside their associated crypto-UUID key. That’s passed as a search parameter (kinda like YouTube videos!) and fetched, then the messages are loaded. I did way more that honestly can’t fit into this devlog, so that’s the main stuff out of the way. :) To do: UI! It’s still got some smaller issues (the title is off-centre :O) Fix a BUNCH of backend bugs Add auto-chat naming (just the first few words of the user’s prompt for now :D) Add a user profile system (like Netflix :O) Add a “guest mode” account. Make the URL customisable (in case someone’s hosting at a different address) Make a customisable system prompt! Decide what models are suitable for release. Add some nice (lucide.dev) icons! And a BUNCH more! Thanks for reading! :D Happy coding!
More work! :D As the image shows, I just finished implementing ‘guest’ mode and have started on the user profile system (on the right) I plan to: Finish adding it, fixing the UI, etc. Add it to the setup process :O Anyway, other things (massively summarised to fit a devlog… If you want to know more, check the repo!) I designed an icon! That wasn’t logged for time. :) I implemented the logo (it doubles as a guest profile picture thing on the top right!) It’s a bit generic, very “AI company”-esque, but still - pretty nice for my first Inkscape logo :D I’ve added some nice icons, as you can see in the sidebar. I forced alignment of the title, so that’s fixed! :) I fixed the bug where the user could enter a prompt without having a user object assigned to them. For Guest detection, I basically just say “if(!user.userId)”, since the Guest is the only profile that will NEVER have an automatically assigned user ID. I’ve totally revamped the user system: It’s now a JSON object called user, with various items like userName, userId, and userPlainNum. PlainNum is for ordering, and I was pretty sure I had something in mind, but I can’t remember why I added it so it might be removed. I’m at 571 lines of code! I made several new JS backend files for this user system, so I’m very excited to introduce it! I am posting this devlog only part of the way through coding that system. Suffice to say my Trello board is FULL! Also, heh… Embarrassing story: I kinda committed the database :) BUT! It wasn’t public anyway, so it’s just my debugging “uhhh… hello? HELLO??? Are you there?” prompts. Nothing secret. Also probably best that it happens during development and before I have users! Anyway, since I’m HORRIBLE with Git commands, I used Gemini to help fix it. Hopefully that worked. As I said in the AI declaration thingy, none of the code is copy-pasted from AI, and is all Capy-written :D (PS, I probably skipped over 500 tiny bug fixes and a few bigger features, but we’d both be here for a while if I hadn’t.) Thanks so much for reading my devlog! Happy coding!
I FINISHED THE USER SYSTEM after a ton of uhh.. Pain and suffering! :D JK, it wasn’t too bad. I did, however encounter a loop of failing code that I couldn’t figure out! Turns out, my localStorage thingy was broken! I accidentally set it wrong! Anyway, after finally fixing that, I kept going! I removed the DB from github too lol. Unfortunately I’ve made no UI changes yet, so there’s really nothing interesting to see. AI usage: I debugged a few errors using Gemini, finding the solution. Still no AI code was used. I found that I could use return functions with $effect runes, which I somehow missed before! That came in handy with the fancy system I added to not entirely break the website if you leave during a stream. :) For some reason, the page is UNBELIEVABLY slow to initially load on development mode, so that sucks… It works instantly on release though, so that’s great! I added a few new messages to the main screen. Some backups too, one of which is visible below. It tells you instantly what profile you’re on. I’ll consider varying that each time like most AI websites do, but I’ll make sure to keep it as small as possible. I have a LOT to do on my Trello board still, which is ironic. The more work I do, the more issues I find! The board gets longer each devlog T_T Somewhat interesting update: I’m gonna add some docs (likely on Github, unless I feel inclined to code them!) in which there’ll be an error code section. I’m making my own error codes, specific to the website. :) Currently got: A1: user error (not logged in, corrupt data, etc.) U1: unknown error M1: unavailable model P1: invalid prompt I plan to maybe add profanity filtering to the prompt validity checker (which I’ve also yet to implement)! I can also make a nice customisable theme across pages. Exciting devlog, because now I can get back onto the FUN STUFF!!! No more ‘why account no work T_T’ stuff! Thanks for reading, happy coding!
MASSIVE overhaul of the backend! As you may recall, I previously spent a few hours trying (and failing) to implement tool calling. I did a bit of research (Google Gemini helped with the research portion!) and found that the Vercel AI SDK has the ability to stream text while tool calling, with WAY less code than doing it manually! The great conversion of ’26… That SUCKED!!! It worked great until I noticed that the database no longer worked… Anyway, as of 5 minutes ago, I just fixed that! I completely removed my local “messages” array and replaced it with chat.messages. I LOVE THE VERCEL AI SDK!! It’s amazing. I just need some tool ideas of what to add.. (Currently, there’s just a short pause and a gap above the messages to indicate a tool was used, but I plan to replace that with a nice “Tool used: ____” now! I also did a TON of other things, including fixing many bugs with the new user system, but that seems to OFFICIALLY be working now!! Only took me 20+ hours to get a working AI client T_T But now I can start getting it NICE! :) I’ll improve UI, add a TON of pages, etc! If you have any default tool suggestions, please do give them.
Hey! Added web search integration, a settings menu, and I’m working on an admin page! I also added text formatting, which was a pain to test with the 0.5B model because of how disobedient it can be I plan to allow the user to change the API route (and key) through a locked admin page. I’m working through security issues with that, and spent a fair amount of time thinking of how to fix that. My current plan is: Generate a secret “key” during setup that unlocks the admin page. When the user visits the page, ask them for the key to submit the changes. If the user hasn’t been authenticated, do not allow them to change settings. The main concern is that they could use devtools to just toggle the variable, hence fetching it directly within the function. I think it’ll work, but I’ll need to do some testing. :) I also added a little icon if the user hasn’t got a Tavily API key for web search functionality. The image currently shows the route editable within the client side. I might go with that and have the same logic behind it on the home page instead of a separate /admin page. In all honesty, I’m kinda overwhelmed. This is the biggest project I’ve ever made, and I feel like I keep accidentally switching features and missing stuff out. Anyway, it’s still really fun, so I’m still going for that Flipper Zero and TRMNL kit! :D Thanks for reading!!!
URL UPDATEEEE! I FINALLY added custom URLs! I mentioned wanting to do that in the last devlog, but now you CAN! I finished the settings page’s content, including adding an entire auth system (painful) and trying to make the UX nicer (also painful), alongside encountering a TON of other bugs and having to fix those. I also made a system to generate passwords randomly to access the admin controls. It OFFICIALLY works with other APIs! Simply enter the route (e.g, https://ollama.com/api ) and your API key and it’ll handle the rest. This is just the main feature I added, but I added a TON of other things too! ANYWAY! Still on the “//TODO:” list: A TON OF STUFF! I plan to add customisable temperature next, then the into/“welcome” screens, then all the scrolling and animation stuff. I think I can do this in time though, which is a great feeling having coded less recently.
The grand settings, backend and UX update of ’26! I added a bunch of backup logic behind the custom route fetching! It’s working great now! I then also had to fix a bunch of things with the guest route, because that was all messed up from the settings stuff. I added a new tool! The AI can now run endChat() to stop the user and delete the chat if they ask/say something harmful. I would like to stop it before it reaches my API provider, but I don’t think HC would appreciate me putting a “slurs.txt” file into my repo When the AI calls the function, it fetches the current chat and simply deletes it. It also notifies the user through a simple error system I’ve made. From there, the user can currently create a new chat. I’m prepared to keep it this way for now, since I don’t want to limit other people from using their own local models for whatever they might want. I’m also considering providing the option to rely solely on the model’s guardrails. I’ve just gotta hope nobody wants to test that feature upon shipping… Speaking of which, I’ve massively changed my mind on how I’ll handle that! It’s NOT going to be hosted on-device for the ship, which I know sounds ironic (and frankly, is, given it’s a local AI client), but I don’t want any users saying “this local 0.5B AI is terrible, it must be a bad project!”, and will thus use Ollama’s official cloud API. Also, if my Pi were to receive multiple prompts at once, it would likely… Die. This would A: suck, because I’d need to restart it frequently and B: prevent any users from rating it while it’s off. If it dies at midnight, I won’t know until I wake up! Ollama’s Cloud API has seemingly good uptime (I couldn’t find any stats online, but it seems decent!) and provides me with much larger models, up to 120B (and likely higher) without having to pay. That brings me to one of the largest things I had to figure out! If a user selects an unavailable model (Kimi K2.6, for instance), the server returns an error (which was surprisingly difficult to actually parse/decode!) and fails. I created a system to return that the prompt failed, then check that the fallback model is different from the current model. If so, it warns the user, then goes to the fallback model and regenerates by itself, automatically. The default fallback is Gemma4:31B, since it’s a free Ollama model. I’m providing my own key, so users don’t need to enter their own. If the fallback is the SAME as the current, it’ll show an unexpected error. I also added auto scrolling, although I couldn’t figure it out, so I debugged using Gemini and managed to fix it. It’s a ChatGPT-style scrolling system! It binds you to the bottom while it’s generating, but if you scroll up, it’ll sever that binding, letting you scroll freely. If you want to continue following the AI’s text stream, simply scroll back down! I am considering adding a button to do so as well, since that could be a very easy feature to add and improve overall UX. Oh right, I also fixed the displaying of when the AI uses tools! I found out that the Vercel AI SDK has a new system for it in the newest version and used that instead. I think I added some more stuff, but I can’t really remember it all right now! Most of the time spent was debugging the things I broke while adding new features. I’ll add anything I remember as a comment on this devlog! Also check the changelog if you wanna see more stuff (and specifics!) :) I acknowledge that this is my longest devlog so far, but I just wanted to be thorough! If you have any questions, I’d love to answer them in the comments!!!
# I FINISHED THE MAIN PAGE’S FEATURES!!! I added a create and remove user function. I also entirely overhauled how they’re stored. Time for the boring dev talk: Before, the DB ref was (‘/LighterWebUI/users/’) and now it’s (‘/LighterWebUI/users/${userId}’), meaning I can modify them as I need without having to first fetch the array, modify it and then re-send it to the db. It’s a TINY bit more efficient, and a lot easier to use. Also, STATISTICS! I took a few measurements, here are the results. <100MB idle (about 95MB) Idling with 10 browser tabs running it took it way up to… 105MB According to my very thorough single Google search, the average idle for OpenWebUI is 400-650MB, making mine 4-6x less RAM usage! I also improved some of the logic surrounding the presets for API endpoints. UX improvements too! I MASSIVELY improved the UI of certain things like the user profile system, which now doesn’t display the currently selected profile as an option (not super significant, but nice). I also added the option to add new users. The chats list now (finally) shows which chat you’re active in. It highlights it in a lighter gray. I also made it so that when you use the “override model selection”, the options disappear so you don’t have an empty element :) I fixed the colours and improved continuity across colourful elements (before I had like 4 different blue colours that were basically identical XD) I feel like the UI is kinda Discord-esque on the user page, which I quite like :D I also added a lil function to close all menus, which streamlines all the others instead of manually closing every one of them. As far as I can remember that’s basically it! OH WAIT NO I added a new settings menu! It’s totally different now. :) I organised some things and split it into two sides, regular and advanced. I’m very close to finishing the project! Probably <10 hours left on it. (I’m gonna fix the weird text spacing soon DW lol) I’ll also add a ‘cancel’ option to the New User menu. As usual, if I remember anything else I’ll add it in the comments :D Thanks for reading guys! <3 Happy hacking!
HUGE devlog! I made a TON of changes, improvements, etc! First, mobile compatibility! The user can now change the system prompt. I added a nice (basic) loading screen . I improved a big database inefficiency with the messaging system. (before I continue, please consider the fact that it was probably 22:30 when I coded this, and I was likely somewhat delirious), the messaging system would take the current array from the DB, add the new messages, and replace the entire file. FOR EVERY MESSAGE. This is heavy on RAM, slow and way more operations than are needed, also getting slower the longer the chat is. Now, when the user sends a message and the AI replies, that pair of messages get sent over and pushed to the chat. 2 messages, not the entire chat! I finally added the Lighter, Web, and UI pages. I had a tag that bound to a routeSelect variable. This routeSelect variable would determine the apiRoute. The fix was to just get rid of the routeSelect and bind the to the apiRoute. (whoops!) OH! Something I totally almost forgot to mention! I made the starting pages! You now follow this flow: Press the PEAK start button, grab your admin code, get prompted to set up Ollama (or the cloud API), then enter your username, then finally, the last page gives you the same glorious button to finish the tutorial/intro, alongside the repo link. I also edited the README a bunch to add instructions for setup. I’m opting to recommend Bun over Node for running it. Also! I tested more for the RAM usage. I found that (after rebooting my Pi) I managed to get <70MB usage at idle. That is INSANE! This will - of course fluctuate with the number of concurrent users/prompts, but is really impressive nonetheless. I also tested in on my Pi Z2W to make sure it worked. Start-to-finish, I found a few missing dependencies in the package.json, which I quickly added. Now, the project can be downloaded and run in just 5 terminal commands! Finally, I ran a code review thingy using VSCode’s AI tool (I made sure to tell it not to generate code!) and it found a few minor bugs, so I fixed the main ones. I also ignored some because they’re incredibly unlikely to happen in general, let alone during the initial ship period. I’d rather not waste time fixing things like “what if the server dies midway through this exact token output and that goes kaboom” or whatever lol. Oh, one last thing, I removed my custom alerts. They were nice, but also very useless… I replaced them with the browser’s own confirmation dialog, since it’s simpler and honestly nicer to use! Also 100% cross-platform. Two little sub-notes, I can’t show all pages of the setup because of the attachment limit on Stardance, so you’ll just have to run the project yourself to see it (hehehe), and secondly, don’t worry, I’ll make sure to change the password shown in that image. I’m gonna delete the database entirely again before I ship! Anyway! Sorry again for the long devlog, I just have so much to say! I also omitted a TON of smaller optimisations/changes again, but they’re generally irrelevant to the user’s experience, and I doubt anyone would want to read a 10,000 word devlog like “and then I added another pixel to the offset… Then removed it… Then added it back…” If I remember something less brain-meltingly boring, I’ll make sure to add it! (P.S, this is me coming back and editing the project because I’d WAY surpassed the character limit!) Thanks so much for reading what’s possibly one of my last devlogs! Happy hacking everyone! I MIGHT see you in the next one!
Polished bugs! This might be my last devlog! I plan to write quite a specific ship note for the users telling them what they may and may not do. Thanks so much to everyone who was here from the start of LighterWebUI! I’ve really enjoyed this project and I’m looking forward to the next one! I’ve got some ideas, so keep an eye out! Anyway, I removed some excess logs, polished some code layout, just made the whole thing a little nicer. I also started hosting at https://lighterwebui.capydesigns.com ! I may have to take it down a couple times. I’ve made 3 profiles with a chat in each of them that the users can use to test the site. Bye guys! <3 Happy hacking!
Fixed final bugs before shipping! I sent the project to some friends to check that everything worked as expected. It didn’t. I fixed what didn’t and now I’m READY TO SHIP!!!! Thank you guys for reading all these devlogs! <3
Ships:
I made LighterWebUI, a lightweight local AI client based on Ollama. It uses as little as 70MB of RAM at idle, over 6x less than OpenWebUI, making it easy to run on a Pi Zero 2 W (512MB RAM). It uses Ollama, a well-known way to run inference locally. The profile system is similar to Neflix. IMPORTANT: For this demo, the AI models are run through an API, not locally, as I’m not able to run large LLMs reliably enough on my hardware. Please don’t use any swearing, slurs or otherwise bad language with the AI. You may create and delete your own chats and users, but please leave the existing ones as they are. The stack: SvelteKit frontend and backend, Ollama for inference, Acebase local (NoSQL) database....
|
1792968568.7638016
|
1793054968.7638016
|
|
52248
|
City Sweep by @gungu | Stardance
|
gungu
|
1
|
43.0
|
838
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T10:11:00Z", "hours": 43.0, "multiplier": 19.27, "payout": 838, "blessing": "neutral", "text": "City Sweep is a game I made in about 2-3 weeks with the sole purpose to test out how well I can make a game in my freshly made 3D renderer and basically game engine. In this game you pick up trash in a small city. You earn money from the picked up trash, which you can spend on more storage, tools, or upgrades for your tools. That’s about it, this is just a tech demo I made for my engine, so it isn’t that ambitious.", "repo": "https://github.com/gungugugungu/City_Sweep", "demo": "https://github.com/gungugugungu/City_Sweep/releases/tag/1.0"}]...
|
[{"post_id": 62800, "ts": "202 [{"post_id": 62800, "ts": "2026-09-06T10:08:17Z", "hours": 0.7683, "text": "DEMO !! And that’s it, the demo is live. I’m going to ship the project and finally relax after a long summer. Unless there are bugs to fix of course, but I sure as hell hope there are none."}, {"post_id": 62502, "ts": "2026-09-05T22:02:26Z", "hours": 0.3247, "text": "SETTINGS and HELP MENU That’s it, I’m done. I made a game in my own renderer, and pretty well too. What I’ve made in the past couple of weeks simply amazes me, I never thought I would make a game in completely my own engine, and look at me now. Yes it’s just a simple tech demo, but it’s still a playable game."}, {"post_id": 62494, "ts": "2026-09-05T21:40:06Z", "hours": 0.6536, "text": "Sound effects Yeah there are sounds for everything now, the game is coming together, it’s sure as hell good for a tech demo."}, {"post_id": 62141, "ts": "2026-09-05T12:11:56Z", "hours": 0.3622, "text": "Music !! I spent the morning making a song that doesn’t feel to repetitive, as the game is like 15 minutes long, and I’m pretty sure this song is basic enough that it that it can be listened to for 15 minutes. I also had to implement SDL_mixer into my game so I can listen play sounds, but that was pretty easy. I wanted the song to have a vibe straight out of High On Life, and I think I’ve got it. I’ve attached a part of it so you can listen to it too."}, {"post_id": 61723, "ts": "2026-09-04T19:19:39Z", "hours": 1.3453, "text": "Everything finally has a proper price! I tried beating the entire game with this, and of course it’s a tech demo so it’s like a 10 minute experience at best, it’s still extremely cool. I’m almost there, just some polishing here and there and I’m done."}, {"post_id": 61586, "ts": "2026-09-04T15:58:33Z", "hours": 1.5619, "text": "I finished the upgrades for the broom and vacuum I did it for the storage too, it was only half done. It’s pretty cool. I also rearranged all the trash in the city, and nearly doubled it too. Now all I need is: Make everything cost money. All the prices are already calculated, I just need to make them work. I need to music, sound effects, and settings to make them work. I need to make a proper help menu, because I still use the placeholder. And then the last thing is some multi-platform playtesting, to make sure everything works as it’s supposed to."}, {"post_id": 60893, "ts": "2026-09-03T15:18:56Z", "hours": 1.7419, "text": "I filled the city with trash I doesn’t look too great yet, I’m definitely going to do something about how it looks, but as of right now I’m: A. Happy that it’s even working B. Surprised that my renderer can handle so many objects at once. This project was basically made so I can see how well my renderer can handle a full game, and it seems like it’s doing quite fine. Now all that remains is to: Finish all the upgrades for all the tools Give everything a price and display it Add some sfx and music Add a loading screen That’s not a bad list, I’m practically done already!😅"}, {"post_id": 60338, "ts": "2026-09-02T16:51:29Z", "hours": 1.1717, "text": "I finished the city!!! It’s neither the prettiest or the biggest, but I can’t commit to a map bigger than this for my first game in this renderer. So, for now, this is enough. It looks kinda cool tho, it might just be me. The point is: this is a basic map, but a great map for picking up trash in, all things considered I’m happy."}, {"post_id": 59635, "ts": "2026-09-01T15:36:29Z", "hours": 1.6458, "text": "Many changes, so here’s a list: I wrote an entire pixelation post-processing effect in the renderer so now the entire thing is cool and pixelated, I love how it looks. I worked a bit more on the map and re-lit the whole thing I drew a new skybox, I think it looks really cool."}, {"post_id": 58822, "ts": "2026-08-31T12:28:05Z", "hours": 2.0081, "text": "I started working on the world for the demo. It’s going to be quite small, I’ve already got 2 of 10 buildings down. I also need to make a new skybox too, but that’ll come later I suppose. I also want to make a pixelating effect that makes it look a bit more stylized, but that’ll come later."}, {"post_id": 58000, "ts": "2026-08-30T10:37:15Z", "hours": 1.9097, "text": "VACUUM TOOL I’m beginning to get to the end of the project. I still need to make the upgrades for the broom and vacuum, an actual map, sounds effects, music or ambience and make a build for windows too. I’m pretty sure that’s it."}, {"post_id": 57268, "ts": "2026-08-29T11:34:02Z", "hours": 4.8394, "text": "TOOL SYSTEM and BROOM I implemented an entire system for switching tools. I didn’t want to make a devlog without an example, so I drew, animated and programmed the broom tool as well. All of it’s settings are changeable, now all I need to do is spend a bit of time with the upgrades and it’s all done. I’m unsure if I talked about money in the last update, but if not then yeah, money exists too now, although it doesn’t have a use quite yet."}, {"post_id": 55742, "ts": "2026-08-27T18:34:04Z", "hours": 4.7506, "text": "BUYING TOOLS and TOOL ANIMATIONS Most my time spent in this update was actually with optimization. I freaked out the the game wasn’t performing well in a rendering situation that I won’t even come close to in the finished product, so I realized it was only a problem if I made it one. After that debacle I implemented buying tools and then I started working on animating the hands. All the other tools will be 2D and animated like this too."}, {"post_id": 54608, "ts": "2026-08-25T17:08:08Z", "hours": 1.1217, "text": "STORAGE UPGRADES minus the trashcan and wheelbarrow, I’m planning to make those actual physical objects you can move around and interact with which will come later on in development, I’ve still got a lot to do before that. But that does technically mean that most of the UI work is done (jippie !!!) , I only need to do the purchasing for other tools now, and the settings menu will come far later in development. I’m almost out of UI hell, almost there"}, {"post_id": 54491, "ts": "2026-08-25T14:45:23Z", "hours": 1.5553, "text": "It took a bit longer then I would have wanted, but I designed the storage upgrade menu. First image is nothing purchased, second image is everything bought."}, {"post_id": 53969, "ts": "2026-08-24T17:57:38Z", "hours": 1.5842, "text": "HAND UPGRADES Upgrade 1 : Pickup speed: shrinks the time between pickups Upgrade 2 : Palm size: the radius in which the player can pick up trash (basically just how much trash you can pick up at once) Upgrade 3 : Hold pick up: (one-time upgrade) allows holding the mouse button for picking up trash instead of having to click individually for each one"}, {"post_id": 53874, "ts": "2026-08-24T16:04:48Z", "hours": 2.2628, "text": "EXPANDABLE UPGRADE SYSTEM This is just the base for it, upgrades are not yet implemented, but thanks to all the work right now, implementing upgrades is easier than ever. The progress bars are how well the upgrades are progressing, and those are driven by a variable as well. Much of the time on this was just spent on figuring out how the UI should look, and to be honest I’m a bit disappointed because it’s not that good, but it’ll be better once it actually functions, because right now you can press the buttons but they don’t do anything that’s visible to the naked eye"}, {"post_id": 53158, "ts": "2026-08-23T16:30:23Z", "hours": 2.3658, "text": "this took way longer than it should have, but BASIC PAUSE MENU AND UI SYSTEM I made a simple button class and made sure they worked, I also had to do a bunch of debugging in the engine and in my raycasting function to iron out a bunch of bugs, I am finding why making your own engine is way more time consuming. I love it tho, it’s way more fun than making this in a big engine."}, {"post_id": 52969, "ts": "2026-08-23T10:50:30Z", "hours": 0.44, "text": "EMPTYING TRASH AND MAX TRASH AMOUNT Yeah pretty self explanatory. I capped the max amount you can hold and added bins on the map that you can empty trash into. Pretty cool."}, {"post_id": 52948, "ts": "2026-08-23T10:15:07Z", "hours": 1.0661, "text": "PHYSICS OPTIMIZATION Yeah the physics were really slow, I needed to work on optimizing it a little. Also, if you look closely you can see that the trash counter text is finally centered. That cool, right? Anyways, the point is that I won’t be having any trouble with performance anytime soon."}, {"post_id": 52630, "ts": "2026-08-22T21:05:36Z", "hours": 1.2803, "text": "TRASH COUNTER Yeah it’s not centered, I’ll fix that, I just want this feature out. I had to rewrite much of the 2D rendering in my renderer for this, so please appreciate it.😅"}, {"post_id": 52582, "ts": "2026-08-22T19:21:29Z", "hours": 0.8422, "text": "I added trash you can pick up It’s loaded from the map file you give it, and automatically identified based on the name. You can also kick it around, that’s it. Now that I finally built out all the necessary systems developing this game is a breeze, I so love the environment I built for myself. Totally worth the 60 hours I spent on it."}, {"post_id": 52538, "ts": "2026-08-22T18:16:57Z", "hours": 3.6858, "text": "I can’t believe I’m saying this, but FPS MOVEMENT AND PHYSICS SYSTEM If you saw any of my older devlogs (you didn’t tho) , you would point out that I already made a physics system and FPS movement. And that’s true, but those systems were copied from my last engine and slightly edited to fit my new renderer (except for PhysicsObject that was basically a full rewrite) , but I didn’t account for the fact that React Physics 3D may have been updated during this time. And of course they added breaking changes, which I had to annoyingly chase down with no information on why anything was happening. I’m not going to go into it because I don’t fully understand what it was freaking out so much about, but the point is that I had to rewrite most of the CharacterController and FPSController, or else the entire physics system would just collapse on itself. Anyways, here’s a video of me walking around on the dev environment."}, {"post_id": 51539, "ts": "2026-08-21T09:32:46Z", "hours": 0.3761, "text": "CHARACTERCONTROLLER AND FPSCONTROLLER CLASS I ported over an old CharacterController class from my old game engine along with the FPSController subclass. I had to do a little rewriting because this project uses a different math library and camera setup, but other than that it was really simple."}, {"post_id": 51521, "ts": "2026-08-21T09:02:32Z", "hours": 3.8094, "text": "RENDERER IMPLEMENTATION AND PHYSICS This project is a follow-up to my last project, which is a renderer using Vulkan. I spent some time figuring out how to use my own renderer as a library, but after a bunch of rewriting I managed to do it. After that I implemented ReactPhysics3D, which is a 3D physics library I used before, and I want to use it in this game too, so I spent some time writing a PhysicsObject class based on the PhysicsComponent from my game engine I built last year. I had to do a bunch of rewriting, and I also had to modify my GLTF loader in my renderer so it also returns vertex dat for convex shape generation, but it’s all done and working. The next step is a CharacterController class and an FPSController subclass, which I can hopefully just rip from my old game engine."}]...
|
Title: City Sweep by @gungu | Stardance
Devlogs:
Title: City Sweep by @gungu | Stardance
Devlogs:
RENDERER IMPLEMENTATION AND PHYSICS This project is a follow-up to my last project, which is a renderer using Vulkan. I spent some time figuring out how to use my own renderer as a library, but after a bunch of rewriting I managed to do it. After that I implemented ReactPhysics3D, which is a 3D physics library I used before, and I want to use it in this game too, so I spent some time writing a PhysicsObject class based on the PhysicsComponent from my game engine I built last year. I had to do a bunch of rewriting, and I also had to modify my GLTF loader in my renderer so it also returns vertex dat for convex shape generation, but it’s all done and working. The next step is a CharacterController class and an FPSController subclass, which I can hopefully just rip from my old game engine.
CHARACTERCONTROLLER AND FPSCONTROLLER CLASS I ported over an old CharacterController class from my old game engine along with the FPSController subclass. I had to do a little rewriting because this project uses a different math library and camera setup, but other than that it was really simple.
I can’t believe I’m saying this, but FPS MOVEMENT AND PHYSICS SYSTEM If you saw any of my older devlogs (you didn’t tho) , you would point out that I already made a physics system and FPS movement. And that’s true, but those systems were copied from my last engine and slightly edited to fit my new renderer (except for PhysicsObject that was basically a full rewrite) , but I didn’t account for the fact that React Physics 3D may have been updated during this time. And of course they added breaking changes, which I had to annoyingly chase down with no information on why anything was happening. I’m not going to go into it because I don’t fully understand what it was freaking out so much about, but the point is that I had to rewrite most of the CharacterController and FPSController, or else the entire physics system would just collapse on itself. Anyways, here’s a video of me walking around on the dev environment.
I added trash you can pick up It’s loaded from the map file you give it, and automatically identified based on the name. You can also kick it around, that’s it. Now that I finally built out all the necessary systems developing this game is a breeze, I so love the environment I built for myself. Totally worth the 60 hours I spent on it.
TRASH COUNTER Yeah it’s not centered, I’ll fix that, I just want this feature out. I had to rewrite much of the 2D rendering in my renderer for this, so please appreciate it.😅
PHYSICS OPTIMIZATION Yeah the physics were really slow, I needed to work on optimizing it a little. Also, if you look closely you can see that the trash counter text is finally centered. That cool, right? Anyways, the point is that I won’t be having any trouble with performance anytime soon.
EMPTYING TRASH AND MAX TRASH AMOUNT Yeah pretty self explanatory. I capped the max amount you can hold and added bins on the map that you can empty trash into. Pretty cool.
this took way longer than it should have, but BASIC PAUSE MENU AND UI SYSTEM I made a simple button class and made sure they worked, I also had to do a bunch of debugging in the engine and in my raycasting function to iron out a bunch of bugs, I am finding why making your own engine is way more time consuming. I love it tho, it’s way more fun than making this in a big engine.
EXPANDABLE UPGRADE SYSTEM This is just the base for it, upgrades are not yet implemented, but thanks to all the work right now, implementing upgrades is easier than ever. The progress bars are how well the upgrades are progressing, and those are driven by a variable as well. Much of the time on this was just spent on figuring out how the UI should look, and to be honest I’m a bit disappointed because it’s not that good, but it’ll be better once it actually functions, because right now you can press the buttons but they don’t do anything that’s visible to the naked eye
HAND UPGRADES Upgrade 1 : Pickup speed: shrinks the time between pickups Upgrade 2 : Palm size: the radius in which the player can pick up trash (basically just how much trash you can pick up at once) Upgrade 3 : Hold pick up: (one-time upgrade) allows holding the mouse button for picking up trash instead of having to click individually for each one
It took a bit longer then I would have wanted, but I designed the storage upgrade menu. First image is nothing purchased, second image is everything bought.
STORAGE UPGRADES minus the trashcan and wheelbarrow, I’m planning to make those actual physical objects you can move around and interact with which will come later on in development, I’ve still got a lot to do before that. But that does technically mean that most of the UI work is done (jippie !!!) , I only need to do the purchasing for other tools now, and the settings menu will come far later in development. I’m almost out of UI hell, almost there
BUYING TOOLS and TOOL ANIMATIONS Most my time spent in this update was actually with optimization. I freaked out the the game wasn’t performing well in a rendering situation that I won’t even come close to in the finished product, so I realized it was only a problem if I made it one. After that debacle I implemented buying tools and then I started working on animating the hands. All the other tools will be 2D and animated like this too.
TOOL SYSTEM and BROOM I implemented an entire system for switching tools. I didn’t want to make a devlog without an example, so I drew, animated and programmed the broom tool as well. All of it’s settings are changeable, now all I need to do is spend a bit of time with the upgrades and it’s all done. I’m unsure if I talked about money in the last update, but if not then yeah, money exists too now, although it doesn’t have a use quite yet.
VACUUM TOOL I’m beginning to get to the end of the project. I still need to make the upgrades for the broom and vacuum, an actual map, sounds effects, music or ambience and make a build for windows too. I’m pretty sure that’s it.
I started working on the world for the demo. It’s going to be quite small, I’ve already got 2 of 10 buildings down. I also need to make a new skybox too, but that’ll come later I suppose. I also want to make a pixelating effect that makes it look a bit more stylized, but that’ll come later.
Many changes, so here’s a list: I wrote an entire pixelation post-processing effect in the renderer so now the entire thing is cool and pixelated, I love how it looks. I worked a bit more on the map and re-lit the whole thing I drew a new skybox, I think it looks really cool.
I finished the city!!! It’s neither the prettiest or the biggest, but I can’t commit to a map bigger than this for my first game in this renderer. So, for now, this is enough. It looks kinda cool tho, it might just be me. The point is: this is a basic map, but a great map for picking up trash in, all things considered I’m happy.
I filled the city with trash I doesn’t look too great yet, I’m definitely going to do something about how it looks, but as of right now I’m: A. Happy that it’s even working B. Surprised that my renderer can handle so many objects at once. This project was basically made so I can see how well my renderer can handle a full game, and it seems like it’s doing quite fine. Now all that remains is to: Finish all the upgrades for all the tools Give everything a price and display it Add some sfx and music Add a loading screen That’s not a bad list, I’m practically done already!😅
I finished the upgrades for the broom and vacuum I did it for the storage too, it was only half done. It’s pretty cool. I also rearranged all the trash in the city, and nearly doubled it too. Now all I need is: Make everything cost money. All the prices are already calculated, I just need to make them work. I need to music, sound effects, and settings to make them work. I need to make a proper help menu, because I still use the placeholder. And then the last thing is some multi-platform playtesting, to make sure everything works as it’s supposed to.
Everything finally has a proper price! I tried beating the entire game with this, and of course it’s a tech demo so it’s like a 10 minute experience at best, it’s still extremely cool. I’m almost there, just some polishing here and there and I’m done.
Music !! I spent the morning making a song that doesn’t feel to repetitive, as the game is like 15 minutes long, and I’m pretty sure this song is basic enough that it that it can be listened to for 15 minutes. I also had to implement SDL_mixer into my game so I can listen play sounds, but that was pretty easy. I wanted the song to have a vibe straight out of High On Life, and I think I’ve got it. I’ve attached a part of it so you can listen to it too.
Sound effects Yeah there are sounds for everything now, the game is coming together, it’s sure as hell good for a tech demo.
SETTINGS and HELP MENU That’s it, I’m done. I made a game in my own renderer, and pretty well too. What I’ve made in the past couple of weeks simply amazes me, I never thought I would make a game in completely my own engine, and look at me now. Yes it’s just a simple tech demo, but it’s still a playable game.
DEMO !! And that’s it, the demo is live. I’m going to ship the project and finally relax after a long summer. Unless there are bugs to fix of course, but I sure as hell hope there are none.
Ships:
City Sweep is a game I made in about 2-3 weeks with the sole purpose to test out how well I can make a game in my freshly made 3D renderer and basically game engine. In this game you pick up trash in a small city. You earn money from the picked up trash, which you can spend on more storage, tools, or upgrades for your tools. That’s about it, this is just a tech demo I made for my engine, so it isn’t that ambitious....
|
1792979554.0138605
|
1793065954.0138605
|
|
37722
|
asteroid hunter by @layerblayerplus | Stardance
|
layerblayerplus
|
1
|
86.0
|
837
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-25T19:43:08Z", "hours": 86.0, "multiplier": 9.79, "payout": 837, "blessing": "neutral", "text": "this is my game asteriod hunter a game where you shoot down asteriods to gain materials to make your own space base this ship is part 1 of the game this is also the first game I ever made (mobile mode doesn’t work right now that will be fixed in ship 2)", "repo": "https://github.com/layerblayerplus-lgtm/asteriod-hunter", "demo": "https://microstudio.io/layerbylayer/astreroidhunter3/YD5AWCT2/"}]...
|
[{"post_id": 73721, "ts": "202 [{"post_id": 73721, "ts": "2026-09-25T19:37:54Z", "hours": 0.7925, "text": "I did some final game testing also mobile mode is not finished yet I will do that in next ship so only test on computors pls"}, {"post_id": 73466, "ts": "2026-09-25T04:57:32Z", "hours": 1.0242, "text": "i fixed some bug and made mobile control more straight forward -game link pls play test and give feedback https://microstudio.io/layerbylayer/astreroidhunter3/YD5AWCT2/"}, {"post_id": 72980, "ts": "2026-09-24T04:49:33Z", "hours": 2.4158, "text": "I worked on adding a health bar effect to the asteriod which will slowly crack after each hit"}, {"post_id": 71952, "ts": "2026-09-21T20:46:18Z", "hours": 1.0011, "text": "I did some final gametesting and added end/win condition- get 10 methane - if you do this then part 1 of the game is over"}, {"post_id": 69793, "ts": "2026-09-17T20:00:50Z", "hours": 0.9675, "text": "i worked on making the github repo for the game"}, {"post_id": 68965, "ts": "2026-09-16T03:57:58Z", "hours": 2.1344, "text": "THE MOBILE UPDATE I made the game work on mobile devices when the game starts you can choose mobile mode if you are on a phone or iPad ect In this mode every input has a button on the screen the buttons I have made so far left (turn turret left) right (turn turret right) space (shoots laser) shop button(goes into shop mode) resume button(goes out of shop mode)"}, {"post_id": 68446, "ts": "2026-09-15T04:16:14Z", "hours": 1.5678, "text": "I decided to fix the bug that caused asteroids that are destroyed from not dropping materials I did that because it was becoming to common Made every hit make sound but made last hit make bigger sound -Made asteroid hitting ground sound better"}, {"post_id": 67856, "ts": "2026-09-14T04:15:04Z", "hours": 1.3503, "text": "RANDOM FIXES I added the repair system for the Sabatier reactor because I forgot to do that previously Resized click boxes for buying upgrades to fit the text better BUGS - Fixed problem where clicking on empty screen in shop mode could cause accidental upgrades purchases Fixed a major bug where asteroids would disappear mid-air sometimes after being shot down. Now it always show a destruction animation, but I kept the part of the bug which made the asteroid have a small chance to not give you any materials as a new feature"}, {"post_id": 67072, "ts": "2026-09-13T03:44:00Z", "hours": 1.8433, "text": "BUGS I fixed A bug where you couldn’t buy upgrades anymore this was caused by a variable for tutorial mode never turning off as I reset the games values before turning tutorial mode off I also fixed many minor bugs caused by the tutorial update I added two new sounds The sound the laser in the carbon burner upgrade The sound of combustion from the Sabatier reactor I also fixed the sound that the side lasers make when charging the megalaserbeem I also made two small sprites the sprites were added to the starting Ui so the (tutorial) and (click here to start) buttons look nice instead of just being some floating text"}, {"post_id": 66360, "ts": "2026-09-12T04:46:07Z", "hours": 2.2178, "text": "TUTORIAL UPDATE (not just this devlog but the previous tutorial devlogs too) tutorial I made a tutorial to show the player how to play the game in an interactive manner the player learns how to: shoot laser beems aim the turret buy upgrades use upgrade buttons fix upgrades manage power usage BUGS (that I remember 😭) I had a bug where I was using a wait command for having text appear after a an amount of time but it was buggy so I used a time variable to track time globaly to stop it from glitching out."}, {"post_id": 65779, "ts": "2026-09-11T04:39:51Z", "hours": 1.1006, "text": "I worked on making the tutorial actually work I mean at least like a quarter sorry for short devlogs"}, {"post_id": 65181, "ts": "2026-09-10T03:56:49Z", "hours": 1.3131, "text": "I was working on making a tutorial for the game to make is it simpler for new players to figure out how to play"}, {"post_id": 64606, "ts": "2026-09-09T03:48:28Z", "hours": 1.4183, "text": "I edited the sound’s code - I added the mega beem explosion sound - I added a sound for the mega beem charging Fixed how sounds were played"}, {"post_id": 64070, "ts": "2026-09-08T06:45:07Z", "hours": 0.3539, "text": "added asteriod explosion sounds"}, {"post_id": 63395, "ts": "2026-09-07T06:37:20Z", "hours": 1.0186, "text": "LET THERE BE SOUND UPDATE 1 I added some sound effects to the game I sourced the sounds from mixkit the sound effects I added so far are: the normal laser beem sound the charged sidelaser beem sound a bubbling sound for the electrolysis system. I also added a cool background soundtrack"}, {"post_id": 62721, "ts": "2026-09-06T06:54:58Z", "hours": 1.5864, "text": "POWER DISPLAY UPDATE I Added a display of how much power you are losing or gaining I coded it to be red when losing power and green when gaining power It helps the player be aware of the amount of power they are using game testing/fixes I did an ~ hour of just playing the game trying to get as far as I could get but did not track the time because I did no coding during the time but I used this knowledge to fix all of these following things SOLAR PANEL I Fixed bug which caused that after first damage caused to solar panel Solar Efficiency never goes back to full capacity as I forgot to make the code assign the value of S,E to full if solar health is full I accidently just assigned it at the beginning of the code but not again. I found this out in game testing when my power kept on running out even at full solar health IRON I Made iron more common as I orignally did not account for the constant need to repair your upgrades. COOLING SYSTEM I made the cooling system take al lot less power. I did this to make it more useful as when I was game testing I found it kinda of pointless to use"}, {"post_id": 62005, "ts": "2026-09-05T06:37:20Z", "hours": 1.7881, "text": "game test update I did Game testing for 30 min fixes I Recentred asteroid sprites I resized asteriod hitboxes Increased starting power sabatier damage system I added the Sabatier reactor to the damage system and made sprites for it’s diffrent damage states I also made attached pipes get destroyed with the sabatier reactor"}, {"post_id": 61344, "ts": "2026-09-04T06:50:17Z", "hours": 1.6422, "text": "no update methane tank and pipe I added the shop text and click sensing for the methane tank and pipe fixes Fixed the restart option from the end screen the bug was caused because the gamend variable was assigned true 1 second after power was below 1 so even after it reset the game, gamend would go back to true"}, {"post_id": 60662, "ts": "2026-09-03T05:07:49Z", "hours": 1.6744, "text": "THE METHANE UPDATE Added methane tank added a methane tank below the sabatier reactor to store the methane from the reaction I Added a pipe to sent methane from sabatier reactor to the methane tank Added gas fill animation to methane tank Fixes I fixed the buttons so they dont work in shop mode I Fixed a glitch where all asteriods were carbonaceous. It turns out I was asigning the asteriod varible constantly to its starting value which is carbonaceous I Made carbon more abundant and Made water less abundant I also added text to help the user know how to activate some upgrades sorry I couldn’t get video today"}, {"post_id": 60045, "ts": "2026-09-02T04:45:08Z", "hours": 1.7844, "text": "THE GAME OVER UPDATE The game over screen if you run out of power and have no solar panel a game over screen pops up. It stops the game and lets you restart fixes I added a active cursor display on the side of the cursor to make the switch between buy mode and fix mode flow better I also made the amount of time you have to hold down the mouse to switch cursor modes half as long video the video shows the new game over animation and the active cursor display"}, {"post_id": 59394, "ts": "2026-09-01T05:49:14Z", "hours": 1.7128, "text": "no update today :( animation for the sabaitier reactor I made an animation of fire/ combustion in the sabiter reactor by making a cycle of four sprites bugs/fixes fixed a bug which would drain half of your power when you just started I also made the normal laser beem take less power video the video shows the new sabaiter animation"}, {"post_id": 58651, "ts": "2026-08-31T04:24:01Z", "hours": 2.1347, "text": "BUTTON UPDATE Made buttons the button works by toggling from off to on if the mouse clicks the button sprite on the upgrade ( the same sprite prevouisly used by the activity indicator ) all upgrades with buttons listed the carbon burner clicking the button toggles laser on and off the sabatier reactor clicking the button toggles heater on and off the electrolysis system clicking the button toggles wire in water storage on and off video the video shows all of the buttons being used to turn on the upgrades to eventually make methane"}, {"post_id": 57910, "ts": "2026-08-30T07:34:23Z", "hours": 1.84, "text": "THE minor CHANGES UPDATE Added on/off sensing to two upgrades one colored indicator on each upgrade shows you if the upgrade is currently active I fixed the start screen now the game starts and the start screen disapears if you click the screen instead of at the end of a preset time Added heater to sabatier heats up on side so sabatier reactor can reach right temp and also just looks cool"}, {"post_id": 57105, "ts": "2026-08-29T06:29:24Z", "hours": 3.4183, "text": "SABATIER REACTOR UPDATE added sabatier reactor I made a sabatier reactor sprite and added the shop text for it I also added two new pipes one to feed hydrogen to the reactor the other to feed co2 to the reactor chemistry time the sabatier recation turns 1X co2 and 2X h2 ⇢ 1X ch4(methane) and 2X h2o I added the code to do the sabatier reaction in game Bugs Fixed side lasers so they would only fire when fully charged and organized the code a bit for them"}, {"post_id": 52121, "ts": "2026-08-22T06:40:26Z", "hours": 2.5372, "text": "THE MEGA BEEM UPDATE I Added A Side Lasers Upgrade the side lasers give the player the ability to shoot larger laser beems that do a lot more damage, one shotting most asteriods. I also animated the side lasers to have an open and closed position aswell as having a copper plate on main turret that visually heats up to show the laser powering up. Fixing Fix Mode (ironic) I made the wrench only be able to fix but not buy and made the normal cursor just buy upgrades but not fix. I also stopped normal cursor from buying new upgrade while the old upgrade is present."}, {"post_id": 51468, "ts": "2026-08-21T06:10:08Z", "hours": 2.5592, "text": "Made elctrolysis and laser not work in shop “mode” I did this so the player couldn’t just stay in the shop and make new resources eg oxygen, co2 ect. Now the player has to do it while defending the base from asteriods Added fix mode now if you hold down your cursor in shop mode it will toggle between the regular cursor and a wrench. When the wrench is active you can click on damaged upgrades to repair them Organized code I organized my code into sections and added notes to make my code more readable Fixed starting text I changed some things in game so I also changed the starting text to inform the player ."}, {"post_id": 50802, "ts": "2026-08-20T06:31:30Z", "hours": 1.3339, "text": "I worked on giving the carbon laser health and a destruction animation I also worked on making co2 tank disappear with carbon laser when it is destroyed I made co2 level 0 if no co2 tank is present I Made nickel more rare as it was to common. bugs Fixed cooling system upgrade as it didn’t work in previous update the problem was that it only worked when game was paused so I just reversed it and now it works. stoped hydrogen tank from getting destroyed when solar panel was destroyed video This Is a video of a fully upgraded base decaying at 16X speed."}, {"post_id": 50126, "ts": "2026-08-19T06:31:21Z", "hours": 2.5678, "text": "I added a co2 tank ,––I added a pipe for sending oxygen to the carbon burner, ––I made materials only show up after you obtain them and also did some debugging.—————————————————————————————––I added a co2 tank aswell as a co2 gas sprite which shows the amount of co2 in the tank.–––––––––––––––––––––––––––––––––––I added a pipe to feed oxygen to the carbon burner so you can actually burn the carbon to make co2———————————————————–I made materials only appear after you obtain them so it looks neater in early game and also kinda just has a discovery vibe—————————————————————————————I did some ‘debuging of bugs” caused by my new updates. one thing I couldn’t figure out yet is why the water storage and copper pipe cooling system didn’t speed up the lasers anymore, I guess i should work on that now. Until we meet again."}, {"post_id": 42263, "ts": "2026-08-06T21:52:47Z", "hours": 2.7675, "text": "I worked on making the ui controlled by the cursor instead of a corsponding key for each item I did this to make it more user friendly and less confusing to use. To do this I had to sense the distance of the mouse from each of the click locations and check if the mouse is within a certain range using a different variable for each upgrade. ––––––––––––––––––––––––––––––––––––––––here is a video showing how the cursor control works"}, {"post_id": 39902, "ts": "2026-08-03T06:11:48Z", "hours": 4.1467, "text": "I worked on fixing the shop ui, added a new upgrade the (carbon burner), added some devtools and fixed some bugs/made sure everthing coded so far was working well.––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– I changed the shop Ui by making each item have a diffirent colours based on the ratio of the materials used to make it I also made it obvious what material each upgrade needed by colour coding.{the next step to improve the UI is to add mouse clicks instead of clicking keys on the keypad}.————————————————————————————————————— I added the carbon burner to the game (im still working on the name) it burns carbon with oxygen to make carbon dioxide which can be used later in game as a component of methane.–––––––––––––––––––––––––––––––––––––––––––––––––I added devtools to do things like changing the type of asteriod, speed of the laser beem,giving you infinte materials, ect{ mynext step is to make it more user friendly by adding a guide of the shortcuts for dev mode}———————————————————————————————––I also fixed some things eg. When the water storage is destroyed the oxygen an hydrogen tanks are destroyed aswell because they are on the waterstorage. Before I fixed they just kinda floated in space ect.–––––––––––––––––––––––––––––––––––––––––––––––––here is a video showcasing the new shop UI and the carbon burner(video starts at 40 seconds)"}, {"post_id": 39126, "ts": "2026-08-01T20:43:28Z", "hours": 3.5433, "text": "I added electrolysis to the game. To do this I added three new upgrades that are needed to proform electrolysis. a wire, an oxygen tank and a hydrogen tank. when you have all three aswell as (water storage) and a power source(solar panel). you can then click H to do electrolysis which turns one water into two hydrogen and one oxygen. which can then be used later in the game as a component of a fuel/power source. I also added an animation of the oxygen and hydrogen tanks filling up with gas as electrolysis is happening.–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––here is video that showcases how a playthrough might go now with the new upgrades."}, {"post_id": 38007, "ts": "2026-07-31T03:57:38Z", "hours": 1.9503, "text": "I worked on fixing some minor bugs such as misspelt variables ect added new materials added gases and moved parts over to make room for new upgrades. aswell as adding a hydrogen and oxygen tank. i will edit later"}, {"post_id": 37402, "ts": "2026-07-30T02:51:02Z", "hours": 0.3169, "text": "I worked on designing two more upgrades"}, {"post_id": 36610, "ts": "2026-07-28T20:35:36Z", "hours": 1.9003, "text": "I worked on cleaning up my code –––––––––––––––––––––––––––––––––––––I removed redundant parts of my code that were not being used or could be simplfied, I added notes so I know what each part of my code does, I fixed some minor bugs ect. I also fixed the power system so when you are idle you use less energy then when you are shooting laser beems. I did this because as I was playtesting I found out that the battery ran out too quickly and there was nothing you could do about it. So now to maintain sufficent power you have to use the laser beem wisely eg not shooting a asteriod that is too far, too large or not the type you need ect.———————————————————————————————————————– here is a sped up video of how a typical play through would go thus far.––––––––––––––––––––––––––––––––––––––––––– PS I am planing to add more room to the side and/or more turrets in newer updates."}, {"post_id": 36121, "ts": "2026-07-28T00:18:31Z", "hours": 2.1339, "text": "I added a screen at the begining of the game explaining the controls. I also added a dev mode shortcut to give infinte material (D&M keys) I also worked on the solar pannel adding a destruction animation as well as fixing some minor bugs caused by it. I also added a time variable that keeps track how many seconds pased from the start of the game I plan to utlize this to cause events or increase difficulty over time.—————————————————————————————This video showcase the starting screen and the Devmode’s infinte materials additonly it shows the solar panel damage effect which I think is the best slow destruction of any upgrade yet."}, {"post_id": 35637, "ts": "2026-07-27T06:09:16Z", "hours": 1.1169, "text": "I worked on making an animation of the power going down as well as as making a new “upgrade” the solar panel it slowly adds to your total power. as you have set amount of power when you start that starts running out. This video showcase the damage system as well as the power system."}, {"post_id": 35349, "ts": "2026-07-26T17:53:50Z", "hours": 1.0839, "text": "I made a power a stat in the game. Without power your turret cant move but you can still shoot. you start with a certin amount of power but can gain power by making things such as solar pannels ect. I have no video of it yet but here is a image of the new design of the turret . I also added sulfur to the game."}, {"post_id": 35007, "ts": "2026-07-26T04:51:16Z", "hours": 2.6678, "text": "I added a damage system to the game. If your upgrades are hit by a asteriod they lose health and if their health goes to low they disapear. I also made it that you can repair the upgrades using your materials to bring their health back. I also worked on the exit menu a bit adding some colours ect."}, {"post_id": 34438, "ts": "2026-07-25T04:46:03Z", "hours": 2.1167, "text": "I made the water storage upgrade also need a copper pipe connected to the turret for it to work. I also made it that when you have water in the water storage you can hold down the up key to speed up your laser beems as without the water as coolant the turret would over heat. code wise I made a clock so I can regulate parts of the game in universal time and not just a delay. here is link to test https://microstudio.io/layerbylayer/astreroidhunter/2MSZECRK/ E for exit mode R for resume left. right arrows to aim. space to shoot. while in exit mode to puchase upgrades click the first letter of its name on your keyboard"}, {"post_id": 34390, "ts": "2026-07-25T02:25:50Z", "hours": 1.0839, "text": "I added copper to the game aswell as animating the water storage to visualy fill up as you harvest more water from asteriods––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ps I acdently recorded an extra half hour and dont know how to remove it"}, {"post_id": 34239, "ts": "2026-07-24T19:32:04Z", "hours": 1.1839, "text": "I made the home screen of the game show the amounts of each material you have as well as making the first upgrade I haven’t made it do anything yet but the idea would be that this upgrade called water storage could be used to cool down the turret which would increase fire rate as well as allowing other upgrades such as stronger laser two barrels ect"}, {"post_id": 33883, "ts": "2026-07-24T04:54:43Z", "hours": 0.5836, "text": "I added 5 materials you can get from asteriod carbon,water,silicon,iron,gold. I set the amounts each asteriod should get though I haven’t made a proper display yet. I also fixed some minor bugs IF you have any suggestions for materials to add feel free to share."}, {"post_id": 33792, "ts": "2026-07-24T00:15:24Z", "hours": 1.3214, "text": "I made diffrent types and sizes of asteriods take diffrent amounts laser beem shots to break. I also locked down the pivot of the turret while the laser is in flight to stop the player from being able to control the laser beem midflight as this will be a upgrade added later in the game"}, {"post_id": 33750, "ts": "2026-07-23T22:14:43Z", "hours": 0.4669, "text": "I fixed the bug with the rare metalic asteriod and added it back to the game. the problem was the first sprite for the animation of the asteriod blowing up was named (metalic_asteriod_rare1) but the program called for (metalic_asteriod_rare)"}, {"post_id": 33661, "ts": "2026-07-23T19:17:23Z", "hours": 3.0133, "text": "I made animations for all the asteriods I also fixed the size of the play area I tried to fix a bug where the rare metalic asteriod animation wouldn’t play but couldn’t figure it out so I removed the rare metalic asteriod I also added a exit button E to stop the meteor shower and a resume button R also here is link to try game thus far https://microstudio.io/layerbylayer/astreroidhunter/2MSZECRK/ (left and right arrow to aim and space to shoot)"}, {"post_id": 33338, "ts": "2026-07-23T04:59:55Z", "hours": 1.2003, "text": "I made the size of the asteriods hit box change to match the visual size. I also made it that when you hit an asteriod your laser beem disapears with the asteriod. I also animated one of the types of asteriod “destruction” animation ps be aware that because I haven’t animated the other asteriod there is lag before they disapear."}, {"post_id": 32790, "ts": "2026-07-22T05:35:21Z", "hours": 0.4672, "text": "The collsions work now :) the laser beem still has trouble hitting larger asteriods even if it looks like it is touching this is because I haven’t made the hit box fit with the size yet."}, {"post_id": 32679, "ts": "2026-07-22T00:06:05Z", "hours": 1.6003, "text": "I worked on collisions got no real progress on the actual code but I am figuring out how to add collisions I also organized my code a bit by putting realted variables into objects."}, {"post_id": 32159, "ts": "2026-07-21T03:56:48Z", "hours": 1.5042, "text": "I made a turret which can angled by the← and → arrow keys and use the space key to shoot a projectile that follows the angle it was shot in . next I think I will work on collisions"}, {"post_id": 32082, "ts": "2026-07-21T00:10:21Z", "hours": 1.0589, "text": "I added randomness to the type of asteriod It can now be one of these four types a carbonaceous asteriod (the most common one), a stony asteriod(uncommon but not rare), metalic asteriod(rare) and metalic asteriod with ore vein (the rarest asteriod thus far) I also added random sizes. Larger asteriods will be harder to stop but give more materials and vice versa.—————————————————————————————————————————–PS {now the asteriod comes from a random direction not just from the middle ◝(ᴖᗜᴖ)◜}"}, {"post_id": 31933, "ts": "2026-07-20T18:52:43Z", "hours": 1.2003, "text": "I started this project by making some sprites for the diffrent types of asteriods and started trying to make some basic code. currently the asteriods follow the same path every time so not very fun:("}]...
|
Title: asteroid hunter by @layerblayerplus | Stard Title: asteroid hunter by @layerblayerplus | Stardance
Devlogs:
I started this project by making some sprites for the diffrent types of asteriods and started trying to make some basic code. currently the asteriods follow the same path every time so not very fun:(
I added randomness to the type of asteriod It can now be one of these four types a carbonaceous asteriod (the most common one), a stony asteriod(uncommon but not rare), metalic asteriod(rare) and metalic asteriod with ore vein (the rarest asteriod thus far) I also added random sizes. Larger asteriods will be harder to stop but give more materials and vice versa.—————————————————————————————————————————–PS {now the asteriod comes from a random direction not just from the middle ◝(ᴖᗜᴖ)◜}
I made a turret which can angled by the← and → arrow keys and use the space key to shoot a projectile that follows the angle it was shot in . next I think I will work on collisions
I worked on collisions got no real progress on the actual code but I am figuring out how to add collisions I also organized my code a bit by putting realted variables into objects.
The collsions work now :) the laser beem still has trouble hitting larger asteriods even if it looks like it is touching this is because I haven’t made the hit box fit with the size yet.
I made the size of the asteriods hit box change to match the visual size. I also made it that when you hit an asteriod your laser beem disapears with the asteriod. I also animated one of the types of asteriod “destruction” animation ps be aware that because I haven’t animated the other asteriod there is lag before they disapear.
I made animations for all the asteriods I also fixed the size of the play area I tried to fix a bug where the rare metalic asteriod animation wouldn’t play but couldn’t figure it out so I removed the rare metalic asteriod I also added a exit button E to stop the meteor shower and a resume button R also here is link to try game thus far https://microstudio.io/layerbylayer/astreroidhunter/2MSZECRK/ (left and right arrow to aim and space to shoot)
I fixed the bug with the rare metalic asteriod and added it back to the game. the problem was the first sprite for the animation of the asteriod blowing up was named (metalic_asteriod_rare1) but the program called for (metalic_asteriod_rare)
I made diffrent types and sizes of asteriods take diffrent amounts laser beem shots to break. I also locked down the pivot of the turret while the laser is in flight to stop the player from being able to control the laser beem midflight as this will be a upgrade added later in the game
I added 5 materials you can get from asteriod carbon,water,silicon,iron,gold. I set the amounts each asteriod should get though I haven’t made a proper display yet. I also fixed some minor bugs IF you have any suggestions for materials to add feel free to share.
I made the home screen of the game show the amounts of each material you have as well as making the first upgrade I haven’t made it do anything yet but the idea would be that this upgrade called water storage could be used to cool down the turret which would increase fire rate as well as allowing other upgrades such as stronger laser two barrels ect
I added copper to the game aswell as animating the water storage to visualy fill up as you harvest more water from asteriods––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ps I acdently recorded an extra half hour and dont know how to remove it
I made the water storage upgrade also need a copper pipe connected to the turret for it to work. I also made it that when you have water in the water storage you can hold down the up key to speed up your laser beems as without the water as coolant the turret would over heat. code wise I made a clock so I can regulate parts of the game in universal time and not just a delay. here is link to test https://microstudio.io/layerbylayer/astreroidhunter/2MSZECRK/ E for exit mode R for resume left. right arrows to aim. space to shoot. while in exit mode to puchase upgrades click the first letter of its name on your keyboard
I added a damage system to the game. If your upgrades are hit by a asteriod they lose health and if their health goes to low they disapear. I also made it that you can repair the upgrades using your materials to bring their health back. I also worked on the exit menu a bit adding some colours ect.
I made a power a stat in the game. Without power your turret cant move but you can still shoot. you start with a certin amount of power but can gain power by making things such as solar pannels ect. I have no video of it yet but here is a image of the new design of the turret . I also added sulfur to the game.
I worked on making an animation of the power going down as well as as making a new “upgrade” the solar panel it slowly adds to your total power. as you have set amount of power when you start that starts running out. This video showcase the damage system as well as the power system.
I added a screen at the begining of the game explaining the controls. I also added a dev mode shortcut to give infinte material (D&M keys) I also worked on the solar pannel adding a destruction animation as well as fixing some minor bugs caused by it. I also added a time variable that keeps track how many seconds pased from the start of the game I plan to utlize this to cause events or increase difficulty over time.—————————————————————————————This video showcase the starting screen and the Devmode’s infinte materials additonly it shows the solar panel damage effect which I think is the best slow destruction of any upgrade yet.
I worked on cleaning up my code –––––––––––––––––––––––––––––––––––––I removed redundant parts of my code that were not being used or could be simplfied, I added notes so I know what each part of my code does, I fixed some minor bugs ect. I also fixed the power system so when you are idle you use less energy then when you are shooting laser beems. I did this because as I was playtesting I found out that the battery ran out too quickly and there was nothing you could do about it. So now to maintain sufficent power you have to use the laser beem wisely eg not shooting a asteriod that is too far, too large or not the type you need ect.———————————————————————————————————————– here is a sped up video of how a typical play through would go thus far.––––––––––––––––––––––––––––––––––––––––––– PS I am planing to add more room to the side and/or more turrets in newer updates.
I worked on designing two more upgrades
I worked on fixing some minor bugs such as misspelt variables ect added new materials added gases and moved parts over to make room for new upgrades. aswell as adding a hydrogen and oxygen tank. i will edit later
I added electrolysis to the game. To do this I added three new upgrades that are needed to proform electrolysis. a wire, an oxygen tank and a hydrogen tank. when you have all three aswell as (water storage) and a power source(solar panel). you can then click H to do electrolysis which turns one water into two hydrogen and one oxygen. which can then be used later in the game as a component of a fuel/power source. I also added an animation of the oxygen and hydrogen tanks filling up with gas as electrolysis is happening.–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––here is video that showcases how a playthrough might go now with the new upgrades.
I worked on fixing the shop ui, added a new upgrade the (carbon burner), added some devtools and fixed some bugs/made sure everthing coded so far was working well.––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– I changed the shop Ui by making each item have a diffirent colours based on the ratio of the materials used to make it I also made it obvious what material each upgrade needed by colour coding.{the next step to improve the UI is to add mouse clicks instead of clicking keys on the keypad}.————————————————————————————————————— I added the carbon burner to the game (im still working on the name) it burns carbon with oxygen to make carbon dioxide which can be used later in game as a component of methane.–––––––––––––––––––––––––––––––––––––––––––––––––I added devtools to do things like changing the type of asteriod, speed of the laser beem,giving you infinte materials, ect{ mynext step is to make it more user friendly by adding a guide of the shortcuts for dev mode}———————————————————————————————––I also fixed some things eg. When the water storage is destroyed the oxygen an hydrogen tanks are destroyed aswell because they are on the waterstorage. Before I fixed they just kinda floated in space ect.–––––––––––––––––––––––––––––––––––––––––––––––––here is a video showcasing the new shop UI and the carbon burner(video starts at 40 seconds)
I worked on making the ui controlled by the cursor instead of a corsponding key for each item I did this to make it more user friendly and less confusing to use. To do this I had to sense the distance of the mouse from each of the click locations and check if the mouse is within a certain range using a different variable for each upgrade. ––––––––––––––––––––––––––––––––––––––––here is a video showing how the cursor control works
I added a co2 tank ,––I added a pipe for sending oxygen to the carbon burner, ––I made materials only show up after you obtain them and also did some debugging.—————————————————————————————––I added a co2 tank aswell as a co2 gas sprite which shows the amount of co2 in the tank.–––––––––––––––––––––––––––––––––––I added a pipe to feed oxygen to the carbon burner so you can actually burn the carbon to make co2———————————————————–I made materials only appear after you obtain them so it looks neater in early game and also kinda just has a discovery vibe—————————————————————————————I did some ‘debuging of bugs” caused by my new updates. one thing I couldn’t figure out yet is why the water storage and copper pipe cooling system didn’t speed up the lasers anymore, I guess i should work on that now. Until we meet again.
I worked on giving the carbon laser health and a destruction animation I also worked on making co2 tank disappear with carbon laser when it is destroyed I made co2 level 0 if no co2 tank is present I Made nickel more rare as it was to common. bugs Fixed cooling system upgrade as it didn’t work in previous update the problem was that it only worked when game was paused so I just reversed it and now it works. stoped hydrogen tank from getting destroyed when solar panel was destroyed video This Is a video of a fully upgraded base decaying at 16X speed.
Made elctrolysis and laser not work in shop “mode” I did this so the player couldn’t just stay in the shop and make new resources eg oxygen, co2 ect. Now the player has to do it while defending the base from asteriods Added fix mode now if you hold down your cursor in shop mode it will toggle between the regular cursor and a wrench. When the wrench is active you can click on damaged upgrades to repair them Organized code I organized my code into sections and added notes to make my code more readable Fixed starting text I changed some things in game so I also changed the starting text to inform the player .
THE MEGA BEEM UPDATE I Added A Side Lasers Upgrade the side lasers give the player the ability to shoot larger laser beems that do a lot more damage, one shotting most asteriods. I also animated the side lasers to have an open and closed position aswell as having a copper plate on main turret that visually heats up to show the laser powering up. Fixing Fix Mode (ironic) I made the wrench only be able to fix but not buy and made the normal cursor just buy upgrades but not fix. I also stopped normal cursor from buying new upgrade while the old upgrade is present.
SABATIER REACTOR UPDATE added sabatier reactor I made a sabatier reactor sprite and added the shop text for it I also added two new pipes one to feed hydrogen to the reactor the other to feed co2 to the reactor chemistry time the sabatier recation turns 1X co2 and 2X h2 ⇢ 1X ch4(methane) and 2X h2o I added the code to do the sabatier reaction in game Bugs Fixed side lasers so they would only fire when fully charged and organized the code a bit for them
THE minor CHANGES UPDATE Added on/off sensing to two upgrades one colored indicator on each upgrade shows you if the upgrade is currently active I fixed the start screen now the game starts and the start screen disapears if you click the screen instead of at the end of a preset time Added heater to sabatier heats up on side so sabatier reactor can reach right temp and also just looks cool
BUTTON UPDATE Made buttons the button works by toggling from off to on if the mouse clicks the button sprite on the upgrade ( the same sprite prevouisly used by the activity indicator ) all upgrades with buttons listed the carbon burner clicking the button toggles laser on and off the sabatier reactor clicking the button toggles heater on and off the electrolysis system clicking the button toggles wire in water storage on and off video the video shows all of the buttons being used to turn on the upgrades to eventually make methane
no update today :( animation for the sabaitier reactor I made an animation of fire/ combustion in the sabiter reactor by making a cycle of four sprites bugs/fixes fixed a bug which would drain half of your power when you just started I also made the normal laser beem take less power video the video shows the new sabaiter animation
THE GAME OVER UPDATE The game over screen if you run out of power and have no solar panel a game over screen pops up. It stops the game and lets you restart fixes I added a active cursor display on the side of the cursor to make the switch between buy mode and fix mode flow better I also made the amount of time you have to hold down the mouse to switch cursor modes half as long video the video shows the new game over animation and the active cursor display
THE METHANE UPDATE Added methane tank added a methane tank below the sabatier reactor to store the methane from the reaction I Added a pipe to sent methane from sabatier reactor to the methane tank Added gas fill animation to methane tank Fixes I fixed the buttons so they dont work in shop mode I Fixed a glitch where all asteriods were carbonaceous. It turns out I was asigning the asteriod varible constantly to its starting value which is carbonaceous I Made carbon more abundant and Made water less abundant I also added text to help the user know how to activate some upgrades sorry I couldn’t get video today
no update methane tank and pipe I added the shop text and click sensing for the methane tank and pipe fixes Fixed the restart option from the end screen the bug was caused because the gamend variable was assigned true 1 second after power was below 1 so even after it reset the game, gamend would go back to true
game test update I did Game testing for 30 min fixes I Recentred asteroid sprites I resized asteriod hitboxes Increased starting power sabatier damage system I added the Sabatier reactor to the damage system and made sprites for it’s diffrent damage states I also made attached pipes get destroyed with the sabatier reactor
POWER DISPLAY UPDATE I Added a display of how much power you are losing or gaining I coded it to be red when losing power and green when gaining power It helps the player be aware of the amount of power they are using game testing/fixes I did an ~ hour of just playing the game trying to get as far as I could get but did not track the time because I did no coding during the time but I used this knowledge to fix all of these following things SOLAR PANEL I Fixed bug which caused that after first damage caused to solar panel Solar Efficiency never goes back to full capacity as I forgot to make the code assign the value of S,E to full if solar health is full I accidently just assigned it at the beginning of the code but not again. I found this out in game testing when my power kept on running out even at full solar health IRON I Made iron more common as I orignally did not account for the constant need to repair your upgrades. COOLING SYSTEM I made the cooling system take al lot less power. I did this to make it more useful as when I was game testing I found it kinda of pointless to use
LET THERE BE SOUND UPDATE 1 I added some sound effects to the game I sourced the sounds from mixkit the sound effects I added so far are: the normal laser beem sound the charged sidelaser beem sound a bubbling sound for the electrolysis system. I also added a cool background soundtrack
added asteriod explosion sounds
I edited the sound’s code - I added the mega beem explosion sound - I added a sound for the mega beem charging Fixed how sounds were played
I was working on making a tutorial for the game to make is it simpler for new players to figure out how to play
I worked on making the tutorial actually work I mean at least like a quarter sorry for short devlogs
TUTORIAL UPDATE (not just this devlog but the previous tutorial devlogs too) tutorial I made a tutorial to show the player how to play the game in an interactive manner the player learns how to: shoot laser beems aim the turret buy upgrades use upgrade buttons fix upgrades manage power usage BUGS (that I remember 😭) I had a bug where I was using a wait command for having text appear after a an amount of time but it was buggy so I used a time variable to track time globaly to stop it from glitching out.
BUGS I fixed A bug where you couldn’t buy upgrades anymore this was caused by a variable for tutorial mode never turning off as I reset the games values before turning tutorial mode off I also fixed many minor bugs caused by the tutorial update I added two new sounds The sound the laser in the carbon burner upgrade The sound of combustion from the Sabatier reactor I also fixed the sound that the side lasers make when charging the megalaserbeem I also made two small sprites the sprites were added to the starting Ui so the (tutorial) and (click here to start) buttons look nice instead of just being some floating text
RANDOM FIXES I added the repair system for the Sabatier reactor because I forgot to do that previously Resized click boxes for buying upgrades to fit the text better BUGS - Fixed problem where clicking on empty screen in shop mode could cause accidental upgrades purchases Fixed a major bug where asteroids would disappear mid-air sometimes after being shot down. Now it always show a destruction animation, but I kept the part of the bug which made the asteroid have a small chance to not give you any materials as a new feature
I decided to fix the bug that caused asteroids that are destroyed from not dropping materials I did that because it was becoming to common Made every hit make sound but made last hit make bigger sound -Made asteroid hitting ground sound better
THE MOBILE UPDATE I made the game work on mobile devices when the game starts you can choose mobile mode if you are on a phone or iPad ect In this mode every input has a button on the screen the buttons I have made so far left (turn turret left) right (turn turret right) space (shoots laser) shop button(goes into shop mode) resume button(goes out of shop mode)
i worked on making the github repo for the game
I did some final gametesting and added end/win condition- get 10 methane - if you do this then part 1 of the game is over
I worked on adding a health bar effect to the asteriod which will slowly crack after each hit
i fixed some bug and made mobile control more straight forward -game link pls play test and give feedback https://microstudio.io/layerbylayer/astreroidhunter3/YD5AWCT2/
I did some final game testing also mobile mode is not finished yet I will do that in next ship so only test on computors pls
Ships:
this is my game asteriod hunter a game where you shoot down asteriods to gain materials to make your own space base this ship is part 1 of the game this is also the first game I ever made (mobile mode doesn’t work right now that will be fixed in ship 2)...
|
1792853460.1062741
|
1792939860.1062741
|
|
46496
|
Light by @Eclipse | Stardance
|
Eclipse
|
1
|
52.27
|
835
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-30T19:28:48Z", "hours": 48.0, "multiplier": 16.49, "payout": 835, "blessing": "neutral", "text": "Shipvlog — Light 🌙 What did you make? Everyone makes a personal website showing what they’ve built, accomplished, or are currently working on. . I wanted to make something that asks a slightly “different” question: “What is happening inside this mind?” . That’s basically what Light is. . Alongside the usual portfolio stuff, there’s a Lab containing unfinished ideas, abandoned projects, current obsessions, and questions I’m still thinking about… Basically,, everything a normal portfolio politely hides…🗿 . What was challenging? Lwk Everything. 😭 . I spent an absolutely unreasonable amount of time designing tiny details, animations, typography, spacing, colors, transitions, and things that probably took five seconds to notice and five hours to make…. . I wanted the homepage title to feel more like Light was being written into existence ,,, the glitch transition into the Lab to feel intentional, and every page to have its own atmosphere… (did I ever mention the fact that Light was my nickname all along?) . The three main pages use red, blue, and warm white. Because, almost everything we see can be represented through RGB,, so I treated them as three different sides of me that mix together into Idhant (w a little twist lol) Underneath them all, it’s still the same guy. Hence the same nav too :) . The geometric lines in About are meant to represent me too: chaotic, interconnected, and hopefully still beautiful (🥀) . And yes, making all of this responsive was painful…. Excruciatingly painful. 😭💔 . What am I proud of? Mostly the fact that something I had imagined for weeks actually exists now…LIVE… . I deliberately left parts of it open to interpretation too. The boy holding the bouquet and book could be waiting for someone while reading a book to kill time, could have been given the bouquet while being told by someone “you are my light” , could be heartbroken, or could mean literally anything…. I liked not explaining everything… Things to try Move your cursor through the snow (don’t ask me why 😭, it’s fun) Watch the text glitch Click Light on the homepage and enter the Lab Explore the Lab sections Click the 02 / ABOUT on the homepage and enter the About page Notice the different page colors and text-selection colors Try the site on both desktop and mobile . Before testing . The site is best experienced on a Chromium-based browser . . Also, disable any browser dark-mode extension , otherwise it may decide my carefully chosen colors are merely suggestions. 💔 . Light’s Live here: https://alchemic-eclipse.github.io/light/ . And,,,, after way too many hours, Light is finally live. 🫠 . Not perfect. . Just mine ❤️🩹 Thank you for reading it through..!! ❤️🩹", "repo": "https://github.com/Alchemic-Eclipse/light", "demo": "https://alchemic-eclipse.github.io/light/"}]...
|
[{"post_id": 81847, "ts": "202 [{"post_id": 81847, "ts": "2026-10-22T18:28:24Z", "hours": 4.2711, "text": "Welcome back And here I am, just after writing Aporia’s devlog, writing this for Light (the site, not me obv 🗿) . But I’ll keep it short, While I was on break, I kept updating information here n there on the site and made some minor changes. . From now on, I’ll be working properly on the site, making it better every day..!! . And that’s all for today lol…!! See ya tomorrow! . P.S. Idk what to add in attachment, so why not a meme again? (it isn’t even related to web dev, but I found it so funny, had to add it 💔)"}, {"post_id": 75684, "ts": "2026-09-30T19:06:50Z", "hours": 0.9286, "text": "Final Devlog of Light yep, as the title suggests, this is it. I have somehow, despite being an INTP, been able to complete the project before the deadline ( or perhaps I should say, exactly at the deadline 😭) . But anyways, Completed the Readme Fixed minor issues (console errors) Fixed responsiveness issues Added a favicon And yeah, that’s all ig…?? It has been an honor tbh, I’ve learnt soooo many things while making this site… and revised soooo many concepts…. I was lwk a beginner in web-dev before this, and now, well a bit better I suppose? 😭 . Either way,,, It was fun…. :) Thank you for everything..!!! ❤️🩹 . P.S. Idk what to add as screenshot for this one, so just added the About page of my site 🗿🤷🏻♂️"}, {"post_id": 75640, "ts": "2026-09-30T17:01:59Z", "hours": 6.8375, "text": "Day-9 Light I think I’ve officially reached the stage where this project is consuming me 😭💔 . I couldn’t really write devlogs that often ‘cause I’ve been just TOO busy trying to make this thing look pretty 😭 . And unfortunately, having a creative perfectionist brain while also trying to keep everything minimalist is an awful combination. I kept wanting to add stuff, removing it because it was “too much”, adding it again, moving things around, staring at it for 20 min, and realizing that it looked 4% worse than before 🗿 . Anyways… . I’ve made some pretty major progress today. . The biggest one: Light is basically complete. Added all the content, finished the different sections, and finally got the whole thing to feel like an actual part of the site instead of an empty page with suspicious amounts of negative space 🥀 . I also finally added and polished the About page, w a bunch of minor design fixes along the way. . Completed: Unfinished Graveyard Now Curiosities And I also added snow interaction , which is probably one of those completely unnecessary things that somehow took way longer than it had any business to… ;-; . The funny part is, that the actual feature list doesn’t even look THAT insane. (compared to my mental health rn 💔) . But every single little design decision took FOREVER, because I wanted the site to feel minimal, without feeling empty.. Interesting, without feeling overloaded.. And slightly uncanny without just looking like I discovered CSS animations yesterday 🤷🏻♂️ . At this point, I’m lwk happy w how it’s coming together tho. . The site has WAYY more personality now. . The next goal is basically finishing whatever tiny things are still bothering me, and then SHIP EM before I lose the remaining fragments of my sanity 😭 . And nvm,, that’s it for today ;-;;; . Ig this could be the last devlog? Or nvm, I still have to write the Readme, GG, that should be the last one lol.. Whatever,,,, Good Evening 🦋"}, {"post_id": 74879, "ts": "2026-09-28T14:20:34Z", "hours": 4.4908, "text": "Day-8 Light At this point, I think Im lwk about to crash out because of how long this is taking me 😭💔 (plus a bad headache) . I’ve added a new page to my site, called Light’s Lab, something way more interesting than the home page fs. . Also Added a cool glitchy effect as a transition, to give it that uncanny feel… And DAMN it took me soo longg to learn how to do ts 😭😭 . After this, I’m done with adding animations/transitions 🥀 Aghh my head hurts so badd 😭 . I think the next goal for me is to design the Lab page properly… then think of adding something new… . Initially I planned to complete it by Sept 30… but let’s see if I can 🫠 . Anyways, that’s it for todayyy Dobroye utroo!!!"}, {"post_id": 73589, "ts": "2026-09-25T13:08:56Z", "hours": 5.705, "text": "Day-7 Light It appears as if somoene’s genuinely addicted to this project 🗿 . Because my productivity is PEAK right now 🕯️ . I’ve lwk changed the entire base design of Light, simply because I felt like it 😭 (I wanted it to look better) . Here’s a list: Added Basic fade-in animation when site is loaded Added a leaning hero-figure and changed typography (Some fonts, sizes, colors, etc) Added a glitch effect for the Hero sub-text Added Snow, as it smhow fits the theme beautifully There were sm things that people suggested me to add, but I was like: Nah ;-; For eg: Arrow key navigation . But someone discovering that R jumps to Archive would be mildly amusing for approximately 4 seconds… So I scrapped that idea 🤷🏻♂️ . The snowflakes one was particularly interesting… because…. to animate the snowflakes I used: new position = old position + velocity Which is basically a tiny Euler integration step 🗿 So, my snowflakes, accidentaly became a physics simulation… 🥀 For some reason, I really cannot escape ts 💔 . And then the tiny intricacies like giving them close but random velocities for realism (yeah, close, because if not: that would look like the snowflakes had all received contradictory weather reports 😭) . and once they leave the screen, make them re-enter from the right and top (70:30 :: Top:right % of snowflakes generated), which is what turns this into a continuous wind field rather than 80 flakes having a one-way death march 🗿 . And yeah, that’s basically it, for today…!! and as usual,, Ohayoo!!! (Good Morningg, not Ohio 😭💔)"}, {"post_id": 72825, "ts": "2026-09-23T20:23:53Z", "hours": 3.5156, "text": "Day-6 Light HOLYYY Productivity!! 🔥 Added SOOOOO many things today . Here’s the list: Polished the Archive section Added “About signature” and href links Added content to Contact section and footer- Polished them too Made the site responsive Added selection option (selecting a text) Soo, when selecting a text, instead of the default blue color, it’d use another color that respects the color scheme of the site… . With that, Phase-1 of the Site is over… We have a site that’s essentially complete in itself start to end.And so, Phase-2 of Light has started, which is mostly all about JavaScript and additional sections/features. (Lwk Exciting as hell) . Also, I decided to add “AUTONOMY · TRANSCENDENCE · ERUDITION” as the “About Signature”, because these are the 3 things that I value THE MOST… Especially Autonomy…………. Is it a bit grandiose ? Yeah… but my site’s called Light (Alchemic Eclipse) , so we’re not exactly filing taxes here 🤷🏻♂️🥀 . But anyways,, that’s it for todayy!! Have a beautiful morning 🍀"}, {"post_id": 72239, "ts": "2026-09-22T14:52:12Z", "hours": 2.65, "text": "Day-5 Light Added content to About section Added a few projects to Archive section Added basic design to Archive section. Next goal: Polish Archive’s design Add content to Contact section and design that too got big plans ahead..!!"}, {"post_id": 71391, "ts": "2026-09-20T18:52:49Z", "hours": 4.5592, "text": "Day-4 Light Guess who’s back? . Seems someone’s back from his hiatus 🗿 . yep, so now that’s Aporia’s done and dusted, I realized I need to also complete my site, so here I am… . I’ve merged Gravitas into Light because it’s apparently Aporia turned out to be too big, but small enough that I could actually finish it before Light comes knocking with a deadline shaped baseball bat 🤷🏻♂️ . I’ll add a special section for it on my site, as a mystery or a puzzle of some kind..? perhaps… . And in the meantime, while I was working on Aporia, I tried testing/changing some bits and features of Light, at once almost changed the entire style upside down… but turns out none of them could beat my original vision… So with some bits of tweaks, I added the About page a month ago… I know I’m a bit early here,, but whatever 😭 . And that’s it for this devlog 🦋 Bbyeee..!! . P.S. Idk what screenshot to add here as I’ve just restarted working on it so no major updates yet,, let me just add a page of my physics notes which would anyway be on my site 🐈"}, {"post_id": 51095, "ts": "2026-08-20T16:20:04Z", "hours": 2.9694, "text": "Day-3 Light At this rate, it looks like the project is gonna take forever 😭🤷🏻♂️ Added an about section Designed it properly Made subtle changes to give the site a premium look. . The next part is simply add content to Archive and contact section, but that should relatively take less time, because most of the time today was spent on designing.. . (yes, btw,,,, if you still haven’t noticed, I’m a kinda perfectionist when it comes to designs 🗿) . And that’s all for today, for Light 🫡 . Thank you for reading through..!! 🌙 . P.S. Due to time constraints, I’m thinking of working on Light and Gravitas on alternate days, so that I get more time for studies… 🐈 Hopefully I can finish them soon..!! I really do enjoy working on both of em 🙃"}, {"post_id": 48873, "ts": "2026-08-17T13:16:35Z", "hours": 15.4381, "text": "Day-2: Light Completed the basic structure. Added some basic design while making it a little responsive. And trust me, you “don’t” wanna know how much time I spent just changing and trying new designs/fonts/etc… ☠️ . Tomorrow, I’ll likely complete the other sections while adding some more cool features ig… . and that’s all for today 🙃 . P.S. Feel free to suggest some better designs if it can make it look better lol…!!"}, {"post_id": 45127, "ts": "2026-08-11T12:47:00Z", "hours": 0.5603, "text": "The Beginning . I’ll be building a personal site of mine, describing things I am working on, and my on going works, especially in the realm of academia and others… . I am done with setting up and connecting everything, the next steps include building a basic structure of the website while learning web dev (yeah, I’m a beginner lol)… . And then adding the content.. Then making it look bearable to human eyes 🗿 (aka make it aesthetic) . So that’s mostly all for today..!! Thank you :) . P.S. It seems it won’t let me post till I add a pic, so let me add a pic that I’d anyways add on my website in future {aka, my equations 🗿}"}]...
|
Title: Light by @Eclipse | Stardance
Devlogs:
The Title: Light by @Eclipse | Stardance
Devlogs:
The Beginning . I’ll be building a personal site of mine, describing things I am working on, and my on going works, especially in the realm of academia and others… . I am done with setting up and connecting everything, the next steps include building a basic structure of the website while learning web dev (yeah, I’m a beginner lol)… . And then adding the content.. Then making it look bearable to human eyes 🗿 (aka make it aesthetic) . So that’s mostly all for today..!! Thank you :) . P.S. It seems it won’t let me post till I add a pic, so let me add a pic that I’d anyways add on my website in future {aka, my equations 🗿}
Day-2: Light Completed the basic structure. Added some basic design while making it a little responsive. And trust me, you “don’t” wanna know how much time I spent just changing and trying new designs/fonts/etc… ☠️ . Tomorrow, I’ll likely complete the other sections while adding some more cool features ig… . and that’s all for today 🙃 . P.S. Feel free to suggest some better designs if it can make it look better lol…!!
Day-3 Light At this rate, it looks like the project is gonna take forever 😭🤷🏻♂️ Added an about section Designed it properly Made subtle changes to give the site a premium look. . The next part is simply add content to Archive and contact section, but that should relatively take less time, because most of the time today was spent on designing.. . (yes, btw,,,, if you still haven’t noticed, I’m a kinda perfectionist when it comes to designs 🗿) . And that’s all for today, for Light 🫡 . Thank you for reading through..!! 🌙 . P.S. Due to time constraints, I’m thinking of working on Light and Gravitas on alternate days, so that I get more time for studies… 🐈 Hopefully I can finish them soon..!! I really do enjoy working on both of em 🙃
Day-4 Light Guess who’s back? . Seems someone’s back from his hiatus 🗿 . yep, so now that’s Aporia’s done and dusted, I realized I need to also complete my site, so here I am… . I’ve merged Gravitas into Light because it’s apparently Aporia turned out to be too big, but small enough that I could actually finish it before Light comes knocking with a deadline shaped baseball bat 🤷🏻♂️ . I’ll add a special section for it on my site, as a mystery or a puzzle of some kind..? perhaps… . And in the meantime, while I was working on Aporia, I tried testing/changing some bits and features of Light, at once almost changed the entire style upside down… but turns out none of them could beat my original vision… So with some bits of tweaks, I added the About page a month ago… I know I’m a bit early here,, but whatever 😭 . And that’s it for this devlog 🦋 Bbyeee..!! . P.S. Idk what screenshot to add here as I’ve just restarted working on it so no major updates yet,, let me just add a page of my physics notes which would anyway be on my site 🐈
Day-5 Light Added content to About section Added a few projects to Archive section Added basic design to Archive section. Next goal: Polish Archive’s design Add content to Contact section and design that too got big plans ahead..!!
Day-6 Light HOLYYY Productivity!! 🔥 Added SOOOOO many things today . Here’s the list: Polished the Archive section Added “About signature” and href links Added content to Contact section and footer- Polished them too Made the site responsive Added selection option (selecting a text) Soo, when selecting a text, instead of the default blue color, it’d use another color that respects the color scheme of the site… . With that, Phase-1 of the Site is over… We have a site that’s essentially complete in itself start to end.And so, Phase-2 of Light has started, which is mostly all about JavaScript and additional sections/features. (Lwk Exciting as hell) . Also, I decided to add “AUTONOMY · TRANSCENDENCE · ERUDITION” as the “About Signature”, because these are the 3 things that I value THE MOST… Especially Autonomy…………. Is it a bit grandiose ? Yeah… but my site’s called Light (Alchemic Eclipse) , so we’re not exactly filing taxes here 🤷🏻♂️🥀 . But anyways,, that’s it for todayy!! Have a beautiful morning 🍀
Day-7 Light It appears as if somoene’s genuinely addicted to this project 🗿 . Because my productivity is PEAK right now 🕯️ . I’ve lwk changed the entire base design of Light, simply because I felt like it 😭 (I wanted it to look better) . Here’s a list: Added Basic fade-in animation when site is loaded Added a leaning hero-figure and changed typography (Some fonts, sizes, colors, etc) Added a glitch effect for the Hero sub-text Added Snow, as it smhow fits the theme beautifully There were sm things that people suggested me to add, but I was like: Nah ;-; For eg: Arrow key navigation . But someone discovering that R jumps to Archive would be mildly amusing for approximately 4 seconds… So I scrapped that idea 🤷🏻♂️ . The snowflakes one was particularly interesting… because…. to animate the snowflakes I used: new position = old position + velocity Which is basically a tiny Euler integration step 🗿 So, my snowflakes, accidentaly became a physics simulation… 🥀 For some reason, I really cannot escape ts 💔 . And then the tiny intricacies like giving them close but random velocities for realism (yeah, close, because if not: that would look like the snowflakes had all received contradictory weather reports 😭) . and once they leave the screen, make them re-enter from the right and top (70:30 :: Top:right % of snowflakes generated), which is what turns this into a continuous wind field rather than 80 flakes having a one-way death march 🗿 . And yeah, that’s basically it, for today…!! and as usual,, Ohayoo!!! (Good Morningg, not Ohio 😭💔)
Day-8 Light At this point, I think Im lwk about to crash out because of how long this is taking me 😭💔 (plus a bad headache) . I’ve added a new page to my site, called Light’s Lab, something way more interesting than the home page fs. . Also Added a cool glitchy effect as a transition, to give it that uncanny feel… And DAMN it took me soo longg to learn how to do ts 😭😭 . After this, I’m done with adding animations/transitions 🥀 Aghh my head hurts so badd 😭 . I think the next goal for me is to design the Lab page properly… then think of adding something new… . Initially I planned to complete it by Sept 30… but let’s see if I can 🫠 . Anyways, that’s it for todayyy Dobroye utroo!!!
Day-9 Light I think I’ve officially reached the stage where this project is consuming me 😭💔 . I couldn’t really write devlogs that often ‘cause I’ve been just TOO busy trying to make this thing look pretty 😭 . And unfortunately, having a creative perfectionist brain while also trying to keep everything minimalist is an awful combination. I kept wanting to add stuff, removing it because it was “too much”, adding it again, moving things around, staring at it for 20 min, and realizing that it looked 4% worse than before 🗿 . Anyways… . I’ve made some pretty major progress today. . The biggest one: Light is basically complete. Added all the content, finished the different sections, and finally got the whole thing to feel like an actual part of the site instead of an empty page with suspicious amounts of negative space 🥀 . I also finally added and polished the About page, w a bunch of minor design fixes along the way. . Completed: Unfinished Graveyard Now Curiosities And I also added snow interaction , which is probably one of those completely unnecessary things that somehow took way longer than it had any business to… ;-; . The funny part is, that the actual feature list doesn’t even look THAT insane. (compared to my mental health rn 💔) . But every single little design decision took FOREVER, because I wanted the site to feel minimal, without feeling empty.. Interesting, without feeling overloaded.. And slightly uncanny without just looking like I discovered CSS animations yesterday 🤷🏻♂️ . At this point, I’m lwk happy w how it’s coming together tho. . The site has WAYY more personality now. . The next goal is basically finishing whatever tiny things are still bothering me, and then SHIP EM before I lose the remaining fragments of my sanity 😭 . And nvm,, that’s it for today ;-;;; . Ig this could be the last devlog? Or nvm, I still have to write the Readme, GG, that should be the last one lol.. Whatever,,,, Good Evening 🦋
Final Devlog of Light yep, as the title suggests, this is it. I have somehow, despite being an INTP, been able to complete the project before the deadline ( or perhaps I should say, exactly at the deadline 😭) . But anyways, Completed the Readme Fixed minor issues (console errors) Fixed responsiveness issues Added a favicon And yeah, that’s all ig…?? It has been an honor tbh, I’ve learnt soooo many things while making this site… and revised soooo many concepts…. I was lwk a beginner in web-dev before this, and now, well a bit better I suppose? 😭 . Either way,,, It was fun…. :) Thank you for everything..!!! ❤️🩹 . P.S. Idk what to add as screenshot for this one, so just added the About page of my site 🗿🤷🏻♂️
Welcome back And here I am, just after writing Aporia’s devlog, writing this for Light (the site, not me obv 🗿) . But I’ll keep it short, While I was on break, I kept updating information here n there on the site and made some minor changes. . From now on, I’ll be working properly on the site, making it better every day..!! . And that’s all for today lol…!! See ya tomorrow! . P.S. Idk what to add in attachment, so why not a meme again? (it isn’t even related to web dev, but I found it so funny, had to add it 💔)
Ships:
Shipvlog — Light 🌙 What did you make? Everyone makes a personal website showing what they’ve built, accomplished, or are currently working on. . I wanted to make something that asks a slightly “different” question: “What is happening inside this mind?” . That’s basically what Light is. . Alongside the usual portfolio stuff, there’s a Lab containing unfinished ideas, abandoned projects, current obsessions, and questions I’m still thinking about… Basically,, everything a normal portfolio politely hides…🗿 . What was challenging? Lwk Everything. 😭 . I spent an absolutely unreasonable amount of time designing tiny details, animations, typography, spacing, colors, transitions, and things that probably took five seconds to notice and five hours to make…. . I wanted the homepage title to feel more like Light was being written into existence ,,, the glitch transition into the Lab to feel intentional, and every page to have its own atmosphere… (did I ever mention the fact that Light was my nickname all along?) . The three main pages use red, blue, and warm white. Because, almost everything we see can be represented through RGB,, so I treated them as three different sides of me that mix together into Idhant (w a little twist lol) Underneath them all, it’s still the same guy. Hence the same nav too :) . The geometric lines in About are meant to represent me too: chaotic, interconnected, and hopefully still beautiful (🥀) . And yes, making all of this responsive was painful…. Excruciatingly painful. 😭💔 . What am I proud of? Mostly the fact that something I had imagined for weeks actually exists now…LIVE… . I deliberately left parts of it open to interpretation too. The boy holding the bouquet and book could be waiting for someone while reading a book to kill time, could have been given the bouquet while being told by someone “you are my light” , could be heartbroken, or could mean literally anything…. I liked not explaining everything… Things to try Move your cursor through the snow (don’t ask me why 😭, it’s fun) Watch the text glitch Click Light on the homepage and enter the Lab Explore the Lab sections Click the 02 / ABOUT on the homepage and enter the About page Notice the different page colors and text-selection colors Try the site on both desktop and mobile . Before testing . The site is best experienced on a Chromium-based browser . . Also, disable any browser dark-mode extension , otherwise it may decide my carefully chosen colors are merely suggestions. 💔 . Light’s Live here: https://alchemic-eclipse.github.io/light/ . And,,,, after way too many hours, Light is finally live. 🫠 . Not perfect. . Just mine ❤️🩹 Thank you for reading it through..!! ❤️🩹...
|
1792853721.6950161
|
1792940121.6950161
|
|
32375
|
Music Syncer by @techs-sus | Stardance
|
techs-sus
|
1
|
64.46
|
833
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-02T23:54:31Z", "hours": 45.0, "multiplier": 18.46, "payout": 833, "blessing": "neutral", "text": "I made a Kotlin CLI program that synchronizes a YouTube Music playlist to a SQLite database locally. I made this because I want to be able to play my music freely even when YouTube Music or my network is down. The main challenge was finding a library that would let me get the data I needed (artist, thumbnail, audio tracks, etc.) from YouTube Music, and I even had to rewrite the entire program in Kotlin from Rust because the library I was using couldn’t download audio properly.", "repo": "https://github.com/techs-sus/music-syncer", "demo": "https://github.com/techs-sus/music-syncer/releases"}]...
|
[{"post_id": 78225, "ts": "202 [{"post_id": 78225, "ts": "2026-10-10T00:53:04Z", "hours": 1.1172, "text": "I fixed another Nix graalvm issue. Some mp4s wouldn’t be tagged properly, so I fixed that."}, {"post_id": 74678, "ts": "2026-09-27T23:46:37Z", "hours": 0.6, "text": "I fixed the binary in Nix, it works now, also updated the asciinema cast it was missing some reachability metadata and required LD_LIBRARY_PATH to be set to the jdk’s libraries."}, {"post_id": 74664, "ts": "2026-09-27T22:23:13Z", "hours": 0.7189, "text": "Tiny change, I switched from scrimage to ImageIO. It works much better and should be less error prone as scrimage would vendor in webp binaries, which is not cross platform."}, {"post_id": 74533, "ts": "2026-09-27T16:04:10Z", "hours": 2.7108, "text": "Squashed more bugs, updated NativeMetadataMain.kt so that reachability metadata includes image i/o. This makes the Graal native image actually work when having to convert from webp to png. This will be a non issue when I can find an image library that is written in pure Kotlin. The last shipwright to review my project tried syncing a mix, which is infinite. So I added an error for that and made sure no one will run into unexplainable errors again."}, {"post_id": 71298, "ts": "2026-09-20T16:18:29Z", "hours": 1.1267, "text": "I added GraalVM native image support. The actual implementation is boring but this makes the program’s cold starts faster and makes it feel more native. Not sure if this helps with battery life, but it might. This definitely helps with memory usage, the program only uses ~100mb syncing my 400 track playlist. I restricted the native image to Nix because the releases are supposed to always work on all platforms."}, {"post_id": 71243, "ts": "2026-09-20T14:51:47Z", "hours": 0.3306, "text": "I finally silenced those pesky slf4j and unsafe memory access warnings. Just added the slf4j-nop library and a JVM flag."}, {"post_id": 70926, "ts": "2026-09-20T01:43:13Z", "hours": 2.5042, "text": "I redid the cli structure to group all the playlist commands under one common playlist parent command. I also implemented a clean up command to help people save disk space because SSDs are expensive right now. For example: music-syncer-kotlin -p path init -> music-syncer-kotlin playlist -p path init This was a necessary step so I could implement the clean up command, which deletes audio and thumbnail files that are not used by any playlists in a container. A container is the folder holding all the databases. Here’s everything I did, stolen from my commit message: feature: add clean-container command - refactor: add hasTrackInDatabase to the Playlist class - refactor: move knownFinal{Audio,Thumbnail}Extension out of class and make it const - refactor: nest all playlist commands as one subcommand - refactor: make cli help text more helpful - refactor: always print something to the console to let the user know that everything went well - refactor: do not use PlaylistHolder, use currentContext.registerJvmCloseable to clean up playlist - fix: when thumbnail is newly created, retag should silently fail"}, {"post_id": 64580, "ts": "2026-09-09T02:50:12Z", "hours": 2.7675, "text": "I watched a Kotlin talk about Flows and I was inspired to rewrite my program using them. This made my program more efficient, idiomatic and also helped me fix the annoying progress bar refresh bug (multiple old bars shown). It also let me actually properly sort by position across all 4 status types (added, removed, moved, errored). I also made the downloading functions use one underlying common function to clean up the codebase. I also removed sqlx4k because it wasn’t actually parallel and was causing issues with init. Here, in the screenshot I am showing the new elegant code for the logging of track statuses. It used to be many individual async calls, but flows allow me to group them up and sort them."}, {"post_id": 64390, "ts": "2026-09-08T18:35:35Z", "hours": 0.81, "text": "I now detect invalid playlist ids and print out an error telling the user how to get a valid playlist id."}, {"post_id": 63814, "ts": "2026-09-07T19:41:24Z", "hours": 0.5508, "text": "I made position diffing aware of insertions and deletions, so that output is less bloated with useless move info such as 0->1, 1->2, etc. I also did some optimization by using database transactions wherever possible. I can’t do it in the main sync body because it is bounded to its own coroutine scope."}, {"post_id": 63724, "ts": "2026-09-07T17:36:43Z", "hours": 1.365, "text": "I added duration tracking to the database. The M3U generation now doesn’t hardcode 0 as the duration."}, {"post_id": 61576, "ts": "2026-09-04T15:35:33Z", "hours": 0.3597, "text": "I made it so that thumbnails should now be even higher quality, it does take more storage but the difference is quite noticeable on some music players. Also small hotfix, if you accidentally pass in another unrelated SQLite database it will now not run migrations on it before erroring."}, {"post_id": 61148, "ts": "2026-09-03T22:22:37Z", "hours": 0.6486, "text": "To help users migrate from the old Rust implementation, I made it so that a sync will re-tag the track if the track’s thumbnail does not exist on disk. The Kotlin implementation always gets higher resolution images, so this allows for much higher resolution track covers."}, {"post_id": 61131, "ts": "2026-09-03T21:37:19Z", "hours": 1.3225, "text": "In my attempt to make the streamExtractor lazily loaded, I caused a deadlock. I have fixed the deadlock and this fixed version is at v0.2.7. The fix was pretty simple, it was to not use CoroutineStart.Lazy because a lazy coroutine may never run, meaning the parent coroutineScope will hang forever. I also switched the backend driver to sqlx4k as it provides a connection pool but more importantly makes the suspend code flow cleaner. I wont switch to Exposed (the official SQL driver) because it doesn’t have the same parallel capabilities as sql4k."}, {"post_id": 60984, "ts": "2026-09-03T17:48:56Z", "hours": 1.7597, "text": "I forgot to add error handling from the original Rust project, so I did that. I also fixed the parallelism by using a Semaphore as limitedParallelism still wakes all the coroutines. Using a Semaphore only allows N permits to be handed out at once. This means that only N tasks would be running at once, given that each task takes one permit. I set N to 8 as that should not cause any throttling but still allow multiple tracks to be downloaded at once. I also implemented better lazy fetching than the old Rust implementation. Now only pieces that must be fetched are fetched, and if they don’t need to be fetched, a StreamExtractor is never fetched. This causes a huge speed up, allowing my ~400 track playlist to be incrementally synced in 8 seconds. Other notable quality of life features (taken from the git log): - refactor: make output use terminal.theme.* - refactor: make output more human readable by using title instead of youtube_playlist_id - fix: reorder items in subtasks so that the text doesn't move everything else"}, {"post_id": 60623, "ts": "2026-09-03T02:30:33Z", "hours": 0.7667, "text": "Shortly after I shipped, I found a better library for progress bars and displaying to the terminal in general. I also made sure that the exists locally log line would be printed out in order. I decided to use it, and I am really happy with the result!!!!"}, {"post_id": 60558, "ts": "2026-09-02T23:48:06Z", "hours": 1.2247, "text": "Preparing to ship the project, so here’s a list of everything I did: added back an edited readme added back the apache 2.0 license fixed the github actions auto release recorded an asciinema cast and put it in the readme made the cli say music-player-kotlin instead of cli …other small changes to make sure its ready for release"}, {"post_id": 60487, "ts": "2026-09-02T21:02:16Z", "hours": 0.7539, "text": "added a progress bar and actually actually fixed the deadlock this time"}, {"post_id": 60469, "ts": "2026-09-02T20:12:04Z", "hours": 0.4286, "text": "I fixed position tracking, so that moved tracks will output a line telling you they have moved. I attempted to fix a deadlock that was happening, and fixed some database queries targetting the wrong table."}, {"post_id": 60450, "ts": "2026-09-02T19:45:23Z", "hours": 1.5511, "text": "I cleaned up the code, bounded parallelism to 8 with limitedParallelism, and tried to optimize the detection of moved tracks"}, {"post_id": 60347, "ts": "2026-09-02T17:08:19Z", "hours": 4.1644, "text": "the rewrite is almost finished thumbnails are now way higher in resolution because we can now get youtube’s webp images. unfortunately jaudiotagger does not support webp images, so i force all images from youtube to turn into a lossless png kotlin is pretty cool, especially coroutines, its like lua’s coroutines but actually backed by a thread pool i need to limit the concurrency but otherwise this is great! very fast even on a debug build what’s left: currently unlimited concurrency, this will definitely crash the jvm on large playlists better terminal output with colors and a diff generator use a temporary table in sqlite to make diffing more memory efficient packaging and ci should be fine since “java runs anywhere”"}, {"post_id": 59975, "ts": "2026-09-02T01:52:56Z", "hours": 4.3806, "text": "i begun porting the project to kotlin while i love rust i also want this project to actually work rustypipe will always be a bit behind youtube’s protections so i decided to just rewrite the whole thing in kotlin so i can use newpipeextractor directly what’s left: tag audio with jaudiotagger use clikt to make a nice command line interface (maybe) add unit tests there is no actual screenshot because i didn’t actually implement the commands yet"}, {"post_id": 51282, "ts": "2026-08-20T20:29:43Z", "hours": 4.3222, "text": "i got rustypipe-botguard working with Nix i still can’t figure out why some videos don’t work sometimes but other videos work all the time i updated the test suite to reflect that"}, {"post_id": 50736, "ts": "2026-08-20T02:44:23Z", "hours": 1.0564, "text": "i finally did the ci pipeline for windows, linux, and macos i wrote a readme but i’ll need to add an asciinema cast to it to make it look better and allow me to ship the project"}, {"post_id": 50703, "ts": "2026-08-20T01:04:16Z", "hours": 1.5878, "text": "thumbnails were really low quality, this change allows for higher quality thumbnails. one example would be 60x60 -> 120x120 still low quality but a higher low quality. other notable changes: unification of all track identifiers into one refetch thumbnails if not existing & do not fetch thumbnail if its {id}.{png,jpeg,jpg} exist m3a -> m3u, it is more compatible with music players (this happened in 4c337f491dd949fdc3f1f5d51363b0342defaac1 on aug 15, i forgot to log it) next thing to do is packaging . this is my worst nightmare so the whole program will be statically linked"}, {"post_id": 50425, "ts": "2026-08-19T16:22:13Z", "hours": 0.5014, "text": "progress bars with tracing-indicatif might have to increase tick rate, it flickers a bunch on release mode"}, {"post_id": 47821, "ts": "2026-08-16T01:05:27Z", "hours": 0.4694, "text": "tracks that are only available as m4a’s can now be downloaded ffmpeg won’t be spawned to remux screenshot is forcefully required so heres the main fix"}, {"post_id": 47801, "ts": "2026-08-16T00:26:22Z", "hours": 3.2114, "text": "/tmp is now only hardcoded in the singular unit test errors are more friendly, m3a generation has been refitted to be m3u generation so that more music players are supported, fixed a bug where songs would be downloaded with audio/{id}..m4a which is an invalid path, and updated the user agent to be a firefox extended support release so i dont have to update it more downloads were broken by the rustypipe switch, so i fixed them by forcing the AndroidVr client. some tracks are weird and still don’t work, but most do"}, {"post_id": 45281, "ts": "2026-08-11T17:10:58Z", "hours": 0.3233, "text": "i fixed the nix build this should allow me to cross compile to windows (maybe with mingw, and after i don’t hardcode /tmp), mac, and linux"}, {"post_id": 45263, "ts": "2026-08-11T16:43:26Z", "hours": 1.645, "text": "i switched from kopuz-server to rustypipe it is much faster and more accurate which may allow me to bypass youtube music’s weird quirk of some tracks only being playable directly on youtube the playlist is now synced in 3.2 seconds, and not 5"}, {"post_id": 44961, "ts": "2026-08-11T02:10:07Z", "hours": 0.8017, "text": "i made tracks that cause errors to show up in the diff form"}, {"post_id": 44936, "ts": "2026-08-11T01:05:27Z", "hours": 1.8956, "text": "i added the base diffing feature i wanted i still need to make it filter out tracks that are unfetchable that are currently marked as “removed” and i need to rename the project to music-syncer"}, {"post_id": 43011, "ts": "2026-08-08T01:30:07Z", "hours": 0.4114, "text": "i added configurable concurrency it doesn’t seem to improve download or sync times but i think now it has to be stdio performance thats holding it back, logging is not free"}, {"post_id": 42935, "ts": "2026-08-07T22:27:17Z", "hours": 0.2881, "text": "i shrunk the number of crates being built from 700-800 to 500 by stripping my fork of kopuz-server of all bloat it depended on lots of crates and most importantly it doesn’t rely on rusqlite 0.31 and sqlx 0.8 the screenshot shows how much smaller the build is now"}, {"post_id": 42401, "ts": "2026-08-07T02:51:53Z", "hours": 0.7711, "text": "parallelism!!! i was able to download my whole playlist in ~30 seconds (with unbounded parallelism that lagged the rest of my laptop) next steps: maybe change parallelism from hardcoded 16 to num_cpus::get() or ask tokio how many threads we have use ratatui and display the status of each song being downloaded, since we’re using tracing we can use https://github.com/gin66/tui-logger use color_eyre https://ratatui.rs/recipes/apps/color-eyre/ maybe add login, some songs are age restricted (even if they have no lyrics) definitely add configurable parallelism; i think this software would rip through playlists if it had more sqlite connections and more threads not really any screenshots to show anymore……. but i can try and show how many tracks were downloaded successfully and how long it took the screenshot is bounded by 16 futures at a time, which is probably too small and the sqlite connection pool is capped at 5. 2 minutes is a lot. but on a good note incremental syncs only take ~5.7 seconds"}, {"post_id": 42363, "ts": "2026-08-07T01:25:53Z", "hours": 2.9161, "text": "i switched to sqlx and the code is much cleaner but now i have to hack around how sqlx builds offline with SQLX_OFFLINE=true cargo build but i only have to do it once then its cached using sqlx is much more developer friendly and it taught me that a connection pool can harm the application because temp tables are only kept per connection not per entire database since nothing really changed but the code became cleaner i will show another music player that can display the generated playlist"}, {"post_id": 42258, "ts": "2026-08-06T21:41:07Z", "hours": 2.185, "text": "audio metadata for this dev log you will see 2 hours for one command spawn and a small refactor. but what you have not seen was 2 hours fighting ffmpeg-next, ffmpeg-sys-next, bindgen, libclang all that to say i decided to not link against ffmpeg, and i am much happier with the result audio players get the title, artist, even cover art all from the track’s metadata unfortunately, youtube music does not attach metadata to the tracks we scrape, so we need to attach metadata attaching metadata to audio files is actually pretty simple thanks to the lofty crate unless the file is a webm. webm does not have any sort of audio metadata (?) so you will need to transcode webm into another audio format to put metadata into the file. i decided to just pick m4a because everything supports it. lastly i did a small refactor because main.rs was pushing 600 lines of code, and i plan to: separate the db functions from the Playlist struct make the code truly asynchronous, which involves moving to sqlx pipeline everything the end result is pretty metadata in Gapless (or any other modern music player)"}, {"post_id": 42119, "ts": "2026-08-06T18:10:03Z", "hours": 0.3578, "text": "I switched from directly printing to stderr to using tracing. The m3a playlist generation works quite well, as you can see in the screenshot."}, {"post_id": 42100, "ts": "2026-08-06T17:43:20Z", "hours": 5.0975, "text": "after a lot of thinking i decided to not make a music player and instead decided to instead make a really fast youtube music playlist syncer the upstream library i was gonna use anyway does not expose YoutubeMusicClient, so i forked it and added a patch so i can use that everything was working until i realized downloads were really slow and the fix was to add a Range header with a value of “bytes=0-” and now downloads are very fast. i suspect that this makes my code look like a real browser to youtube/google which lets me get the normal download speed. i used rusqlite (sqlite rust wrapper) and each playlist is its own database file. i might switch to sqlx because it has compile time sql checking and has a very good async sqlite wrapper everything should work except m3a playlist generation, there are no good m3a playlist libraries so i hand coded it myself and have not tested it yet; UPDATE: it works i tested it now i plan on adding thumbnail deduplication, songs from the same album can have the same thumbnail"}, {"post_id": 24905, "ts": "2026-07-08T19:23:54Z", "hours": 0.8556, "text": "i added support for loading custom tinted-theming themes such as from https://github.com/tinted-theming/schemes the screenshot is using ayu_dark: https://github.com/tinted-theming/schemes/blob/spec-0.11/base16/ayu-dark.yaml"}, {"post_id": 24854, "ts": "2026-07-08T18:14:47Z", "hours": 1.3539, "text": "i added the base code for base16 themes and the skeleton sidebar (no buttons or actual pages yet) i plan for the sidebar to do something with navigation so like a playlists button and because i want the music player to be minimal it will probably become floating and will probably become a small menu icon that when clicked will expose the Playlists button i will probably make some sort of abstract button wrapper since i still need to make the actual full screen player ui which will at least have 3 icons (pause/play, backwards, forwards) the slow resizing issue was fixed by using gpui’s git repository and not crates.io the next steps are to add custom theme support which means i will need to also locate a config folder; i plan on using https://codeberg.org/dirs/directories-rs ; colors will probably be in yaml so that you can copy and paste tinted-theming schemes from https://github.com/tinted-theming/schemes other config settings will likely be in toml oh also i will need to set up automatic binary releases for amd64 and arm64 on linux and macos with github actions, which should be easier because it already uses Nix"}, {"post_id": 24798, "ts": "2026-07-08T16:20:27Z", "hours": 1.6167, "text": "gpui at least with the crates.io version has very slow resizing so i might switch to iced i have some ideas for how data will be stored: sqlite for database engine via sqlx or pure rust library (depends on which one allows to decode into structs) migrations can be done as a map to sql string (version -> appropriate migration) each playlist can be its own database & can store its own downloaded songs because fetching from db is faster: https://sqlite.org/fasterthanfs.html settings (theme) can be done in toml i have also disabled bounds on the gpui window, so thats the screenshot"}, {"post_id": 24396, "ts": "2026-07-07T22:28:27Z", "hours": 0.9344, "text": "I set up the flake at first using rust-overlay but realized crane is probably better so I asked opencode to refactor it to use crane The default gpui example now runs"}]...
|
Title: Music Syncer by @techs-sus | Stardance
Dev Title: Music Syncer by @techs-sus | Stardance
Devlogs:
I set up the flake at first using rust-overlay but realized crane is probably better so I asked opencode to refactor it to use crane The default gpui example now runs
gpui at least with the crates.io version has very slow resizing so i might switch to iced i have some ideas for how data will be stored: sqlite for database engine via sqlx or pure rust library (depends on which one allows to decode into structs) migrations can be done as a map to sql string (version -> appropriate migration) each playlist can be its own database & can store its own downloaded songs because fetching from db is faster: https://sqlite.org/fasterthanfs.html settings (theme) can be done in toml i have also disabled bounds on the gpui window, so thats the screenshot
i added the base code for base16 themes and the skeleton sidebar (no buttons or actual pages yet) i plan for the sidebar to do something with navigation so like a playlists button and because i want the music player to be minimal it will probably become floating and will probably become a small menu icon that when clicked will expose the Playlists button i will probably make some sort of abstract button wrapper since i still need to make the actual full screen player ui which will at least have 3 icons (pause/play, backwards, forwards) the slow resizing issue was fixed by using gpui’s git repository and not crates.io the next steps are to add custom theme support which means i will need to also locate a config folder; i plan on using https://codeberg.org/dirs/directories-rs ; colors will probably be in yaml so that you can copy and paste tinted-theming schemes from https://github.com/tinted-theming/schemes other config settings will likely be in toml oh also i will need to set up automatic binary releases for amd64 and arm64 on linux and macos with github actions, which should be easier because it already uses Nix
i added support for loading custom tinted-theming themes such as from https://github.com/tinted-theming/schemes the screenshot is using ayu_dark: https://github.com/tinted-theming/schemes/blob/spec-0.11/base16/ayu-dark.yaml
after a lot of thinking i decided to not make a music player and instead decided to instead make a really fast youtube music playlist syncer the upstream library i was gonna use anyway does not expose YoutubeMusicClient, so i forked it and added a patch so i can use that everything was working until i realized downloads were really slow and the fix was to add a Range header with a value of “bytes=0-” and now downloads are very fast. i suspect that this makes my code look like a real browser to youtube/google which lets me get the normal download speed. i used rusqlite (sqlite rust wrapper) and each playlist is its own database file. i might switch to sqlx because it has compile time sql checking and has a very good async sqlite wrapper everything should work except m3a playlist generation, there are no good m3a playlist libraries so i hand coded it myself and have not tested it yet; UPDATE: it works i tested it now i plan on adding thumbnail deduplication, songs from the same album can have the same thumbnail
I switched from directly printing to stderr to using tracing. The m3a playlist generation works quite well, as you can see in the screenshot.
audio metadata for this dev log you will see 2 hours for one command spawn and a small refactor. but what you have not seen was 2 hours fighting ffmpeg-next, ffmpeg-sys-next, bindgen, libclang all that to say i decided to not link against ffmpeg, and i am much happier with the result audio players get the title, artist, even cover art all from the track’s metadata unfortunately, youtube music does not attach metadata to the tracks we scrape, so we need to attach metadata attaching metadata to audio files is actually pretty simple thanks to the lofty crate unless the file is a webm. webm does not have any sort of audio metadata (?) so you will need to transcode webm into another audio format to put metadata into the file. i decided to just pick m4a because everything supports it. lastly i did a small refactor because main.rs was pushing 600 lines of code, and i plan to: separate the db functions from the Playlist struct make the code truly asynchronous, which involves moving to sqlx pipeline everything the end result is pretty metadata in Gapless (or any other modern music player)
i switched to sqlx and the code is much cleaner but now i have to hack around how sqlx builds offline with SQLX_OFFLINE=true cargo build but i only have to do it once then its cached using sqlx is much more developer friendly and it taught me that a connection pool can harm the application because temp tables are only kept per connection not per entire database since nothing really changed but the code became cleaner i will show another music player that can display the generated playlist
parallelism!!! i was able to download my whole playlist in ~30 seconds (with unbounded parallelism that lagged the rest of my laptop) next steps: maybe change parallelism from hardcoded 16 to num_cpus::get() or ask tokio how many threads we have use ratatui and display the status of each song being downloaded, since we’re using tracing we can use https://github.com/gin66/tui-logger use color_eyre https://ratatui.rs/recipes/apps/color-eyre/ maybe add login, some songs are age restricted (even if they have no lyrics) definitely add configurable parallelism; i think this software would rip through playlists if it had more sqlite connections and more threads not really any screenshots to show anymore……. but i can try and show how many tracks were downloaded successfully and how long it took the screenshot is bounded by 16 futures at a time, which is probably too small and the sqlite connection pool is capped at 5. 2 minutes is a lot. but on a good note incremental syncs only take ~5.7 seconds
i shrunk the number of crates being built from 700-800 to 500 by stripping my fork of kopuz-server of all bloat it depended on lots of crates and most importantly it doesn’t rely on rusqlite 0.31 and sqlx 0.8 the screenshot shows how much smaller the build is now
i added configurable concurrency it doesn’t seem to improve download or sync times but i think now it has to be stdio performance thats holding it back, logging is not free
i added the base diffing feature i wanted i still need to make it filter out tracks that are unfetchable that are currently marked as “removed” and i need to rename the project to music-syncer
i made tracks that cause errors to show up in the diff form
i switched from kopuz-server to rustypipe it is much faster and more accurate which may allow me to bypass youtube music’s weird quirk of some tracks only being playable directly on youtube the playlist is now synced in 3.2 seconds, and not 5
i fixed the nix build this should allow me to cross compile to windows (maybe with mingw, and after i don’t hardcode /tmp), mac, and linux
/tmp is now only hardcoded in the singular unit test errors are more friendly, m3a generation has been refitted to be m3u generation so that more music players are supported, fixed a bug where songs would be downloaded with audio/{id}..m4a which is an invalid path, and updated the user agent to be a firefox extended support release so i dont have to update it more downloads were broken by the rustypipe switch, so i fixed them by forcing the AndroidVr client. some tracks are weird and still don’t work, but most do
tracks that are only available as m4a’s can now be downloaded ffmpeg won’t be spawned to remux screenshot is forcefully required so heres the main fix
progress bars with tracing-indicatif might have to increase tick rate, it flickers a bunch on release mode
thumbnails were really low quality, this change allows for higher quality thumbnails. one example would be 60x60 -> 120x120 still low quality but a higher low quality. other notable changes: unification of all track identifiers into one refetch thumbnails if not existing & do not fetch thumbnail if its {id}.{png,jpeg,jpg} exist m3a -> m3u, it is more compatible with music players (this happened in 4c337f491dd949fdc3f1f5d51363b0342defaac1 on aug 15, i forgot to log it) next thing to do is packaging . this is my worst nightmare so the whole program will be statically linked
i finally did the ci pipeline for windows, linux, and macos i wrote a readme but i’ll need to add an asciinema cast to it to make it look better and allow me to ship the project
i got rustypipe-botguard working with Nix i still can’t figure out why some videos don’t work sometimes but other videos work all the time i updated the test suite to reflect that
i begun porting the project to kotlin while i love rust i also want this project to actually work rustypipe will always be a bit behind youtube’s protections so i decided to just rewrite the whole thing in kotlin so i can use newpipeextractor directly what’s left: tag audio with jaudiotagger use clikt to make a nice command line interface (maybe) add unit tests there is no actual screenshot because i didn’t actually implement the commands yet
the rewrite is almost finished thumbnails are now way higher in resolution because we can now get youtube’s webp images. unfortunately jaudiotagger does not support webp images, so i force all images from youtube to turn into a lossless png kotlin is pretty cool, especially coroutines, its like lua’s coroutines but actually backed by a thread pool i need to limit the concurrency but otherwise this is great! very fast even on a debug build what’s left: currently unlimited concurrency, this will definitely crash the jvm on large playlists better terminal output with colors and a diff generator use a temporary table in sqlite to make diffing more memory efficient packaging and ci should be fine since “java runs anywhere”
I cleaned up the code, bounded parallelism to 8 with limitedParallelism, and tried to optimize the detection of moved tracks
I fixed position tracking, so that moved tracks will output a line telling you they have moved. I attempted to fix a deadlock that was happening, and fixed some database queries targetting the wrong table.
added a progress bar and actually actually fixed the deadlock this time
Preparing to ship the project, so here’s a list of everything I did: added back an edited readme added back the apache 2.0 license fixed the github actions auto release recorded an asciinema cast and put it in the readme made the cli say music-player-kotlin instead of cli …other small changes to make sure its ready for release
Shortly after I shipped, I found a better library for progress bars and displaying to the terminal in general. I also made sure that the exists locally log line would be printed out in order. I decided to use it, and I am really happy with the result!!!!
I forgot to add error handling from the original Rust project, so I did that. I also fixed the parallelism by using a Semaphore as limitedParallelism still wakes all the coroutines. Using a Semaphore only allows N permits to be handed out at once. This means that only N tasks would be running at once, given that each task takes one permit. I set N to 8 as that should not cause any throttling but still allow multiple tracks to be downloaded at once. I also implemented better lazy fetching than the old Rust implementation. Now only pieces that must be fetched are fetched, and if they don’t need to be fetched, a StreamExtractor is never fetched. This causes a huge speed up, allowing my ~400 track playlist to be incrementally synced in 8 seconds. Other notable quality of life features (taken from the git log): - refactor: make output use terminal.theme.* - refactor: make output more human readable by using title instead of youtube_playlist_id - fix: reorder items in subtasks so that the text doesn't move everything else
In my attempt to make the streamExtractor lazily loaded, I caused a deadlock. I have fixed the deadlock and this fixed version is at v0.2.7. The fix was pretty simple, it was to not use CoroutineStart.Lazy because a lazy coroutine may never run, meaning the parent coroutineScope will hang forever. I also switched the backend driver to sqlx4k as it provides a connection pool but more importantly makes the suspend code flow cleaner. I wont switch to Exposed (the official SQL driver) because it doesn’t have the same parallel capabilities as sql4k.
To help users migrate from the old Rust implementation, I made it so that a sync will re-tag the track if the track’s thumbnail does not exist on disk. The Kotlin implementation always gets higher resolution images, so this allows for much higher resolution track covers.
I made it so that thumbnails should now be even higher quality, it does take more storage but the difference is quite noticeable on some music players. Also small hotfix, if you accidentally pass in another unrelated SQLite database it will now not run migrations on it before erroring.
I added duration tracking to the database. The M3U generation now doesn’t hardcode 0 as the duration.
I made position diffing aware of insertions and deletions, so that output is less bloated with useless move info such as 0->1, 1->2, etc. I also did some optimization by using database transactions wherever possible. I can’t do it in the main sync body because it is bounded to its own coroutine scope.
I now detect invalid playlist ids and print out an error telling the user how to get a valid playlist id.
I watched a Kotlin talk about Flows and I was inspired to rewrite my program using them. This made my program more efficient, idiomatic and also helped me fix the annoying progress bar refresh bug (multiple old bars shown). It also let me actually properly sort by position across all 4 status types (added, removed, moved, errored). I also made the downloading functions use one underlying common function to clean up the codebase. I also removed sqlx4k because it wasn’t actually parallel and was causing issues with init. Here, in the screenshot I am showing the new elegant code for the logging of track statuses. It used to be many individual async calls, but flows allow me to group them up and sort them.
I redid the cli structure to group all the playlist commands under one common playlist parent command. I also implemented a clean up command to help people save disk space because SSDs are expensive right now. For example: music-syncer-kotlin -p path init -> music-syncer-kotlin playlist -p path init This was a necessary step so I could implement the clean up command, which deletes audio and thumbnail files that are not used by any playlists in a container. A container is the folder holding all the databases. Here’s everything I did, stolen from my commit message: feature: add clean-container command - refactor: add hasTrackInDatabase to the Playlist class - refactor: move knownFinal{Audio,Thumbnail}Extension out of class and make it const - refactor: nest all playlist commands as one subcommand - refactor: make cli help text more helpful - refactor: always print something to the console to let the user know that everything went well - refactor: do not use PlaylistHolder, use currentContext.registerJvmCloseable to clean up playlist - fix: when thumbnail is newly created, retag should silently fail
I finally silenced those pesky slf4j and unsafe memory access warnings. Just added the slf4j-nop library and a JVM flag.
I added GraalVM native image support. The actual implementation is boring but this makes the program’s cold starts faster and makes it feel more native. Not sure if this helps with battery life, but it might. This definitely helps with memory usage, the program only uses ~100mb syncing my 400 track playlist. I restricted the native image to Nix because the releases are supposed to always work on all platforms.
Squashed more bugs, updated NativeMetadataMain.kt so that reachability metadata includes image i/o. This makes the Graal native image actually work when having to convert from webp to png. This will be a non issue when I can find an image library that is written in pure Kotlin. The last shipwright to review my project tried syncing a mix, which is infinite. So I added an error for that and made sure no one will run into unexplainable errors again.
Tiny change, I switched from scrimage to ImageIO. It works much better and should be less error prone as scrimage would vendor in webp binaries, which is not cross platform.
I fixed the binary in Nix, it works now, also updated the asciinema cast it was missing some reachability metadata and required LD_LIBRARY_PATH to be set to the jdk’s libraries.
I fixed another Nix graalvm issue. Some mp4s wouldn’t be tagged properly, so I fixed that.
Ships:
I made a Kotlin CLI program that synchronizes a YouTube Music playlist to a SQLite database locally. I made this because I want to be able to play my music freely even when YouTube Music or my network is down. The main challenge was finding a library that would let me get the data I needed (artist, thumbnail, audio tracks, etc.) from YouTube Music, and I even had to rewrite the entire program in Kotlin from Rust because the library I was using couldn’t download audio properly....
|
1792976146.407738
|
1793062546.407738
|
|
2268
|
Matcha Linux by @DoMax | Stardance
|
DoMax
|
2
|
50.0
|
831
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-12T17:35:30Z", "hours": 23.0, "multiplier": 15.71, "payout": 424, "blessing": "neutral", "text": "3 months since the last release! Here’s how Matcha Linux improved: New install flow : It can finally be installed on real hardware Package installation is now more robust, handling package installation properly, with APK tags Many new bugfixes within the matcha-calamares package regarding mounting, cleanup, package management and more Installer optimizations - Live install environment uses only 2.5GB of RAM, allowing for 3GB of RAM support! (Huge improvement btw) Bloat removal - The current build features a stripped version of GNOME without, saving both RAM and disk space. Some packages were replaced in favor of alternatives OpenGL version checking - Some of the system components require OpenGL 4.3+ and GPUs that don’t support it now offload the rendering to CPU to avoid crashes NEW Requirements Memory : 3GB of RAM Storage : 5GB free disk space for installation UEFI Firmware : Required, legacy BIOS not supported Known Limitations If there is more than one iso9660 filesystem mounted while installing, the installer will trigger an error Since the current requirement for GPU-driven OpenGL rendering is OpenGL 4.3+, some systems might feel sluggish due to the CPU doing all the work I hope you enjoy testing and using Matcha Linux :D", "repo": "https://github.com/domasles/matcha-linux", "demo": "https://github.com/domasles/matcha-linux/releases/tag/2026.09.11"}, {"ship_num": 2, "ts": "2026-06-09T22:16:00Z", "hours": 27.0, "multiplier": 15.16, "payout": 407, "blessing": "neutral", "text": "I engineered Matcha Linux - a fresh, fast, and fluid desktop OS built on top of Alpine Linux to combat software bloat and give any x86_64 UEFI hardware a life with a gorgeous and usable GNOME experience. It idles at JUST 1.5GB of RAM! The OS includes a custom port of Calamares installer specifically made for Matcha Linux (which probably took the most amount of work), and a heavily customized unique GNOME desktop. Navigating the initial release was a rollercoaster of debugging broken services, installer locales, build and install issues, encryption, swap configuration and ISO permissions, but the stable 2026.06.09 build is officially live, works out-of-the-box. Before testing it live or in a VM (4GB RAM, 10GB storage minimum, UEFI only), note that native glibc apps require a quick Distrobox container setup to run on Alpine.", "repo": "https://github.com/domasles/matcha-linux", "demo": "https://github.com/domasles/matcha-linux/releases/tag/2026.09.11"}]...
|
[{"post_id": 66191, "ts": "202 [{"post_id": 66191, "ts": "2026-09-11T21:09:11Z", "hours": 9.8739, "text": "Pre-ship devlog This post is about everything that recently happened with Matcha Linux 1. New terminal app! Yes, gnome-console got boring, so I replaced it! With none other than ghostty . It’s great - has hardware rendering support, native integration with Kitty image rendering (so fastfetch renders the logo properly) and MANY color themes, one of which happens to perfectly match Matcha’s look and feel. 2. Package management Since ghostty is from Alpine’s edge repos, I had to find a native way of tagging the packages both while building the iso, and installing the system. Previous approach blindly installed every package from live ISO. This works only when every package is designed to be sourced from the stable branch. One edge package and updates (or maybe the whole system) breaks! Now, a helper file helps install the necessary packages both onto the ISO and later system’s disk. Since packages are installed by their names, not separate files from some medium, the installation can also be way more accurate and, in some cases, more compact. 3. OpenGL checks Ghostty loves OpenGL. But it relies on OpenGL 4.3+, and on hardware that doesn’t support this - crashes. Luckily, if GPU bridge fails, CPU can handle OpenGL operations just as well! Matcha Linux, starting from today, is expecting hardware to support OpenGL 4.3+ to utilize the GPU for OpenGL APIs. Anything older than 2013-ish (which goes on par with UEFI requirement) would fail. In case of that happening, I added conditional rendering to use the CPU as a fallback. For now, however, it’s system-wide (to support any other software built with OpenGL 4.3+). OpenGL ES is not supported on the GPU at the moment. 4. Bugfixes!! Who doesn’t love when their software just… Works? The upgraded matcha-calamares installer now has a full cleanup stage, correctly catches errors regarding the install ISO presence, also has fixes for many other mount and install issues that could happen in earlier releases. Bottom line I love building this Linux distro. The challenges I have to face and the amount of operation ordering I have to do helps me improve. Structure is one of the skills I think humanity is yet to fully master, and i hope that one day, it can. As for the future of Matcha, it will continue to grow! Tech never sleeps, new releases need updates, and Matcha mustn’t be left behind. I also have more ambitious stuff planned (like an update manager and distrobox install module for calamares), and they are the only thing I’m afraid of implementing. For now, I’ll stick to making Matcha Linux as stable as possible, and then focus on something more exciting. I hope more people find this distro to test, daily drive and share the feedback! Always exciting to engage with communities."}, {"post_id": 63003, "ts": "2026-09-06T15:55:04Z", "hours": 10.5983, "text": "3GB RAM milestone!! How I managed to achieve 3GB RAM usage in the live environment (but at the same time - break a couple things) Stage 1 - package optimization Probably not a surprise to you that Gnome desktop environment is a heavy beast. Well, as it turns out, it bundles a bunch of stuff that’s not technically required to run the system. Alpine package gnome adds many apps (like calendar, weather and more) that aren’t relevant anymore. However, even though unused, they take up space, and in Alpine, the live environment installs every package onto ram to provide a diskless environment. At first I tried making a filesystem capable of loading packages from mounted iso as it’s necessary for the install either way, but optimizing package selection turned out to be easier (besides - who has a 64bit system with less than 6GB ram these days?) Stage 2 - package loading The fact that package selection is optimized to reduce Gnome’s bloat wasn’t enough to make the install environment lighter. Alpine has a file /etc/apk/world in which every package that should be installed is defined. Utilizing it I could control what packages must appear within the live system, and which - not (because you probably don’t need a heavy browser before installing the system). Stage 3 - things break if you’re too brave And they broke for me too. Certain admin functionality (like some polkit integrations) don’t work anymore due to the limited selection (and probably some hidden dependencies) of packages. I think I have diagnozed the issue though - testing suggests that it could be the missing linux-pam package or some dbus initialization race conditions. Other important updates Besides implementing optimizations to the image (consequences of which I can hopefully fix), I also made sure to update extensions, as well as the matcha-calamares package that now has a broader support for systems and reduces crashes. The building pipeline was also slightly tweaked. Either way, I’m off to fixing the issue, so see you in the next devlog!"}, {"post_id": 6344, "ts": "2026-06-10T17:58:42Z", "hours": 2.6097, "text": "Today, when one Hack Clubber pointed out that they wish to try Matcha Linux on Hyper-V, I thought it would work. Turns out I was completely wrong! Linux, built with the LTS kernel instead of VM-specific (Virt), breaks on Hyper-V due to inability to pass the framebuffer through Hyper-V’s exceptional drivers (or so I think). The minimal terminal works, but flickers due to GDM trying to restart every few ms. Implementing a dual-ISO build pipeline I fixed this issue and also made Matcha Linux and its packages work on top of a new Alpine (v3.24) release. Thought it would be harder, but both Alpine itself, and Gnome 50 play along very well! Also added Hyper-V specific instructions to the README."}, {"post_id": 5905, "ts": "2026-06-09T21:37:53Z", "hours": 5.8019, "text": "It builds, it runs, it WORKS! I was really surprised with how this OS turned out. After what seemed like a rollercoaster of issues that had me stumped for a while, and countless hours of debugging, I STILL managed to deliver a working product this soon. It relieved me, and I can consider myself both lucky and proud. After fixing all said issues in the previous devlogs, I present Matcha Linux 2026.06.09 - the initial release. Matcha Linux was made to combat e-waste, hardware pricing increase and provide a beautiful yet customizable experience to absolutely anyone! By being able to run it on any x86_64 UEFI-compatible piece of hardware, using very few resources, Matcha Linux aims to be the primary choice for people trying to escape bloat. What was fixed since the last devlog: Swap not working due to a service not being run on boot Locales not being correctly set up due to a missing installer module Additional tweaks: Reworked the permission system to be more reliable and controllable (when building the live ISO image) Implemented a proper post-install reboot mechanism by tweaking installer’s configuration Refactored build source files to be more compact, added comments where necessary Removed keyboard configuration from the installer due to it not being well integrated with GNOME Cleaned up repositories, added better documentation, published first working release files I consider this experience a lesson not only about Linux, but also the need of doing things sequentally, planning and always going forward, no matter what challenge waits up front. Do I have something else planned for the future? YES! But these things may be quite difficult: A custom installer module to provide the setup for Distrobox (to run almost any Linux app (by default they won’t run unless installed through APK and are within Alpine Linux repositories. Running layered Debian, Arch or Fedora boxes creates disposable and highly capable environments)) A custom updater program (probably won’t be integrated this summer) Further debugging and engaging with the community I hope this project inspires many people to build projects and solve problems for the whole world. Open source, as it should be."}, {"post_id": 4584, "ts": "2026-06-07T22:33:32Z", "hours": 4.8797, "text": "Several bugs fixed! (And one drawback taken) First off, with the fixes: Installer UI no longer crashes when selecting a swap option or entering encryption details (the issue was only persistent on legacy BIOS boot and without a certain configuration file (bootloader.conf, that got added)) Encryption finally works! Can’t show in the devlog image, but a disk can be encrypted and decrypted with LUKS properly A non-encrypted approach of installation is also viable and works as it should Drawback (the sad part): Since I couldn’t get legacy BIOS to not crash the installer in a mentioned case, after strong considerations I have decided that Matcha Linux will only officially support EFI, and enforced this behaviour in the build pipeline This gets along the philosophy of using modern lightweight standards that Matcha tries to utilize, so it’s not much of a loss What remains broken: Swap memory does not seem to be working in the installed system, even when the necessary files ARE created by the installer Timezones don’t still work properly After fixing said issues the project will be ready to ship. Hopefully it shouldn’t take more than a week"}, {"post_id": 3405, "ts": "2026-06-06T10:02:47Z", "hours": 2.0461, "text": "I have successfully resolved the issues found in the earlier build, and everything works (almost) flawlessly now! New things: Cleaned up build scripts to make them more portable and more easily readable Implemented package exclusion when installing the OS Customized the default dock apps list Improved branding by implementing FastFetch configuration However, I have noticed some bugs that are worth taking a look into: When setting up the disk with swap space, the installer crashes. Maybe just a package missing that handles this LUKS encryption does not work Timezone setup is useless as it doesn’t set up the timezone (manual setup is working post-install, but the installer SHOULD set that up) After fixing those, Matcha Linux can finally ship!"}, {"post_id": 2736, "ts": "2026-06-05T14:28:43Z", "hours": 9.1078, "text": "Since the last devlog, I put in a LOT of work to make the whole OS build properly This includes: Setting up a well-working approach for installing Matcha Calamares installer to the live system Adding a README to (almost) all repositories related to this project Customizing the installer Tweaking a few things for smoother performance Next steps are: Removing hardcoded references to just make the images “build and run” Reflecting ways of optimization Excluding unnecessary stuff from the installed system Testing everything for the final time Shipping! Wish me luck, now I’m heading out, polishing this project"}, {"post_id": 1081, "ts": "2026-06-02T21:55:39Z", "hours": 1.3753, "text": "FINALLY did I fix the system running incorrectly Turns out, the problem was a faulty overlay that kept overwriting user account files, thus revoking the ability for some system services to run! Now the system installs beautifully, runs even prettier, only thing left is to test whether there is no junk in a fresh system and the user is set up correctly and if the startup times could be improved (unless it’s VirtualBox-specific) Other goals haven’t changed since the last devlog, but I am starting to question if I really need to write software for this distribution myself (for issuing updates, etc…) because the process should be fairly straightforward"}, {"post_id": 844, "ts": "2026-06-02T15:19:59Z", "hours": 3.6919, "text": "First devlog, and with good news already! After successfully porting Calamares installer over to Alpine Linux, today I also made it install the system correctly The issue was bad grub configuration that either did not mount the system or did not load ext4 kernel module With that resolved (and a bit of a rework on live iso build profile) Matcha Linux is one step closer to being at least usabe post-install Remaining issues are: Incorrect group and user creation process due to which dbus service can’t launch (critical) Remaining steps are: Testing if other core services that depend on dbus launch after fixing the issue Testing the system and whether everything copies correctly Future plans: Customizing the installer Adding a DistroBox Debian shell by default for app compatibility Making an updater app"}]...
|
Title: Matcha Linux by @DoMax | Stardance
Devlogs Title: Matcha Linux by @DoMax | Stardance
Devlogs:
First devlog, and with good news already! After successfully porting Calamares installer over to Alpine Linux, today I also made it install the system correctly The issue was bad grub configuration that either did not mount the system or did not load ext4 kernel module With that resolved (and a bit of a rework on live iso build profile) Matcha Linux is one step closer to being at least usabe post-install Remaining issues are: Incorrect group and user creation process due to which dbus service can’t launch (critical) Remaining steps are: Testing if other core services that depend on dbus launch after fixing the issue Testing the system and whether everything copies correctly Future plans: Customizing the installer Adding a DistroBox Debian shell by default for app compatibility Making an updater app
FINALLY did I fix the system running incorrectly Turns out, the problem was a faulty overlay that kept overwriting user account files, thus revoking the ability for some system services to run! Now the system installs beautifully, runs even prettier, only thing left is to test whether there is no junk in a fresh system and the user is set up correctly and if the startup times could be improved (unless it’s VirtualBox-specific) Other goals haven’t changed since the last devlog, but I am starting to question if I really need to write software for this distribution myself (for issuing updates, etc…) because the process should be fairly straightforward
Since the last devlog, I put in a LOT of work to make the whole OS build properly This includes: Setting up a well-working approach for installing Matcha Calamares installer to the live system Adding a README to (almost) all repositories related to this project Customizing the installer Tweaking a few things for smoother performance Next steps are: Removing hardcoded references to just make the images “build and run” Reflecting ways of optimization Excluding unnecessary stuff from the installed system Testing everything for the final time Shipping! Wish me luck, now I’m heading out, polishing this project
I have successfully resolved the issues found in the earlier build, and everything works (almost) flawlessly now! New things: Cleaned up build scripts to make them more portable and more easily readable Implemented package exclusion when installing the OS Customized the default dock apps list Improved branding by implementing FastFetch configuration However, I have noticed some bugs that are worth taking a look into: When setting up the disk with swap space, the installer crashes. Maybe just a package missing that handles this LUKS encryption does not work Timezone setup is useless as it doesn’t set up the timezone (manual setup is working post-install, but the installer SHOULD set that up) After fixing those, Matcha Linux can finally ship!
Several bugs fixed! (And one drawback taken) First off, with the fixes: Installer UI no longer crashes when selecting a swap option or entering encryption details (the issue was only persistent on legacy BIOS boot and without a certain configuration file (bootloader.conf, that got added)) Encryption finally works! Can’t show in the devlog image, but a disk can be encrypted and decrypted with LUKS properly A non-encrypted approach of installation is also viable and works as it should Drawback (the sad part): Since I couldn’t get legacy BIOS to not crash the installer in a mentioned case, after strong considerations I have decided that Matcha Linux will only officially support EFI, and enforced this behaviour in the build pipeline This gets along the philosophy of using modern lightweight standards that Matcha tries to utilize, so it’s not much of a loss What remains broken: Swap memory does not seem to be working in the installed system, even when the necessary files ARE created by the installer Timezones don’t still work properly After fixing said issues the project will be ready to ship. Hopefully it shouldn’t take more than a week
It builds, it runs, it WORKS! I was really surprised with how this OS turned out. After what seemed like a rollercoaster of issues that had me stumped for a while, and countless hours of debugging, I STILL managed to deliver a working product this soon. It relieved me, and I can consider myself both lucky and proud. After fixing all said issues in the previous devlogs, I present Matcha Linux 2026.06.09 - the initial release. Matcha Linux was made to combat e-waste, hardware pricing increase and provide a beautiful yet customizable experience to absolutely anyone! By being able to run it on any x86_64 UEFI-compatible piece of hardware, using very few resources, Matcha Linux aims to be the primary choice for people trying to escape bloat. What was fixed since the last devlog: Swap not working due to a service not being run on boot Locales not being correctly set up due to a missing installer module Additional tweaks: Reworked the permission system to be more reliable and controllable (when building the live ISO image) Implemented a proper post-install reboot mechanism by tweaking installer’s configuration Refactored build source files to be more compact, added comments where necessary Removed keyboard configuration from the installer due to it not being well integrated with GNOME Cleaned up repositories, added better documentation, published first working release files I consider this experience a lesson not only about Linux, but also the need of doing things sequentally, planning and always going forward, no matter what challenge waits up front. Do I have something else planned for the future? YES! But these things may be quite difficult: A custom installer module to provide the setup for Distrobox (to run almost any Linux app (by default they won’t run unless installed through APK and are within Alpine Linux repositories. Running layered Debian, Arch or Fedora boxes creates disposable and highly capable environments)) A custom updater program (probably won’t be integrated this summer) Further debugging and engaging with the community I hope this project inspires many people to build projects and solve problems for the whole world. Open source, as it should be.
Today, when one Hack Clubber pointed out that they wish to try Matcha Linux on Hyper-V, I thought it would work. Turns out I was completely wrong! Linux, built with the LTS kernel instead of VM-specific (Virt), breaks on Hyper-V due to inability to pass the framebuffer through Hyper-V’s exceptional drivers (or so I think). The minimal terminal works, but flickers due to GDM trying to restart every few ms. Implementing a dual-ISO build pipeline I fixed this issue and also made Matcha Linux and its packages work on top of a new Alpine (v3.24) release. Thought it would be harder, but both Alpine itself, and Gnome 50 play along very well! Also added Hyper-V specific instructions to the README.
3GB RAM milestone!! How I managed to achieve 3GB RAM usage in the live environment (but at the same time - break a couple things) Stage 1 - package optimization Probably not a surprise to you that Gnome desktop environment is a heavy beast. Well, as it turns out, it bundles a bunch of stuff that’s not technically required to run the system. Alpine package gnome adds many apps (like calendar, weather and more) that aren’t relevant anymore. However, even though unused, they take up space, and in Alpine, the live environment installs every package onto ram to provide a diskless environment. At first I tried making a filesystem capable of loading packages from mounted iso as it’s necessary for the install either way, but optimizing package selection turned out to be easier (besides - who has a 64bit system with less than 6GB ram these days?) Stage 2 - package loading The fact that package selection is optimized to reduce Gnome’s bloat wasn’t enough to make the install environment lighter. Alpine has a file /etc/apk/world in which every package that should be installed is defined. Utilizing it I could control what packages must appear within the live system, and which - not (because you probably don’t need a heavy browser before installing the system). Stage 3 - things break if you’re too brave And they broke for me too. Certain admin functionality (like some polkit integrations) don’t work anymore due to the limited selection (and probably some hidden dependencies) of packages. I think I have diagnozed the issue though - testing suggests that it could be the missing linux-pam package or some dbus initialization race conditions. Other important updates Besides implementing optimizations to the image (consequences of which I can hopefully fix), I also made sure to update extensions, as well as the matcha-calamares package that now has a broader support for systems and reduces crashes. The building pipeline was also slightly tweaked. Either way, I’m off to fixing the issue, so see you in the next devlog!
Pre-ship devlog This post is about everything that recently happened with Matcha Linux 1. New terminal app! Yes, gnome-console got boring, so I replaced it! With none other than ghostty . It’s great - has hardware rendering support, native integration with Kitty image rendering (so fastfetch renders the logo properly) and MANY color themes, one of which happens to perfectly match Matcha’s look and feel. 2. Package management Since ghostty is from Alpine’s edge repos, I had to find a native way of tagging the packages both while building the iso, and installing the system. Previous approach blindly installed every package from live ISO. This works only when every package is designed to be sourced from the stable branch. One edge package and updates (or maybe the whole system) breaks! Now, a helper file helps install the necessary packages both onto the ISO and later system’s disk. Since packages are installed by their names, not separate files from some medium, the installation can also be way more accurate and, in some cases, more compact. 3. OpenGL checks Ghostty loves OpenGL. But it relies on OpenGL 4.3+, and on hardware that doesn’t support this - crashes. Luckily, if GPU bridge fails, CPU can handle OpenGL operations just as well! Matcha Linux, starting from today, is expecting hardware to support OpenGL 4.3+ to utilize the GPU for OpenGL APIs. Anything older than 2013-ish (which goes on par with UEFI requirement) would fail. In case of that happening, I added conditional rendering to use the CPU as a fallback. For now, however, it’s system-wide (to support any other software built with OpenGL 4.3+). OpenGL ES is not supported on the GPU at the moment. 4. Bugfixes!! Who doesn’t love when their software just… Works? The upgraded matcha-calamares installer now has a full cleanup stage, correctly catches errors regarding the install ISO presence, also has fixes for many other mount and install issues that could happen in earlier releases. Bottom line I love building this Linux distro. The challenges I have to face and the amount of operation ordering I have to do helps me improve. Structure is one of the skills I think humanity is yet to fully master, and i hope that one day, it can. As for the future of Matcha, it will continue to grow! Tech never sleeps, new releases need updates, and Matcha mustn’t be left behind. I also have more ambitious stuff planned (like an update manager and distrobox install module for calamares), and they are the only thing I’m afraid of implementing. For now, I’ll stick to making Matcha Linux as stable as possible, and then focus on something more exciting. I hope more people find this distro to test, daily drive and share the feedback! Always exciting to engage with communities.
Ships:
I engineered Matcha Linux - a fresh, fast, and fluid desktop OS built on top of Alpine Linux to combat software bloat and give any x86_64 UEFI hardware a life with a gorgeous and usable GNOME experience. It idles at JUST 1.5GB of RAM! The OS includes a custom port of Calamares installer specifically made for Matcha Linux (which probably took the most amount of work), and a heavily customized unique GNOME desktop. Navigating the initial release was a rollercoaster of debugging broken services, installer locales, build and install issues, encryption, swap configuration and ISO permissions, but the stable 2026.06.09 build is officially live, works out-of-the-box. Before testing it live or in a VM (4GB RAM, 10GB storage minimum, UEFI only), note that native glibc apps require a quick Distrobox container setup to run on Alpine.
3 months since the last release! Here’s how Matcha Linux improved: New install flow : It can finally be installed on real hardware Package installation is now more robust, handling package installation properly, with APK tags Many new bugfixes within the matcha-calamares package regarding mounting, cleanup, package management and more Installer optimizations - Live install environment uses only 2.5GB of RAM, allowing for 3GB of RAM support! (Huge improvement btw) Bloat removal - The current build features a stripped version of GNOME without, saving both RAM and disk space. Some packages were replaced in favor of alternatives OpenGL version checking - Some of the system components require OpenGL 4.3+ and GPUs that don’t support it now offload the rendering to CPU to avoid crashes NEW Requirements Memory : 3GB of RAM Storage : 5GB free disk space for installation UEFI Firmware : Required, legacy BIOS not supported Known Limitations If there is more than one iso9660 filesystem mounted while installing, the installer will trigger an error Since the current requirement for GPU-driven OpenGL rendering is OpenGL 4.3+, some systems might feel sluggish due to the CPU doing all the work I hope you enjoy testing and using Matcha Linux :D...
|
1792990435.5810375
|
1793076835.5810375
|
|
21847
|
Flux-OS by @Abhiram999 | Stardance
|
Abhiram999
|
3
|
81.0
|
828
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T07:57:02Z", "hours": 28.0, "multiplier": 8.97, "payout": 249, "blessing": "neutral", "text": "So, Yes FluxOS is a WebOS and i believe everyone is already aware of by now and is (mostly) made on vanilla CSS, HTML and JS Doesn’t really follow any design theme ( like other OS based on animals mostly ) But its kinda going with what i like mostly minimal , functional and customizable hence it is quite customizable ( not as customizable as real OS but common this is running on the web gng ) Not as functional as i would like but its pretty good, Id like to work on it more but I am ending this project right here Also It was hell to debug as the code base is simply massive, wayy too big for its own good Anyways I hope you like it ._.", "repo": "https://github.com/the-degenerate-otaku/Flux-OS", "demo": "https://the-degenerate-otaku.github.io/Flux-OS/"}, {"ship_num": 2, "ts": "2026-08-19T16:57:25Z", "hours": 52.0, "multiplier": 13.04, "payout": 579, "blessing": "neutral", "text": "So Essentially I Made a WebOS but It is customizable ( Well It tried to be at least ) How customizable? Well you change wallpapers , window accents , Window transparent and Window blurring , Have cursor effects which change with accents , a fully working file manager and notepad to scribble shi down And Yea IT TOOK A WHILE especially when your code is broken because you forgot to capitalize a letter for a function and then the function now doesn’t exist and you do everything and turn the entire code upside down before finding it on random Tuesday (smh) I’m gonna keeping working on this cause i did have a web browser in built into the OS and a Music player but got rid of it cause It just doesn’t work how i quite want it to right now frankly so It’ll probably next ship that the full version of this WebOS will release and I can put this project to rest ( fyi I’m one month overdue so yea gotta finish it fast", "repo": "https://github.com/the-degenerate-otaku/Flux-OS", "demo": "https://the-degenerate-otaku.github.io/Flux-OS/"}, {"ship_num": 3, "ts": "2026-07-01T12:09:25Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a custom OS build on html and is web-based using CSS, JS and HTML. Along the journey of me building the WebOS i learnt a lot of things like how to build a real-time clock and Terminal code, it was hard though cause the code kept breaking again and again and yea a lot of debugging and brain wrecking later it finally works and I’m quite proud of it ngl it maybe be small step it is an honest one :) k’bie", "repo": "https://github.com/the-degenerate-otaku/Flux-OS", "demo": "https://the-degenerate-otaku.github.io/Flux-OS/"}]...
|
[{"post_id": 62738, "ts": "202 [{"post_id": 62738, "ts": "2026-09-06T07:49:51Z", "hours": 3.8911, "text": "FluxOS Final Devlog #21 Date : 6 September 2026 So, Yes this is going to be my final Devvlog on this project and on Stardance as a whole probably though I have an entire month Infront of me I have shi to do in RL and i am focusing on the ysws too so yea gotta end this here i suppose, There is alot I still wanna build on Flux but there is technical and aesthetic constraints on vanilla CSS and JS so It would make the project so big that neither will i be able to complete it nor will it run well so im ending it here that said im pretty happy how it turned out, it looks pretty good for a project i started making when i began coding Whats New? Added the music player back Default settings have been updated Updated readme Taskbar google Search Final UI clean up PS: the clock position might change depending on your screen size it should be fine on most lap but on larger or smaller screen it might be a bit off target so just drag it back to where it is in the wallpaper ight? ( I cant figure it out )"}, {"post_id": 60932, "ts": "2026-09-03T16:34:30Z", "hours": 2.7239, "text": "Flux OS Devlog#20 Date: 3 September 2026 What New? So essentially small bug changes and a new feature the accent picker now has a auto or manual option to choose from the Auto accent picker bug where it displayed on top the manual accent has been fixed bug where the pet wouldnt come out in itss proper size has been fixed SEARCH BAR ADDED ( YES BROWSER SEARCH ) yea its not an embedded browser it does take you to a new tab when you search anything but its still better than having a half assed wiki page as the browser which doesnt event work and it got cool rolling text hehhehe"}, {"post_id": 60354, "ts": "2026-09-02T17:20:23Z", "hours": 1.8397, "text": "Flux OS Devlog #19 Date: 2 September 2026 What’s New? So accent picker the accent now automatically changes with the wallpaper colors ( still need to add the option to manually select it tho )"}, {"post_id": 59112, "ts": "2026-08-31T18:56:29Z", "hours": 0.275, "text": "Flux OS BTS #1 Date: 31 August 2026 heehehe here is a sneak peek on what im making ( yes im tired that why no devlog )"}, {"post_id": 58354, "ts": "2026-08-30T18:59:20Z", "hours": 1.8422, "text": "Flux OS Devlog #18 Date: 30 August 2026 ( well 31 actually ) Whats New? BETTER ACCENTS, so I earlier had only 4 accents and they were kinda eh meh so yea this is a fully reworked accents with now 10 colors which changes the color of the glass and the Globe live wallpaper and updates in real time ( pet is still white ) took shit ton of time cause i somehow broke the taskbar ( yep ik )"}, {"post_id": 57157, "ts": "2026-08-29T08:17:10Z", "hours": 2.7289, "text": "Flux OS Devlog #17 Date: 30 August 2026 Whats new? Honestly nothing much just some minor ahh changes fixed maximise , minimise and close button function so now the windows actually maximise properly instead of the old broken one Dock autohide when maximised Updated terminal lost the entire site for half an hour ( didnt even have dev console ) but fixed it"}, {"post_id": 56829, "ts": "2026-08-28T19:29:53Z", "hours": 2.1167, "text": "Flux OS Devlog #16 Date 29 August 2026 How come im not dead yet smh, its the middle of night and i got a cold Whats New? ⭐ THE PET IS FINALLY HERE ( YEES IK ISNT HE CUTE :O ) this one is so much of an improvement over thee last pet i had and the cat i tried to make omg and the math behind it is genuinely fascinating ( not gonna bother explaining it here ) so yea it was made the by this dude https://github.com/codetoanbug/ReptileInteractiveCursor or atleast that whom i used to understand how the code worked and yea the pet is togglable works on all background and yea pretty cool Now lemme go rest im sick af and i have a headache"}, {"post_id": 55190, "ts": "2026-08-26T18:18:10Z", "hours": 3.7108, "text": "Flux OS Devlog #15 Date : 26 August 2026 Whats new? Brought the taskbar icons back so now u can minimize and itll go to the taskbar, everything else is kinda broken tho Im making something big may have something to do with my pet hehe~"}, {"post_id": 53606, "ts": "2026-08-24T07:40:46Z", "hours": 1.1694, "text": "Flux OS Devlog#14 Date : 24 August 2026 Whats New? Brought back the custom wallpaper options I expect the live and static wallpaper shifting to be a lot more difficult cause I’m not using a video as the live wallpaper but a reactive that moves with your mouse and I had problems with this in the past nonetheless everything went pretty smoothly too smoothly in fact I thought something would break and I would have to spend 3hrs finding what broke but it took barely an hour hmm isn’t that interesting Cleaner up a visual bug for the accents where the colors weren’t rendering properly in their half and would leak into the other half"}, {"post_id": 53193, "ts": "2026-08-23T17:06:00Z", "hours": 2.1472, "text": "Flux OS Devlog#13 Date : 23 August 2026 Whats new? Small changes for small hours, Taskbar has now a Wi-Fi and Bluetooth symbol also has device specs and a Calendar yyyayyyyyy also there is an app finder Haven’t made much progress cause i was busy playing Genshin ( its too good )"}, {"post_id": 52359, "ts": "2026-08-22T13:57:37Z", "hours": 5.3289, "text": "Flux OS Devlog#12 Date : 22 August 2026 Whats new? More like is there anything left What all got removed? Music player , Browser , pet - Went for redesign and rework Notification centre - Removed and discarded Wallpaper capabilities - temporarily removed Ye, No joke i removed half of the entire WebOS What got added? Custom png icons new cursor effect removing the old one a new dynamic wallpaper ( which is the reason for removing custom wallpapers) New look generally speaking"}, {"post_id": 50436, "ts": "2026-08-19T16:31:20Z", "hours": 8.7722, "text": "Flux OS Devlog #11 Date 19 August 2026 Whats New? Apart from the fact im posting this almost a month since I last touched it there has been quoote alot of changes You can now close the notification centre the Accent colors and a new design Two apps has been removed for further development Cleaned up the code Fixed some bugs"}, {"post_id": 28865, "ts": "2026-07-15T12:55:50Z", "hours": 10.5608, "text": "Flux OS Devlog #10 Date: 15 July 2026 Whats New? So there is nothing much major to say new even though its over 10hrs of coding time almost 8hrs was debugging the things I already had cause there was may things that was broken from the last coding session that I had too dedicate the entire day towards Bugfixing the old code and since most of the old bugs where invisible i had to go through the entire code manually to come across over 10 bugs but all is good everything works as it should except the aero snap which I’m still figuring out and yes I have been coding almost the entire day and ngl Im seriously not stopping until tonight cause I’m basically hooked atp and I only stopped to post a Devlog otherwise my hours wont be counted Oh welp k’bie"}, {"post_id": 28439, "ts": "2026-07-14T17:55:57Z", "hours": 3.1869, "text": "Flux OS - Devlog #9 Date: 14 July 2026 Whats New? Sooooooo Its lookinh ppretty good ngl except for alot of shi breaking like always thing OS is finally coming together Cursor Particle trail system fixed Basic boot animation exsists a very bad but working aero snap ( tho ccant really function cause the dragging broke ) local storage ( VFS system ) added notification Centre added"}, {"post_id": 28287, "ts": "2026-07-14T13:30:52Z", "hours": 17.0628, "text": "Flux OS - Devlog #8 Date: 14 July 2026 Soooo Why do I have 17 hrs logged over 3 days and literally nearly no change to the actual WebOS and If anything a broken cursor?? Well so essentially I didnt know you had to log eveery 10hrs ( down goes 7 hrs in the drain ) and the 17 hrs I was trying alot of ideas trying to get work but couldnt cause well ehhh skilll issue….. ( ._. ) but i got a particle effect for the cursor working ….. except the cursor dosent work now …… oh well also i tried to get the cat working for like 10 hrs out of thee 17 and ye it is just not listening to me so yea im probably rethink my approach for this project and keep it oon the side for a few days"}, {"post_id": 26599, "ts": "2026-07-11T14:57:39Z", "hours": 6.3031, "text": "Flux OS - Devlog #7 Date : 11th July 2026 I am tired, so goddamn tired after 6hrs of coding ughhhhh so essentially i tried to make a desktop cat similar to the Comnyang pixel cat and after 6 hrs i havent moved anywhere i couldve probably spent more time making the OS better but nahh i spent it on a pixel cat that said i got something to work so idk i just need to find a way to make the json file better ahhh welp thats all k’bie"}, {"post_id": 26130, "ts": "2026-07-10T19:00:35Z", "hours": 1.6269, "text": "Flux OS - Devlog #6 Date 11 July 2026 Its 1 in the goddamn morning and I Finally got it to work finally after hours off debugging Jesus Christ and I’m currently cracked rn I’m very happy with what I made in 2hrs and that the debugging was soooo much more easy after i learned how to read errors, cause at first id just be confused and just start reading the code for the errors but its the entire codebase is over 700 lines long and reading it wasn’t plausible anymore anyway this is a major milestone What Changed ?? Basically the entire code changed to keep it short at first i coded CSS inline with HTML, now i just took my entire CSS file and made it a separate file You can put Custom Wallpapers now ( yes even you dog or cat can be your wallpaper ) using the Local storage property of JS the themes work but they aren’t much of use rn, Ill add more later and simplify them The control center isn’t how I want it now but honestly its already middle of the night so I’m doing that tomorrow You can change the transparency value of the windows and now can make them transparent, or frosty type whatever you like there is a WebApp Dock now where you can add your favorite sites and click them to immediately launch them like a real App dock Alr that’s enough for today im gonna log off and sleep have a good day k’bie"}, {"post_id": 26040, "ts": "2026-07-10T16:53:59Z", "hours": 3.1717, "text": "FluxOS - Devlog #5 Date 10 July 2026 What changed? I added Window transparency, Yes now the windows have a small frosted glass look though its not that visible because of the plain background but when u stack apps it becomes clear What’s Next? I have an idea for an app dock not sure if it’ll work I am trying to add a ability to customize your background Making a control center that pops up from the side k’bie"}, {"post_id": 20973, "ts": "2026-07-02T18:26:12Z", "hours": 1.3433, "text": "Flux-OS - Devlog #4 Date : 2 July 2026 So So I had a big brain scratching session of 4hrs with 90mins of actual coding but i did it i some got the NASA Uplink working What Changed? Researched a lot how to get uplink working it was either write a extremely long JS in Html and make it chaotic or make a equally challenging JS script file and type it out so I took the second route and made a JS file How does it work? In short I made a asynchronous module which uses a native fetch API to ask an External Rest API Which gets the info of the ISS k’bie"}, {"post_id": 19939, "ts": "2026-07-01T11:58:40Z", "hours": 0.385, "text": "Flux-OS Devlog #3 Date 1 July 2026 Changelog Now the terminal actually works it now reacts to commands and can take user input though it’ll still break if you put something other than the codes Whats Next Going forward i have quite a lot of changes cause the shell is now complete A full OS revamp with better animations Better Terminal More Apps Somehow make it customizable to the user"}, {"post_id": 19925, "ts": "2026-07-01T11:18:58Z", "hours": 0.6133, "text": "FluxOS Devlog #2 Date: 1 July 2026 So after bit of procrastination and thinking later i finally made some new changes Changelog changed the code to look cleaner and more readable Did alot of bugfixiing that came with the new change Added a custom Bootup Screen Problems i ran into Almost broke the entire code because a small syntax error file didn’t want to boot up ( still dont know why)"}, {"post_id": 19828, "ts": "2026-07-01T06:35:10Z", "hours": 0.0, "text": "Web-OS -Devlog #1 Date: 1 July 2026 So after alot of deliberation, studying , crying over my tight ahh schedule with literally no room to breathe ( I dont even get 6hrs of sleep atp ) I got 90 mins to make the shell of what is going to be my first ever Web-OS So What did I build in the 90mins? Trust me absolutely nothing significant, I managed to a framework running and made a shell of what going to be my future Web-OS ( which doesn’t even have a name atp) so ye, i got a lot of planned for this thing cause even if I’m not good at writing code im good at thinking up ideas which is usually a hit or miss so ye I’m feeling pretty good about this project Issues I ran into Even though Im pretty confident in my basic html skills atp i still suck at it and i generally am a slow typer which just makes me take so much time to write code its infuriating anyway there was nothing major to be tackled except myself ( why ofc not ) and my single celled brain who doesn’t understand syntax mistakes I do other than that all good What’s coming next Proper animations A boot up screen Custom commands for the terminal Proper working apps which look good Generally better user friendly design That’s all, K’bye"}]...
|
Title: Flux-OS by @Abhiram999 | Stardance
Devlogs Title: Flux-OS by @Abhiram999 | Stardance
Devlogs:
Web-OS -Devlog #1 Date: 1 July 2026 So after alot of deliberation, studying , crying over my tight ahh schedule with literally no room to breathe ( I dont even get 6hrs of sleep atp ) I got 90 mins to make the shell of what is going to be my first ever Web-OS So What did I build in the 90mins? Trust me absolutely nothing significant, I managed to a framework running and made a shell of what going to be my future Web-OS ( which doesn’t even have a name atp) so ye, i got a lot of planned for this thing cause even if I’m not good at writing code im good at thinking up ideas which is usually a hit or miss so ye I’m feeling pretty good about this project Issues I ran into Even though Im pretty confident in my basic html skills atp i still suck at it and i generally am a slow typer which just makes me take so much time to write code its infuriating anyway there was nothing major to be tackled except myself ( why ofc not ) and my single celled brain who doesn’t understand syntax mistakes I do other than that all good What’s coming next Proper animations A boot up screen Custom commands for the terminal Proper working apps which look good Generally better user friendly design That’s all, K’bye
FluxOS Devlog #2 Date: 1 July 2026 So after bit of procrastination and thinking later i finally made some new changes Changelog changed the code to look cleaner and more readable Did alot of bugfixiing that came with the new change Added a custom Bootup Screen Problems i ran into Almost broke the entire code because a small syntax error file didn’t want to boot up ( still dont know why)
Flux-OS Devlog #3 Date 1 July 2026 Changelog Now the terminal actually works it now reacts to commands and can take user input though it’ll still break if you put something other than the codes Whats Next Going forward i have quite a lot of changes cause the shell is now complete A full OS revamp with better animations Better Terminal More Apps Somehow make it customizable to the user
Flux-OS - Devlog #4 Date : 2 July 2026 So So I had a big brain scratching session of 4hrs with 90mins of actual coding but i did it i some got the NASA Uplink working What Changed? Researched a lot how to get uplink working it was either write a extremely long JS in Html and make it chaotic or make a equally challenging JS script file and type it out so I took the second route and made a JS file How does it work? In short I made a asynchronous module which uses a native fetch API to ask an External Rest API Which gets the info of the ISS k’bie
FluxOS - Devlog #5 Date 10 July 2026 What changed? I added Window transparency, Yes now the windows have a small frosted glass look though its not that visible because of the plain background but when u stack apps it becomes clear What’s Next? I have an idea for an app dock not sure if it’ll work I am trying to add a ability to customize your background Making a control center that pops up from the side k’bie
Flux OS - Devlog #6 Date 11 July 2026 Its 1 in the goddamn morning and I Finally got it to work finally after hours off debugging Jesus Christ and I’m currently cracked rn I’m very happy with what I made in 2hrs and that the debugging was soooo much more easy after i learned how to read errors, cause at first id just be confused and just start reading the code for the errors but its the entire codebase is over 700 lines long and reading it wasn’t plausible anymore anyway this is a major milestone What Changed ?? Basically the entire code changed to keep it short at first i coded CSS inline with HTML, now i just took my entire CSS file and made it a separate file You can put Custom Wallpapers now ( yes even you dog or cat can be your wallpaper ) using the Local storage property of JS the themes work but they aren’t much of use rn, Ill add more later and simplify them The control center isn’t how I want it now but honestly its already middle of the night so I’m doing that tomorrow You can change the transparency value of the windows and now can make them transparent, or frosty type whatever you like there is a WebApp Dock now where you can add your favorite sites and click them to immediately launch them like a real App dock Alr that’s enough for today im gonna log off and sleep have a good day k’bie
Flux OS - Devlog #7 Date : 11th July 2026 I am tired, so goddamn tired after 6hrs of coding ughhhhh so essentially i tried to make a desktop cat similar to the Comnyang pixel cat and after 6 hrs i havent moved anywhere i couldve probably spent more time making the OS better but nahh i spent it on a pixel cat that said i got something to work so idk i just need to find a way to make the json file better ahhh welp thats all k’bie
Flux OS - Devlog #8 Date: 14 July 2026 Soooo Why do I have 17 hrs logged over 3 days and literally nearly no change to the actual WebOS and If anything a broken cursor?? Well so essentially I didnt know you had to log eveery 10hrs ( down goes 7 hrs in the drain ) and the 17 hrs I was trying alot of ideas trying to get work but couldnt cause well ehhh skilll issue….. ( ._. ) but i got a particle effect for the cursor working ….. except the cursor dosent work now …… oh well also i tried to get the cat working for like 10 hrs out of thee 17 and ye it is just not listening to me so yea im probably rethink my approach for this project and keep it oon the side for a few days
Flux OS - Devlog #9 Date: 14 July 2026 Whats New? Sooooooo Its lookinh ppretty good ngl except for alot of shi breaking like always thing OS is finally coming together Cursor Particle trail system fixed Basic boot animation exsists a very bad but working aero snap ( tho ccant really function cause the dragging broke ) local storage ( VFS system ) added notification Centre added
Flux OS Devlog #10 Date: 15 July 2026 Whats New? So there is nothing much major to say new even though its over 10hrs of coding time almost 8hrs was debugging the things I already had cause there was may things that was broken from the last coding session that I had too dedicate the entire day towards Bugfixing the old code and since most of the old bugs where invisible i had to go through the entire code manually to come across over 10 bugs but all is good everything works as it should except the aero snap which I’m still figuring out and yes I have been coding almost the entire day and ngl Im seriously not stopping until tonight cause I’m basically hooked atp and I only stopped to post a Devlog otherwise my hours wont be counted Oh welp k’bie
Flux OS Devlog #11 Date 19 August 2026 Whats New? Apart from the fact im posting this almost a month since I last touched it there has been quoote alot of changes You can now close the notification centre the Accent colors and a new design Two apps has been removed for further development Cleaned up the code Fixed some bugs
Flux OS Devlog#12 Date : 22 August 2026 Whats new? More like is there anything left What all got removed? Music player , Browser , pet - Went for redesign and rework Notification centre - Removed and discarded Wallpaper capabilities - temporarily removed Ye, No joke i removed half of the entire WebOS What got added? Custom png icons new cursor effect removing the old one a new dynamic wallpaper ( which is the reason for removing custom wallpapers) New look generally speaking
Flux OS Devlog#13 Date : 23 August 2026 Whats new? Small changes for small hours, Taskbar has now a Wi-Fi and Bluetooth symbol also has device specs and a Calendar yyyayyyyyy also there is an app finder Haven’t made much progress cause i was busy playing Genshin ( its too good )
Flux OS Devlog#14 Date : 24 August 2026 Whats New? Brought back the custom wallpaper options I expect the live and static wallpaper shifting to be a lot more difficult cause I’m not using a video as the live wallpaper but a reactive that moves with your mouse and I had problems with this in the past nonetheless everything went pretty smoothly too smoothly in fact I thought something would break and I would have to spend 3hrs finding what broke but it took barely an hour hmm isn’t that interesting Cleaner up a visual bug for the accents where the colors weren’t rendering properly in their half and would leak into the other half
Flux OS Devlog #15 Date : 26 August 2026 Whats new? Brought the taskbar icons back so now u can minimize and itll go to the taskbar, everything else is kinda broken tho Im making something big may have something to do with my pet hehe~
Flux OS Devlog #16 Date 29 August 2026 How come im not dead yet smh, its the middle of night and i got a cold Whats New? ⭐ THE PET IS FINALLY HERE ( YEES IK ISNT HE CUTE :O ) this one is so much of an improvement over thee last pet i had and the cat i tried to make omg and the math behind it is genuinely fascinating ( not gonna bother explaining it here ) so yea it was made the by this dude https://github.com/codetoanbug/ReptileInteractiveCursor or atleast that whom i used to understand how the code worked and yea the pet is togglable works on all background and yea pretty cool Now lemme go rest im sick af and i have a headache
Flux OS Devlog #17 Date: 30 August 2026 Whats new? Honestly nothing much just some minor ahh changes fixed maximise , minimise and close button function so now the windows actually maximise properly instead of the old broken one Dock autohide when maximised Updated terminal lost the entire site for half an hour ( didnt even have dev console ) but fixed it
Flux OS Devlog #18 Date: 30 August 2026 ( well 31 actually ) Whats New? BETTER ACCENTS, so I earlier had only 4 accents and they were kinda eh meh so yea this is a fully reworked accents with now 10 colors which changes the color of the glass and the Globe live wallpaper and updates in real time ( pet is still white ) took shit ton of time cause i somehow broke the taskbar ( yep ik )
Flux OS BTS #1 Date: 31 August 2026 heehehe here is a sneak peek on what im making ( yes im tired that why no devlog )
Flux OS Devlog #19 Date: 2 September 2026 What’s New? So accent picker the accent now automatically changes with the wallpaper colors ( still need to add the option to manually select it tho )
Flux OS Devlog#20 Date: 3 September 2026 What New? So essentially small bug changes and a new feature the accent picker now has a auto or manual option to choose from the Auto accent picker bug where it displayed on top the manual accent has been fixed bug where the pet wouldnt come out in itss proper size has been fixed SEARCH BAR ADDED ( YES BROWSER SEARCH ) yea its not an embedded browser it does take you to a new tab when you search anything but its still better than having a half assed wiki page as the browser which doesnt event work and it got cool rolling text hehhehe
FluxOS Final Devlog #21 Date : 6 September 2026 So, Yes this is going to be my final Devvlog on this project and on Stardance as a whole probably though I have an entire month Infront of me I have shi to do in RL and i am focusing on the ysws too so yea gotta end this here i suppose, There is alot I still wanna build on Flux but there is technical and aesthetic constraints on vanilla CSS and JS so It would make the project so big that neither will i be able to complete it nor will it run well so im ending it here that said im pretty happy how it turned out, it looks pretty good for a project i started making when i began coding Whats New? Added the music player back Default settings have been updated Updated readme Taskbar google Search Final UI clean up PS: the clock position might change depending on your screen size it should be fine on most lap but on larger or smaller screen it might be a bit off target so just drag it back to where it is in the wallpaper ight? ( I cant figure it out )
Ships:
I made a custom OS build on html and is web-based using CSS, JS and HTML. Along the journey of me building the WebOS i learnt a lot of things like how to build a real-time clock and Terminal code, it was hard though cause the code kept breaking again and again and yea a lot of debugging and brain wrecking later it finally works and I’m quite proud of it ngl it maybe be small step it is an honest one :) k’bie
So Essentially I Made a WebOS but It is customizable ( Well It tried to be at least ) How customizable? Well you change wallpapers , window accents , Window transparent and Window blurring , Have cursor effects which change with accents , a fully working file manager and notepad to scribble shi down And Yea IT TOOK A WHILE especially when your code is broken because you forgot to capitalize a letter for a function and then the function now doesn’t exist and you do everything and turn the entire code upside down before finding it on random Tuesday (smh) I’m gonna keeping working on this cause i did have a web browser in built into the OS and a Music player but got rid of it cause It just doesn’t work how i quite want it to right now frankly so It’ll probably next ship that the full version of this WebOS will release and I can put this project to rest ( fyi I’m one month overdue so yea gotta finish it fast
So, Yes FluxOS is a WebOS and i believe everyone is already aware of by now and is (mostly) made on vanilla CSS, HTML and JS Doesn’t really follow any design theme ( like other OS based on animals mostly ) But its kinda going with what i like mostly minimal , functional and customizable hence it is quite customizable ( not as customizable as real OS but common this is running on the web gng ) Not as functional as i would like but its pretty good, Id like to work on it more but I am ending this project right here Also It was hell to debug as the code base is simply massive, wayy too big for its own good Anyways I hope you like it ._....
|
1792878728.3268666
|
1793742728.3268666
|
|
16683
|
Blur Stuff by @AbdurRehman | Stardance
|
AbdurRehman
|
1
|
126.53
|
826
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-15T15:46:55Z", "hours": 118.0, "multiplier": 14.02, "payout": 826, "blessing": "neutral", "text": "I made Blur Stuff, a privacy focused tool for safely sharing images, videos, GIFs, and documents. It automatically detects sensitive information such as faces, license plates, text, and PII, then lets you anonymize the detected areas with different anonymization effects. It also removes EXIF metadata so other sensitive information isn’t left hidden inside the file. The goal of this project is to make sharing media safely as easy as uploading it. Instead of manually searching through a file like a document or photo and manually covering stuff you don’t want others to see, Blur Stuff does this work for you. The hardest part of making this project was making anonymization work reliably across different types of media. Images were relatively simple, but videos and GIFs require frame by frame processing while keeping detections consistent over time. And to make things efficient and fast I also had to deal with things like tracking which were really tricky. Connecting the frontend and backend was also another challenge and then hosting everything also brought it’s problems with dependency conflicts which took quite a while to solve. The thing I am most proud of is that this became a real working and professional looking application rather than just a prototype type thing. It supports most of the commonly used media formats, has multiple customization options among other neat functionalities. Also I like how this project is privacy focused. Like it doesn’t store the user’s files ever. It just processes them, removing EXIF, and gives the result. Blur Stuff can be tested by uploading an image containing faces, text, or a license plate and let it detect the sensitive regions and then select what you want anonymized, and run the anonymization. The current deployment has limited memory and resources since I’m on a free plan, so larger videos and documents can take a while to process, and very large files may run into resource limitations. The app is also deployed using Railway’s serverless option, so the server may need a few seconds to start up if it hasn’t received a request recently. Also the selected region anonymization for videos is still a bit buggy but mostly it works. These are areas I will improve in the future.", "repo": "https://github.com/RealAbdurRehman/blur-stuff", "demo": "https://blurstuff.up.railway.app"}]...
|
[{"post_id": 50269, "ts": "202 [{"post_id": 50269, "ts": "2026-08-19T13:00:35Z", "hours": 8.5269, "text": "Since shipping Blur Stuff, I got feedback that the frontend felt too generic so I completely revamped the UI to give it a more intentional and fun style. I redesigned everything from colors to typography and everything else. Now the app has a more personal feel. I also cleaned up some small things here and there."}, {"post_id": 47548, "ts": "2026-08-15T14:59:59Z", "hours": 6.7497, "text": "Since the previous dev log, I have been focused on getting Blur Stuff ready for deployment. This ended up being much more painful than I expected. The biggest part was dealing with dependency issues. The project worked locally, but moving everything to a production environment exposed a bunch of problems with Python versions, PaddlePaddle, PaddleOCR, PaddleX, PyYAML, spaCy, OpenCV and other dependencies. I spent a lot of time testing different configurations, fixing dependency conflicts, debugging the production container, and figuring out why things that seemed to work okay locally were breaking during deployment. The biggest headache was PaddleOCR. I had to deal with missing system libraries, model downloading, Paddle initialization issues and eventually a oneDNN runtime error that was causing OCR requests to return 503s. After a lot of debugging and testing different configurations, I eventually got the OCR pipeline working properly in production. That was probably the one of the most frustrating parts of the entire project, but it is finally done. I also switched the spaCy model from en_core_web_lg to en_core_web_sm. The larger model was unnecessarily heavy for what Blur Stuff needs and was making deployments take way longer. Switching to the smaller model made deployment faster and also improved performance without having a noticeable impact on the PII detection quality. After successful deployment I finished the README and added the final assets, screenshots, logo and documentation. I added the MIT license, favicon, deployment related changes and generally cleaned up the entire repository. At this point, I think Blur Stuff is ready to ship. There are definitely still improvements I could make, especially improving performance, making video anonymization more reliable and efficient, and polishing various parts of the application but I don’t want to spend more time trying to make everything perfect. The current deployment is also running on Railway’s free plan, so there are some resource and memory limitations since Blur Stuff runs several machine learning models in the same process. For now, I’m okay with that rather than spending more time optimizing around the limitations of a free deployment. For now, I’m calling it finished and shipping it since the core functionality is working and the project is deployed. I’ll definitely come back to Blur Stuff later to improve it, but I think it’s time to move on to something new."}, {"post_id": 46326, "ts": "2026-08-13T13:59:24Z", "hours": 10.0189, "text": "Since the previous dev log, I worked on fixing the remaining issues in the anonymization workflow and finishing the frontend around the application. The biggest thing I worked on was selected video anonymization. There were still some problems where selected areas could stop being anonymized correctly or the anonymization could move away from the actual object as it moved through the video or retracking when something like a face was lost. I spent quite a lot of time testing different things, tracking down where the problems were coming from, and making the selected anonymization much more reliable across video frames. This ended up taking a lot more work than I initially expected, but the selected video workflow is now working much better. It still isn’t perfect and there are still some bugs and I think I probably need a lot more time to find and fix them but right now it is in a decent working state so I don’t plan to spend more time on achieving perfection because debugging and stuff is boring as hell. I also made some improvements to the overall frontend and added the remaining main pages. I added the about, arivacy, documentation pages and also did some other improvents around the frontend. The documentation now explains the available endpoints, detection targets, anonymization modes and other features. At this point, I feel like the main application is in a really good place. The core functionality is implemented, the main frontend workflow is complete, and the remaining work is mostly getting this thing hosted and stuff. Next, I plan to write the README file, host the application, and do a final round of testing and cleanup. After that, I think I’ll consider this project finished for a while (I will work on improving it further later) and move on to building something new."}, {"post_id": 45041, "ts": "2026-08-11T08:51:50Z", "hours": 10.0544, "text": "Since the previous dev log, I continued building the application workflow and have almost completed the anonymization process. I first worked on the anonymization routes and updated the backend so that the frontend can send detected regions back to the API and have them anonymized. This allows the user to choose which detections they want to anonymize instead of always having to process everything. I also added support for passing dynamic padding (and also made it so that other dynamic stuff is easy to add later) through the request so that the effects can be customized based on what the user wants. I also added client side file handling required for the results page. The original and processed files are kept available in the browser so they can be previewed and downloaded without needing to be stored on the server. Everything also handles missing files and stuff without breaking and I also added error handling with notifications which are displayed to the user. I also made a bunch of smaller UI improvements while connecting everything together. At this point, the main frontend workflow is coming together. Next I will fix small remaining issues and improve reliability rather than adding any major change. The next things I plan to work on are to mainly fix bugs in the code. Like GIFs still need some additional handling to make sure detections are applied across the animation rather than being treated like a normal image and the existing video tracking system is able to follow detections across frames, but during testing I noticed that the anonymization can drift away from the actual detected regions in videos. This is the major thing I need to fix. And I also plan to do some small changes to the UI and stuff and fix some bugs there before adding the remaining pages like the API and documentation pages."}, {"post_id": 44018, "ts": "2026-08-09T14:49:05Z", "hours": 8.77, "text": "Since the previous dev log, I continued building the application workflow and moved beyond the initial upload interface into review/customization functionality. I first worked on the file preview system so that uploaded files can be displayed correctly even when the browser cannot natively display them. Now a preview is generated for unsupported images and documents while keeping browser previews for files that are already supported. After that, I built the results page, which is where the user can review the detections found in their uploaded file and also customise stuff for anonymisation. The biggest addition was the detection review panel. Instead of simply processing everything automatically, the interface now shows the detected content which will allow users to review individual detections and choose which ones they want to work with. A lot of the work also went into the smaller UI/UX improvements. I also fixed a ton of issues that came up while connecting the different pieces together and handling the detection data and working with different file formats. At this point, the frontend is starting to really come together and look like a real app. The next step is to connect stuff to my anonymization API. The user will be able to to select specific detections, choose how they want them anonymized, and add other customizations."}, {"post_id": 43070, "ts": "2026-08-08T04:16:11Z", "hours": 7.8842, "text": "Since the previous dev log, I continued working on the frontend and have now finished the main landing page as well as the initial anonymize/file upload page. I first started by completing the remaining parts of the landing page by adding the footer, API description section, and some final component layout and CSS improvements. After that, I started building the anonymize page, which is where the actual application workflow begins. I implemented the complete upload interface with both file selection and drag and drop feature. I also added client side file handling so uploaded files can be passed from the landing page to the anonymize page without having to upload them to the server first. To do this, I implemented a small IndexedDB based file storage system in the browser. Uploaded files are temporarily stored locally with a timestamp allowing the anonymize page to retrieve the file when the user arrives there. The stored file automatically expires after a short period and is also removed once it has been retrieved. This keeps the upload flow client side and also avoids putting the file data into the URL or sending it to the backend before processing when not needed. The anonymize page now also handles different file types correctly and displays a preview based on their type. I also added different anonymization options making it straightforward to pass the processing preferences to the backend. I too spent time fixing bugs and adding small UX improvements across the new frontend functionality. Next I am going to connect the interface to the backend API and build the actual processing experience. Rather than anonymizing everything automatically, I will create a processing page where the user will be able to decide what to anonymize and I will probably add more customization."}, {"post_id": 41878, "ts": "2026-08-06T11:22:26Z", "hours": 9.1442, "text": "Since the previous dev log I’ve been completely focused on the frontend. I first set up the frontend stack by integrating Tailwind CSS for styles and Alpine.js for lightweight interactivity. I also created a reusable layout with shared components such as the header that future pages can be built consistently and easily. With that foundation in place, I began implementing the landing page. I designed and built the hero section, which consists of a cool drag and drop upload area, and an interactive before/after comparison slider that allows users to visually compare original and anonymized images, which makes the landing page looks awesome. Besides frontend work, I made a few backend improvements as well, including cleaning up temporary video files after processing to avoid leaving unnecessary files behind as originally they weren’t properly disposed of. Next I plan to continue working on the landing page for a bit by adding a footer and maybe some other useful section before connecting everything to the existing API and implementing the upload and processing workflow and building the remaining pages needed."}, {"post_id": 40707, "ts": "2026-08-04T12:12:59Z", "hours": 5.1222, "text": "I focused on preparing everything for the frontend rather than adding new features. I reorganized the API by moving all routes into a dedicated package and grouping every endpoint under /api/v1. This gives everything a much cleaner structure and makes everything look professional. I also added detection endpoints for all supported files. Before the project was primarily focused on anonymization, and even though I had a detection endpoint, it only supported images and was buggy. These new endpoints allows receiving detection results directly without applying any effects and serve as a foundation for selective anonymization that I will implement later. While implementing these endpoints, I refactored how detection IDs are handled across the application. Before they too were buggy but I got them to work. I not only worked on the backend but also worked on the frontend by laying out it’s initial structure that I will build upon. I also spent some time cleaning up the codebase by removing unused imports and simplifying parts of the project. Now I plan to really start working on building the frontend. Now that the API structure is in place, I want to focus on creating a professional looking interface that allows users to interact with all of the functionality that has been implemented so far plus more."}, {"post_id": 40104, "ts": "2026-08-03T14:28:55Z", "hours": 7.8764, "text": "I expanded the range of file types that the application supports. Image support now includes TIFF/TIF, HEIC/HEIF, and GIF files. HEIC/HEIF images are automatically converted to PNG after processing since they are not widely supported for encoding. I also added support for documents which include PDF, DOCX, PPTX, and XLSX files. Rather than building separate anonymization logic for every Office file format, they are first converted to PDF and then are annonymized the same way as PDFs which keeps the implementation much simpler. While working on adding support for these files, I noticed that I had a bunch of duplicated code. So I spent some time refactoring stuff and removing duplicated stuff. I also found that GIF processing was slow so I worked on making it faster by treating it the same as a video and using trackers on it rather than running detection on every frame. I also made few smaller improvements, including adjusting the confidence thresholds for some of the detectors since I was noticing a bunch of false positives and fixing several bugs that came along the way. The next thing I plan to work on are cleaning up the code by finding and removing unused stuff, and then building the frontend for the application."}, {"post_id": 39358, "ts": "2026-08-02T09:02:20Z", "hours": 4.3503, "text": "I focused on improving the performance and maintainability of the anonymization system rather than adding new features. The biggest change was a refactor of the video anonymization system. Instead of repeatedly creating new anonymization masks for every frame, the tracker now caches and reuses them wherever possible. This reduces unnecessary work during video processing and also makes it easier in the future to add further performance improvements. I also improved the applications behavior by preventing both full text anonymization and PII anonymization to be selected at the same time since these targets overlap and would produce redundant processing. I also cleaned up several parts of the codebase by removing unused code and making the everything a bit easier to maintain. I also spent a lot of time experimenting with more aggressive optimization techniques but after testing, I decided to postpone those changes because they added complexity without providing the improvement I was looking for (and they were kind of buggy and it would take a lot more time to fix them). Instead, I decided to focus on optimizations that are simpler. Right now I don’t plan to work on improving the performance (even though there probably are tons of improvements to be made) because that stuff is boring and difficult as hell. Instead I’m going to add support for more file types like PDF."}, {"post_id": 38921, "ts": "2026-08-01T14:49:34Z", "hours": 4.2206, "text": "I expanded the anonymization system by adding multiple anonymization modes instead of having only the pixelization effect. The application can now switch between anonymizing regions using blur, solid fill, noise, emoji overlay, and inpainting. The emoji overlay right now is pretty basic but I plan on improving it later. I also improved the quality of face anonymization by replacing rectangular masks with elliptical masks (for some of the effects), producing better looking results. I also refactored the anonymization pipeline to separate anonymization effects from overlay rendering making future additions even easier and also cleaned up and reorganized the existing image effect implementations to improve readability and consistency across the project. Next, I plan to improve the performance of the anonymization system by trying to reuse detection targets and effect masks wherever possible."}, {"post_id": 38713, "ts": "2026-08-01T08:01:59Z", "hours": 2.0572, "text": "I improved the overall quality and efficiency of the video anonymization system. I updated detection intervals to use the video’s frame rate instead of relying on a hard coded number of frames. This allows the system to adapt well to videos with different frame rates. I also evaluated several object tracking algorithms, including DaSiamRPN, to find a good one that balances accuracy and speed. After comparing the performance of a bunch of them, I switched to Nano Tracker which was faster than my original KCF and CSRT trackers while being more accurate. I made additional improvements to privacy by removing metadata from exported videos. I am now also applying EXIF orientation before processing ensuring that images taken from different devices are processed in their correct orientation. Next, I plan to introduce different anonymization modes like blur and solid black boxes."}, {"post_id": 38633, "ts": "2026-08-01T04:05:36Z", "hours": 6.9461, "text": "I focused on adding support for videos. I first implemented a basic video anonymization system so uploaded videos could be processed the same way as images. I also made sure that the audio for the video is preserved so that it carries over to the anonymized video being unchanged. After getting the basic system working, I improved how videos are processed by adding object tracking and scene change detection. Instead of running detections on every frame, the system can now follow previously detected objects across frames and automatically run detections again when needed (when a tracker is lost, or the scene changes drastically, or periodically after a set amount of frames). This provides a great performance boost while the result stays reliable. Next, I want to continue improving video processing by optimizing it further and making it more accurate."}, {"post_id": 37518, "ts": "2026-07-30T10:23:19Z", "hours": 3.8147, "text": "I focused on improving the entire OCR system, as the previous approach with EasyOCR was missing too much text and reducing the accuracy of the entire system. After spending quite a bit of time trying to improve it, I decided to replace it with PaddleOCR. Now more accurate text detections are being produced making the entire program more robust. After, I expanded the regex based detectors to also account for URLs in addition to emails, etc. I also improved the phone number detection logic to reduce false positives and improve overall accuracy. Then, I adjusted padding around blurred regions so that stuff is covered more consistently and without blurring unnecessary content. The last thing I did was optimizing PaddleOCR as it was much slower than EasyOCR. After a lot of tinkering I was able to significantly reduce its processing time. For some files it now performs at roughly the same speed as EasyOCR while being way more accurate. Next, I probably want to add support for more file types and ultimately videos. And later also support for multiple languages."}, {"post_id": 36966, "ts": "2026-07-29T12:14:19Z", "hours": 3.4994, "text": "I added a new way for the app to detect personal information by using named entity recognition. Previously, the app could only find structured information like emails and phone numbers, but it could not detect things like names. So I integrated Presidio to identify such information from the text extracted from images. These extractions are then combined with the existing PII detections done using regex for the structured stuff. This improves the accuracy of the entire system by combining multiple detection methods instead of relying on one single approach. Next, I will improve the detection process further as right now it isn’t too accurate, mostly because I think the OCR is missing some stuff from the text. So I might try replacing it or find some other way."}, {"post_id": 36365, "ts": "2026-07-28T13:10:24Z", "hours": 6.6581, "text": "I implemented PII detection, allowing the app to identify and blur sensitive information within the text extracted from images instead of blurring everything blindly. First I used regular expressions to detect structured data such as email addresses, phone numbers, etc. But OCR frequently omitted punctuation, causing many valid emails to be missed. To fix this, I redesigned the everything around an OCR token graph. Each token stores its bounding box, neighboring tokens, and line information, allowing the detections to be more accurate. I might switch to PaddleOCR again or someother ocr so that I get more accurate detections. I also spent time improving the overall design of the PII detection system. These changes make it easier to extend in the future while improving the accuracy of the detected regions that are blurred. Next, I will implement NER based detection to identify unstructured personal information such as names."}, {"post_id": 21527, "ts": "2026-07-03T15:19:19Z", "hours": 5.6331, "text": "I implemented OCR-based text detection, allowing the application to detect text within uploaded images. I initially used PaddleOCR, but found that it took over 30 seconds to process a single image. After spending a lot of time trying to optimize its performance, I decided to switch to EasyOCR, which reduced the processing time to around one second while maintaining the same detection quality. Switching the OCR engines was well worth it. I also tried to keep the OCR implementation consistent with the face and license plate detectors and also optimized them too. Next, I will implement detection of sensitive information within the extracted text using regular expressions and NER. This will allow the application to distinguish ordinary text from personal information such as names, emails, phone numbers, etc, and allow me to blur only the relevant regions (right now the the entirety of the detected text is blurred)."}, {"post_id": 20974, "ts": "2026-07-02T18:27:02Z", "hours": 3.4869, "text": "I expanded the application by adding support for license plate detection and blurring. The app can now detect both faces and license plates in an image and blur them. I also made the API more flexible by allowing users to choose what they want to anonymize. Instead of always processing everything, they can now select whether to detect faces, license plates, or both. This makes the application more efficient and easier to extend with new features in the future. I also improved the structure of the project so that adding new types of detections will require much less work. I also added unique ids to each detection, which will be useful for future features that let users blur individual detections. Next, I will implement detection of sensitive text within images. This will allow the app to identify information such as email addresses, phone numbers, and other personal details, then blur them."}, {"post_id": 20600, "ts": "2026-07-02T07:10:58Z", "hours": 1.7692, "text": "I focused on improving the backend rather than adding new features. I reorganized the API by splitting it into smaller, more focused endpoints. For example, there’s now a dedicated endpoint that only detects faces and returns their locations, while separate endpoints handle image anonymization and API health checks. This makes the API easier to use and gives me more flexibility as I add new features. I also reorganized the detection system so that all object detection goes through a single service. At the moment it only detects faces, but it’s now much easier to add support for other types, such as license plates, without having to redesign the rest of the application. Health check endpoints let the application report whether it’s running correctly and whether the AI models have loaded successfully. Next I’m going to add detection beyond faces by adding license plate detection. These changes are gonna make it much easier for me to do so."}, {"post_id": 20144, "ts": "2026-07-01T18:06:28Z", "hours": 2.2011, "text": "I spent some time refining the face anonymization system. The pixelation effect was completely reworked to produce smoother, better looking results while blurring the faces more accurately (using the previous blur you could sometimes make out the features of the people). I also cleaned up the implementation, making the blur functionality much simpler and easier to maintain and most importantly I made it more reusable for ease of use in the future for more features. Behind the scenes, I also reorganized the project’s Python environment by removing unused libraries and recreating the virtual environment. Next I am planning to either add support for videos or make the API better by creating more focused routes such as one that only detects faces and other that returns the blur image. I also want to add functionality where the user can select which people to anonymize instead of blurring everybody detected. After that, I’ll expand beyond simple face anonymization by adding support for automatically detecting and anonymizing other sensitive information, such as license plates, documents, and other personally identifiable content."}, {"post_id": 19929, "ts": "2026-07-01T11:30:11Z", "hours": 4.4158, "text": "Replaced the temporary grayscale filter with automatic face anonymization. Uploaded images are now scanned for faces, and every detected face is pixelated. I also improved detection accuracy to reduce missed faces by tweaking a bunch of stuff for a while and adding more functionality to my face detection like running the image at multiple sizes. A lot of my time was also spent making the pixelated effect look good. I first went for only blurring the faces but now the face is pixelated along with a smooth transition into the surrounding image making the effect look pretty good. Right now images with large crowds are correctly blurred, including people who are far away or appear very small in the image."}, {"post_id": 19370, "ts": "2026-06-30T17:34:05Z", "hours": 1.9744, "text": "Integrated OpenCV so uploaded images are now decoded, processed, and returned to the client. I also introduced modularity into the code by creating separate modules for each step. The grayscale filter is only a temporary placeholder before I implement functionality such as blurring faces."}, {"post_id": 19094, "ts": "2026-06-30T09:42:15Z", "hours": 0.4869, "text": "Added image upload functionality with validation for missing files and non image uploads. The API right now only returns basic metadata about the upload. Next I’ll integrate OpenCV to begin the image processing stage."}, {"post_id": 19079, "ts": "2026-06-30T08:42:18Z", "hours": 0.6667, "text": "Set up the project’s foundation by creating Flask application structure, initializing Git, creating a virtual environment, and organizing the codebase for future features. I also got the development server running to verify everything is wired up correctly. Next, I’ll implement image uploads."}]...
|
Title: Blur Stuff by @AbdurRehman | Stardance
Dev Title: Blur Stuff by @AbdurRehman | Stardance
Devlogs:
Set up the project’s foundation by creating Flask application structure, initializing Git, creating a virtual environment, and organizing the codebase for future features. I also got the development server running to verify everything is wired up correctly. Next, I’ll implement image uploads.
Added image upload functionality with validation for missing files and non image uploads. The API right now only returns basic metadata about the upload. Next I’ll integrate OpenCV to begin the image processing stage.
Integrated OpenCV so uploaded images are now decoded, processed, and returned to the client. I also introduced modularity into the code by creating separate modules for each step. The grayscale filter is only a temporary placeholder before I implement functionality such as blurring faces.
Replaced the temporary grayscale filter with automatic face anonymization. Uploaded images are now scanned for faces, and every detected face is pixelated. I also improved detection accuracy to reduce missed faces by tweaking a bunch of stuff for a while and adding more functionality to my face detection like running the image at multiple sizes. A lot of my time was also spent making the pixelated effect look good. I first went for only blurring the faces but now the face is pixelated along with a smooth transition into the surrounding image making the effect look pretty good. Right now images with large crowds are correctly blurred, including people who are far away or appear very small in the image.
I spent some time refining the face anonymization system. The pixelation effect was completely reworked to produce smoother, better looking results while blurring the faces more accurately (using the previous blur you could sometimes make out the features of the people). I also cleaned up the implementation, making the blur functionality much simpler and easier to maintain and most importantly I made it more reusable for ease of use in the future for more features. Behind the scenes, I also reorganized the project’s Python environment by removing unused libraries and recreating the virtual environment. Next I am planning to either add support for videos or make the API better by creating more focused routes such as one that only detects faces and other that returns the blur image. I also want to add functionality where the user can select which people to anonymize instead of blurring everybody detected. After that, I’ll expand beyond simple face anonymization by adding support for automatically detecting and anonymizing other sensitive information, such as license plates, documents, and other personally identifiable content.
I focused on improving the backend rather than adding new features. I reorganized the API by splitting it into smaller, more focused endpoints. For example, there’s now a dedicated endpoint that only detects faces and returns their locations, while separate endpoints handle image anonymization and API health checks. This makes the API easier to use and gives me more flexibility as I add new features. I also reorganized the detection system so that all object detection goes through a single service. At the moment it only detects faces, but it’s now much easier to add support for other types, such as license plates, without having to redesign the rest of the application. Health check endpoints let the application report whether it’s running correctly and whether the AI models have loaded successfully. Next I’m going to add detection beyond faces by adding license plate detection. These changes are gonna make it much easier for me to do so.
I expanded the application by adding support for license plate detection and blurring. The app can now detect both faces and license plates in an image and blur them. I also made the API more flexible by allowing users to choose what they want to anonymize. Instead of always processing everything, they can now select whether to detect faces, license plates, or both. This makes the application more efficient and easier to extend with new features in the future. I also improved the structure of the project so that adding new types of detections will require much less work. I also added unique ids to each detection, which will be useful for future features that let users blur individual detections. Next, I will implement detection of sensitive text within images. This will allow the app to identify information such as email addresses, phone numbers, and other personal details, then blur them.
I implemented OCR-based text detection, allowing the application to detect text within uploaded images. I initially used PaddleOCR, but found that it took over 30 seconds to process a single image. After spending a lot of time trying to optimize its performance, I decided to switch to EasyOCR, which reduced the processing time to around one second while maintaining the same detection quality. Switching the OCR engines was well worth it. I also tried to keep the OCR implementation consistent with the face and license plate detectors and also optimized them too. Next, I will implement detection of sensitive information within the extracted text using regular expressions and NER. This will allow the application to distinguish ordinary text from personal information such as names, emails, phone numbers, etc, and allow me to blur only the relevant regions (right now the the entirety of the detected text is blurred).
I implemented PII detection, allowing the app to identify and blur sensitive information within the text extracted from images instead of blurring everything blindly. First I used regular expressions to detect structured data such as email addresses, phone numbers, etc. But OCR frequently omitted punctuation, causing many valid emails to be missed. To fix this, I redesigned the everything around an OCR token graph. Each token stores its bounding box, neighboring tokens, and line information, allowing the detections to be more accurate. I might switch to PaddleOCR again or someother ocr so that I get more accurate detections. I also spent time improving the overall design of the PII detection system. These changes make it easier to extend in the future while improving the accuracy of the detected regions that are blurred. Next, I will implement NER based detection to identify unstructured personal information such as names.
I added a new way for the app to detect personal information by using named entity recognition. Previously, the app could only find structured information like emails and phone numbers, but it could not detect things like names. So I integrated Presidio to identify such information from the text extracted from images. These extractions are then combined with the existing PII detections done using regex for the structured stuff. This improves the accuracy of the entire system by combining multiple detection methods instead of relying on one single approach. Next, I will improve the detection process further as right now it isn’t too accurate, mostly because I think the OCR is missing some stuff from the text. So I might try replacing it or find some other way.
I focused on improving the entire OCR system, as the previous approach with EasyOCR was missing too much text and reducing the accuracy of the entire system. After spending quite a bit of time trying to improve it, I decided to replace it with PaddleOCR. Now more accurate text detections are being produced making the entire program more robust. After, I expanded the regex based detectors to also account for URLs in addition to emails, etc. I also improved the phone number detection logic to reduce false positives and improve overall accuracy. Then, I adjusted padding around blurred regions so that stuff is covered more consistently and without blurring unnecessary content. The last thing I did was optimizing PaddleOCR as it was much slower than EasyOCR. After a lot of tinkering I was able to significantly reduce its processing time. For some files it now performs at roughly the same speed as EasyOCR while being way more accurate. Next, I probably want to add support for more file types and ultimately videos. And later also support for multiple languages.
I focused on adding support for videos. I first implemented a basic video anonymization system so uploaded videos could be processed the same way as images. I also made sure that the audio for the video is preserved so that it carries over to the anonymized video being unchanged. After getting the basic system working, I improved how videos are processed by adding object tracking and scene change detection. Instead of running detections on every frame, the system can now follow previously detected objects across frames and automatically run detections again when needed (when a tracker is lost, or the scene changes drastically, or periodically after a set amount of frames). This provides a great performance boost while the result stays reliable. Next, I want to continue improving video processing by optimizing it further and making it more accurate.
I improved the overall quality and efficiency of the video anonymization system. I updated detection intervals to use the video’s frame rate instead of relying on a hard coded number of frames. This allows the system to adapt well to videos with different frame rates. I also evaluated several object tracking algorithms, including DaSiamRPN, to find a good one that balances accuracy and speed. After comparing the performance of a bunch of them, I switched to Nano Tracker which was faster than my original KCF and CSRT trackers while being more accurate. I made additional improvements to privacy by removing metadata from exported videos. I am now also applying EXIF orientation before processing ensuring that images taken from different devices are processed in their correct orientation. Next, I plan to introduce different anonymization modes like blur and solid black boxes.
I expanded the anonymization system by adding multiple anonymization modes instead of having only the pixelization effect. The application can now switch between anonymizing regions using blur, solid fill, noise, emoji overlay, and inpainting. The emoji overlay right now is pretty basic but I plan on improving it later. I also improved the quality of face anonymization by replacing rectangular masks with elliptical masks (for some of the effects), producing better looking results. I also refactored the anonymization pipeline to separate anonymization effects from overlay rendering making future additions even easier and also cleaned up and reorganized the existing image effect implementations to improve readability and consistency across the project. Next, I plan to improve the performance of the anonymization system by trying to reuse detection targets and effect masks wherever possible.
I focused on improving the performance and maintainability of the anonymization system rather than adding new features. The biggest change was a refactor of the video anonymization system. Instead of repeatedly creating new anonymization masks for every frame, the tracker now caches and reuses them wherever possible. This reduces unnecessary work during video processing and also makes it easier in the future to add further performance improvements. I also improved the applications behavior by preventing both full text anonymization and PII anonymization to be selected at the same time since these targets overlap and would produce redundant processing. I also cleaned up several parts of the codebase by removing unused code and making the everything a bit easier to maintain. I also spent a lot of time experimenting with more aggressive optimization techniques but after testing, I decided to postpone those changes because they added complexity without providing the improvement I was looking for (and they were kind of buggy and it would take a lot more time to fix them). Instead, I decided to focus on optimizations that are simpler. Right now I don’t plan to work on improving the performance (even though there probably are tons of improvements to be made) because that stuff is boring and difficult as hell. Instead I’m going to add support for more file types like PDF.
I expanded the range of file types that the application supports. Image support now includes TIFF/TIF, HEIC/HEIF, and GIF files. HEIC/HEIF images are automatically converted to PNG after processing since they are not widely supported for encoding. I also added support for documents which include PDF, DOCX, PPTX, and XLSX files. Rather than building separate anonymization logic for every Office file format, they are first converted to PDF and then are annonymized the same way as PDFs which keeps the implementation much simpler. While working on adding support for these files, I noticed that I had a bunch of duplicated code. So I spent some time refactoring stuff and removing duplicated stuff. I also found that GIF processing was slow so I worked on making it faster by treating it the same as a video and using trackers on it rather than running detection on every frame. I also made few smaller improvements, including adjusting the confidence thresholds for some of the detectors since I was noticing a bunch of false positives and fixing several bugs that came along the way. The next thing I plan to work on are cleaning up the code by finding and removing unused stuff, and then building the frontend for the application.
I focused on preparing everything for the frontend rather than adding new features. I reorganized the API by moving all routes into a dedicated package and grouping every endpoint under /api/v1. This gives everything a much cleaner structure and makes everything look professional. I also added detection endpoints for all supported files. Before the project was primarily focused on anonymization, and even though I had a detection endpoint, it only supported images and was buggy. These new endpoints allows receiving detection results directly without applying any effects and serve as a foundation for selective anonymization that I will implement later. While implementing these endpoints, I refactored how detection IDs are handled across the application. Before they too were buggy but I got them to work. I not only worked on the backend but also worked on the frontend by laying out it’s initial structure that I will build upon. I also spent some time cleaning up the codebase by removing unused imports and simplifying parts of the project. Now I plan to really start working on building the frontend. Now that the API structure is in place, I want to focus on creating a professional looking interface that allows users to interact with all of the functionality that has been implemented so far plus more.
Since the previous dev log I’ve been completely focused on the frontend. I first set up the frontend stack by integrating Tailwind CSS for styles and Alpine.js for lightweight interactivity. I also created a reusable layout with shared components such as the header that future pages can be built consistently and easily. With that foundation in place, I began implementing the landing page. I designed and built the hero section, which consists of a cool drag and drop upload area, and an interactive before/after comparison slider that allows users to visually compare original and anonymized images, which makes the landing page looks awesome. Besides frontend work, I made a few backend improvements as well, including cleaning up temporary video files after processing to avoid leaving unnecessary files behind as originally they weren’t properly disposed of. Next I plan to continue working on the landing page for a bit by adding a footer and maybe some other useful section before connecting everything to the existing API and implementing the upload and processing workflow and building the remaining pages needed.
Since the previous dev log, I continued working on the frontend and have now finished the main landing page as well as the initial anonymize/file upload page. I first started by completing the remaining parts of the landing page by adding the footer, API description section, and some final component layout and CSS improvements. After that, I started building the anonymize page, which is where the actual application workflow begins. I implemented the complete upload interface with both file selection and drag and drop feature. I also added client side file handling so uploaded files can be passed from the landing page to the anonymize page without having to upload them to the server first. To do this, I implemented a small IndexedDB based file storage system in the browser. Uploaded files are temporarily stored locally with a timestamp allowing the anonymize page to retrieve the file when the user arrives there. The stored file automatically expires after a short period and is also removed once it has been retrieved. This keeps the upload flow client side and also avoids putting the file data into the URL or sending it to the backend before processing when not needed. The anonymize page now also handles different file types correctly and displays a preview based on their type. I also added different anonymization options making it straightforward to pass the processing preferences to the backend. I too spent time fixing bugs and adding small UX improvements across the new frontend functionality. Next I am going to connect the interface to the backend API and build the actual processing experience. Rather than anonymizing everything automatically, I will create a processing page where the user will be able to decide what to anonymize and I will probably add more customization.
Since the previous dev log, I continued building the application workflow and moved beyond the initial upload interface into review/customization functionality. I first worked on the file preview system so that uploaded files can be displayed correctly even when the browser cannot natively display them. Now a preview is generated for unsupported images and documents while keeping browser previews for files that are already supported. After that, I built the results page, which is where the user can review the detections found in their uploaded file and also customise stuff for anonymisation. The biggest addition was the detection review panel. Instead of simply processing everything automatically, the interface now shows the detected content which will allow users to review individual detections and choose which ones they want to work with. A lot of the work also went into the smaller UI/UX improvements. I also fixed a ton of issues that came up while connecting the different pieces together and handling the detection data and working with different file formats. At this point, the frontend is starting to really come together and look like a real app. The next step is to connect stuff to my anonymization API. The user will be able to to select specific detections, choose how they want them anonymized, and add other customizations.
Since the previous dev log, I continued building the application workflow and have almost completed the anonymization process. I first worked on the anonymization routes and updated the backend so that the frontend can send detected regions back to the API and have them anonymized. This allows the user to choose which detections they want to anonymize instead of always having to process everything. I also added support for passing dynamic padding (and also made it so that other dynamic stuff is easy to add later) through the request so that the effects can be customized based on what the user wants. I also added client side file handling required for the results page. The original and processed files are kept available in the browser so they can be previewed and downloaded without needing to be stored on the server. Everything also handles missing files and stuff without breaking and I also added error handling with notifications which are displayed to the user. I also made a bunch of smaller UI improvements while connecting everything together. At this point, the main frontend workflow is coming together. Next I will fix small remaining issues and improve reliability rather than adding any major change. The next things I plan to work on are to mainly fix bugs in the code. Like GIFs still need some additional handling to make sure detections are applied across the animation rather than being treated like a normal image and the existing video tracking system is able to follow detections across frames, but during testing I noticed that the anonymization can drift away from the actual detected regions in videos. This is the major thing I need to fix. And I also plan to do some small changes to the UI and stuff and fix some bugs there before adding the remaining pages like the API and documentation pages.
Since the previous dev log, I worked on fixing the remaining issues in the anonymization workflow and finishing the frontend around the application. The biggest thing I worked on was selected video anonymization. There were still some problems where selected areas could stop being anonymized correctly or the anonymization could move away from the actual object as it moved through the video or retracking when something like a face was lost. I spent quite a lot of time testing different things, tracking down where the problems were coming from, and making the selected anonymization much more reliable across video frames. This ended up taking a lot more work than I initially expected, but the selected video workflow is now working much better. It still isn’t perfect and there are still some bugs and I think I probably need a lot more time to find and fix them but right now it is in a decent working state so I don’t plan to spend more time on achieving perfection because debugging and stuff is boring as hell. I also made some improvements to the overall frontend and added the remaining main pages. I added the about, arivacy, documentation pages and also did some other improvents around the frontend. The documentation now explains the available endpoints, detection targets, anonymization modes and other features. At this point, I feel like the main application is in a really good place. The core functionality is implemented, the main frontend workflow is complete, and the remaining work is mostly getting this thing hosted and stuff. Next, I plan to write the README file, host the application, and do a final round of testing and cleanup. After that, I think I’ll consider this project finished for a while (I will work on improving it further later) and move on to building something new.
Since the previous dev log, I have been focused on getting Blur Stuff ready for deployment. This ended up being much more painful than I expected. The biggest part was dealing with dependency issues. The project worked locally, but moving everything to a production environment exposed a bunch of problems with Python versions, PaddlePaddle, PaddleOCR, PaddleX, PyYAML, spaCy, OpenCV and other dependencies. I spent a lot of time testing different configurations, fixing dependency conflicts, debugging the production container, and figuring out why things that seemed to work okay locally were breaking during deployment. The biggest headache was PaddleOCR. I had to deal with missing system libraries, model downloading, Paddle initialization issues and eventually a oneDNN runtime error that was causing OCR requests to return 503s. After a lot of debugging and testing different configurations, I eventually got the OCR pipeline working properly in production. That was probably the one of the most frustrating parts of the entire project, but it is finally done. I also switched the spaCy model from en_core_web_lg to en_core_web_sm. The larger model was unnecessarily heavy for what Blur Stuff needs and was making deployments take way longer. Switching to the smaller model made deployment faster and also improved performance without having a noticeable impact on the PII detection quality. After successful deployment I finished the README and added the final assets, screenshots, logo and documentation. I added the MIT license, favicon, deployment related changes and generally cleaned up the entire repository. At this point, I think Blur Stuff is ready to ship. There are definitely still improvements I could make, especially improving performance, making video anonymization more reliable and efficient, and polishing various parts of the application but I don’t want to spend more time trying to make everything perfect. The current deployment is also running on Railway’s free plan, so there are some resource and memory limitations since Blur Stuff runs several machine learning models in the same process. For now, I’m okay with that rather than spending more time optimizing around the limitations of a free deployment. For now, I’m calling it finished and shipping it since the core functionality is working and the project is deployed. I’ll definitely come back to Blur Stuff later to improve it, but I think it’s time to move on to something new.
Since shipping Blur Stuff, I got feedback that the frontend felt too generic so I completely revamped the UI to give it a more intentional and fun style. I redesigned everything from colors to typography and everything else. Now the app has a more personal feel. I also cleaned up some small things here and there.
Ships:
I made Blur Stuff, a privacy focused tool for safely sharing images, videos, GIFs, and documents. It automatically detects sensitive information such as faces, license plates, text, and PII, then lets you anonymize the detected areas with different anonymization effects. It also removes EXIF metadata so other sensitive information isn’t left hidden inside the file. The goal of this project is to make sharing media safely as easy as uploading it. Instead of manually searching through a file like a document or photo and manually covering stuff you don’t want others to see, Blur Stuff does this work for you. The hardest part of making this project was making anonymization work reliably across different types of media. Images were relatively simple, but videos and GIFs require frame by frame processing while keeping detections consistent over time. And to make things efficient and fast I also had to deal with things like tracking which were really tricky. Connecting the frontend and backend was also another challenge and then hosting everything also brought it’s problems with dependency conflicts which took quite a while to solve. The thing I am most proud of is that this became a real working and professional looking application rather than just a prototype type thing. It supports most of the commonly used media formats, has multiple customization options among other neat functionalities. Also I like how this project is privacy focused. Like it doesn’t store the user’s files ever. It just processes them, removing EXIF, and gives the result. Blur Stuff can be tested by uploading an image containing faces, text, or a license plate and let it detect the sensitive regions and then select what you want anonymized, and run the anonymization. The current deployment has limited memory and resources since I’m on a free plan, so larger videos and documents can take a while to process, and very large files may run into resource limitations. The app is also deployed using Railway’s serverless option, so the server may need a few seconds to start up if it hasn’t received a request recently. Also the selected region anonymization for videos is still a bit buggy but mostly it works. These are areas I will improve in the future....
|
1793000835.739663
|
1793087235.739663
|
|
41770
|
MacIdeas by @tonymac129 | Stardance
|
tonymac129
|
1
|
53.0
|
825
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-21T05:11:51Z", "hours": 53.0, "multiplier": 15.61, "payout": 825, "blessing": "neutral", "text": "MacIdeas is a fullstack online platform for managing, organizing, and keeping track of your work, including tasks, notes, and projects! Now, before you think this is just another generic boring todo list app and give me a 1 star in originality…, well, it kind of is a todo app, but with a ton of many different features, customization, and settings, as well as notes with a complete, functional rich text editor, folders for convenient organization, and projects for organizing your different tasks, notes, folders, and everything else into manageable groups that you can easily browse through. You can edit and assign tasks priorities, due/start dates, tags, subtasks, projects, folders, links, completion, star them, and view all the info from the details panel. There are also features like search, sort, filter, tags, views, star, emojis, and other options that make browsing, navigating, and finding items a lot easier and more efficient. To make the website accessible to everyone, MacIdeas has smooth transitions and animations, fully supports both dark and light modes (and your own background images or colors), as well as responsive design for (nearly) all screen sizes, and complete SEO metadata for each page. All you need to do is to sign in with MacWeb, the central platform for my projects’ auth and account info (since MacIdeas is one of its many apps), and you’ll be redirected back and have access to try out all those features! It has everything you would expect from a real task manager and text editor, so hopefully you’ll like my project :)", "repo": "https://github.com/Mac-Web/macideas-next", "demo": "https://macideas.macweb.app"}]...
|
[{"post_id": 71609, "ts": "202 [{"post_id": 71609, "ts": "2026-09-21T04:58:39Z", "hours": 4.6342, "text": "Last devlog: note features and final touches! MacIdeas is finally finished and ready to ship! In this last massive devlog, I added a few new quality of life features, did a ton of general/styling/auth bug fixes, and polished the entire project ! Added note content persistence, meaning you can actually save each note’s content to your account data, including its text, formatting, and everything. Autosave automatically does this every 30 seconds, but you can also manually save with ctrl+s or by pressing the save button Added a few new editor features from Tiptap for typography and general formatting to make note taking more powerful and complete You can now select custom background colors (along with custom backdrop images) to customize the appearance of each task list and note page ! The nav search had been there doing nothing ever since the first devlog , so I finally added a powerful search bar to the nav bar that uses a new API endpoint to search through all the information in all your task lists, tasks, notes, projects, and folders and displays the results as a list of links for convenient browsing and navigation! Added section descriptions and icons for the major features on the homepage Updated styling, content, code, and layout Updated the README with a demo screenshot and updated info about features Fixed a lot of bugs related to general usage, empty user data, styling issues with modals, auth redirect, and many other things I don’t want to remember to improve the overall user experience I took a one week break in this last stretch, so there was probably other stuff I did that I forgot, so hopefully my storytelling isn’t that bad"}, {"post_id": 66657, "ts": "2026-09-12T14:50:05Z", "hours": 3.7656, "text": "Rich text editing for notes! Added a complete, feature-rich, and easy to use rich text editor for creating and editing your notes! This means you can now actually take notes with features like text formatting, links, headings, lists, inline components, and a lot of other features you would expect from tools like Google Docs There is a top tool bar with a ton of options, buttons, and dropdowns organized into different functional sections (I definitely did not just copy GDocs ) to format/edit/modify your current content selection easily Most of the features support keyboard shortcuts (because of Tiptap), which you can see by hovering over the option and reading its tooltip I tried making my own web based rich text editor from scratch before, and it turned out to be a nightmare of dom manipulation and other headaches, so this time I decided to just use the library Tiptap, which itself is based on the library ProseMirror, to handle this pain in the butt Since Tiptap is completely headless, I still spent a lot of time going through its docs, installing useful extensions, learning their commands, and building, testing, and tweaking all the features to make everything work smoothly I don’t know why I’ve been neglecting actually adding notes for so long (before each note was just a blank page saying “Untitled note” that you couldn’t even edit ), but this actually turned out to be super fun to implement and the result was very rewarding Note saving doesn’t actually work yet (despite the fake “Note saved” autosave message ) since there are still some things about the editor to fix, but hopefully that’ll be implemented soon and MacIdeas will be almost ready to ship! The text editor also works with light mode, and I also updated some styling to improve the UI"}, {"post_id": 65705, "ts": "2026-09-11T01:12:55Z", "hours": 2.3211, "text": "Light mode toggle The mode option in the nav user menu now toggles the site’s entire appearance between dark and light mode to improve its customizability and accessibility Because every component has a default color transition, switching between the 2 modes has a smooth UI transition instead of flashing to the other color instantly I had to set up the theme provider and manually add the light mode Tailwind classes and the dark mode prefix for all the colors in every page and component, as well as accounting for all most of the display color edge cases, so this took quite a long time but the result was worth it, both modes look pretty consistent and visually appealing I am finally back to developing MacIdeas after taking a one month break, so I spent some time familiarizing myself with the codebase again. Hopefully this time I’ll be able to finish and ship it soon! Updated styling and layout Added and updated some dependencies"}, {"post_id": 45249, "ts": "2026-08-11T16:25:12Z", "hours": 5.2492, "text": "Project page and contents Added a dedicated page for each project that is its own file browser where you can open/interact with the contents, view their information and metadata, and search, filter, and sort through them so you can better manage and view your projects Added an option on the project page that opens a modal displaying all your folders, task lists, tasks, and notes grouped into 4 different tabs. Each item is a checkbox so you can select exactly which items to add to or remove from the project You can also search through each tab’s results and see their names and icons to make finding the right item quick and easy This seemed like a simple feature to implement but getting to cooperate was a nightmare since each item has its own data type, so organizing the data structure for both the frontend and backend required a lot of annoying unions and conditionals There is now a top bar in the project browser with the name, type, modified, and created labels which you can click on to sort the contents accordingly Each item also shows its type and modified & created times, as well as an icon where you can change the item’s emoji directly, making browsing and managing your stuff more convenient You can also edit the project’s name and description directly by clicking on the page title and text Updated styling and layout I procrastinated on this devlog for 2 days and got no work done, so I think this might be a sign for me to take a break from Stardance for a few days since I also need to work on hosting 8-Bit Jam (awesome game jam, if you live near nova plz go register ) and other stuff, so there won’t be new devlogs in a while"}, {"post_id": 43395, "ts": "2026-08-08T16:42:33Z", "hours": 1.8381, "text": "Project browser Added a project browser/file explorer to the project dashboard where you can search, view, and open projects and folders to browse their content ! I decided to build this file explorer instead of just a simple dashboard because I got bored and wanted to make something different, and it would make more sense to do this for projects since they are essentially just folders This file explorer is pretty similar to Google Drive and other cloud storage services, you can double click a project or folder to change directory and view its content (tasks, task lists, notes, other folders), and go back/navigate to other levels with navigation breadcrumbs I thought this would be difficult to implement and would need some kind of breadcrumb library and it turned out to be pretty simple Only projects are styled and can be opened right now, but folders and other stuff will be added in the next update! Added a menu option for adding task/note folders to projects. It opens a modal where you can view and select all the projects you’re adding the folder to, and it’ll show up in the project explorer Updated styling and content"}, {"post_id": 43017, "ts": "2026-08-08T01:36:42Z", "hours": 3.7031, "text": "Note and project management Added more note management features for editing, deleting, starring, and moving notes, as well as a dashboard for the notes page (similar to the one for tasks) You can now move notes in/out of different folders by selecting the move option and choosing the folder in the modal popup menu. You can also edit which notes are in a folder by clicking on its edit option, where you can check all the notes you want in a folder Added a top tool bar to each note page (similar to the tool bar for task lists) with the note’s emoji (clicking it opens the emoji menu where you can choose or clear the icon), name (clicking on it renamed the note), description (clicking on it also makes it editable), and current folder information displayed The tool bar also has options to upload a custom background image with an upload modal (similar to task lists), choose a custom theme (not implemented yet), star/unstar, or delete after confirming Added a sidebar for the projects page where you can create, manage, view, add icon, rename, star/unstar, and delete your projects (basically the same as the notes and tasks sidebar) Since many of the features are basically identical or very similar to tasks/task lists, I just used the existing components and copied and modified some stuff, so all these features were pretty easy and quick to implement Added recent, starred, and organized by tag sections to the notes dashboard so you can view and manage your notes more easily. You can also customize the dashboard by selecting the sections in the settings panel Updated schema and types Updated styling and layout Fixed background shadow overlay and a few other display/styling issues"}, {"post_id": 42076, "ts": "2026-08-06T17:10:52Z", "hours": 5.1608, "text": "Notes and custom backgrounds I coded for 5 hours yesterday and made a lot of progress but completely forgot to devlog , so this devlog will be a bit longer (as if my usual devlogs aren’t already long enough) to hopefully keep my storytelling good 🥺 Added the notes tab, which is the second major part of MacIdeas (the other being tasks and projects) that shares a basically identical layout with tasks, so I only had to copy a few components, modify some variables, imports, and database operations, and add new schema models and server actions to make note management work properly, though it still took quite a bit of time Currently only the sidebar is implemented for notes (instead of the actual note taking/editing part), but you can create new notes, rename them, choose their custom emojis, delete them, create and manage folders, and create notes inside folders from there You can also navigate to each note by clicking on it, but the page is blank for now. Notes share folders with tasks, so folders you make in notes also show up in tasks, and vice versa, although the specific tasks/notes in the folder aren’t displayed on the notes/tasks tab to keep organization simple (hopefully I didn’t phrase this too confusingly , maybe I’ll add an option to show both in settings) Also added projects (the third major part of MacIdeas), which are basically labels/folders that you can put tasks, task lists, folders, and notes in to conveniently keep everything related to a big project in one place Right now you can only create projects through the create project button on the sidebar and can’t do anything else with them, since I’ll only start working on projects after I finish notes Added buttons where you can upload a custom background image or select a color theme (not implemented yet) for each individual task list to make customization even better and personalized! When you click on the custom background option, an upload modal appears where you can upload a png/jpg/webp <4MB to be the background! I originally tried using uploadthing since it was the only object storage service I worked with, but I just couldn’t get the event hooks to load or work at all despite copying stuff from my old project and wasting an hour researching , so I decided to settle with Vercel Blobs (because it’s already hosted on Vercel) and it’s actually so much faster and easier to set up/integrate Some of the components are opaque, so they look kind of weird with a custom background, so I’ll be fixing that soon, but for the most part custom backgrounds actually look decent somehow Task lists without a custom background have a black overlay shadow that’s out of place, so that has to fixed too Also added a bunch of random small quality of life features and adjustments that I don’t remember without looking at my commits Updated schema and types Updated styling"}, {"post_id": 41429, "ts": "2026-08-05T17:05:00Z", "hours": 3.1761, "text": "Dashboard customization and My Day Added settings for customizing your personal tasks page dashboard, where you can select which tasks to show and which task filter sections to display on your main tasks page to make it completely customized You can access the settings modal by clicking on the gear icon on the top right of the tasks page, where you can select the checkboxes that you want to show on the page. You can reset the settings defaults as well by clicking on the reset option and confirming Dashboard tasks now also show their priority and tags All your homepage settings and customization are automatically saved to the account backend so the settings are synced across all your devices Added the “My Day” page that shows all your tasks that either start or due today (in your local timezone, refreshes daily automatically), or you can add custom tasks for the day here without putting it in any task list to help plan out your day better My Day is essentially a special task list and you can do all the stuff you can do with normal tasks and task lists (browsing, sorting, managing, etc.), and it shows up as its own tab on the left sidebar. I thought this would be hard to implement architecturally, but I just had to add a few fields and conditionals to make it work properly Added the tags dashboard section where you can view all the tasks with a certain tag Updated the data fetching logic for the dashboard to be more efficient, optimized, and customized according to the settings Updated schema and constants Updated styling Updated README Fixed a few visual bugs"}, {"post_id": 40963, "ts": "2026-08-04T20:46:14Z", "hours": 2.8342, "text": "Dashboard and Subtasks Added a few interactive widgets to the task dashboard showing tasks grouped in different categories so you can browse all your tasks quickly and easily The different task widgets, each with a different icon, are starred, priority, upcoming, starting soon, recent, and tag tasks. The widgets basically act like filters for all your tasks across all task lists so you don’t need to manually dig through them to find what you’re looking for You can now add subtasks to your tasks! Subtasks are basically just very simple tasks without any of the fancy features (since that would be annoying to implement and it’s just pretty impractical) that are just smaller steps broken down from the main task You can add, view, and manage (completing, renaming, or deleting) each task’s subtasks sorted by completion status in the task details panel, and you can see each task’s subtasks directly displayed below the main task You can also mark subtasks as completed by clicking on the circle on the task item, and the text will be striked through and grayed out Added a home/task dashboard link to the left sidebar Updated schema and types Updated styling and layout Updated README with more detailed info and specific features"}, {"post_id": 40514, "ts": "2026-08-04T03:06:03Z", "hours": 3.7111, "text": "Priority and folders! You can now assign an importance priority flag for each task to better keep track of your most important todos and manage/view them more easily with this feature ! You can change the priority of a task by clicking on one of the 4 options in the priority dropdown that appears when you hover over the task. Each priority has a different color (none-transparent, low-green, medium-yellow, high-red) to help distinct them visually. If a task has a priority, the status is permanently stickied on the task so it’s always visible You can sort and filter tasks by priority as well to automatically group and view your most important tasks You can customize the new task’s priority by changing the new task input field’s priority dropdown menu. You can also edit a task’s priority in the task details panel You can now create custom folders to group and organize your task lists by clicking on the create folder option on the task sidebar ! Clicking on the folder toggles the visibility of its task list content, and hovering over it shows an options icon that opens a menu where you can edit, rename, change the folder icon color, or delete the folder The edit option opens a modal where you can search and select the task lists to add or remove from the folder The rename option turns the folder name into an input that saves on blur, the color option shows a color picker for the icon color, and the delete option deletes the folder and its task lists after confirmation You can also directly create new task lists inside a folder by clicking on the add option on the folder. You can move task lists in/out of folders as well by clicking on the move option, which opens a similar modal where you can search and select which folder to move the task to Drag and drop for moving task lists in/out of folders isn’t implemented yet, because it’s actually quite a challenging thing to do (for me) , but hopefully I’ll have time to try to implement it Updated schema and types Updated UI components and styling Fixed display overflow height styling issues"}, {"post_id": 40161, "ts": "2026-08-03T15:52:29Z", "hours": 2.6514, "text": "Due dates and more random features You can now add due dates and start dates to tasks to better keep track of them and remind yourself when to stop procrastinating and actually get to work ! When you click on the calendar icon on a task, a modal shows up with 2 fields where you can pick the precise date and time for when the task starts/dues. I used the kind of outdated library Flatpickr for this since I was too lazy to build my own calendar time picker thing You can also clear/remove the selected time by clicking on the x icon next to the date field. Save the changes by clicking on the save button You can edit/select the times by clicking on the date fields in the task details panel as well. Start and due dates show up as a small text below the main task on the page so you can easily see when each task is due Added options to sort tasks by due and start dates so you can see which tasks are coming up soon! Also added a separate section in the filter dropdown for filtering by your own tags to better organize and view your different tasks The pen edit/rename option on the task list is now finally implemented! Clicking on it turns the task text into an input field that you can edit, and the new name is saved when you click away from it The tag, calendar, and star icons on the task input field now do something for the new task! Similar to task items, the tag and calendar options both open a modal for you to select the options for the new task, and the star icon marks it as starred. This makes it a lot easier to customize the task before actually adding it to the list Updated schema and types Updated styling and UI components Fixed a legacy dependency (Emoji Mart is unmaintained ) compatibility issue that caused a few previous commits to fail in production build Not gonna lie I’m pretty proud of the UI and layout all the different options and components actually sort of make MacIdeas look like a legit app There seems to be an issue with Firefox screenshots that fails to capture the modal’s background blur for the screenshot so it’s kinda weird"}, {"post_id": 39667, "ts": "2026-08-02T19:52:59Z", "hours": 3.9036, "text": "Tags and emojis Added task tags that you can customize and assign to different task items to better categorize and organize them! You’ll be able to group/sort by tags in the future as well, making browsing and managing tasks even more convenient When you click on the tag icon while hovering over a task item, the tag modal appears listing all the tags you created, a search bar for the tasks, as well as options to create new tags and save your selection Each tag on the modal is a checkbox, meaning you can simply check/uncheck the tags to assign them to the task Clicking on the create option displays an input where you can add a new tag that gets added to the revalidated menu Each tag also has an icon that opens a menu of options to rename, select an emoji, pick a color, and delete the tag. The rename option turns the tag into an input that you can edit, the emoji option opens the emoji picker (you can clear an existing emoji as well) so you can choose a custom icon for the tag, the color option opens a color picker where you can edit the tag’s background, and the delete option deletes the tag after confirmation There’s an option on the modal to clear all the currently assigned tags from the task item as well Up to 3 tags are displayed for each task on the task list page, and you can view all the tags a task has in the details panel (where you can open the tag modal and edit the tags too) You can now also choose an emoji for each task list by either clicking on the sidebar icon or the top bar icon! It opens an emoji picker with an option to clear the existing emoji as well Updated schema and types Updated styling and layout Fixed display height issue Fixed legacy dependency deployment issue"}, {"post_id": 38980, "ts": "2026-08-01T16:28:02Z", "hours": 1.9678, "text": "Browse & complete tasks You can now browse and filter through tasks to view and manage them more easily with the new sorting and filtering options! You can also finally mark tasks as completed once you finish them On the task list page tool bar, there’s a search bar that searched through tasks by their name and description, dropdown menus for sorting (by name, created, updated, due date, etc., some aren’t implemented yet), filtering (by starred, completion status, etc.), and ascending/descending display order to help you find and browse tasks more easily ! There’s also a checkbox that toggles the visibility of completed tasks, since they are hidden by default to avoid cluttering the page You can mark a task as completed by either clicking/checking the circle icon on each task item or selecting the completed checkbox on the task details page Incomplete and completed tasks are each grouped together regardless of sorting order to avoid confusion Completed tasks are striked through and grayed out to help with distinction. You can remark them as incomplete again any time by clicking on the icon again Fixed an annoying container height overflow display layout issue (implementing responsive design on this will be a pain in the butt ) Updated styling and layout I accidentally closed the window while recording the video so I had to rewrite this entire devlog again from memory , Stardance team please make a save devlog button like with Flavortown 🥺"}, {"post_id": 38563, "ts": "2026-08-01T01:19:19Z", "hours": 2.6092, "text": "Task creation & management You can now actually add, view, and manage your tasks in MacIdeas! You can add tasks, view details, edit, star, and delete them by clicking on the task item icons When you add a task, a task item gets added to the task list page, which when hovered shows icons/buttons to edit, manage tags, change due date, star, or delete the task. There’s also a circle on the left where you can mark the task as completed (none of these buttons work yet other than star and delete ) Clicking on the task item itself opens an animated panel on the side (similar to a lot of todo apps and the Slack profile panel) with input and textarea fields for editing the task and its description, as well as checkboxes to mark/unmark the task as completed or starred The task item details panel also shows the task’s precise created and updated timestamps, as well as its ID in the backend database (for debugging purposes) You can save the changes in the details panel by clicking on the save button, which updates and revalidates the task automatically. You can also delete the task item by clicking on the delete button and confirming the warning modal You can close the details panel by clicking on the same task item again or by clicking on the close button If a task item is starred, the star icon shows even when you’re not hovering over the task item. You’ll be able to filter and group task items by stars in the future as well Updated the task list page layout to give more space to the main section and make sure everything’s aligned and positioned nicely without any display/styling issues Added new UI components Updated styling Fixed a few styling and UX issues Updated database schema"}, {"post_id": 38314, "ts": "2026-07-31T17:10:40Z", "hours": 2.0458, "text": "Task list management Added more task list management features so you can organize and view your tasks more efficiently! Added a top tool bar on task list pages where you can rename the task list by clicking on the name, add a description, mark/unmark it as starred, and delete it When you click on delete, a confirmation warning modal shows up asking you to confirm You can also star/unstar a task list by clicking on the star icon on the left sidebar or in the options menu Starred task lists show up in a different section at the top of the sidebar to make accessing them easier and quicker Added a dropdown button that shows an additional menu for creating folders and projects (not implemented yet) next to the create task list button Added a pick emoji button for each task list on the sidebar that, of course, still doesn’t work yet Added the new task input field on the task page with a few placeholder buttons and a submit button. This where you’ll be able to add tasks, but nothing works so far Added a message screen that shows up when all the tasks are completed/there are no tasks Added dynamically generated SEO metadata for task list pages to make the site more accessible and responsive Updated schema and types Updated styling and layout"}, {"post_id": 37735, "ts": "2026-07-30T17:25:43Z", "hours": 3.29, "text": "MacIdeas: productivity & work management tool I’m starting a new project in the MacWeb collection of online apps and platforms called MacIdeas, which is basically Notion (task, note, and project management) but significantly more inferior Hopefully this project will turn out to be pretty complex so I can milk invest more hours on making and polishing this app In this pretty big initial update, I set up the Next.js project, installed its required dependencies, added a few basic pages and layouts, added a lot of UI components, and added task list management Spent quite some time configuring auth and the account system backend again since MacIdeas is hosted on a subdomain of the main macweb.app root domain which handles auth and accounts, so it was annoying setting up CORS, subdomain cookies, and user schemas (I’m not even sure if it works in production yet ) Added a nav bar and footer that were just copied from other MacWeb apps so they look consistent and updated a few links Added placeholder homepage layout and sections with images and text that don’t mean anything yet Added the main tasks page layout with a left sidebar listing all your task lists (folders and other organization stuff coming soon) and the main page displaying your actual tasks and information You can create new task lists by clicking on the create task list button on the sidebar, which creates and redirects you to the new task list that’s automatically titled “Untitled List” When you hover over a task list on the sidebar, an options icon appears that shows a menu of list management options, including rename, star (not implemented), and delete When you click on rename, the task list becomes an input where you can input the new name, and clicking out of it saves and revalidates the data When you click on delete, a confirmation warning modal appears, and the app will be redirected and revalidated after you confirm and delete the task list Once you’re signed in, your profile icon will be displayed on the nav bar and clicking on it lets you view your profile on the main domain, toggle light/dark modes (coming soon), and sign out (does this even work ?) Added static SEO for a few pages to improve accessibility and the site’s metadata Added the MacIdeas logo as the favicon and site icon Added Prisma schema and types Configured DNS and deployment stuff Fixed deployment issue"}]...
|
Title: MacIdeas by @tonymac129 | Stardance
Devlog Title: MacIdeas by @tonymac129 | Stardance
Devlogs:
MacIdeas: productivity & work management tool I’m starting a new project in the MacWeb collection of online apps and platforms called MacIdeas, which is basically Notion (task, note, and project management) but significantly more inferior Hopefully this project will turn out to be pretty complex so I can milk invest more hours on making and polishing this app In this pretty big initial update, I set up the Next.js project, installed its required dependencies, added a few basic pages and layouts, added a lot of UI components, and added task list management Spent quite some time configuring auth and the account system backend again since MacIdeas is hosted on a subdomain of the main macweb.app root domain which handles auth and accounts, so it was annoying setting up CORS, subdomain cookies, and user schemas (I’m not even sure if it works in production yet ) Added a nav bar and footer that were just copied from other MacWeb apps so they look consistent and updated a few links Added placeholder homepage layout and sections with images and text that don’t mean anything yet Added the main tasks page layout with a left sidebar listing all your task lists (folders and other organization stuff coming soon) and the main page displaying your actual tasks and information You can create new task lists by clicking on the create task list button on the sidebar, which creates and redirects you to the new task list that’s automatically titled “Untitled List” When you hover over a task list on the sidebar, an options icon appears that shows a menu of list management options, including rename, star (not implemented), and delete When you click on rename, the task list becomes an input where you can input the new name, and clicking out of it saves and revalidates the data When you click on delete, a confirmation warning modal appears, and the app will be redirected and revalidated after you confirm and delete the task list Once you’re signed in, your profile icon will be displayed on the nav bar and clicking on it lets you view your profile on the main domain, toggle light/dark modes (coming soon), and sign out (does this even work ?) Added static SEO for a few pages to improve accessibility and the site’s metadata Added the MacIdeas logo as the favicon and site icon Added Prisma schema and types Configured DNS and deployment stuff Fixed deployment issue
Task list management Added more task list management features so you can organize and view your tasks more efficiently! Added a top tool bar on task list pages where you can rename the task list by clicking on the name, add a description, mark/unmark it as starred, and delete it When you click on delete, a confirmation warning modal shows up asking you to confirm You can also star/unstar a task list by clicking on the star icon on the left sidebar or in the options menu Starred task lists show up in a different section at the top of the sidebar to make accessing them easier and quicker Added a dropdown button that shows an additional menu for creating folders and projects (not implemented yet) next to the create task list button Added a pick emoji button for each task list on the sidebar that, of course, still doesn’t work yet Added the new task input field on the task page with a few placeholder buttons and a submit button. This where you’ll be able to add tasks, but nothing works so far Added a message screen that shows up when all the tasks are completed/there are no tasks Added dynamically generated SEO metadata for task list pages to make the site more accessible and responsive Updated schema and types Updated styling and layout
Task creation & management You can now actually add, view, and manage your tasks in MacIdeas! You can add tasks, view details, edit, star, and delete them by clicking on the task item icons When you add a task, a task item gets added to the task list page, which when hovered shows icons/buttons to edit, manage tags, change due date, star, or delete the task. There’s also a circle on the left where you can mark the task as completed (none of these buttons work yet other than star and delete ) Clicking on the task item itself opens an animated panel on the side (similar to a lot of todo apps and the Slack profile panel) with input and textarea fields for editing the task and its description, as well as checkboxes to mark/unmark the task as completed or starred The task item details panel also shows the task’s precise created and updated timestamps, as well as its ID in the backend database (for debugging purposes) You can save the changes in the details panel by clicking on the save button, which updates and revalidates the task automatically. You can also delete the task item by clicking on the delete button and confirming the warning modal You can close the details panel by clicking on the same task item again or by clicking on the close button If a task item is starred, the star icon shows even when you’re not hovering over the task item. You’ll be able to filter and group task items by stars in the future as well Updated the task list page layout to give more space to the main section and make sure everything’s aligned and positioned nicely without any display/styling issues Added new UI components Updated styling Fixed a few styling and UX issues Updated database schema
Browse & complete tasks You can now browse and filter through tasks to view and manage them more easily with the new sorting and filtering options! You can also finally mark tasks as completed once you finish them On the task list page tool bar, there’s a search bar that searched through tasks by their name and description, dropdown menus for sorting (by name, created, updated, due date, etc., some aren’t implemented yet), filtering (by starred, completion status, etc.), and ascending/descending display order to help you find and browse tasks more easily ! There’s also a checkbox that toggles the visibility of completed tasks, since they are hidden by default to avoid cluttering the page You can mark a task as completed by either clicking/checking the circle icon on each task item or selecting the completed checkbox on the task details page Incomplete and completed tasks are each grouped together regardless of sorting order to avoid confusion Completed tasks are striked through and grayed out to help with distinction. You can remark them as incomplete again any time by clicking on the icon again Fixed an annoying container height overflow display layout issue (implementing responsive design on this will be a pain in the butt ) Updated styling and layout I accidentally closed the window while recording the video so I had to rewrite this entire devlog again from memory , Stardance team please make a save devlog button like with Flavortown 🥺
Tags and emojis Added task tags that you can customize and assign to different task items to better categorize and organize them! You’ll be able to group/sort by tags in the future as well, making browsing and managing tasks even more convenient When you click on the tag icon while hovering over a task item, the tag modal appears listing all the tags you created, a search bar for the tasks, as well as options to create new tags and save your selection Each tag on the modal is a checkbox, meaning you can simply check/uncheck the tags to assign them to the task Clicking on the create option displays an input where you can add a new tag that gets added to the revalidated menu Each tag also has an icon that opens a menu of options to rename, select an emoji, pick a color, and delete the tag. The rename option turns the tag into an input that you can edit, the emoji option opens the emoji picker (you can clear an existing emoji as well) so you can choose a custom icon for the tag, the color option opens a color picker where you can edit the tag’s background, and the delete option deletes the tag after confirmation There’s an option on the modal to clear all the currently assigned tags from the task item as well Up to 3 tags are displayed for each task on the task list page, and you can view all the tags a task has in the details panel (where you can open the tag modal and edit the tags too) You can now also choose an emoji for each task list by either clicking on the sidebar icon or the top bar icon! It opens an emoji picker with an option to clear the existing emoji as well Updated schema and types Updated styling and layout Fixed display height issue Fixed legacy dependency deployment issue
Due dates and more random features You can now add due dates and start dates to tasks to better keep track of them and remind yourself when to stop procrastinating and actually get to work ! When you click on the calendar icon on a task, a modal shows up with 2 fields where you can pick the precise date and time for when the task starts/dues. I used the kind of outdated library Flatpickr for this since I was too lazy to build my own calendar time picker thing You can also clear/remove the selected time by clicking on the x icon next to the date field. Save the changes by clicking on the save button You can edit/select the times by clicking on the date fields in the task details panel as well. Start and due dates show up as a small text below the main task on the page so you can easily see when each task is due Added options to sort tasks by due and start dates so you can see which tasks are coming up soon! Also added a separate section in the filter dropdown for filtering by your own tags to better organize and view your different tasks The pen edit/rename option on the task list is now finally implemented! Clicking on it turns the task text into an input field that you can edit, and the new name is saved when you click away from it The tag, calendar, and star icons on the task input field now do something for the new task! Similar to task items, the tag and calendar options both open a modal for you to select the options for the new task, and the star icon marks it as starred. This makes it a lot easier to customize the task before actually adding it to the list Updated schema and types Updated styling and UI components Fixed a legacy dependency (Emoji Mart is unmaintained ) compatibility issue that caused a few previous commits to fail in production build Not gonna lie I’m pretty proud of the UI and layout all the different options and components actually sort of make MacIdeas look like a legit app There seems to be an issue with Firefox screenshots that fails to capture the modal’s background blur for the screenshot so it’s kinda weird
Priority and folders! You can now assign an importance priority flag for each task to better keep track of your most important todos and manage/view them more easily with this feature ! You can change the priority of a task by clicking on one of the 4 options in the priority dropdown that appears when you hover over the task. Each priority has a different color (none-transparent, low-green, medium-yellow, high-red) to help distinct them visually. If a task has a priority, the status is permanently stickied on the task so it’s always visible You can sort and filter tasks by priority as well to automatically group and view your most important tasks You can customize the new task’s priority by changing the new task input field’s priority dropdown menu. You can also edit a task’s priority in the task details panel You can now create custom folders to group and organize your task lists by clicking on the create folder option on the task sidebar ! Clicking on the folder toggles the visibility of its task list content, and hovering over it shows an options icon that opens a menu where you can edit, rename, change the folder icon color, or delete the folder The edit option opens a modal where you can search and select the task lists to add or remove from the folder The rename option turns the folder name into an input that saves on blur, the color option shows a color picker for the icon color, and the delete option deletes the folder and its task lists after confirmation You can also directly create new task lists inside a folder by clicking on the add option on the folder. You can move task lists in/out of folders as well by clicking on the move option, which opens a similar modal where you can search and select which folder to move the task to Drag and drop for moving task lists in/out of folders isn’t implemented yet, because it’s actually quite a challenging thing to do (for me) , but hopefully I’ll have time to try to implement it Updated schema and types Updated UI components and styling Fixed display overflow height styling issues
Dashboard and Subtasks Added a few interactive widgets to the task dashboard showing tasks grouped in different categories so you can browse all your tasks quickly and easily The different task widgets, each with a different icon, are starred, priority, upcoming, starting soon, recent, and tag tasks. The widgets basically act like filters for all your tasks across all task lists so you don’t need to manually dig through them to find what you’re looking for You can now add subtasks to your tasks! Subtasks are basically just very simple tasks without any of the fancy features (since that would be annoying to implement and it’s just pretty impractical) that are just smaller steps broken down from the main task You can add, view, and manage (completing, renaming, or deleting) each task’s subtasks sorted by completion status in the task details panel, and you can see each task’s subtasks directly displayed below the main task You can also mark subtasks as completed by clicking on the circle on the task item, and the text will be striked through and grayed out Added a home/task dashboard link to the left sidebar Updated schema and types Updated styling and layout Updated README with more detailed info and specific features
Dashboard customization and My Day Added settings for customizing your personal tasks page dashboard, where you can select which tasks to show and which task filter sections to display on your main tasks page to make it completely customized You can access the settings modal by clicking on the gear icon on the top right of the tasks page, where you can select the checkboxes that you want to show on the page. You can reset the settings defaults as well by clicking on the reset option and confirming Dashboard tasks now also show their priority and tags All your homepage settings and customization are automatically saved to the account backend so the settings are synced across all your devices Added the “My Day” page that shows all your tasks that either start or due today (in your local timezone, refreshes daily automatically), or you can add custom tasks for the day here without putting it in any task list to help plan out your day better My Day is essentially a special task list and you can do all the stuff you can do with normal tasks and task lists (browsing, sorting, managing, etc.), and it shows up as its own tab on the left sidebar. I thought this would be hard to implement architecturally, but I just had to add a few fields and conditionals to make it work properly Added the tags dashboard section where you can view all the tasks with a certain tag Updated the data fetching logic for the dashboard to be more efficient, optimized, and customized according to the settings Updated schema and constants Updated styling Updated README Fixed a few visual bugs
Notes and custom backgrounds I coded for 5 hours yesterday and made a lot of progress but completely forgot to devlog , so this devlog will be a bit longer (as if my usual devlogs aren’t already long enough) to hopefully keep my storytelling good 🥺 Added the notes tab, which is the second major part of MacIdeas (the other being tasks and projects) that shares a basically identical layout with tasks, so I only had to copy a few components, modify some variables, imports, and database operations, and add new schema models and server actions to make note management work properly, though it still took quite a bit of time Currently only the sidebar is implemented for notes (instead of the actual note taking/editing part), but you can create new notes, rename them, choose their custom emojis, delete them, create and manage folders, and create notes inside folders from there You can also navigate to each note by clicking on it, but the page is blank for now. Notes share folders with tasks, so folders you make in notes also show up in tasks, and vice versa, although the specific tasks/notes in the folder aren’t displayed on the notes/tasks tab to keep organization simple (hopefully I didn’t phrase this too confusingly , maybe I’ll add an option to show both in settings) Also added projects (the third major part of MacIdeas), which are basically labels/folders that you can put tasks, task lists, folders, and notes in to conveniently keep everything related to a big project in one place Right now you can only create projects through the create project button on the sidebar and can’t do anything else with them, since I’ll only start working on projects after I finish notes Added buttons where you can upload a custom background image or select a color theme (not implemented yet) for each individual task list to make customization even better and personalized! When you click on the custom background option, an upload modal appears where you can upload a png/jpg/webp <4MB to be the background! I originally tried using uploadthing since it was the only object storage service I worked with, but I just couldn’t get the event hooks to load or work at all despite copying stuff from my old project and wasting an hour researching , so I decided to settle with Vercel Blobs (because it’s already hosted on Vercel) and it’s actually so much faster and easier to set up/integrate Some of the components are opaque, so they look kind of weird with a custom background, so I’ll be fixing that soon, but for the most part custom backgrounds actually look decent somehow Task lists without a custom background have a black overlay shadow that’s out of place, so that has to fixed too Also added a bunch of random small quality of life features and adjustments that I don’t remember without looking at my commits Updated schema and types Updated styling
Note and project management Added more note management features for editing, deleting, starring, and moving notes, as well as a dashboard for the notes page (similar to the one for tasks) You can now move notes in/out of different folders by selecting the move option and choosing the folder in the modal popup menu. You can also edit which notes are in a folder by clicking on its edit option, where you can check all the notes you want in a folder Added a top tool bar to each note page (similar to the tool bar for task lists) with the note’s emoji (clicking it opens the emoji menu where you can choose or clear the icon), name (clicking on it renamed the note), description (clicking on it also makes it editable), and current folder information displayed The tool bar also has options to upload a custom background image with an upload modal (similar to task lists), choose a custom theme (not implemented yet), star/unstar, or delete after confirming Added a sidebar for the projects page where you can create, manage, view, add icon, rename, star/unstar, and delete your projects (basically the same as the notes and tasks sidebar) Since many of the features are basically identical or very similar to tasks/task lists, I just used the existing components and copied and modified some stuff, so all these features were pretty easy and quick to implement Added recent, starred, and organized by tag sections to the notes dashboard so you can view and manage your notes more easily. You can also customize the dashboard by selecting the sections in the settings panel Updated schema and types Updated styling and layout Fixed background shadow overlay and a few other display/styling issues
Project browser Added a project browser/file explorer to the project dashboard where you can search, view, and open projects and folders to browse their content ! I decided to build this file explorer instead of just a simple dashboard because I got bored and wanted to make something different, and it would make more sense to do this for projects since they are essentially just folders This file explorer is pretty similar to Google Drive and other cloud storage services, you can double click a project or folder to change directory and view its content (tasks, task lists, notes, other folders), and go back/navigate to other levels with navigation breadcrumbs I thought this would be difficult to implement and would need some kind of breadcrumb library and it turned out to be pretty simple Only projects are styled and can be opened right now, but folders and other stuff will be added in the next update! Added a menu option for adding task/note folders to projects. It opens a modal where you can view and select all the projects you’re adding the folder to, and it’ll show up in the project explorer Updated styling and content
Project page and contents Added a dedicated page for each project that is its own file browser where you can open/interact with the contents, view their information and metadata, and search, filter, and sort through them so you can better manage and view your projects Added an option on the project page that opens a modal displaying all your folders, task lists, tasks, and notes grouped into 4 different tabs. Each item is a checkbox so you can select exactly which items to add to or remove from the project You can also search through each tab’s results and see their names and icons to make finding the right item quick and easy This seemed like a simple feature to implement but getting to cooperate was a nightmare since each item has its own data type, so organizing the data structure for both the frontend and backend required a lot of annoying unions and conditionals There is now a top bar in the project browser with the name, type, modified, and created labels which you can click on to sort the contents accordingly Each item also shows its type and modified & created times, as well as an icon where you can change the item’s emoji directly, making browsing and managing your stuff more convenient You can also edit the project’s name and description directly by clicking on the page title and text Updated styling and layout I procrastinated on this devlog for 2 days and got no work done, so I think this might be a sign for me to take a break from Stardance for a few days since I also need to work on hosting 8-Bit Jam (awesome game jam, if you live near nova plz go register ) and other stuff, so there won’t be new devlogs in a while
Light mode toggle The mode option in the nav user menu now toggles the site’s entire appearance between dark and light mode to improve its customizability and accessibility Because every component has a default color transition, switching between the 2 modes has a smooth UI transition instead of flashing to the other color instantly I had to set up the theme provider and manually add the light mode Tailwind classes and the dark mode prefix for all the colors in every page and component, as well as accounting for all most of the display color edge cases, so this took quite a long time but the result was worth it, both modes look pretty consistent and visually appealing I am finally back to developing MacIdeas after taking a one month break, so I spent some time familiarizing myself with the codebase again. Hopefully this time I’ll be able to finish and ship it soon! Updated styling and layout Added and updated some dependencies
Rich text editing for notes! Added a complete, feature-rich, and easy to use rich text editor for creating and editing your notes! This means you can now actually take notes with features like text formatting, links, headings, lists, inline components, and a lot of other features you would expect from tools like Google Docs There is a top tool bar with a ton of options, buttons, and dropdowns organized into different functional sections (I definitely did not just copy GDocs ) to format/edit/modify your current content selection easily Most of the features support keyboard shortcuts (because of Tiptap), which you can see by hovering over the option and reading its tooltip I tried making my own web based rich text editor from scratch before, and it turned out to be a nightmare of dom manipulation and other headaches, so this time I decided to just use the library Tiptap, which itself is based on the library ProseMirror, to handle this pain in the butt Since Tiptap is completely headless, I still spent a lot of time going through its docs, installing useful extensions, learning their commands, and building, testing, and tweaking all the features to make everything work smoothly I don’t know why I’ve been neglecting actually adding notes for so long (before each note was just a blank page saying “Untitled note” that you couldn’t even edit ), but this actually turned out to be super fun to implement and the result was very rewarding Note saving doesn’t actually work yet (despite the fake “Note saved” autosave message ) since there are still some things about the editor to fix, but hopefully that’ll be implemented soon and MacIdeas will be almost ready to ship! The text editor also works with light mode, and I also updated some styling to improve the UI
Last devlog: note features and final touches! MacIdeas is finally finished and ready to ship! In this last massive devlog, I added a few new quality of life features, did a ton of general/styling/auth bug fixes, and polished the entire project ! Added note content persistence, meaning you can actually save each note’s content to your account data, including its text, formatting, and everything. Autosave automatically does this every 30 seconds, but you can also manually save with ctrl+s or by pressing the save button Added a few new editor features from Tiptap for typography and general formatting to make note taking more powerful and complete You can now select custom background colors (along with custom backdrop images) to customize the appearance of each task list and note page ! The nav search had been there doing nothing ever since the first devlog , so I finally added a powerful search bar to the nav bar that uses a new API endpoint to search through all the information in all your task lists, tasks, notes, projects, and folders and displays the results as a list of links for convenient browsing and navigation! Added section descriptions and icons for the major features on the homepage Updated styling, content, code, and layout Updated the README with a demo screenshot and updated info about features Fixed a lot of bugs related to general usage, empty user data, styling issues with modals, auth redirect, and many other things I don’t want to remember to improve the overall user experience I took a one week break in this last stretch, so there was probably other stuff I did that I forgot, so hopefully my storytelling isn’t that bad
Ships:
MacIdeas is a fullstack online platform for managing, organizing, and keeping track of your work, including tasks, notes, and projects! Now, before you think this is just another generic boring todo list app and give me a 1 star in originality…, well, it kind of is a todo app, but with a ton of many different features, customization, and settings, as well as notes with a complete, functional rich text editor, folders for convenient organization, and projects for organizing your different tasks, notes, folders, and everything else into manageable groups that you can easily browse through. You can edit and assign tasks priorities, due/start dates, tags, subtasks, projects, folders, links, completion, star them, and view all the info from the details panel. There are also features like search, sort, filter, tags, views, star, emojis, and other options that make browsing, navigating, and finding items a lot easier and more efficient. To make the website accessible to everyone, MacIdeas has smooth transitions and animations, fully supports both dark and light modes (and your own background images or colors), as well as responsive design for (nearly) all screen sizes, and complete SEO metadata for each page. All you need to do is to sign in with MacWeb, the central platform for my projects’ auth and account info (since MacIdeas is one of its many apps), and you’ll be redirected back and have access to try out all those features! It has everything you would expect from a real task manager and text editor, so hopefully you’ll like my project :)...
|
1793001173.647689
|
1793087573.647689
|
|
31853
|
KuuppaOS by @suklaasukkulayt | Stardance
|
suklaasukkulayt
|
2
|
69.0
|
823
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-10T10:31:12Z", "hours": 59.0, "multiplier": 14.44, "payout": 823, "blessing": "neutral", "text": "KuuppaOS A WebOS with many different apps and features . This has 17 apps , desktop icons, a taskbar with a start menu (for settings), weather and a calendar/clock . You can have a custom wallpaper , change app background color , blur and transparency or even turn on RGB mode . This even has a rubber-band selector . You can open, close, minimize, maximize and resize the apps. KuuppaOS also has many animations and a dog gallery that has photos of my dogs! More info on GitHub: https://github.com/suklaasukkulayt/kuuppaos GitHub has screenshots and link to a showcase video. (if you have already used this for some reason, go to Start Menu -> Open Settings -> Reset to defaults -> Save to local storage)", "repo": "https://github.com/suklaasukkulayt/kuuppaos", "demo": "https://kuuppaos.suklaasukkula.dev"}, {"ship_num": 2, "ts": "2026-07-14T14:56:01Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a webos for the webos 1 mission. It has draggable, resizable and closable windows, desktop icons, a bottom bar with a working clock and an open all windows button. There is six apps: Welcome which is just the welcome screen, TeXtpad which is a notepad, but it only supports one note at a time and it saves it locally to your browser, Weather which shows your local temperature, location and weather condition as an emoji and as text, Clock which is just an analog clock, KuuppaMusic (spotify) which plays the “lofi beats” spotify playlist from the spotify embed (it only plays the first 30s of every song) and KuuppaVid (YouTube) which plays Never Gonna Give You Up by Rick Astley from the YouTube embed. Github copilot is used for fixing some problems and for help and instructions for features like the weather app and autoplay when you open KuuppaVid.", "repo": "https://github.com/suklaasukkulayt/kuuppaos", "demo": "https://kuuppaos.suklaasukkula.dev"}]...
|
[{"post_id": 78296, "ts": "202 [{"post_id": 78296, "ts": "2026-10-10T10:21:32Z", "hours": 0.5611, "text": "Devlog 20 This devlog wasn’t supposed to happen, because of that I lost 2 hours. I have now fixed more bugs and finished the README. Link to GitHub I’m gonna ship now. (please read my other devlogs they are better than this)"}, {"post_id": 77325, "ts": "2026-10-06T15:23:33Z", "hours": 12.0486, "text": "Devlog 19 The final devlog I have made many improvements. Also this is the final devlog of KuuppaOS before my second ship, it’s been a long journey. Last devlog I promised Now playing support to KuuppaBrowser but unfortunately, detecting if iframes are making sound isn’t possible with javascript. 2. I added an AI chatbot, KuuppaAI . It’s very kuuppa . It can detect some keywords and have different answers, it can for example code. 3. I removed the Weather desktop app and turned it into a taskbar app . Now if you have allowed location permission, it shows up next to clock . You can still click it and it opens the old weather app, but in a taskbar app style. 4. I changed the default app color , to a more transparent and blueish one. I think it looks a bit better . 5. I added more animations for a smoother experience. For example animations for the apps in the taskbar . 6. I added more dog photos . To be more specific, I added over a hundred dog photos more . When you open it for the first time, it takes a really long time to load them. That’s why I added a service worker (with help from AI) to keep the photos cached . 7. I added fonts to everything so it looks more professional and hopefully made the background higher resolution . 8. Now the cursor changes from grab to grabbing when dragging the windows around. 9. I added a hamburger menu icon so the start menu button looks more like a start menu button . 10. I also added an animation for closing the photos for the different dogs. 11. I added a maximise (/fullscreen) button for apps ! It also has an animation. 12. I added an RGB mode button to settings menu. It makes the apps constantly change their background color (I used a bit of help from AI to make it change through all colors) 13. I added a file type selector to TeXtpad , so now you can choose from .txt, .md, .html and .csv when exporting your TeXtpad text. Also this new functionality now shows in app store and about. I also made the textarea look a bit better . 14. I updated the project README . It still lacks a new screenshot though. 15. I fixed many bugs . Here is some of them: KuuppaMusic wouldn’t show up in the taskbar because of the animation I added for taskbar apps Terminal not showing about command defaults properly Bugs with fullscreen Fixes with dog photos Ghost game iframe having fixed with so it didn’t resize Shutdown and Reboot icons (for start menu) not loading on page load Reset to defaults button not working properly Dog gallery icon not showing in App store And some others! It has been a fun journey, thanks for supporting!"}, {"post_id": 73166, "ts": "2026-09-24T14:55:23Z", "hours": 8.5747, "text": "Devlog 18 Another big update I fixed the app store issue by adding a save button in the app store so make sure to click it after installing or removing many apps at a time . I added reboot and shutdown commands to Terminal. I also made it so you can’t type new commands during longer processes like installing apps with Terminal. I added a start menu ! It isn’t the craziest, but it has reboot, shutdown, open welcome screen and open settings buttons . (yes I removed the settings button from the taskbar!) There is also a now playing thing in the start menu . It supports both KuuppaVid and KuuppaMusic , and it shows the currently playing song. You can even stop the playback. I might update it to support KuuppaBrowser in the next (final) devlog. I also updated the opening/closing animations for the taskbar menus. I also added a export as .txt button to TeXtpad so now you can actually use it for something! I made it so the dog gallery images are only loaded when you want to see the images to speed up the loading process for the website . This is also because i’m adding more dog images in the next devlog! There is also a small loading animation now. I also fixed some stuff and added a simple how-to-use to the welcome screen . That’s all for now, but in the next and hopefully final devlog i’m adding: Now playing support to KuuppaBrowser, Weather to the taskbar, More dog images, Update about to admire TeXtpad’s new functionality, and maybe something else! who knows"}, {"post_id": 65473, "ts": "2026-09-10T17:03:52Z", "hours": 6.6594, "text": "Devlog 17 Big update I added a camera selector to Camera and a microphone selector to Recorder. I added a Dog gallery app where you can view photos of my dogs! (I might add more photos) I finally added the app store . Now you have to install all the apps and they save to your browser’s local storage. (If you install them too quickly the saving can fail, I will fix it) You can also install apps using the install command in Terminal . I updated some terminal commands. Now you can use the rubber band selector next to the app icons. I also made the login screen fade smoother. Idk that’s probably all (or maybe not). (I used help from AI to implement a proper local storage saving thing) I will ship soon! (hopefully)"}, {"post_id": 57373, "ts": "2026-08-29T14:35:39Z", "hours": 2.7381, "text": "Devlog 16 I added an audio recorder app . It’s pretty simple, you just hit record. (I used a tutorial for help) I added a loading/login screen that shows for a few seconds. (I used a tutorial for help) I added funny filters to Camera (like saturation, blur, greyscale, hue rotation etc.) I also added a color command to Terminal . I also updated some terminal commands like ‘about’ (I used a bit of AI for help) Current resolution now shows in Camera."}, {"post_id": 57241, "ts": "2026-08-29T10:49:19Z", "hours": 3.4614, "text": "Devlog 15 I added the About app (that I started last devlog). You can click the buttons that show info about that app . I added app background color changing to settings and also changed the Reset wallpaper button to instead a Reset to defaults button. I made the radio animation in KuuppaMusic smaller and it now scales better. I also fixed bugs with the taskbar music playing thing. Clock and HackCMD are now properly centered . Camera now records in 4K or the closest resolution instead of 720p. I also added a custom scrollbar so it fits the green theme. I also updated some terminal commands and fixed some bugs ."}, {"post_id": 54419, "ts": "2026-08-25T12:53:25Z", "hours": 6.2053, "text": "Devlog 14 I updated KuuppaVid , so now you can actually search YouTube videos ! (I used some help from AI) I also updated KuuppaMusic ! Now you can listen to Estonia’s radio station XFM ! (idk why I picked it) And when you minimize it, the song title shows up in the taskbar ! Also it has a cool radio animation . (I used a tutorial for the base of the custom player) I fixed many window bugs (like when resizing the window could go out of bounds). I updated terminal so now (some of) the commands are better and more up to date. I also added an info app, but it currently has no content. KuuppaOS is now almost completed!"}, {"post_id": 48730, "ts": "2026-08-17T08:01:40Z", "hours": 3.3106, "text": "Devlog 13 I added a camera app . You can take photos and they save to your device. (I used a tutorial for help) I added a new game . It’s a game I made in a coding class a while back. It’s a pacman like game where you run from ghosts. Your objective is to shoot the ghosts from WASD and you move from arrow keys. I also fixed some bugs."}, {"post_id": 46136, "ts": "2026-08-13T04:40:52Z", "hours": 3.3364, "text": "Devlog 12 This is a smaller update. I added tooltips to desktop app icons (text that shows up when you hover over the icons). I updated the header on apps so you can now drag the apps around easier . I fixed some bugs and changed some styling , like changing Hacking terminal’s name to HackCMD (I also changed the icon ). I added a normal terminal (inspired by @Makkonen ‘s LuckyOS terminal, go check his projects out!). It’s not finished, but you can type “help” to see all currently available commands!"}, {"post_id": 45024, "ts": "2026-08-11T05:27:08Z", "hours": 5.6133, "text": "Devlog 11 This is a bigger update than usual. I added pong so now you can play pong in KuuppaOS! Calendar now scales better on smaller screens. Settings and calendar buttons now have a hover effect . I added a minimize button!! Open and minimized apps are now in taskbar . I added closing and opening animations . Calculator now looks better . I added a rubber band selector (the funny blue box that comes up when you hold and drag your mouse on the desktop)! I also fixed some bugs . (AI used for debugging) Soon I will add an app store!"}, {"post_id": 43152, "ts": "2026-08-08T08:19:25Z", "hours": 2.6486, "text": "Devlog 10 I added a calculator app so now you can calculate :D Settings app is now connected to the taskbar and it looks better . It also saves locally to your browser I also added a calendar to the taskbar that opens when clicking the clock in the taskbar Icons are now properly visible also on smaller screens! Next devlog I will add a game and animations or a minimize button!"}, {"post_id": 41789, "ts": "2026-08-06T06:09:05Z", "hours": 1.3828, "text": "Devlog 9 I added a customization menu/settings . You can add a custom wallpaper and change app blur and transparency (i used help from github copilot for javascript). The settings app “icon” is currently in the taskbar, I might change it later. I added a working browser (with a little help from AI for javascript). It uses iframe so it can’t load all sites, but now you can have KuuppaOS in KuuppaOS in KuuppaOS :D Lastly I added google fonts to the site. Currently it’s only in the settings app and one button so I will add more. I will also make the desktop icons scale better for different sizes of screens."}, {"post_id": 40704, "ts": "2026-08-04T12:10:30Z", "hours": 2.5092, "text": "Devlog 8 I’m starting webos 2 and after it this webos will be pretty good. I added a hacking terminal (inspired by @Makkonen ‘s hacking terminal project. I used the same tutorial as him, but I removed all the useless code. I used github copilot to make it so you don’t type the full code snippet with every key press. I updated KuuppaVid . You can now watch any YT video with it if you enter the video ID. Javascript for it was made with github copilot. I added a painting app (inspired by @Makkonen ) using a tutorial I found. You can change the size and color of the pen and use the eraser. I found another tutorial I used for the download function (yes you can download your painting!) and then I used github copilot for the date in the file name. I also used github copilot to fix the bug where the drawing would not appear at your cursor. I also updated the OS with a new font and I removed the “open all windows” button from the taskbar! Also clicking the desktop icon again no longer closes the app. Next devlog i’m gonna add a customization menu!"}, {"post_id": 28243, "ts": "2026-07-14T11:57:03Z", "hours": 0.7064, "text": "Okay this is actually the final devlog. I added spotify(kuuppamusic) and youtube(kuuppavid) apps. They don’t really have any purpose but I still added them. From the spotify app you can listen to lofi beats, but because it’s an embed it doesn’t even play the full song. From the youtube app you can watch Never gonna give you up by Rick Astley (i didn’t know what else to put). For the youtube app i used github copilot to make the function to start autoplay only when the app is opened. I also updated readme. Now the project is ready to ship."}, {"post_id": 27750, "ts": "2026-07-13T16:07:23Z", "hours": 0.9994, "text": "Final devlog before first ship. Updated readme and added weather forecast emoji and location show with the help of github copilot. The location may or may not work depending on your device, it worked on my phone but i couldn’t get it working with my steam deck. I also fixed the problem where the clock app icon was bigger than the others. The weather now also updates every 10 mins."}, {"post_id": 27107, "ts": "2026-07-12T11:31:18Z", "hours": 1.4472, "text": "Finished the last part of the WebOS mission guide. I added a weather app (I got instructions from copilot in vs code), a clock app (I found a tutorial online), made all windows resizable, fixed some bugs (hopefully) like taskbar being too long and the website being too tall so the scroll bar would always show. I also fixed the bug where you could drag windows and then you couldn’t reach them (with a little help from copilot in vscode). The resize thing is kinda hidden in the window border but you can see it a little."}, {"post_id": 26749, "ts": "2026-07-11T18:36:58Z", "hours": 2.5356, "text": "Finally finished the fourth part of the WebOS mission guide. I had some problems with scripts for the new app so I used github copilot in vscode to fix some. Yes, i also added a second app! It’s not the best but it’s like notepad but worse (atleast right now). It only supports one note at a time, but at least it saves locally to your browser so hopefully you don’t lose your one note :D. It also has a desktop icon that opens and closes the app. Many things will change later, like all the 100+ meaningless commits that actually will hopefully stop right NOW, because I got a new way to test the site without deploying: Live server vs code extension. I guess that’s all for now"}, {"post_id": 25973, "ts": "2026-07-10T14:46:38Z", "hours": 3.0603, "text": "Finally completed the third part of the WebOS mission guide (it took so long because I had problems with customization). Made the top bar a bottom bar and added rounded corners, you can now drag the window from the window title (tell me how to make the title smaller and centered while the close button being in the right corner because that stopped working when I made the two divs be at the same row) you can also close it from the red close button and you can reopen it from the bottom bar. I also changed the welcome screen a little. Also the code is now split in three parts."}, {"post_id": 24240, "ts": "2026-07-07T17:47:16Z", "hours": 0.6725, "text": "Just finished the second part of the WebOS mission guide. Now it has top bar with working clock(and font and blur), wallpaper, welcome window with colored background and dashed border with rounded corners. I also added a second link to the welcome screen. Starting to look better already."}, {"post_id": 24096, "ts": "2026-07-07T13:18:38Z", "hours": 0.6594, "text": "I just finished the first part of the WebOS mission guide (and started the second). I will still probably edit the welcome screen after this devlog. There’s nothing special about this yet, but it has a font, text and background color, image with custom size and rounded corners, link to stardance website and text."}]...
|
Title: KuuppaOS by @suklaasukkulayt | Stardance
D Title: KuuppaOS by @suklaasukkulayt | Stardance
Devlogs:
I just finished the first part of the WebOS mission guide (and started the second). I will still probably edit the welcome screen after this devlog. There’s nothing special about this yet, but it has a font, text and background color, image with custom size and rounded corners, link to stardance website and text.
Just finished the second part of the WebOS mission guide. Now it has top bar with working clock(and font and blur), wallpaper, welcome window with colored background and dashed border with rounded corners. I also added a second link to the welcome screen. Starting to look better already.
Finally completed the third part of the WebOS mission guide (it took so long because I had problems with customization). Made the top bar a bottom bar and added rounded corners, you can now drag the window from the window title (tell me how to make the title smaller and centered while the close button being in the right corner because that stopped working when I made the two divs be at the same row) you can also close it from the red close button and you can reopen it from the bottom bar. I also changed the welcome screen a little. Also the code is now split in three parts.
Finally finished the fourth part of the WebOS mission guide. I had some problems with scripts for the new app so I used github copilot in vscode to fix some. Yes, i also added a second app! It’s not the best but it’s like notepad but worse (atleast right now). It only supports one note at a time, but at least it saves locally to your browser so hopefully you don’t lose your one note :D. It also has a desktop icon that opens and closes the app. Many things will change later, like all the 100+ meaningless commits that actually will hopefully stop right NOW, because I got a new way to test the site without deploying: Live server vs code extension. I guess that’s all for now
Finished the last part of the WebOS mission guide. I added a weather app (I got instructions from copilot in vs code), a clock app (I found a tutorial online), made all windows resizable, fixed some bugs (hopefully) like taskbar being too long and the website being too tall so the scroll bar would always show. I also fixed the bug where you could drag windows and then you couldn’t reach them (with a little help from copilot in vscode). The resize thing is kinda hidden in the window border but you can see it a little.
Final devlog before first ship. Updated readme and added weather forecast emoji and location show with the help of github copilot. The location may or may not work depending on your device, it worked on my phone but i couldn’t get it working with my steam deck. I also fixed the problem where the clock app icon was bigger than the others. The weather now also updates every 10 mins.
Okay this is actually the final devlog. I added spotify(kuuppamusic) and youtube(kuuppavid) apps. They don’t really have any purpose but I still added them. From the spotify app you can listen to lofi beats, but because it’s an embed it doesn’t even play the full song. From the youtube app you can watch Never gonna give you up by Rick Astley (i didn’t know what else to put). For the youtube app i used github copilot to make the function to start autoplay only when the app is opened. I also updated readme. Now the project is ready to ship.
Devlog 8 I’m starting webos 2 and after it this webos will be pretty good. I added a hacking terminal (inspired by @Makkonen ‘s hacking terminal project. I used the same tutorial as him, but I removed all the useless code. I used github copilot to make it so you don’t type the full code snippet with every key press. I updated KuuppaVid . You can now watch any YT video with it if you enter the video ID. Javascript for it was made with github copilot. I added a painting app (inspired by @Makkonen ) using a tutorial I found. You can change the size and color of the pen and use the eraser. I found another tutorial I used for the download function (yes you can download your painting!) and then I used github copilot for the date in the file name. I also used github copilot to fix the bug where the drawing would not appear at your cursor. I also updated the OS with a new font and I removed the “open all windows” button from the taskbar! Also clicking the desktop icon again no longer closes the app. Next devlog i’m gonna add a customization menu!
Devlog 9 I added a customization menu/settings . You can add a custom wallpaper and change app blur and transparency (i used help from github copilot for javascript). The settings app “icon” is currently in the taskbar, I might change it later. I added a working browser (with a little help from AI for javascript). It uses iframe so it can’t load all sites, but now you can have KuuppaOS in KuuppaOS in KuuppaOS :D Lastly I added google fonts to the site. Currently it’s only in the settings app and one button so I will add more. I will also make the desktop icons scale better for different sizes of screens.
Devlog 10 I added a calculator app so now you can calculate :D Settings app is now connected to the taskbar and it looks better . It also saves locally to your browser I also added a calendar to the taskbar that opens when clicking the clock in the taskbar Icons are now properly visible also on smaller screens! Next devlog I will add a game and animations or a minimize button!
Devlog 11 This is a bigger update than usual. I added pong so now you can play pong in KuuppaOS! Calendar now scales better on smaller screens. Settings and calendar buttons now have a hover effect . I added a minimize button!! Open and minimized apps are now in taskbar . I added closing and opening animations . Calculator now looks better . I added a rubber band selector (the funny blue box that comes up when you hold and drag your mouse on the desktop)! I also fixed some bugs . (AI used for debugging) Soon I will add an app store!
Devlog 12 This is a smaller update. I added tooltips to desktop app icons (text that shows up when you hover over the icons). I updated the header on apps so you can now drag the apps around easier . I fixed some bugs and changed some styling , like changing Hacking terminal’s name to HackCMD (I also changed the icon ). I added a normal terminal (inspired by @Makkonen ‘s LuckyOS terminal, go check his projects out!). It’s not finished, but you can type “help” to see all currently available commands!
Devlog 13 I added a camera app . You can take photos and they save to your device. (I used a tutorial for help) I added a new game . It’s a game I made in a coding class a while back. It’s a pacman like game where you run from ghosts. Your objective is to shoot the ghosts from WASD and you move from arrow keys. I also fixed some bugs.
Devlog 14 I updated KuuppaVid , so now you can actually search YouTube videos ! (I used some help from AI) I also updated KuuppaMusic ! Now you can listen to Estonia’s radio station XFM ! (idk why I picked it) And when you minimize it, the song title shows up in the taskbar ! Also it has a cool radio animation . (I used a tutorial for the base of the custom player) I fixed many window bugs (like when resizing the window could go out of bounds). I updated terminal so now (some of) the commands are better and more up to date. I also added an info app, but it currently has no content. KuuppaOS is now almost completed!
Devlog 15 I added the About app (that I started last devlog). You can click the buttons that show info about that app . I added app background color changing to settings and also changed the Reset wallpaper button to instead a Reset to defaults button. I made the radio animation in KuuppaMusic smaller and it now scales better. I also fixed bugs with the taskbar music playing thing. Clock and HackCMD are now properly centered . Camera now records in 4K or the closest resolution instead of 720p. I also added a custom scrollbar so it fits the green theme. I also updated some terminal commands and fixed some bugs .
Devlog 16 I added an audio recorder app . It’s pretty simple, you just hit record. (I used a tutorial for help) I added a loading/login screen that shows for a few seconds. (I used a tutorial for help) I added funny filters to Camera (like saturation, blur, greyscale, hue rotation etc.) I also added a color command to Terminal . I also updated some terminal commands like ‘about’ (I used a bit of AI for help) Current resolution now shows in Camera.
Devlog 17 Big update I added a camera selector to Camera and a microphone selector to Recorder. I added a Dog gallery app where you can view photos of my dogs! (I might add more photos) I finally added the app store . Now you have to install all the apps and they save to your browser’s local storage. (If you install them too quickly the saving can fail, I will fix it) You can also install apps using the install command in Terminal . I updated some terminal commands. Now you can use the rubber band selector next to the app icons. I also made the login screen fade smoother. Idk that’s probably all (or maybe not). (I used help from AI to implement a proper local storage saving thing) I will ship soon! (hopefully)
Devlog 18 Another big update I fixed the app store issue by adding a save button in the app store so make sure to click it after installing or removing many apps at a time . I added reboot and shutdown commands to Terminal. I also made it so you can’t type new commands during longer processes like installing apps with Terminal. I added a start menu ! It isn’t the craziest, but it has reboot, shutdown, open welcome screen and open settings buttons . (yes I removed the settings button from the taskbar!) There is also a now playing thing in the start menu . It supports both KuuppaVid and KuuppaMusic , and it shows the currently playing song. You can even stop the playback. I might update it to support KuuppaBrowser in the next (final) devlog. I also updated the opening/closing animations for the taskbar menus. I also added a export as .txt button to TeXtpad so now you can actually use it for something! I made it so the dog gallery images are only loaded when you want to see the images to speed up the loading process for the website . This is also because i’m adding more dog images in the next devlog! There is also a small loading animation now. I also fixed some stuff and added a simple how-to-use to the welcome screen . That’s all for now, but in the next and hopefully final devlog i’m adding: Now playing support to KuuppaBrowser, Weather to the taskbar, More dog images, Update about to admire TeXtpad’s new functionality, and maybe something else! who knows
Devlog 19 The final devlog I have made many improvements. Also this is the final devlog of KuuppaOS before my second ship, it’s been a long journey. Last devlog I promised Now playing support to KuuppaBrowser but unfortunately, detecting if iframes are making sound isn’t possible with javascript. 2. I added an AI chatbot, KuuppaAI . It’s very kuuppa . It can detect some keywords and have different answers, it can for example code. 3. I removed the Weather desktop app and turned it into a taskbar app . Now if you have allowed location permission, it shows up next to clock . You can still click it and it opens the old weather app, but in a taskbar app style. 4. I changed the default app color , to a more transparent and blueish one. I think it looks a bit better . 5. I added more animations for a smoother experience. For example animations for the apps in the taskbar . 6. I added more dog photos . To be more specific, I added over a hundred dog photos more . When you open it for the first time, it takes a really long time to load them. That’s why I added a service worker (with help from AI) to keep the photos cached . 7. I added fonts to everything so it looks more professional and hopefully made the background higher resolution . 8. Now the cursor changes from grab to grabbing when dragging the windows around. 9. I added a hamburger menu icon so the start menu button looks more like a start menu button . 10. I also added an animation for closing the photos for the different dogs. 11. I added a maximise (/fullscreen) button for apps ! It also has an animation. 12. I added an RGB mode button to settings menu. It makes the apps constantly change their background color (I used a bit of help from AI to make it change through all colors) 13. I added a file type selector to TeXtpad , so now you can choose from .txt, .md, .html and .csv when exporting your TeXtpad text. Also this new functionality now shows in app store and about. I also made the textarea look a bit better . 14. I updated the project README . It still lacks a new screenshot though. 15. I fixed many bugs . Here is some of them: KuuppaMusic wouldn’t show up in the taskbar because of the animation I added for taskbar apps Terminal not showing about command defaults properly Bugs with fullscreen Fixes with dog photos Ghost game iframe having fixed with so it didn’t resize Shutdown and Reboot icons (for start menu) not loading on page load Reset to defaults button not working properly Dog gallery icon not showing in App store And some others! It has been a fun journey, thanks for supporting!
Devlog 20 This devlog wasn’t supposed to happen, because of that I lost 2 hours. I have now fixed more bugs and finished the README. Link to GitHub I’m gonna ship now. (please read my other devlogs they are better than this)
Ships:
I made a webos for the webos 1 mission. It has draggable, resizable and closable windows, desktop icons, a bottom bar with a working clock and an open all windows button. There is six apps: Welcome which is just the welcome screen, TeXtpad which is a notepad, but it only supports one note at a time and it saves it locally to your browser, Weather which shows your local temperature, location and weather condition as an emoji and as text, Clock which is just an analog clock, KuuppaMusic (spotify) which plays the “lofi beats” spotify playlist from the spotify embed (it only plays the first 30s of every song) and KuuppaVid (YouTube) which plays Never Gonna Give You Up by Rick Astley from the YouTube embed. Github copilot is used for fixing some problems and for help and instructions for features like the weather app and autoplay when you open KuuppaVid.
KuuppaOS A WebOS with many different apps and features . This has 17 apps , desktop icons, a taskbar with a start menu (for settings), weather and a calendar/clock . You can have a custom wallpaper , change app background color , blur and transparency or even turn on RGB mode . This even has a rubber-band selector . You can open, close, minimize, maximize and resize the apps. KuuppaOS also has many animations and a dog gallery that has photos of my dogs! More info on GitHub: https://github.com/suklaasukkulayt/kuuppaos GitHub has screenshots and link to a showcase video. (if you have already used this for some reason, go to Start Menu -> Open Settings -> Reset to defaults -> Save to local storage)...
|
1792986707.0269902
|
1793073107.0269902
|