|
6964
|
myPad by @Wyatt26 | Stardance
|
Wyatt26
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: myPad by @Wyatt26 | Stardance
|
1793386119.694835
|
1793990919.694835
|
|
18394
|
myMusic by @cluelessfr | Stardance
|
cluelessfr
|
3
|
105.0
|
1498
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-01T04:09:47Z", "hours": 49.0, "multiplier": 12.73, "payout": 608, "blessing": "neutral", "text": "I made myMusic, a Windows/Linux app that allows you to download your favorite songs. It works by searching YouTube/YouTube music for videos of your song. Then, using yt-dlp, it is able to download your song as an mp3 file. Finally it adds all of the metadata, allowing you to properly listen to your music offline. This is ship #3 of my project, so let me explain all of the changes since the last ship: First I finally added support for playlist and album downloads. Now instead of putting in each separate track individually you can combine it into a playlist and download that all together. For this I also had to update the GUI in order to fit all of the song information together. Second I improved the song searching and reliability. I made things consistent with how YouTube expects them (ASCII, Unicode characters, etc.). I also combine YouTube Music and YouTube candidates, so you get the best of both worlds. The app also tries multiple candidates before declaring that track a fail. Third I introduced explicit-version matching. Before, you would sometimes get the clean version of an explicit song. To fix this I switched to ytmusicapi, which allows me to compare matches to determine which one fits the criteria the best. The API also allows me to see whether or not the song is clean, which makes matching easier. Fourth (and probably the biggest update) I was able to add a Spicetify extension with the app. Because of this you are now able to download your favorite songs directly from the Spotify windows app. It reuses Spotify’s native download button rows, which make it easy to download your songs. It also preserves native behavior if you are already on Spotify Premium. It also shows notifications about the status of your download. This is only available on Windows. Fifth in order to make the Spotify integration work, the app now opens up a FastAPI/Uvicorn server bound to 127.0.0.1:18492. I chose a far away port in order for it not to affect any other local host processes. Sixth I also added background behavior for the app. This keeps the app open in the background without it being open on the gui (you will still be able to see it in your system tray). This allows the Spotify integration to run seamlessly without interfering with your every day work. Seventh I greatly improved the in app updater speed. Before it would greatly lag your computer because the chunk sizes were so small and it had to do a lot of writes to your disk. Now I increased the chunk size, and updated the packaging configurations to further boost the download speed and app size. These were all the main updates I did to my app, hope you like it!", "repo": "https://github.com/cluelessfr/myMusic", "demo": "https://github.com/cluelessfr/myMusic/releases/tag/v2.0.1"}, {"ship_num": 2, "ts": "2026-07-06T17:31:14Z", "hours": 34.0, "multiplier": 18.59, "payout": 611, "blessing": "neutral", "text": "I made myMusic, a Windows desktop app that takes a Spotify track link, previews the song details, finds a matching audio result, downloads it, converts it to MP3, and saves it with basic metadata tags. This is Ship #2 of my project. There have been a quite a few changes since my last ship, so let me list them all: First I added a folder-picking dialog. This allows the user to change the directory their songs are downloaded to, instead of being forced to always download to the “Downloads” directory. The app also saves the last chosen directory, so even if you close and reopen the app the directory is still saved. I then bundled Deno into the app, which helps yt-dlp solve JS challenges. Then I added the Spotify oEmbed metadata as fallback metadata if the SpotifyScraper python package fails. I also added YouTube as a partner with YouTube Music to get the best results from both platforms. I then a ranking system for the songs. The program adds and removes points from the top 6 matches from both platforms based on a few criteria, then it tries downloading from highest to least ranked. Then I also started embedding cover art. The app now takes in the cover art link, streams it, then writes it to the audio file. Next I added in-app update checking. The app can search the github repo for the latest version, checks to see if it is newer, then can automatically download and installer it. I also polished up the UI so that the controls and labels are more organized. Finally, I added Linux x64 and Linux ARM64 support. This has the same behavior as the Windows app, but the dependencies are now installed natively on that platform, which makes the app run more reliably on Linux. The current latest version at the time of this ship is v1.3.0.", "repo": "https://github.com/cluelessfr/myMusic", "demo": "https://github.com/cluelessfr/myMusic/releases/tag/v2.0.1"}, {"ship_num": 3, "ts": "2026-06-18T06:15:48Z", "hours": 22.0, "multiplier": 13.37, "payout": 279, "blessing": "neutral", "text": "I made myMusic, a Windows desktop app that takes a Spotify track link, previews the song details, finds a matching audio result, downloads it, converts it to MP3, and saves it with basic metadata tags. The hardest part was turning it from a local Python project into something other people can actually run: bundling FFmpeg, building the Windows executable, creating an installer, and writing clear install/testing instructions. These were all new steps that I wasn’t familiar with before, so I had to heavily research them and get familiar with them before shipping. I am proud that I was able to get it working as a real, bundled Windows desktop app, instead of a small project that runs only on my computer. To test it, use the Try Project link, download the v1.0.1 Windows installer, install it, open myMusic, paste a Spotify track link, click Preview Song Details, then click Download. The finished MP3 should appear in your Downloads folder. Windows may show SmartScreen because the app is unsigned; the release notes explain how to continue.", "repo": "https://github.com/cluelessfr/myMusic", "demo": "https://github.com/cluelessfr/myMusic/releases/tag/v2.0.1"}]...
|
[{"post_id": 38621, "ts": "202 [{"post_id": 38621, "ts": "2026-08-01T03:30:24Z", "hours": 2.9203, "text": "Devlog 39: I was finally able to get the Linux guards in place, and also packaged the new builds and released them to GitHub has a new version. The guards were mostly simple, as they were just a few checks that asked what operating system the user was on. And depending on that it decided whether or not to install the Spicetify extensions."}, {"post_id": 38528, "ts": "2026-07-31T23:36:25Z", "hours": 7.4581, "text": "Devlog 38: I worked on functions that helped install the Spicetify extension into the Spicetify configuration. I had to ensure Spicetify was installer, had to find its path, had to find its extensions path, then finally copy over the extension. I also added system tray behavior and multiple instance detection for the app, so that now when you close the app it doesn’t close but instead goes to the system tray. This allows the Spotify integration to work even if the app itself isn’t visible. The multiple instance detection ensures the app runs properly, and ensures that the app doesn’t try to use the same http port twice, resulting in errors. This did take a while but now all I have to do is create guards for Linux, so that the Spotify integration only works on Windows and doesn’t create unexpected errors on Linux."}, {"post_id": 37449, "ts": "2026-07-30T06:15:53Z", "hours": 4.1092, "text": "Devlog 37: I am very close to shipping now. I added the Spotify status/progress update messages, so now you can see when the tracks have finished downloading. I also fixed three (kinda major) bugs. First of all there was an error when searching for the songs on YouTube/YouTube Music. Basically what happened was that the title didn’t follow the same ASCII conventions that was used by YouTube. Because of this the app would reject good title matches even though they were the same. This produced quite a few errors, especially when trying to download songs with apostrophes. The second error I fixed was the some songs would automatically have the clean version downloaded. To fix this I switched to the ytmusicapi python package. This package also returned whether the song was explicit or not. Because of this I was able to check whether or not the song was intended to be that way, and if not I could prevent that match from being downloaded. I did have to edit a few functions to accept the new format, but in the end everything worked. Third I fixed a simple error that messed up the searching. This time it wasn’t really a bug, but instead an edge case that I missed. I was catching keywords like “feat.” and “featuring”, but I didn’t catch words like “From (and tv show, etc.)”. Because of this some matches were getting left out. I fixed this by adding another regex pattern that removes this as well."}, {"post_id": 37238, "ts": "2026-07-29T19:53:38Z", "hours": 2.6647, "text": "Devlog 36: I am almost done with the first phase of the integration. When the download button is clicked inside of Spotify, Spicetify intercepts it and now posts a request to the open web server. Then the python script gets notified of that request, decodes it, then automatically starts downloading the song/playlist/album. The only thing is that the myMusic app has to be open while doing this, but I will remove that requirement in the future (not now). The next step would be to add status reports to Spotify so that the user knows what the status of their download is."}, {"post_id": 36598, "ts": "2026-07-28T20:17:16Z", "hours": 2.8025, "text": "Devlog 35: The app now creates its own server on a very distant and far port so that your other local host stuff doesn’t get affected. I did this with uvicorn and threading, so that creating the port doesn’t make the app freeze. With this functionality the app can get the requests made inside Spotify and automatically download them. The next step is to get the app to report the statuses of the download jobs (queued, downloading, completed, failed, etc.). Then I would actually have to connect both parts, let Spotify send messages and the app receive the message."}, {"post_id": 35435, "ts": "2026-07-26T20:46:18Z", "hours": 4.8314, "text": "Devlog 34: I have been working on creating a queue for the requests. This ensures that the user can download multiple songs at once without having to wait for the previous ones to be finished. So far I have been able to create a request id for each request. The app can update the attributes of each request, such as its status, and error message. On top of this once a request is completed the app also automatically removes that request."}, {"post_id": 31912, "ts": "2026-07-20T18:12:07Z", "hours": 3.5339, "text": "Devlog 33: The app is now able to understand and automatically download any received links. Now the problem is that Spotify isn’t able to send any normal requests to via the computer. Because of this I need to find a way for Spotify to send and get data. I know that Spotify (using Spicetify) can send and get http requests. Because of that I am planning to use FastAPI and a local http server to be able to send and get data so the app can automatically download tracks. I will ensure to keep the server in a high index to ensure it doesn’t get in the way of any other local servers."}, {"post_id": 29252, "ts": "2026-07-16T01:35:08Z", "hours": 6.2167, "text": "Devlog 32: (sorry for the late post) I have been working on a really cool feature for the app. Basically what I am trying to do is integrate the myMusic pipeline into the windows Spotify app itself. When you right click a playlist or album, there will be a menu that pops up. Usually for normal Spotify users (not on premium) there will be a greyed out download button. What I am trying to do is two things: add a download button for tracks (because there isn’t one right now), and make the playlist/album button actually work. Right now what I have accomplished is adding a new button for the track and making the playlist/album button clickable. I was able to do this by using Spicetify and its framework. Because I already have it installed on my computer I am using it to test everything out but later I will bundle it with my app. What I did was build a custom Spicetify extension (I had to learn JavaScript) that creates a new button. I was able to make the original playlist/album button work because it was only “aria-disabled”, not actually disabled. This means that it was only disabled at the UI level, but Spotify still recorded clicks. By applying some UI changes I was able to make the button look enabled and still record clicks. My next step is to actually hook this up to the Python script. I think this is a really cool feature."}, {"post_id": 28364, "ts": "2026-07-14T16:05:28Z", "hours": 2.7422, "text": "Devlog 31: This devlog was mainly focused on the efficiency and speed of updating the app. Before the data would come in really small packets, meaning the cpu would have to write to the drive about 130,000 times in total (I know 😭). I adjusted this so it now comes in larger packets so the cpu doesn’t have to do more work. I also adjusted the compression and a few other Inno Setup settings (number of threads, etc.) to make the app more efficient in general. Another issue that I found is that once the app updated (specifically in Windows, idk about other platforms) the settings app would still show the older version for some time. This was an issue with the timing, so I had to adjust some of the delays to get it to work properly. Overall I think this is a pretty good update."}, {"post_id": 27877, "ts": "2026-07-13T19:39:38Z", "hours": 6.6931, "text": "Devlog 30: I FINALLY implemented playlist and album support. At first I thought it would be simple, just looping though each song in the playlist/album. Oh was I wrong. First I had to add two more methods that looped though each song, one for playlists and one for albums. There had to be two different ones because each returned metadata differently. Then I had to kind of change the format of the whole thing, because I had to store all of the songs in a list, but currently I was only returning dictionaries from all of my methods. After getting all of that sorted out I had to actually fix the GUI/downloading part. I had to update the downloading method to handle playlist/album links, then I had to properly handle all of the status message for each song (“Ready”, “Downloading”, “Failed”). Finally I had to work on fixing the bugs I had introduced and handling the edge cases. After all of that I FINALLY had playlist and album support. One thing that was sorta tough was handling the status for each track individually. Before I was just looping through the entire list and setting all of the statuses to the same thing, but I was able to create a new method and change each song status as it was being downloaded, not for every song as a whole."}, {"post_id": 25666, "ts": "2026-07-10T02:30:59Z", "hours": 5.3094, "text": "Devlog 29: This is kind of a messy devlog, so I’ll lay it out as best as I can. First, I update the UI in preparation for playlist/album support. Before it was three static text fields that could only display one song at a time. Now I replaced it with a scrollable frame, with the ability to add more sections inside the frame for more songs. This frame also has the ability to display metadata. I also introduced a status message that shows different messages and colors depending on the status. While I was doing that (and I am not done with it), I decided to stop in the middle and fix another bug. This bug (that was reported by other people as well as my testing) prevented good matches from ranked properly. This was a problem with how I compared the titles in my ranker. To fix this I added two new functions, one that normalizes the candidate title, and another that normalizes the actual Spotify song name (mainly to exclude features and get just the song name). To do this I messed around a lot with regex patterns, so I learned a lot. Now I have to go back and continue working on the new UI for playlists and albums."}, {"post_id": 23538, "ts": "2026-07-06T15:46:31Z", "hours": 3.8236, "text": "Devlog 28: Based on feedback from my first ship, I have decided to introduce Linux support. I thought it would be easy, but it turned out to be a little harder than I thought. The first thing I had to do was rewrite some of the Path code that saves the users download directory. This is because Linux and Windows have different file systems, and I had to account for both. Then came the hard part, Packaging. For ARM, I decided to do this on my Raspberry Pi, where I downloaded the project files from git, downloaded the OS specific FFMPEG and Deno, then repackaged the app as a .tar.gz. I decided to do it this way because this is sort of simply an experimental release. For x64 I decided to use GitHub Actions, which allowed me to download the dependencies and compile without having to spin up a new Virtual Machine. I also decided to keep this as a .tar.gz. Later, once I get more feedback about the Linux versions, I am planning to release a more universal app package (.flatpak). I also had to change the update checkers, because each OS version has to check its own corresponding file. In the end this was a very unique experience and I learned a lot of things about packaging apps on Linux."}, {"post_id": 21260, "ts": "2026-07-03T03:02:23Z", "hours": 5.4692, "text": "Devlog 27: This is a pretty major update. The myMusic can now automatically download and install updates, without the user having to go and download the github repository. Before, the user would manually have to go and download the installer from github, and set it up like a completely new install. Now, the app itself has a “Check for Updates” button. This button checks the github for the latest version, and if there is a newer version available it gives the user an option to download and install that. If they change their mind during the download, there is a cancel option as well. This works by first getting the github version (latest), then seeing if the current app version matches that. If it does, the app is up to date. If not, then the app can fetch the executable using the github API and automatically download the latest installer. On top of this some inno setup tools allow the app to close the app, install the new version, and reopen the app by itself. The only caveat is that this only works starting from v1.2.0. This means that if you have an older version you will have to manually download v1.2.0 in order to start getting automatic app updates."}, {"post_id": 20302, "ts": "2026-07-01T21:16:28Z", "hours": 1.2353, "text": "Devlog 26: Added a function to help with auto-downloading new updates. I haven’t hooked it up to the UI yet, but that is my next step. The function takes in the name of the installer and the link to download it. It first downloads the installer to a temp file, then once everything is good it saves it to a real executable."}, {"post_id": 19419, "ts": "2026-06-30T18:55:12Z", "hours": 1.0339, "text": "Devlog 25: This update was about implementing the update checker from the last devlog. Now there is an in-app button that allows you to check for new updates. The implementation was similar to all the other buttons and didn’t take too long because I already had the function ready. The next step is to allow the app to actually download and install the update, instead of just pointing out it is available."}, {"post_id": 19007, "ts": "2026-06-30T05:16:32Z", "hours": 1.6642, "text": "Devlog 24: I have started adding implementations that checks for the latest version of the app from github. It uses the github API endpoint for my specific project, then reads the json to get any version information. Using that we can compare the current version to the latest version on the github to see if there are any updates available. Currently I have only created the function and am yet to implement this feature into the actual app/GUI."}, {"post_id": 18082, "ts": "2026-06-29T02:24:36Z", "hours": 1.4658, "text": "Devlog 23: Today I added the feature that embeds cover art into the mp3 files. To do this I had to first use the requests library in Python to get the image itself. Instead of downloading the image I kept it in memory using the ‘io’ library. This made the metadata tagging safer and faster. Finally the app uses mutagen to embed the cover art into the mp3 file. I used a try and except loop, which ensures that even if the cover art adding fails the mp3 file still gets returned, just without the art."}, {"post_id": 17306, "ts": "2026-06-28T01:07:06Z", "hours": 1.4167, "text": "Devlog 22 This update was about further increasing the matching strength. Before the program would automatically download the highest ranked candidate, even if it was very low. Now the app downloads the highest ranked candidate only if its ranked above a certain thresh hold. If there are no qualifying matches then the app simply returns a no matches found error. This wasn’t that complicated, but I had to modify a few functions so that the score was returned properly and in a usable format."}, {"post_id": 16647, "ts": "2026-06-27T02:18:17Z", "hours": 2.3261, "text": "Devlog 21: Now added real YouTube (YT) to the match finding instead of just YouTube Music (YTM). Before the songs were found only on YTM, but I realist that normal YT has a larger list of songs, so I decided to add that to the algorithm as well. Now, the program takes 3 songs from YTM and 3 songs from YT, and uses the ranking function I created before to sort them from best to worst. Then the program starts by trying to download the best match. If it can’t, it goes through the list until if finds one it can download. If none of them download, then it sends an error message. One thing with this step was that I tried not to repeat big chunks of code, as a lot of this was similar to the original YTM downloading method."}, {"post_id": 16559, "ts": "2026-06-26T22:37:04Z", "hours": 1.9589, "text": "Devlog 20: Added the Spotify OEmbed fallback. Now even if the SpotifyScraper python package fails we have a fallback to get as much metadata as we can. This wasn’t that hard, as I already had the file from a previous time. The hard part was accounting for all the different cases, such as the title being missing or an empty string. I had to account for all of those while integrating the new file."}, {"post_id": 15864, "ts": "2026-06-25T19:50:13Z", "hours": 0.3722, "text": "Devlog 19: Implemented the ranking feature from the last devlog. Now, the best candidates are ranked in order from best to worst, and that is the order in which they are downloaded."}, {"post_id": 15836, "ts": "2026-06-25T19:07:36Z", "hours": 0.9022, "text": "Devlog 18: I implemented a way to start scoring the candidates returned by YT-DLP. This ensures that even if the first candidate returned is not the best, the program can automatically filter out the bad ones using key words and ensure the best candidate is always selected. I have only coded this function for now, and I have to wire it in to the real app soon."}, {"post_id": 15337, "ts": "2026-06-24T22:21:13Z", "hours": 3.4889, "text": "Devlog 17: Did some major code cleanups. No new features, but made the code more efficient. Also reorganized some files. The hard part was keeping the functionality the same while trying to make the code non-repetitive and more efficient. I also tried to fix any warnings that were present in the code that were caught by the IDE."}, {"post_id": 13864, "ts": "2026-06-22T18:38:18Z", "hours": 1.5628, "text": "Devlog 16: Simple update, but I added a new error message to account for a yt-dlp botting error. Now, when YouTube sends an error saying that the request was blocked due to botting being suspected, it sends a properly formatted error message instead of the raw yt-dlp text. I retested everything to ensure the previous functionality of the app remained the same."}, {"post_id": 13481, "ts": "2026-06-22T02:29:05Z", "hours": 3.7828, "text": "Devlog 15: Improved song selection algorithm, so it selects the next best track if the first selection is invalid. Before if the first track selected by YT-DLP didn’t work/was invalid, then the whole program would fail. Now it moves on to the next if the first one doesn’t work. I also update the progress messages, so it shows which match it is trying."}, {"post_id": 11619, "ts": "2026-06-18T22:25:28Z", "hours": 3.6753, "text": "Devlog 14: I have implemented two new features. First I implemented a feature that allows users to switch the directory where songs get downloaded. This took some time, but I was able to get it in the end. It works by creating a new button which opens a folder picking dialogue. The path that the user seclects inside this dialogue then gets saved to a local json file. Everytime the user changes the path it gets saved to the json, which allows the program to always open up the last directory selected by the user. I had to implement some checks to ensure that the program would work even if the json file was missing or corrupted. The second feature is more of an update. The static “Downloading” progress message is now updated with real time info on what the program is doing. The next step would be adding a dynamic progress bar."}, {"post_id": 11117, "ts": "2026-06-18T05:51:42Z", "hours": 1.4456, "text": "Devlog 13: I added an installer .exe file, added screenshots to the readme, and added a new release on GitHub. Configuring the installer was a little hard, as I was new to this process and didn’t know where to start. I used Codex to help me figure out that I could use a program called Inno. This handled the installer file, uninstall, as well as configuring it with Windows. Codex guided me through how to set that up, and eventually I got everything working. Finally I created a new version on Git and pushed everything."}, {"post_id": 10999, "ts": "2026-06-18T00:51:48Z", "hours": 1.1539, "text": "Devlog 12: I compiled the app into a .exe, updated the readme, and pushed the first version to git. I ran into some issues when compiling the app. Specifically after the initial compiling YT-DLP couldn’t see the location of FFMPEG. Because of this I had to update the “get_app_root.py” file so it accounted for the file changes when compiling."}, {"post_id": 10925, "ts": "2026-06-17T22:01:48Z", "hours": 1.1078, "text": "Devlog 11: I added a preview button to the GUI so that users could see the song details and confirm they were right before downloading the song. also prepared for packaging this file into an executable (.exe)."}, {"post_id": 10860, "ts": "2026-06-17T20:15:14Z", "hours": 1.8986, "text": "Devlog 10: Added app.py and introduced a GUI window using Custom Tkinter. Now when users run app.py they see a new desktop window open up, see a text box and a download button. Once they paste in a Spotify link they see status messages like “Downloading”. At the end they also see the downloaded path. On top of this if there are any errors during the download (like fetching metadata), this also displays as a status message. This took a little bit because I get to get familiar with Custom Tkinter, add another function that gets called by the button, and add some safeguards/quality of life updates. The main safeguard was disabling the download button while the song was downloading, which ensured the user didn’t spam processes. The quality of life update was that the download path now wraps the text to multiple lines if the path is very long."}, {"post_id": 10426, "ts": "2026-06-17T04:14:00Z", "hours": 0.4461, "text": "Devlog 09 Simple update, but it now uses Mutagen to add track name, artists, and album name to the downloaded files."}, {"post_id": 10333, "ts": "2026-06-17T00:33:23Z", "hours": 1.6983, "text": "Devlog 08 Introduced FFMPEG to the project to be able to convert downloads from .webm to .mp3 files. Also change the song title to be the title of the song. Introduced a file check to ensure file names are valid and accepted by Windows."}, {"post_id": 10283, "ts": "2026-06-16T22:29:59Z", "hours": 1.0183, "text": "Devlog 07 The program now automatically uses YT-DLP to download the best match found. This works by using YT-DLP’s build in “Download” method. I pass in the number 1 match found by YT-DLP (built in the last devlog), and it downloads it to the users default “Downloads” folder. This is a major step in the project, and I am almost ready to ship the first version."}, {"post_id": 10156, "ts": "2026-06-16T19:30:33Z", "hours": 2.4497, "text": "Devlog 06 Major Update: Now added YT-DLP to the project. Now whenever you put in a valid link you get more than just the metadata. You also get the top 5 best matches from YouTube Music. This took a while because I had to learn to properly call and use the YT-DLP package in python. I created 3 helper functions. The first created the search query using the metadata, the second returned the search results, and the last one formatted and returned the results. I created one last function as a wrapper, such that when I passed in the metadata it returned the YouTube Music search results. When calling yt_dlp.YoutubeDL(), I got a type error when passing the parameters. This was because the package expected its own datatype, while I was simply passing a dictionary. I was able to fix this by setting the type to “Any” when passing in the argument. I also changed main.py to include the YouTube search results. Now, whenever you pass in a Spotify link you get the song metadata as well as well as the top 5 best matches from YouTube Music."}, {"post_id": 9712, "ts": "2026-06-16T04:05:09Z", "hours": 0.4872, "text": "Devlog 05 This is a pretty small update, all I did was add a small test file to be able to consistently check for errors and functionality."}, {"post_id": 9667, "ts": "2026-06-16T02:27:43Z", "hours": 3.6628, "text": "Devlog 04 This was a big change in the metadata retrieving/handling. Last devlog I explained how the new restrictions on the Spotify API made it difficult to fetch the metadata, so I had to use the public oEmbed API. This didn’t give much information and was hard to work with. After researching some more I found a python package that does the metadata fetching for me, “SpotifyScraper”. this package takes in a spotify url (which the user will be providing), and can get information like song names, artists, duration, etc. This was very useful for me when coding the metadata functions. On top of this it supports playlist and album inputs as well, which is great for future updates. I spent this time rewriting the metadata retrieving functions and cleaning everything up. I removed a few redundant functions and introduced proper error messages."}, {"post_id": 9279, "ts": "2026-06-15T16:04:31Z", "hours": 2.2303, "text": "Devlog 03 After getting the link cleaner to work, I wanted to use the Spotify API to get the metadata of the song. The problem with this is that Spotify introduced heavy limitations on its API earlier this year. Because of this I had to fallback to the Spotify oEmbed, which gives only provides the song name. I am still researching for more options."}, {"post_id": 9003, "ts": "2026-06-15T00:31:15Z", "hours": 3.3114, "text": "Devlog 02 This took a while, but I was able to make the program that strips the input down to only the Spotify link. This ensures that (for the most part) that only the Spotify link gets used, and not any other whitespace/extra characters that might have appeared. It took a while because I was researching and learning how to use the ‘re’ library in Python, and it took some trial and error/debugging to get the logic to work. How this works; The user inputs into the text field First the type of track gets identified (single track, playlist, album) Then it uses the ‘re’ library to detect the pattern of Spotify URLs and URIs. This ensures that the Spotify track is actually valid. It then uses the ‘.group()’ function to capture the matching section out of the input Finally the functions are checked to ensure everything is valid, then the type of track and song url are returned."}, {"post_id": 8718, "ts": "2026-06-14T14:15:06Z", "hours": 0.7378, "text": "Devlog 01 This is the initial commit for the myMusic project. I created the file system locally, then opened the project inside IntelliJ Idea. I kept things simple and only introduced a README for now. I ran into a few problems when pushing to GitHub. Mainly, the .gitignore was being placed inside a .idea folder (I think because I was using IntelliJ). Because of this I had to go back into the IDE and move the .gitignore into the main branch and not into a subfolder."}]...
|
Title: myMusic by @cluelessfr | Stardance
Devlogs Title: myMusic by @cluelessfr | Stardance
Devlogs:
Devlog 01 This is the initial commit for the myMusic project. I created the file system locally, then opened the project inside IntelliJ Idea. I kept things simple and only introduced a README for now. I ran into a few problems when pushing to GitHub. Mainly, the .gitignore was being placed inside a .idea folder (I think because I was using IntelliJ). Because of this I had to go back into the IDE and move the .gitignore into the main branch and not into a subfolder.
Devlog 02 This took a while, but I was able to make the program that strips the input down to only the Spotify link. This ensures that (for the most part) that only the Spotify link gets used, and not any other whitespace/extra characters that might have appeared. It took a while because I was researching and learning how to use the ‘re’ library in Python, and it took some trial and error/debugging to get the logic to work. How this works; The user inputs into the text field First the type of track gets identified (single track, playlist, album) Then it uses the ‘re’ library to detect the pattern of Spotify URLs and URIs. This ensures that the Spotify track is actually valid. It then uses the ‘.group()’ function to capture the matching section out of the input Finally the functions are checked to ensure everything is valid, then the type of track and song url are returned.
Devlog 03 After getting the link cleaner to work, I wanted to use the Spotify API to get the metadata of the song. The problem with this is that Spotify introduced heavy limitations on its API earlier this year. Because of this I had to fallback to the Spotify oEmbed, which gives only provides the song name. I am still researching for more options.
Devlog 04 This was a big change in the metadata retrieving/handling. Last devlog I explained how the new restrictions on the Spotify API made it difficult to fetch the metadata, so I had to use the public oEmbed API. This didn’t give much information and was hard to work with. After researching some more I found a python package that does the metadata fetching for me, “SpotifyScraper”. this package takes in a spotify url (which the user will be providing), and can get information like song names, artists, duration, etc. This was very useful for me when coding the metadata functions. On top of this it supports playlist and album inputs as well, which is great for future updates. I spent this time rewriting the metadata retrieving functions and cleaning everything up. I removed a few redundant functions and introduced proper error messages.
Devlog 05 This is a pretty small update, all I did was add a small test file to be able to consistently check for errors and functionality.
Devlog 06 Major Update: Now added YT-DLP to the project. Now whenever you put in a valid link you get more than just the metadata. You also get the top 5 best matches from YouTube Music. This took a while because I had to learn to properly call and use the YT-DLP package in python. I created 3 helper functions. The first created the search query using the metadata, the second returned the search results, and the last one formatted and returned the results. I created one last function as a wrapper, such that when I passed in the metadata it returned the YouTube Music search results. When calling yt_dlp.YoutubeDL(), I got a type error when passing the parameters. This was because the package expected its own datatype, while I was simply passing a dictionary. I was able to fix this by setting the type to “Any” when passing in the argument. I also changed main.py to include the YouTube search results. Now, whenever you pass in a Spotify link you get the song metadata as well as well as the top 5 best matches from YouTube Music.
Devlog 07 The program now automatically uses YT-DLP to download the best match found. This works by using YT-DLP’s build in “Download” method. I pass in the number 1 match found by YT-DLP (built in the last devlog), and it downloads it to the users default “Downloads” folder. This is a major step in the project, and I am almost ready to ship the first version.
Devlog 08 Introduced FFMPEG to the project to be able to convert downloads from .webm to .mp3 files. Also change the song title to be the title of the song. Introduced a file check to ensure file names are valid and accepted by Windows.
Devlog 09 Simple update, but it now uses Mutagen to add track name, artists, and album name to the downloaded files.
Devlog 10: Added app.py and introduced a GUI window using Custom Tkinter. Now when users run app.py they see a new desktop window open up, see a text box and a download button. Once they paste in a Spotify link they see status messages like “Downloading”. At the end they also see the downloaded path. On top of this if there are any errors during the download (like fetching metadata), this also displays as a status message. This took a little bit because I get to get familiar with Custom Tkinter, add another function that gets called by the button, and add some safeguards/quality of life updates. The main safeguard was disabling the download button while the song was downloading, which ensured the user didn’t spam processes. The quality of life update was that the download path now wraps the text to multiple lines if the path is very long.
Devlog 11: I added a preview button to the GUI so that users could see the song details and confirm they were right before downloading the song. also prepared for packaging this file into an executable (.exe).
Devlog 12: I compiled the app into a .exe, updated the readme, and pushed the first version to git. I ran into some issues when compiling the app. Specifically after the initial compiling YT-DLP couldn’t see the location of FFMPEG. Because of this I had to update the “get_app_root.py” file so it accounted for the file changes when compiling.
Devlog 13: I added an installer .exe file, added screenshots to the readme, and added a new release on GitHub. Configuring the installer was a little hard, as I was new to this process and didn’t know where to start. I used Codex to help me figure out that I could use a program called Inno. This handled the installer file, uninstall, as well as configuring it with Windows. Codex guided me through how to set that up, and eventually I got everything working. Finally I created a new version on Git and pushed everything.
Devlog 14: I have implemented two new features. First I implemented a feature that allows users to switch the directory where songs get downloaded. This took some time, but I was able to get it in the end. It works by creating a new button which opens a folder picking dialogue. The path that the user seclects inside this dialogue then gets saved to a local json file. Everytime the user changes the path it gets saved to the json, which allows the program to always open up the last directory selected by the user. I had to implement some checks to ensure that the program would work even if the json file was missing or corrupted. The second feature is more of an update. The static “Downloading” progress message is now updated with real time info on what the program is doing. The next step would be adding a dynamic progress bar.
Devlog 15: Improved song selection algorithm, so it selects the next best track if the first selection is invalid. Before if the first track selected by YT-DLP didn’t work/was invalid, then the whole program would fail. Now it moves on to the next if the first one doesn’t work. I also update the progress messages, so it shows which match it is trying.
Devlog 16: Simple update, but I added a new error message to account for a yt-dlp botting error. Now, when YouTube sends an error saying that the request was blocked due to botting being suspected, it sends a properly formatted error message instead of the raw yt-dlp text. I retested everything to ensure the previous functionality of the app remained the same.
Devlog 17: Did some major code cleanups. No new features, but made the code more efficient. Also reorganized some files. The hard part was keeping the functionality the same while trying to make the code non-repetitive and more efficient. I also tried to fix any warnings that were present in the code that were caught by the IDE.
Devlog 18: I implemented a way to start scoring the candidates returned by YT-DLP. This ensures that even if the first candidate returned is not the best, the program can automatically filter out the bad ones using key words and ensure the best candidate is always selected. I have only coded this function for now, and I have to wire it in to the real app soon.
Devlog 19: Implemented the ranking feature from the last devlog. Now, the best candidates are ranked in order from best to worst, and that is the order in which they are downloaded.
Devlog 20: Added the Spotify OEmbed fallback. Now even if the SpotifyScraper python package fails we have a fallback to get as much metadata as we can. This wasn’t that hard, as I already had the file from a previous time. The hard part was accounting for all the different cases, such as the title being missing or an empty string. I had to account for all of those while integrating the new file.
Devlog 21: Now added real YouTube (YT) to the match finding instead of just YouTube Music (YTM). Before the songs were found only on YTM, but I realist that normal YT has a larger list of songs, so I decided to add that to the algorithm as well. Now, the program takes 3 songs from YTM and 3 songs from YT, and uses the ranking function I created before to sort them from best to worst. Then the program starts by trying to download the best match. If it can’t, it goes through the list until if finds one it can download. If none of them download, then it sends an error message. One thing with this step was that I tried not to repeat big chunks of code, as a lot of this was similar to the original YTM downloading method.
Devlog 22 This update was about further increasing the matching strength. Before the program would automatically download the highest ranked candidate, even if it was very low. Now the app downloads the highest ranked candidate only if its ranked above a certain thresh hold. If there are no qualifying matches then the app simply returns a no matches found error. This wasn’t that complicated, but I had to modify a few functions so that the score was returned properly and in a usable format.
Devlog 23: Today I added the feature that embeds cover art into the mp3 files. To do this I had to first use the requests library in Python to get the image itself. Instead of downloading the image I kept it in memory using the ‘io’ library. This made the metadata tagging safer and faster. Finally the app uses mutagen to embed the cover art into the mp3 file. I used a try and except loop, which ensures that even if the cover art adding fails the mp3 file still gets returned, just without the art.
Devlog 24: I have started adding implementations that checks for the latest version of the app from github. It uses the github API endpoint for my specific project, then reads the json to get any version information. Using that we can compare the current version to the latest version on the github to see if there are any updates available. Currently I have only created the function and am yet to implement this feature into the actual app/GUI.
Devlog 25: This update was about implementing the update checker from the last devlog. Now there is an in-app button that allows you to check for new updates. The implementation was similar to all the other buttons and didn’t take too long because I already had the function ready. The next step is to allow the app to actually download and install the update, instead of just pointing out it is available.
Devlog 26: Added a function to help with auto-downloading new updates. I haven’t hooked it up to the UI yet, but that is my next step. The function takes in the name of the installer and the link to download it. It first downloads the installer to a temp file, then once everything is good it saves it to a real executable.
Devlog 27: This is a pretty major update. The myMusic can now automatically download and install updates, without the user having to go and download the github repository. Before, the user would manually have to go and download the installer from github, and set it up like a completely new install. Now, the app itself has a “Check for Updates” button. This button checks the github for the latest version, and if there is a newer version available it gives the user an option to download and install that. If they change their mind during the download, there is a cancel option as well. This works by first getting the github version (latest), then seeing if the current app version matches that. If it does, the app is up to date. If not, then the app can fetch the executable using the github API and automatically download the latest installer. On top of this some inno setup tools allow the app to close the app, install the new version, and reopen the app by itself. The only caveat is that this only works starting from v1.2.0. This means that if you have an older version you will have to manually download v1.2.0 in order to start getting automatic app updates.
Devlog 28: Based on feedback from my first ship, I have decided to introduce Linux support. I thought it would be easy, but it turned out to be a little harder than I thought. The first thing I had to do was rewrite some of the Path code that saves the users download directory. This is because Linux and Windows have different file systems, and I had to account for both. Then came the hard part, Packaging. For ARM, I decided to do this on my Raspberry Pi, where I downloaded the project files from git, downloaded the OS specific FFMPEG and Deno, then repackaged the app as a .tar.gz. I decided to do it this way because this is sort of simply an experimental release. For x64 I decided to use GitHub Actions, which allowed me to download the dependencies and compile without having to spin up a new Virtual Machine. I also decided to keep this as a .tar.gz. Later, once I get more feedback about the Linux versions, I am planning to release a more universal app package (.flatpak). I also had to change the update checkers, because each OS version has to check its own corresponding file. In the end this was a very unique experience and I learned a lot of things about packaging apps on Linux.
Devlog 29: This is kind of a messy devlog, so I’ll lay it out as best as I can. First, I update the UI in preparation for playlist/album support. Before it was three static text fields that could only display one song at a time. Now I replaced it with a scrollable frame, with the ability to add more sections inside the frame for more songs. This frame also has the ability to display metadata. I also introduced a status message that shows different messages and colors depending on the status. While I was doing that (and I am not done with it), I decided to stop in the middle and fix another bug. This bug (that was reported by other people as well as my testing) prevented good matches from ranked properly. This was a problem with how I compared the titles in my ranker. To fix this I added two new functions, one that normalizes the candidate title, and another that normalizes the actual Spotify song name (mainly to exclude features and get just the song name). To do this I messed around a lot with regex patterns, so I learned a lot. Now I have to go back and continue working on the new UI for playlists and albums.
Devlog 30: I FINALLY implemented playlist and album support. At first I thought it would be simple, just looping though each song in the playlist/album. Oh was I wrong. First I had to add two more methods that looped though each song, one for playlists and one for albums. There had to be two different ones because each returned metadata differently. Then I had to kind of change the format of the whole thing, because I had to store all of the songs in a list, but currently I was only returning dictionaries from all of my methods. After getting all of that sorted out I had to actually fix the GUI/downloading part. I had to update the downloading method to handle playlist/album links, then I had to properly handle all of the status message for each song (“Ready”, “Downloading”, “Failed”). Finally I had to work on fixing the bugs I had introduced and handling the edge cases. After all of that I FINALLY had playlist and album support. One thing that was sorta tough was handling the status for each track individually. Before I was just looping through the entire list and setting all of the statuses to the same thing, but I was able to create a new method and change each song status as it was being downloaded, not for every song as a whole.
Devlog 31: This devlog was mainly focused on the efficiency and speed of updating the app. Before the data would come in really small packets, meaning the cpu would have to write to the drive about 130,000 times in total (I know 😭). I adjusted this so it now comes in larger packets so the cpu doesn’t have to do more work. I also adjusted the compression and a few other Inno Setup settings (number of threads, etc.) to make the app more efficient in general. Another issue that I found is that once the app updated (specifically in Windows, idk about other platforms) the settings app would still show the older version for some time. This was an issue with the timing, so I had to adjust some of the delays to get it to work properly. Overall I think this is a pretty good update.
Devlog 32: (sorry for the late post) I have been working on a really cool feature for the app. Basically what I am trying to do is integrate the myMusic pipeline into the windows Spotify app itself. When you right click a playlist or album, there will be a menu that pops up. Usually for normal Spotify users (not on premium) there will be a greyed out download button. What I am trying to do is two things: add a download button for tracks (because there isn’t one right now), and make the playlist/album button actually work. Right now what I have accomplished is adding a new button for the track and making the playlist/album button clickable. I was able to do this by using Spicetify and its framework. Because I already have it installed on my computer I am using it to test everything out but later I will bundle it with my app. What I did was build a custom Spicetify extension (I had to learn JavaScript) that creates a new button. I was able to make the original playlist/album button work because it was only “aria-disabled”, not actually disabled. This means that it was only disabled at the UI level, but Spotify still recorded clicks. By applying some UI changes I was able to make the button look enabled and still record clicks. My next step is to actually hook this up to the Python script. I think this is a really cool feature.
Devlog 33: The app is now able to understand and automatically download any received links. Now the problem is that Spotify isn’t able to send any normal requests to via the computer. Because of this I need to find a way for Spotify to send and get data. I know that Spotify (using Spicetify) can send and get http requests. Because of that I am planning to use FastAPI and a local http server to be able to send and get data so the app can automatically download tracks. I will ensure to keep the server in a high index to ensure it doesn’t get in the way of any other local servers.
Devlog 34: I have been working on creating a queue for the requests. This ensures that the user can download multiple songs at once without having to wait for the previous ones to be finished. So far I have been able to create a request id for each request. The app can update the attributes of each request, such as its status, and error message. On top of this once a request is completed the app also automatically removes that request.
Devlog 35: The app now creates its own server on a very distant and far port so that your other local host stuff doesn’t get affected. I did this with uvicorn and threading, so that creating the port doesn’t make the app freeze. With this functionality the app can get the requests made inside Spotify and automatically download them. The next step is to get the app to report the statuses of the download jobs (queued, downloading, completed, failed, etc.). Then I would actually have to connect both parts, let Spotify send messages and the app receive the message.
Devlog 36: I am almost done with the first phase of the integration. When the download button is clicked inside of Spotify, Spicetify intercepts it and now posts a request to the open web server. Then the python script gets notified of that request, decodes it, then automatically starts downloading the song/playlist/album. The only thing is that the myMusic app has to be open while doing this, but I will remove that requirement in the future (not now). The next step would be to add status reports to Spotify so that the user knows what the status of their download is.
Devlog 37: I am very close to shipping now. I added the Spotify status/progress update messages, so now you can see when the tracks have finished downloading. I also fixed three (kinda major) bugs. First of all there was an error when searching for the songs on YouTube/YouTube Music. Basically what happened was that the title didn’t follow the same ASCII conventions that was used by YouTube. Because of this the app would reject good title matches even though they were the same. This produced quite a few errors, especially when trying to download songs with apostrophes. The second error I fixed was the some songs would automatically have the clean version downloaded. To fix this I switched to the ytmusicapi python package. This package also returned whether the song was explicit or not. Because of this I was able to check whether or not the song was intended to be that way, and if not I could prevent that match from being downloaded. I did have to edit a few functions to accept the new format, but in the end everything worked. Third I fixed a simple error that messed up the searching. This time it wasn’t really a bug, but instead an edge case that I missed. I was catching keywords like “feat.” and “featuring”, but I didn’t catch words like “From (and tv show, etc.)”. Because of this some matches were getting left out. I fixed this by adding another regex pattern that removes this as well.
Devlog 38: I worked on functions that helped install the Spicetify extension into the Spicetify configuration. I had to ensure Spicetify was installer, had to find its path, had to find its extensions path, then finally copy over the extension. I also added system tray behavior and multiple instance detection for the app, so that now when you close the app it doesn’t close but instead goes to the system tray. This allows the Spotify integration to work even if the app itself isn’t visible. The multiple instance detection ensures the app runs properly, and ensures that the app doesn’t try to use the same http port twice, resulting in errors. This did take a while but now all I have to do is create guards for Linux, so that the Spotify integration only works on Windows and doesn’t create unexpected errors on Linux.
Devlog 39: I was finally able to get the Linux guards in place, and also packaged the new builds and released them to GitHub has a new version. The guards were mostly simple, as they were just a few checks that asked what operating system the user was on. And depending on that it decided whether or not to install the Spicetify extensions.
Ships:
I made myMusic, a Windows desktop app that takes a Spotify track link, previews the song details, finds a matching audio result, downloads it, converts it to MP3, and saves it with basic metadata tags. The hardest part was turning it from a local Python project into something other people can actually run: bundling FFmpeg, building the Windows executable, creating an installer, and writing clear install/testing instructions. These were all new steps that I wasn’t familiar with before, so I had to heavily research them and get familiar with them before shipping. I am proud that I was able to get it working as a real, bundled Windows desktop app, instead of a small project that runs only on my computer. To test it, use the Try Project link, download the v1.0.1 Windows installer, install it, open myMusic, paste a Spotify track link, click Preview Song Details, then click Download. The finished MP3 should appear in your Downloads folder. Windows may show SmartScreen because the app is unsigned; the release notes explain how to continue.
I made myMusic, a Windows desktop app that takes a Spotify track link, previews the song details, finds a matching audio result, downloads it, converts it to MP3, and saves it with basic metadata tags. This is Ship #2 of my project. There have been a quite a few changes since my last ship, so let me list them all: First I added a folder-picking dialog. This allows the user to change the directory their songs are downloaded to, instead of being forced to always download to the “Downloads” directory. The app also saves the last chosen directory, so even if you close and reopen the app the directory is still saved. I then bundled Deno into the app, which helps yt-dlp solve JS challenges. Then I added the Spotify oEmbed metadata as fallback metadata if the SpotifyScraper python package fails. I also added YouTube as a partner with YouTube Music to get the best results from both platforms. I then a ranking system for the songs. The program adds and removes points from the top 6 matches from both platforms based on a few criteria, then it tries downloading from highest to least ranked. Then I also started embedding cover art. The app now takes in the cover art link, streams it, then writes it to the audio file. Next I added in-app update checking. The app can search the github repo for the latest version, checks to see if it is newer, then can automatically download and installer it. I also polished up the UI so that the controls and labels are more organized. Finally, I added Linux x64 and Linux ARM64 support. This has the same behavior as the Windows app, but the dependencies are now installed natively on that platform, which makes the app run more reliably on Linux. The current latest version at the time of this ship is v1.3.0.
I made myMusic, a Windows/Linux app that allows you to download your favorite songs. It works by searching YouTube/YouTube music for videos of your song. Then, using yt-dlp, it is able to download your song as an mp3 file. Finally it adds all of the metadata, allowing you to properly listen to your music offline. This is ship #3 of my project, so let me explain all of the changes since the last ship: First I finally added support for playlist and album downloads. Now instead of putting in each separate track individually you can combine it into a playlist and download that all together. For this I also had to update the GUI in order to fit all of the song information together. Second I improved the song searching and reliability. I made things consistent with how YouTube expects them (ASCII, Unicode characters, etc.). I also combine YouTube Music and YouTube candidates, so you get the best of both worlds. The app also tries multiple candidates before declaring that track a fail. Third I introduced explicit-version matching. Before, you would sometimes get the clean version of an explicit song. To fix this I switched to ytmusicapi, which allows me to compare matches to determine which one fits the criteria the best. The API also allows me to see whether or not the song is clean, which makes matching easier. Fourth (and probably the biggest update) I was able to add a Spicetify extension with the app. Because of this you are now able to download your favorite songs directly from the Spotify windows app. It reuses Spotify’s native download button rows, which make it easy to download your songs. It also preserves native behavior if you are already on Spotify Premium. It also shows notifications about the status of your download. This is only available on Windows. Fifth in order to make the Spotify integration work, the app now opens up a FastAPI/Uvicorn server bound to 127.0.0.1:18492. I chose a far away port in order for it not to affect any other local host processes. Sixth I also added background behavior for the app. This keeps the app open in the background without it being open on the gui (you will still be able to see it in your system tray). This allows the Spotify integration to run seamlessly without interfering with your every day work. Seventh I greatly improved the in app updater speed. Before it would greatly lag your computer because the chunk sizes were so small and it had to do a lot of writes to your disk. Now I increased the chunk size, and updated the packaging configurations to further boost the download speed and app size. These were all the main updates I did to my app, hope you like it!...
|
1793328802.905017
|
1793415202.905017
|
|
26466
|
myMicropad by @AfterWorld | Stardance
|
AfterWorld
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: myMicropad by @AfterWorld | Stardance
|
1792716711.3531506
|
1793321511.3531506
|
|
7876
|
myMacropad by @heian | Stardance
|
heian
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-11T23:09:18Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Custom Hackpad! My first time using QMK, so that was a learning curve. I’m proud of how it turned out.", "repo": "https://github.com/syntonos/myMacropad", "demo": ""}]...
|
[{"post_id": 7147, "ts": "2026 [{"post_id": 7147, "ts": "2026-06-11T22:43:34Z", "hours": 2.4367, "text": "Made a macropad! Did not expect to suffer so much. I genuinely think engineering is just a measure of how many small problems you can tolerate before you combust. This took wayy more than 2.5 hours I just did not know how to use either Lapse or Hackatime and I suffered quite a lot off camera. PCB wasn’t that bad. I still have no idea how KiCad does any sort of positioning (from where in the object is the position calculated?? why is it so different across objects?? why does align just never work???), and it’s also deeply wonky switching back and forth from KiCad to Altium for different projects. It’s really nice not having to worry about any complications (signal processing, hunting down or making 3D models, etc) with wiring for once. CAD went alright! I feel like you notice a lot of fun quality of life features that Fusion is missing when you start doing CAD for a bit. I’d love to be able to group objects or parts of a sketch and have them behave the same way. I’d love to have an easy way to find the midpoint or centers in a sketch. I’d love a way to align objects. oh well ! First time using QMK! Took a while to install and learn. I think I genuinely spent an hour scrolling through documentation. I imagine I’ll have to do some more wrangling when I flash it. Finally done! I can finally sleep."}]...
|
Title: myMacropad by @heian | Stardance
Devlogs:
Title: myMacropad by @heian | Stardance
Devlogs:
Made a macropad! Did not expect to suffer so much. I genuinely think engineering is just a measure of how many small problems you can tolerate before you combust. This took wayy more than 2.5 hours I just did not know how to use either Lapse or Hackatime and I suffered quite a lot off camera. PCB wasn’t that bad. I still have no idea how KiCad does any sort of positioning (from where in the object is the position calculated?? why is it so different across objects?? why does align just never work???), and it’s also deeply wonky switching back and forth from KiCad to Altium for different projects. It’s really nice not having to worry about any complications (signal processing, hunting down or making 3D models, etc) with wiring for once. CAD went alright! I feel like you notice a lot of fun quality of life features that Fusion is missing when you start doing CAD for a bit. I’d love to be able to group objects or parts of a sketch and have them behave the same way. I’d love to have an easy way to find the midpoint or centers in a sketch. I’d love a way to align objects. oh well ! First time using QMK! Took a while to install and learn. I think I genuinely spent an hour scrolling through documentation. I imagine I’ll have to do some more wrangling when I flash it. Finally done! I can finally sleep.
Ships:
Custom Hackpad! My first time using QMK, so that was a learning curve. I’m proud of how it turned out....
|
1792878654.6206846
|
1793742654.6206846
|
|
42281
|
my-website by @aaronst_03 | Stardance
|
aaronst_03
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my-website by @aaronst_03 | Stardance
|
1793170237.2295182
|
1793775037.2295182
|
|
59111
|
my-website by @Guy-kadosh | Stardance
|
Guy-kadosh
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my-website by @Guy-kadosh | Stardance
|
1792784942.1945467
|
1793389742.1945467
|
|
55902
|
my-self introduction by @shlokchavan | Stardance
|
shlokchavan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my-self introduction by @shlokchavan | Star Title: my-self introduction by @shlokchavan | Stardance...
|
1793357640.8873816
|
1793962440.8873816
|
|
69875
|
my-screen-pet by @fabianternis | Stardance
|
fabianternis
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my-screen-pet by @fabianternis | Stardance
|
1792918122.2121553
|
1793522922.2121553
|
|
47455
|
my-portfolio by @myselfgaurav99 | Stardance
|
myselfgaurav99
|
2
|
8.0
|
27
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-22T07:42:49Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I make my portfolio", "repo": "https://github.com/gauravpantha69/gaurav-portfolio", "demo": "https://gauravpantha69.github.io/gaurav-portfolio/"}, {"ship_num": 2, "ts": "2026-08-13T15:16:49Z", "hours": 7.0, "multiplier": 3.8, "payout": 27, "blessing": "neutral", "text": "I make my own portfolio while still learning things and coding.", "repo": "https://github.com/gauravpantha69/gaurav-portfolio", "demo": "https://gauravpantha69.github.io/gaurav-portfolio/"}]...
|
[{"post_id": 47981, "ts": "202 [{"post_id": 47981, "ts": "2026-08-16T08:08:01Z", "hours": 0.9606, "text": "I made this personal portfolio website to show about me, my skills, projects and some of the things i am interested in. I wanted to make something that feel like my own and not just a basic portfolio template. I worked on the design, sections, animations and added my projects in it. At first it was little hard to decide how everything should look, and I changed the design many times before getting something i liked. While making this project I learned many things about web development and designing. I faced some problems with responsive design, spacing and some code not working properly, but I fixed them one by one. The portfolio is still not fully finished because I want to keep adding new projects and improving it when I learn new things. Overall I am happy with how it turned out and this project was really fun to build."}, {"post_id": 46364, "ts": "2026-08-13T15:15:56Z", "hours": 7.0689, "text": "I am working on my portfolio"}]...
|
Title: my-portfolio by @myselfgaurav99 | Stardance Title: my-portfolio by @myselfgaurav99 | Stardance
Devlogs:
I am working on my portfolio
I made this personal portfolio website to show about me, my skills, projects and some of the things i am interested in. I wanted to make something that feel like my own and not just a basic portfolio template. I worked on the design, sections, animations and added my projects in it. At first it was little hard to decide how everything should look, and I changed the design many times before getting something i liked. While making this project I learned many things about web development and designing. I faced some problems with responsive design, spacing and some code not working properly, but I fixed them one by one. The portfolio is still not fully finished because I want to keep adding new projects and improving it when I learn new things. Overall I am happy with how it turned out and this project was really fun to build.
Ships:
I make my own portfolio while still learning things and coding.
I make my portfolio...
|
1793267346.4085906
|
1793353746.4085906
|
|
38087
|
my-keeb by @benMakesStuff | Stardance
|
benMakesStuff
|
0
|
7.78
|
0
|
[]
|
[{"post_id": 35460, "ts": "202 [{"post_id": 35460, "ts": "2026-07-26T22:08:21Z", "hours": 4.7347, "text": "I started with the schematics and pcb. and i decided for a 65% exploded with one knob. and after i understood how to connect stuff i decided not to have a screen but only one knob, and i will not have any rgb lights anymore too."}, {"post_id": 32850, "ts": "2026-07-22T08:21:59Z", "hours": 3.0478, "text": "I started learning different layouts (and if that matters) i drew some by hand but then found a web page where i can just design them easier so i did my favourite 2 layouts and added some colours."}]...
|
Title: my-keeb by @benMakesStuff | Stardance
Devl Title: my-keeb by @benMakesStuff | Stardance
Devlogs:
I started learning different layouts (and if that matters) i drew some by hand but then found a web page where i can just design them easier so i did my favourite 2 layouts and added some colours.
I started with the schematics and pcb. and i decided for a 65% exploded with one knob. and after i understood how to connect stuff i decided not to have a screen but only one knob, and i will not have any rgb lights anymore too....
|
1792799570.8062413
|
1793404370.8062413
|
|
9115
|
my-git-stats by @MessiasMatheus | Stardance
|
MessiasMatheus
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my-git-stats by @MessiasMatheus | Stardance
|
1792752902.018862
|
1793357702.018862
|
|
67925
|
my-first-slackbot by @vedhsharma640 | Stardance
|
vedhsharma640
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my-first-slackbot by @vedhsharma640 | Stard Title: my-first-slackbot by @vedhsharma640 | Stardance...
|
1793116212.4051936
|
1793721012.4051936
|
|
63389
|
my-browser by @dkarthikofficial | Stardance
|
dkarthikofficial
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my-browser by @dkarthikofficial | Stardance
|
1793051409.406161
|
1793656209.406161
|
|
65825
|
my-blare by @LeoMos | Stardance
|
LeoMos
|
0
|
2.28
|
0
|
[]
|
[{"post_id": 73729, "ts": "202 [{"post_id": 73729, "ts": "2026-09-25T19:55:52Z", "hours": 2.2833, "text": "cooking?"}]...
|
Title: my-blare by @LeoMos | Stardance
Devlogs:
c Title: my-blare by @LeoMos | Stardance
Devlogs:
cooking?...
|
1793091169.3311293
|
1793695969.3311293
|
|
48851
|
my-biopage by @echo-ilovech3ss | Stardance
|
echo-ilovech3ss
|
1
|
3.67
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-16T13:07:35Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a personal about me / Bio-page, inspired from my old version, as the first repo here! I used ai for some of the code, the brainstorming and ideas were mine.", "repo": "https://github.com/echo-ilovech3ss/my-biopage", "demo": "https://shreyasloveschess.netlify.app/"}]...
|
[{"post_id": 48662, "ts": "202 [{"post_id": 48662, "ts": "2026-08-17T04:44:21Z", "hours": 2.6736, "text": "#Devlog 3 Updated the CSS, It looked too bloated, along with removing some features that weren’t what I was going for really."}, {"post_id": 48138, "ts": "2026-08-16T13:03:55Z", "hours": 0.4039, "text": "#Devlog 2 Added a 3D character viewer for my bio website, its live now!"}, {"post_id": 47925, "ts": "2026-08-16T06:06:08Z", "hours": 0.5961, "text": "#Devlog 1 I’m working on adding more cool things like this chess engine my my new updated biopage, it will be hosted at shreyasloveschess.netlify.app soon right now it has the old version."}]...
|
Title: my-biopage by @echo-ilovech3ss | Stardance
Title: my-biopage by @echo-ilovech3ss | Stardance
Devlogs:
#Devlog 1 I’m working on adding more cool things like this chess engine my my new updated biopage, it will be hosted at shreyasloveschess.netlify.app soon right now it has the old version.
#Devlog 2 Added a 3D character viewer for my bio website, its live now!
#Devlog 3 Updated the CSS, It looked too bloated, along with removing some features that weren’t what I was going for really.
Ships:
I made a personal about me / Bio-page, inspired from my old version, as the first repo here! I used ai for some of the code, the brainstorming and ideas were mine....
|
1793274638.8802946
|
1793361038.8802946
|
|
64003
|
my-alarm-clock by @antek042 | Stardance
|
antek042
|
0
|
1.42
|
0
|
[]
|
[{"post_id": 74402, "ts": "202 [{"post_id": 74402, "ts": "2026-09-27T10:10:53Z", "hours": 0.5469, "text": "I’ve added whole code structure to my ino file and it compiles without any errors."}, {"post_id": 72872, "ts": "2026-09-23T22:09:28Z", "hours": 0.6175, "text": "I’ve done some basic classes structure, i must to add bodies to methods so basic alarm staff will work soon."}, {"post_id": 71986, "ts": "2026-09-21T22:22:23Z", "hours": 0.2564, "text": "I’ve created pcb and cad model for my blare. Now i will create some basic firmware and write some future plans for it."}]...
|
Title: my-alarm-clock by @antek042 | Stardance
De Title: my-alarm-clock by @antek042 | Stardance
Devlogs:
I’ve created pcb and cad model for my blare. Now i will create some basic firmware and write some future plans for it.
I’ve done some basic classes structure, i must to add bodies to methods so basic alarm staff will work soon.
I’ve added whole code structure to my ino file and it compiles without any errors....
|
1793058479.4015083
|
1793663279.4015083
|
|
66701
|
my-alarm by @shaurya500 | Stardance
|
shaurya500
|
0
|
2.73
|
0
|
[]
|
[{"post_id": 75142, "ts": "202 [{"post_id": 75142, "ts": "2026-09-29T08:53:23Z", "hours": 1.5339, "text": "Designed PCB with correct components ,fixed issues"}, {"post_id": 75130, "ts": "2026-09-29T07:07:50Z", "hours": 1.2003, "text": "made PCB for my first alarm clock"}]...
|
Title: my-alarm by @shaurya500 | Stardance
Devlog Title: my-alarm by @shaurya500 | Stardance
Devlogs:
made PCB for my first alarm clock
Designed PCB with correct components ,fixed issues...
|
1793101864.7759693
|
1793706664.7759693
|
|
38997
|
my wonderfully amazing website by @neonxsl | Stard my wonderfully amazing website by @neonxsl | Stardance...
|
neonxsl
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-25T00:09:09Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "my wonderfully amazing website is now live! the familiar languages section is reactive… you can hover over the langauge icons and see them animate! the links in the navbar have a subtle animation when you hover over them.. also i used lucide icons and devicons! this is all done with the typography, space grotesk has to be my favourite font… its so clean and minimal! also links to my recent projects, inside cards with a nice shadow.", "repo": "https://github.com/neonxsl/my-website", "demo": "https://neonxsl.dev/"}]...
|
[{"post_id": 34357, "ts": "202 [{"post_id": 34357, "ts": "2026-07-25T00:05:22Z", "hours": 0.7056, "text": "i constructed an about me and a projects section where i show off my recent projects! the about me section has a small description of what i like to do.. i kept the design minimal, opting only for a clean light look!"}, {"post_id": 33954, "ts": "2026-07-24T09:34:08Z", "hours": 0.8719, "text": "Started constructing the website, finishing the nav bar, title section and languages I know The icons are reactive, they change colour, animate and show the language name at the bottom.. the animation is quite pleasant The navbar items have a subtle text highlight animation as well. Imported Lucide icons for the map icon and devicon for the languages icons"}]...
|
Title: my wonderfully amazing website by @neonxsl Title: my wonderfully amazing website by @neonxsl | Stardance
Devlogs:
Started constructing the website, finishing the nav bar, title section and languages I know The icons are reactive, they change colour, animate and show the language name at the bottom.. the animation is quite pleasant The navbar items have a subtle text highlight animation as well. Imported Lucide icons for the map icon and devicon for the languages icons
i constructed an about me and a projects section where i show off my recent projects! the about me section has a small description of what i like to do.. i kept the design minimal, opting only for a clean light look!
Ships:
my wonderfully amazing website is now live! the familiar languages section is reactive… you can hover over the langauge icons and see them animate! the links in the navbar have a subtle animation when you hover over them.. also i used lucide icons and devicons! this is all done with the typography, space grotesk has to be my favourite font… its so clean and minimal! also links to my recent projects, inside cards with a nice shadow....
|
1793303282.6032457
|
1793389682.6032457
|
|
70231
|
my websiteee >.< by @veltrix | Stardance
|
veltrix
|
1
|
8.54
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T16:10:49Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I Finally created a personal website!!! YAYY check it out, everyone!", "repo": "https://github.com/veltrix049-source/My-personal-website", "demo": "https://veltrix049-source.github.io/My-personal-website/"}]...
|
[{"post_id": 83616, "ts": "202 [{"post_id": 83616, "ts": "2026-10-28T07:47:08Z", "hours": 1.5425, "text": "Removed the fixed height of the room so that when u readjust the page it won’t look weird. I also added some more features, also rewrote every thing that I got to change. Now there is more mysterious things to click into. YAYY"}, {"post_id": 81499, "ts": "2026-10-21T14:47:14Z", "hours": 0.3817, "text": "emm…. looks nice"}, {"post_id": 81493, "ts": "2026-10-21T14:16:01Z", "hours": 6.6022, "text": "I’m almost finished. It is my first time building a website. YAYYY"}]...
|
Title: my websiteee >.< by @veltrix | Starda Title: my websiteee >.< by @veltrix | Stardance
Devlogs:
I’m almost finished. It is my first time building a website. YAYYY
emm…. looks nice
Removed the fixed height of the room so that when u readjust the page it won’t look weird. I also added some more features, also rewrote every thing that I got to change. Now there is more mysterious things to click into. YAYY
Ships:
I Finally created a personal website!!! YAYY check it out, everyone!...
|
1793404172.4532192
|
1793490572.4532192
|
|
35718
|
my website??? what???? by @argentiniandrinkcoaster my website??? what???? by @argentiniandrinkcoaster | Stardance...
|
argentiniandrinkcoaster
|
0
|
3.42
|
0
|
[]
|
[{"post_id": 45577, "ts": "202 [{"post_id": 45577, "ts": "2026-08-12T05:08:13Z", "hours": 3.4208, "text": "my silly webos devlog #1 i finished my welcome screen! after many formattings, i have made a messagebox resembling windows vista! i would have to say the silliest part about this coding segment has to be that i spent 5 minutes trying to resize the info icon in the corner just to realize that i wasn’t specifying pixels so my formatting wasn’t doing anything at all…i wont make that mistake again. this also took alot of eyeballing the sizes!! i had to use very weird font sizes (which aren’t multiples nor powers of 2) to get my reference picture to match close enough to my site. i would have to say that a LARGE chunk of my coding was simply editing font sizes, modifying margin sizes, and modifying the header color, because i found it SUPER hard to get a good header color. i eventually just gave up trying to use vista images and just took a snippet of the header color from my own windows 10 install. i also found it kind of hard as to what to write. i was going to settle on saying my hobbies, likes, etc. but i thought that would be quite personal of myself, so i settled on the main theater: my hack clubbing adventure. this devlog also marks the finish of the first part of the webOS batch! i think in the future, i will swap the windows xp info icon with one from windows 7 and maybe add a button to the bottom of my welcome screen that closes the welcome screen if you press it!? (take notes future argentiniandrinkcoaster…) thank you @lowpolyphosphorus for helping me with the divider at the bottom (the silly grey box) and the height of the header relative to the icon!"}]...
|
Title: my website??? what???? by @argentiniandrink Title: my website??? what???? by @argentiniandrinkcoaster | Stardance
Devlogs:
my silly webos devlog #1 i finished my welcome screen! after many formattings, i have made a messagebox resembling windows vista! i would have to say the silliest part about this coding segment has to be that i spent 5 minutes trying to resize the info icon in the corner just to realize that i wasn’t specifying pixels so my formatting wasn’t doing anything at all…i wont make that mistake again. this also took alot of eyeballing the sizes!! i had to use very weird font sizes (which aren’t multiples nor powers of 2) to get my reference picture to match close enough to my site. i would have to say that a LARGE chunk of my coding was simply editing font sizes, modifying margin sizes, and modifying the header color, because i found it SUPER hard to get a good header color. i eventually just gave up trying to use vista images and just took a snippet of the header color from my own windows 10 install. i also found it kind of hard as to what to write. i was going to settle on saying my hobbies, likes, etc. but i thought that would be quite personal of myself, so i settled on the main theater: my hack clubbing adventure. this devlog also marks the finish of the first part of the webOS batch! i think in the future, i will swap the windows xp info icon with one from windows 7 and maybe add a button to the bottom of my welcome screen that closes the welcome screen if you press it!? (take notes future argentiniandrinkcoaster…) thank you @lowpolyphosphorus for helping me with the divider at the bottom (the silly grey box) and the height of the header relative to the icon!...
|
1793246139.420717
|
1793850939.420717
|
|
71701
|
my website! by @gabbyq_gu | Stardance
|
gabbyq_gu
|
0
|
0.63
|
0
|
[]
|
[{"post_id": 83540, "ts": "202 [{"post_id": 83540, "ts": "2026-10-28T03:55:03Z", "hours": 0.6333, "text": "guys this is SO hard T_T i genuinely dont know how to do any of this but its ok! i got IT TO WORK: (screenshot below) idk why it keeps saying undefined for the image, but at least i can see the website lol. it took me sooo long because i had no idea what i was doing, from the node.js to the api but im SO happy its sort of working now! i kinddd of get what the guide is talking about. hope to update back soon!"}]...
|
Title: my website! by @gabbyq_gu | Stardance
Devl Title: my website! by @gabbyq_gu | Stardance
Devlogs:
guys this is SO hard T_T i genuinely dont know how to do any of this but its ok! i got IT TO WORK: (screenshot below) idk why it keeps saying undefined for the image, but at least i can see the website lol. it took me sooo long because i had no idea what i was doing, from the node.js to the api but im SO happy its sort of working now! i kinddd of get what the guide is talking about. hope to update back soon!...
|
1793162839.0587392
|
1793767639.0587392
|
|
52116
|
my website! by @gabbyq_gu | Stardance
|
gabbyq_gu
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-21T02:24:07Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "FIRST SHIP WOOHOO! I am very proud of this project :) I really feel like i learned a lot more about HTML, CSS, and JS and I really enjoyed customizing it. I really struggled with the formatting esp the divs as well as the JS. This is is my own personal website with a couple of diferent pages for you to explore! I am really new to shipping and stardance and hack club and all that fun stuff so would apreciate any feedback :D", "repo": "https://github.com/gabbyqgu/my-website1", "demo": "https://gabbyqgu.github.io/my-website1/"}]...
|
[{"post_id": 51383, "ts": "202 [{"post_id": 51383, "ts": "2026-08-21T01:40:32Z", "hours": 4.8444, "text": "first devlog! I am transferring this project over from Macondo. This website is about me and it has a lot of little details that I think are really cool :) a fortune cookie clicker of quotes! a rickroll 🤫 things turn when u hover over them :O a page of my hobbies and favorite foods! I have attached a picture of what it looked like when I first started (litearlly nothing) and what it looks like now!!! I am very proud of my progress : ’) i read a lot about css through this website: https://www.w3schools.com/css/css3_gradients.asp which was super helpful but honestly a lot. it helped me a lot with the formatting and like when to use things(like the display, position, absolute vs relative, etc) the relative in regards to the parent element still confuses me though. id love any feedback on formatting, because divs are SO CONFUSING and I feel like the website doesn’t really work on different screens… :("}]...
|
Title: my website! by @gabbyq_gu | Stardance
Devl Title: my website! by @gabbyq_gu | Stardance
Devlogs:
first devlog! I am transferring this project over from Macondo. This website is about me and it has a lot of little details that I think are really cool :) a fortune cookie clicker of quotes! a rickroll 🤫 things turn when u hover over them :O a page of my hobbies and favorite foods! I have attached a picture of what it looked like when I first started (litearlly nothing) and what it looks like now!!! I am very proud of my progress : ’) i read a lot about css through this website: https://www.w3schools.com/css/css3_gradients.asp which was super helpful but honestly a lot. it helped me a lot with the formatting and like when to use things(like the display, position, absolute vs relative, etc) the relative in regards to the parent element still confuses me though. id love any feedback on formatting, because divs are SO CONFUSING and I feel like the website doesn’t really work on different screens… :(
Ships:
FIRST SHIP WOOHOO! I am very proud of this project :) I really feel like i learned a lot more about HTML, CSS, and JS and I really enjoyed customizing it. I really struggled with the formatting esp the divs as well as the JS. This is is my own personal website with a couple of diferent pages for you to explore! I am really new to shipping and stardance and hack club and all that fun stuff so would apreciate any feedback :D...
|
1793332271.9220219
|
1793418671.9220219
|
|
50473
|
my website by @suvamdebnath | Stardance
|
suvamdebnath
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my website by @suvamdebnath | Stardance
|
1793339786.3263333
|
1793944586.3263333
|
|
53871
|
my website by @sophel | Stardance
|
sophel
|
2
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-05T23:37:16Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i edited my website to make the following changes: i added pictures and removed the custom cursor. i changed the format of the about me page and linked my past projects to the project page", "repo": "https://github.com/sopheldalulu/portfolio", "demo": "https://sopheldalulu.github.io/portfolio/"}, {"ship_num": 2, "ts": "2026-08-25T17:57:33Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "ps the view project buttons aren’t linked to anything yet ><", "repo": "https://github.com/sopheldalulu/portfolio", "demo": "https://sopheldalulu.github.io/portfolio/"}]...
|
[{"post_id": 62535, "ts": "202 [{"post_id": 62535, "ts": "2026-09-05T23:24:34Z", "hours": 0.9925, "text": "i added pictures and removed the custom cursor. i changed the format of the about me page and linked my past projects to the project page"}, {"post_id": 54623, "ts": "2026-08-25T17:26:03Z", "hours": 3.7706, "text": "my own universal portfolio website!"}]...
|
Title: my website by @sophel | Stardance
Devlogs: Title: my website by @sophel | Stardance
Devlogs:
my own universal portfolio website!
i added pictures and removed the custom cursor. i changed the format of the about me page and linked my past projects to the project page
Ships:
ps the view project buttons aren’t linked to anything yet ><
i edited my website to make the following changes: i added pictures and removed the custom cursor. i changed the format of the about me page and linked my past projects to the project page...
|
1793267261.889653
|
1793353661.889653
|
|
47631
|
my website by @someone_you_know | Stardance
|
someone_you_know
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my website by @someone_you_know | Stardance
|
1793188464.9794211
|
1793793264.9794211
|
|
61102
|
my website by @simon88 | Stardance
|
simon88
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my website by @simon88 | Stardance
|
1793040501.718553
|
1793645301.718553
|
|
60972
|
my website by @rasul | Stardance
|
rasul
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my website by @rasul | Stardance
|
1793037135.941837
|
1793641935.941837
|
|
25704
|
my website by @mrmudassarmalik5 | Stardance
|
mrmudassarmalik5
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my website by @mrmudassarmalik5 | Stardance
|
1793184735.5396862
|
1793789535.5396862
|
|
25701
|
my website by @hassanaligondal1153 | Stardance
|
hassanaligondal1153
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my website by @hassanaligondal1153 | Starda Title: my website by @hassanaligondal1153 | Stardance...
|
1792788791.3520947
|
1793393591.3520947
|
|
70103
|
my website by @halit | Stardance
|
halit
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my website by @halit | Stardance
|
1792958047.4329739
|
1793822047.4329739
|
|
61879
|
my website by @epercy | Stardance
|
epercy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my website by @epercy | Stardance
|
1793040910.476772
|
1793645710.476772
|
|
49355
|
my website by @endrcc | Stardance
|
endrcc
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-04T10:30:27Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "my website! has an about me my yt linked no projects linked yet, will once I finish liminOS", "repo": "https://github.com/endrcc/Personal-Website", "demo": "https://endrcc.github.io/Personal-Website/"}]...
|
[{"post_id": 58828, "ts": "202 [{"post_id": 58828, "ts": "2026-08-31T12:31:44Z", "hours": 2.2647, "text": "my personal website! nothing much really just about me, my fav games and my yt linked to the website too"}]...
|
Title: my website by @endrcc | Stardance
Devlogs: Title: my website by @endrcc | Stardance
Devlogs:
my personal website! nothing much really just about me, my fav games and my yt linked to the website too
Ships:
my website! has an about me my yt linked no projects linked yet, will once I finish liminOS...
|
1792878498.690211
|
1793742498.690211
|
|
47416
|
my website by @dat_neutronstyle | Stardance
|
dat_neutronstyle
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my website by @dat_neutronstyle | Stardance
|
1793181137.3233297
|
1793785937.3233297
|
|
43648
|
my website by @circular | Stardance
|
circular
|
1
|
13.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-11T14:47:27Z", "hours": 13.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I finished rewriting my website in Svelte!! I’ve modernised several parts of the website compared to the old Astro version, and also just given the website more character . I made the lastfm music status run over websocket instead of GET requests, made the CI/CD pipeline faster and more resilient, and added a lot more content compared to the old version. I started working on this rewrite about 5 months ago, but didn’t make much progress on it because I just didn’t have much motivation. I picked up the rewrite again a few weeks ago and decided to do it as part of Stardance, and I’m super happy with the end result! I’m still gonna be adding stuff to the website over time though, as it is nowhere near being fully complete. This is just the first iteration I can properly publish.", "repo": "https://github.com/circularsprojects/circulars.dev", "demo": "https://circulars.dev"}]...
|
[{"post_id": 45171, "ts": "202 [{"post_id": 45171, "ts": "2026-08-11T14:22:17Z", "hours": 3.9406, "text": "my website is finally done!!! i did the finishing touches to my site and finished the CI/CD pipeline for it! the old pipeline i had was.. clunky. it kinda sucked, it built my website on a github actions runner then copied the files over to my vps with scp and tailscale which was a pain to maintain and was slow as hell!!!! instead now i’ve made a small project called minibuild ( https://github.com/circularsprojects/minibuild ) that runs any specified script when it receives a specific github webhook (in this case, it runs a script to build my site when the “push” webhook is triggered). still gonna add some more stuff to my site over time, but this is the first actual published version! you can check it out at https://circulars.dev"}, {"post_id": 40483, "ts": "2026-08-04T01:25:05Z", "hours": 9.185, "text": "After working on my new website for about three weeks, I’ve finally decided to make a project and a devlog about it. I’ve been rewriting my website ( https://circulars.dev ) in Svelte for a while now, (I originally started the rewrite about four months ago) but I’ve only recently picked it up again and actually put work into it. I’ve redesigned how I showcase my projects and socials off on my website, added a cool background (that only uses css gradients), improved the lastfm status to be websocket based and update automatically, rather than only update upon visiting the site. The site is mostly done, I just need to touch up a few more things and then I need to tackle the issue of automatically building and deploying the site. My previous site used a github action to build and copy the site files over to my own server, but this pipeline fell apart for.. some reason. i don’t know why. I’m making a new pipeline that will use github webhooks to trigger builds of my website on my own server, avoiding some of the biggest pitfalls associated with github actions, and I’m making it with Rust. My pipeline will be powered by a little program I’m making called “minibuild”, a lightweight program that accepts webhook pushes, compares the secret token and signature, and then runs a script if they line up. Not only will this be exactly what I need for my site, but I’ll also be able to use it for any other project that requires this sort of setup. Once minibuild is done, I can finally deploy my new site!!!"}]...
|
Title: my website by @circular | Stardance
Devlog Title: my website by @circular | Stardance
Devlogs:
After working on my new website for about three weeks, I’ve finally decided to make a project and a devlog about it. I’ve been rewriting my website ( https://circulars.dev ) in Svelte for a while now, (I originally started the rewrite about four months ago) but I’ve only recently picked it up again and actually put work into it. I’ve redesigned how I showcase my projects and socials off on my website, added a cool background (that only uses css gradients), improved the lastfm status to be websocket based and update automatically, rather than only update upon visiting the site. The site is mostly done, I just need to touch up a few more things and then I need to tackle the issue of automatically building and deploying the site. My previous site used a github action to build and copy the site files over to my own server, but this pipeline fell apart for.. some reason. i don’t know why. I’m making a new pipeline that will use github webhooks to trigger builds of my website on my own server, avoiding some of the biggest pitfalls associated with github actions, and I’m making it with Rust. My pipeline will be powered by a little program I’m making called “minibuild”, a lightweight program that accepts webhook pushes, compares the secret token and signature, and then runs a script if they line up. Not only will this be exactly what I need for my site, but I’ll also be able to use it for any other project that requires this sort of setup. Once minibuild is done, I can finally deploy my new site!!!
my website is finally done!!! i did the finishing touches to my site and finished the CI/CD pipeline for it! the old pipeline i had was.. clunky. it kinda sucked, it built my website on a github actions runner then copied the files over to my vps with scp and tailscale which was a pain to maintain and was slow as hell!!!! instead now i’ve made a small project called minibuild ( https://github.com/circularsprojects/minibuild ) that runs any specified script when it receives a specific github webhook (in this case, it runs a script to build my site when the “push” webhook is triggered). still gonna add some more stuff to my site over time, but this is the first actual published version! you can check it out at https://circulars.dev
Ships:
I finished rewriting my website in Svelte!! I’ve modernised several parts of the website compared to the old Astro version, and also just given the website more character . I made the lastfm music status run over websocket instead of GET requests, made the CI/CD pipeline faster and more resilient, and added a lot more content compared to the old version. I started working on this rewrite about 5 months ago, but didn’t make much progress on it because I just didn’t have much motivation. I picked up the rewrite again a few weeks ago and decided to do it as part of Stardance, and I’m super happy with the end result! I’m still gonna be adding stuff to the website over time though, as it is nowhere near being fully complete. This is just the first iteration I can properly publish....
|
1793271060.0597677
|
1793357460.0597677
|
|
63695
|
my website by @boozo30 | Stardance
|
boozo30
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my website by @boozo30 | Stardance
|
1793054884.381765
|
1793659684.381765
|
|
66361
|
my website by @adam_fisal | Stardance
|
adam_fisal
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my website by @adam_fisal | Stardance
|
1793098254.6559741
|
1793703054.6559741
|
|
2165
|
my website by @Proatlife | Stardance
|
Proatlife
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my website by @Proatlife | Stardance
|
1793318005.865577
|
1793922805.865577
|
|
46505
|
my website by @Arianna | Stardance
|
Arianna
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my website by @Arianna | Stardance
|
1793389697.046745
|
1793994497.046745
|
|
4591
|
my website :3 by @mikhailnotfish | Stardance
|
mikhailnotfish
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T22:24:27Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "this is my simple turtle website i made to train myself in html. it is very simple, but i am very proud of it :]", "repo": "https://github.com/mikhailnotfish/turtles", "demo": "https://mikhailnotfish.github.io/turtles/"}]...
|
[{"post_id": 1237, "ts": "2026 [{"post_id": 1237, "ts": "2026-06-03T02:51:37Z", "hours": 0.4567, "text": "this is my website in which there is a turtle"}]...
|
Title: my website :3 by @mikhailnotfish | Stardanc Title: my website :3 by @mikhailnotfish | Stardance
Devlogs:
this is my website in which there is a turtle
Ships:
this is my simple turtle website i made to train myself in html. it is very simple, but i am very proud of it :]...
|
1793321702.1817894
|
1793408102.1817894
|
|
67481
|
my webos:) by @lunrvrse | Stardance
|
lunrvrse
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my webos:) by @lunrvrse | Stardance
|
1793109303.6619356
|
1793714103.6619356
|
|
56285
|
my webos by @Lionroar28 | Stardance
|
Lionroar28
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my webos by @Lionroar28 | Stardance
|
1793375244.7865744
|
1793980044.7865744
|
|
71624
|
my webos by @LPcomix123 | Stardance
|
LPcomix123
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my webos by @LPcomix123 | Stardance
|
1793123250.7355497
|
1793728050.7355497
|
|
56334
|
my web page pro max by @Lionroar28 | Stardance
|
Lionroar28
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my web page pro max by @Lionroar28 | Starda Title: my web page pro max by @Lionroar28 | Stardance...
|
1793378905.4957228
|
1793983705.4957228
|
|
59601
|
my web os by @RobertSchmutsch | Stardance
|
RobertSchmutsch
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my web os by @RobertSchmutsch | Stardance
|
1792806826.6440482
|
1793411626.6440482
|
|
71865
|
my web by @zaidabajwa | Stardance
|
zaidabajwa
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my web by @zaidabajwa | Stardance
|
1793260030.0336018
|
1793864830.0336018
|
|
68469
|
my ware game by @darshini_raghavendra | Stardance
|
darshini_raghavendra
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my ware game by @darshini_raghavendra | Sta Title: my ware game by @darshini_raghavendra | Stardance...
|
1793123268.1310794
|
1793728068.1310794
|
|
35248
|
my very very personal website by @VEX | Stardance
|
VEX
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-13T00:02:50Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a personal website that I can use as a introduction or as a way to tell people about me. This is kind of like what it will be if linktree and linkedin had a baby. This project was kinda fun BUT I HAD THE WORST TIME TRYING TO FIX THE IMAGE IN THE CENTRE, THE IMAGE JUST WONT WORK WELL. I fixed it tho and everything is in order. Also I am pretty happy that now I know HTML and CSS even better than what I knew before but I am more happy that I found out about grids, I have no idea why but I just feel very excited when I think about it. Also I am kinda proud of how the contact and 3d art section looks even though as for 3d art there is not much style I still like the looks of it.", "repo": "https://github.com/VX7FAR/my-very-personal-website", "demo": "https://vx7far.github.io/my-very-personal-website/"}]...
|
[{"post_id": 46046, "ts": "202 [{"post_id": 46046, "ts": "2026-08-12T23:47:11Z", "hours": 2.2, "text": "I DID IT today i spent a lot of time coding and well lets say i spent 50% of my wake up time in coding and now its 5am im gonna sleep i also updated my readme and i dont think i need to add anything more in my website if any of you will read my css code you will see that its really messy ngl even I find it really messy and I am all confused about how I even made the “Projects” section work. At first I was thinking of removing the image on the top of my website but now I think it kinda looks good so imma leave it as it is Also feel free to check out the website if you want to https://vx7far.github.io/my-very-personal-website/"}, {"post_id": 45406, "ts": "2026-08-11T20:39:43Z", "hours": 0.8431, "text": "finished the project section today there was a lot of writing i didnt like writing i dont like literature well its done sooo me good now yippie"}, {"post_id": 44842, "ts": "2026-08-10T21:29:46Z", "hours": 1.0892, "text": "i added the project section and made some id and classes that will speed up the process and i wont have to recreate a new project section all the time i havent added the image yet because I cant seem to find the code and circuit i made when i was working on it ToT"}, {"post_id": 44294, "ts": "2026-08-09T23:10:01Z", "hours": 1.0111, "text": "Here is what I have done as of now I kinda made the hero section (if thats what it is called) a bit more minimal and smooth I didnt update the picture tho I forgot to do that :P Well but I added an about me section where if you click the “About me” button it will move you to that section Thats all for today guys so make sure to hit that subscribe button and set the notifications to all. (i dont have a yt channel btw)"}, {"post_id": 43598, "ts": "2026-08-08T23:08:30Z", "hours": 0.7636, "text": "AAAAGGHHHHHHHH i spent a lot of time editing photos but it wont turn out good 😢 aside from that i kinda refined the website a bit I am still choosing on the theme colour for my website the background still looks trash and i am thinking of just adding a single image here and calling it a day i might add the image of a gun i have been working on in blender well i dont have much to say today feels like i spent most of my time head scratching the coding part was easy and i seem to have gotten slightly better at css"}, {"post_id": 42961, "ts": "2026-08-07T23:09:46Z", "hours": 1.7458, "text": "Soooooooo……..I am looking to make a black-purple themed website and I do have a concept in mind, I have dropepd the image you can see how I am trying to make. BUT I spend quite a lot of time simply trying to position the elements properly and in the end I still got hit with an issue that the image was overflowing towards the right but as I was commiting this on github then i thought of a new idea and I will implement it later. Well thats all for today I have dropped my half completed website……. :P Oh mb I forgot to add the image to the github repo…..I skipped it for that moment just so I can check it 🥀 I will show it running locally I suppose"}, {"post_id": 42297, "ts": "2026-08-06T22:55:40Z", "hours": 0.4761, "text": "I have been focused mostly on hardware projects and all but this time I thought of getting myself into software projects and a personal website felt like the one thing I can make. Well for today I focused on learning here n there about HTML and CSS I did know a bit of HTML whatever my teachers taught me in school so it was kinda easy to get a hang of it. Well im gonna try and finish this project. Couldnt spend much time its already 4AM I needa sleep. Until we meet again…… (And yes I have my website tabs on the right side so please refrain from killing me, I will joyfully enjoy your decision)"}]...
|
Title: my very very personal website by @VEX | Sta Title: my very very personal website by @VEX | Stardance
Devlogs:
I have been focused mostly on hardware projects and all but this time I thought of getting myself into software projects and a personal website felt like the one thing I can make. Well for today I focused on learning here n there about HTML and CSS I did know a bit of HTML whatever my teachers taught me in school so it was kinda easy to get a hang of it. Well im gonna try and finish this project. Couldnt spend much time its already 4AM I needa sleep. Until we meet again…… (And yes I have my website tabs on the right side so please refrain from killing me, I will joyfully enjoy your decision)
Soooooooo……..I am looking to make a black-purple themed website and I do have a concept in mind, I have dropepd the image you can see how I am trying to make. BUT I spend quite a lot of time simply trying to position the elements properly and in the end I still got hit with an issue that the image was overflowing towards the right but as I was commiting this on github then i thought of a new idea and I will implement it later. Well thats all for today I have dropped my half completed website……. :P Oh mb I forgot to add the image to the github repo…..I skipped it for that moment just so I can check it 🥀 I will show it running locally I suppose
AAAAGGHHHHHHHH i spent a lot of time editing photos but it wont turn out good 😢 aside from that i kinda refined the website a bit I am still choosing on the theme colour for my website the background still looks trash and i am thinking of just adding a single image here and calling it a day i might add the image of a gun i have been working on in blender well i dont have much to say today feels like i spent most of my time head scratching the coding part was easy and i seem to have gotten slightly better at css
Here is what I have done as of now I kinda made the hero section (if thats what it is called) a bit more minimal and smooth I didnt update the picture tho I forgot to do that :P Well but I added an about me section where if you click the “About me” button it will move you to that section Thats all for today guys so make sure to hit that subscribe button and set the notifications to all. (i dont have a yt channel btw)
i added the project section and made some id and classes that will speed up the process and i wont have to recreate a new project section all the time i havent added the image yet because I cant seem to find the code and circuit i made when i was working on it ToT
finished the project section today there was a lot of writing i didnt like writing i dont like literature well its done sooo me good now yippie
I DID IT today i spent a lot of time coding and well lets say i spent 50% of my wake up time in coding and now its 5am im gonna sleep i also updated my readme and i dont think i need to add anything more in my website if any of you will read my css code you will see that its really messy ngl even I find it really messy and I am all confused about how I even made the “Projects” section work. At first I was thinking of removing the image on the top of my website but now I think it kinda looks good so imma leave it as it is Also feel free to check out the website if you want to https://vx7far.github.io/my-very-personal-website/
Ships:
I made a personal website that I can use as a introduction or as a way to tell people about me. This is kind of like what it will be if linktree and linkedin had a baby. This project was kinda fun BUT I HAD THE WORST TIME TRYING TO FIX THE IMAGE IN THE CENTRE, THE IMAGE JUST WONT WORK WELL. I fixed it tho and everything is in order. Also I am pretty happy that now I know HTML and CSS even better than what I knew before but I am more happy that I found out about grids, I have no idea why but I just feel very excited when I think about it. Also I am kinda proud of how the contact and 3d art section looks even though as for 3d art there is not much style I still like the looks of it....
|
1793299919.8929336
|
1793386319.8929336
|
|
71090
|
my very own mp3 player by @Cokolada | Stardance
|
Cokolada
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my very own mp3 player by @Cokolada | Stard Title: my very own mp3 player by @Cokolada | Stardance...
|
1792792033.8259273
|
1793396833.8259273
|
|
68760
|
my today news by @sesathranbandara | Stardance
|
sesathranbandara
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my today news by @sesathranbandara | Starda Title: my today news by @sesathranbandara | Stardance...
|
1793126874.4294384
|
1793731674.4294384
|
|
50828
|
my things by @Saurabhnarale | Stardance
|
Saurabhnarale
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my things by @Saurabhnarale | Stardance
|
1792918385.7119756
|
1793782385.7119756
|