|
26992
|
NinjaPad by @timon | Stardance
|
timon
|
0
|
3.0
|
0
|
[]
|
[{"post_id": 22932, "ts": "202 [{"post_id": 22932, "ts": "2026-07-05T16:01:19Z", "hours": 2.0, "text": "I rebuilt it to the correct size and hopefully an centered display. I am also working on a design. I use Figma for the first time and that resizing tool is horrible in my opinion. When you rezise it by the window, it wont be native and if you do it by the reszising tool, then the new smaller or bigger size wil lekome 1x. I personally dont like that. Maybe others do"}, {"post_id": 22760, "ts": "2026-07-05T10:38:27Z", "hours": 1.0, "text": "The whole Record a timelapse was really weird for me and it didnt work that well but now I can show much things in one post… I started with getting in Idea. I looked at other projects and insipred myself there for the layout. For the design i wanted to do something with Ninjago (cause when i look at it i will always see this holy tuffness..). I decided to go with 4 Keys, 2 Rotary Encoders and the OLED Display. I also used a matrix and i used the matrix not only for the rotary encoders knob pressing but also for the spinning so i ended up sving 3 Pins. In the first picture you see how it looked with only pressing matrix and in the second with the spinning too."}]...
|
Title: NinjaPad by @timon | Stardance
Devlogs:
Th Title: NinjaPad by @timon | Stardance
Devlogs:
The whole Record a timelapse was really weird for me and it didnt work that well but now I can show much things in one post… I started with getting in Idea. I looked at other projects and insipred myself there for the layout. For the design i wanted to do something with Ninjago (cause when i look at it i will always see this holy tuffness..). I decided to go with 4 Keys, 2 Rotary Encoders and the OLED Display. I also used a matrix and i used the matrix not only for the rotary encoders knob pressing but also for the spinning so i ended up sving 3 Pins. In the first picture you see how it looked with only pressing matrix and in the second with the spinning too.
I rebuilt it to the correct size and hopefully an centered display. I am also working on a design. I use Figma for the first time and that resizing tool is horrible in my opinion. When you rezise it by the window, it wont be native and if you do it by the reszising tool, then the new smaller or bigger size wil lekome 1x. I personally dont like that. Maybe others do...
|
1792885829.0775285
|
1793749829.0775285
|
|
27259
|
Textlib - Adventure API by @timon | Stardance
|
timon
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T21:38:12Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I wanted to share a small library I just built as an addon for the Kyori Adventure API. I mainly make Paper pluginsand typing out Component.text() over and over for every time with hex colors is getting annoying. I wanted it simple and fast for my plugin projects. That’s why I created this! It adds a super easy cmp shortcut and automatically fixes missing # tags in hex codes so things dont break. For combining you use the + operator to append text. This was my first time actually making a library. At the beginning it was pretty difficult. Though it was pretty easy now thinking back (the 2 hours lol) I would be super happy if anyone wants to check it out or even build onto it.", "repo": "https://github.com/Facticee/my-textlib", "demo": "https://github.com/Facticee/my-textlib/blob/main/README.md"}]...
|
[{"post_id": 17173, "ts": "202 [{"post_id": 17173, "ts": "2026-06-27T21:30:44Z", "hours": 1.0, "text": "I actually finished it in one sitting so this is just everything but here I go: I made a library as an addon to the adventure api. I made it because it helps me with paper plugin making. started with a shortcut function called cmp. You can now just type cmp instead of component.text. If you forget the # in a hex code (like ”FF5555”), Adventure usually breaks. The lib now checks for this and fixes it automatically. You can now just use + to append components."}]...
|
Title: Textlib - Adventure API by @timon | Stardan Title: Textlib - Adventure API by @timon | Stardance
Devlogs:
I actually finished it in one sitting so this is just everything but here I go: I made a library as an addon to the adventure api. I made it because it helps me with paper plugin making. started with a shortcut function called cmp. You can now just type cmp instead of component.text. If you forget the # in a hex code (like ”FF5555”), Adventure usually breaks. The lib now checks for this and fixes it automatically. You can now just use + to append components.
Ships:
I wanted to share a small library I just built as an addon for the Kyori Adventure API. I mainly make Paper pluginsand typing out Component.text() over and over for every time with hex colors is getting annoying. I wanted it simple and fast for my plugin projects. That’s why I created this! It adds a super easy cmp shortcut and automatically fixes missing # tags in hex codes so things dont break. For combining you use the + operator to append text. This was my first time actually making a library. At the beginning it was pretty difficult. Though it was pretty easy now thinking back (the 2 hours lol) I would be super happy if anyone wants to check it out or even build onto it....
|
1792882053.081405
|
1793746053.081405
|
|
28786
|
AstraLight by @timon | Stardance
|
timon
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: AstraLight by @timon | Stardance
|
1792860539.5397441
|
1793724539.5397441
|
|
28953
|
my INIT System landing page by @timon | Stardance
|
timon
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T21:10:53Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "So i built a browser landing / new tab page. I didnt want it to be completely different because its still there to look something up. I added quick notes (whoch store in local data), weather widget and a simple clock. I chose the name Init system as its the first process that starts after the kernel and i think it matches to a new tab page as its also the first thing yk. i hope that makes sense. Feel free to use any of the code and maybe even learn from it :)", "repo": "https://github.com/Facticee/new-tab-site", "demo": "https://init-system.vercel.app/"}]...
|
[{"post_id": 19512, "ts": "202 [{"post_id": 19512, "ts": "2026-06-30T20:45:47Z", "hours": 1.0, "text": "I added the weather widget. I had never worked with browser location data (navigator.geolocation) before, so getting the coordinates took a bit. Also it was pretty annoying to type all that cause the API sends back numbers like 67 (im so funny) instead of just saying “Rain”. The docs helped me alot: https://open-meteo.com/en/docs"}, {"post_id": 19434, "ts": "2026-06-30T19:14:08Z", "hours": 1.0, "text": "The general design is done, just the javascript isnt done yet. I wanted the website to be a tab website that still can be used as the normal browser one so i added a search bar. You can also see the date and time really easy in the center and if you need the seconds its in the top right. I am now working on the notes thing down there. The Clock was pretty easy as i just did a website where i did kinda the same. The notes thing is a bit more difficult but i also just did something in this way with my Homeserver dashboard 😅"}]...
|
Title: my INIT System landing page by @timon | Sta Title: my INIT System landing page by @timon | Stardance
Devlogs:
The general design is done, just the javascript isnt done yet. I wanted the website to be a tab website that still can be used as the normal browser one so i added a search bar. You can also see the date and time really easy in the center and if you need the seconds its in the top right. I am now working on the notes thing down there. The Clock was pretty easy as i just did a website where i did kinda the same. The notes thing is a bit more difficult but i also just did something in this way with my Homeserver dashboard 😅
I added the weather widget. I had never worked with browser location data (navigator.geolocation) before, so getting the coordinates took a bit. Also it was pretty annoying to type all that cause the API sends back numbers like 67 (im so funny) instead of just saying “Rain”. The docs helped me alot: https://open-meteo.com/en/docs
Ships:
So i built a browser landing / new tab page. I didnt want it to be completely different because its still there to look something up. I added quick notes (whoch store in local data), weather widget and a simple clock. I chose the name Init system as its the first process that starts after the kernel and i think it matches to a new tab page as its also the first thing yk. i hope that makes sense. Feel free to use any of the code and maybe even learn from it :)...
|
1792878865.0842724
|
1793742865.0842724
|
|
32228
|
TokenShield by @timon | Stardance
|
timon
|
1
|
16.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-11T19:43:46Z", "hours": 16.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a terminal based password manager with integrated 2FA TOTP authentication written in Python. It can store passwords, generate random passwords, scan QR codes for 2FA setup and display current TOTP codes. I started this project, because it annoyed me that everytime I had to Authenticate with TOTP, I needed to grab my phone. With this, i just need to click a few times on my PC and i have my current TOTP Security Code. The most challenging parts were implementing secure encryption, with the master password system, and adding TOTP authentification. I havent done anything before with encryption except in school a bit and i needed to look up, what methods are common what is good what not. I am proud that i learned alot through this project. I could use a bit of my school knowledge which made me happy that moment and I like that it is done now. (More details in the readme…) To test the project you need Python installed and have to install the required dependencies. After starting the program, they can create a master password and use the menu to add, search, and manage password entries.", "repo": "https://github.com/Facticee/TokenShield", "demo": "https://github.com/Facticee/TokenShield/releases/tag/1.0.0"}]...
|
[{"post_id": 26731, "ts": "202 [{"post_id": 26731, "ts": "2026-07-11T18:10:58Z", "hours": 3.0, "text": "Completed the 2FA implementation and added QR code support. You can now import the 2FA QR Code and you will see the current secret code. The biggest challenge was reading QR codes right everytime. I didnt know that opencv only reads qr codes with a white border, so some qr code did work and some didnt. This is why i added: white = [255, 255, 255] img_with_border = cv2.copyMakeBorder( img, 20, 20, 20, 20, borderType=cv2.BORDER_CONSTANT, value=white ) Which adds a white border around the qr code."}, {"post_id": 26474, "ts": "2026-07-11T09:14:42Z", "hours": 4.0, "text": "I started working in the implementation for 2FA totp code generator. This works because the totp qr code wont change for the account so you can implement it once in the password manager. I updated the tables to show a new 2FA column. The program can now generate a TOTP code if a secret is available. I also started adding QR code support so users can import their 2FA setup instead of entering the secret manually. Right now not every qr code is working and im trying to figure out why for like an hour… current_code = generate_current_totp(details.get(“totp_secret”, “-”)) Also my muffin head wrote everything in german.. Needed to change it again…"}, {"post_id": 25391, "ts": "2026-07-09T17:31:41Z", "hours": 3.0, "text": "I added a dictionary where the .json file will be saved, so its not in the same folder as the .py. For that i used the package PlatformDirs: dirs = PlatformDirs(“TokenShield”, ensure_exists=True) After texting i noticed, that there is no way in chaning the master password and no way in deleting a entry. Entry Deletion (Option 4): Users can now completely remove an app entry from their vault. It also has a confirmation (y/n) to prevent accidental deletion Master Password Change (Option 5): Added a way to update the master password. It decrypts the vault using the old password and generates a new one. It was challenging to make the password change. I had to ensure the vault was fully decrypted first, then generate a brand new random (os.urandom(16)) for encryptiom and immediately re encrypt everything with the new key."}, {"post_id": 24926, "ts": "2026-07-08T20:04:22Z", "hours": 2.0, "text": "I replaced all of the saving code that saved the pw in cleartext with real encryption to make it secure. I used the cryptography library and Imported Fernet and hashing tools (PBKDF2HMAC) to do the encryption. I also used Key Derivation and Added a function that takes the master password and hashes it 480.000 times and also with a random salt. I uses AES-256 which takes a 256-bit and uses it to encrypt your vault data by transforming it into 128 bit blocks. Also gemini helped me with that. kdf = PBKDF2HMAC( algorithm=hashes.SHA256(), length=32, # 32 bytes = 256 bits salt=salt, iterations=480000, ) aes_key = base64.urlsafe_b64encode(kdf.derive(master_password.encode()))"}, {"post_id": 24812, "ts": "2026-07-08T16:46:10Z", "hours": 2.0, "text": "I started with a raw prototype. I built a simple terminal menu, a basic random password generator using Python’s secrets module, and a straightforward way to load and save unencrypted JSON data. It worked, but it was completely replaceable by any other online website… Next, I integrated that you can add your own passwords, usernames and notes. I also The rich library to make the terminal look beautiful with custom tables. I also implemented the search feature so users could find specific accounts instead of just looking at everything, and I replaced the passwords in the main list (••••••••) and you need to search fot the specific programm. I think its better this way but others might disagree. I added the getpass module so that when you type a password and spedifically the main password, the characters are completely hidden in the terminal. Right now, the app is not fully encrypted yet, but I build a structure that will hopefulyl help me. For the readability Instead of saving accounts directly at the top level of the JSON file, I moved them into a dedicated entries dictionary. Master Password Integration: The app now requires a master password immediately upon boot. It checks this password against the JSON file before unlocking the menu. Right now everything is just in the json file in clear text. i want to change that for the next devlog. Right Now: def load_vault(master_password: str) -> dict: “”“Loads the vault and checks the password in plain text (Simulated).””” if not os.path.exists(DB_FILE): return {“cipher”: “VERSCHLÜSSELUNG_CIPHER”, “entries”: {}} with open(DB_FILE, \"r\") as f: data = json.load(f) # Checking the password in plain text for now if data.get(\"passwort_schutz\") != master_password: console.print(\"\\n[bold red] Wrong password![/bold red]\\n\") return None return {\"cipher\": data.get(\"cipher\", \"VERSCHLÜSSELUNG_CIPHER\"), \"entries\": data.get(\"entries\", {})}"}]...
|
Title: TokenShield by @timon | Stardance
Devlogs: Title: TokenShield by @timon | Stardance
Devlogs:
I started with a raw prototype. I built a simple terminal menu, a basic random password generator using Python’s secrets module, and a straightforward way to load and save unencrypted JSON data. It worked, but it was completely replaceable by any other online website… Next, I integrated that you can add your own passwords, usernames and notes. I also The rich library to make the terminal look beautiful with custom tables. I also implemented the search feature so users could find specific accounts instead of just looking at everything, and I replaced the passwords in the main list (••••••••) and you need to search fot the specific programm. I think its better this way but others might disagree. I added the getpass module so that when you type a password and spedifically the main password, the characters are completely hidden in the terminal. Right now, the app is not fully encrypted yet, but I build a structure that will hopefulyl help me. For the readability Instead of saving accounts directly at the top level of the JSON file, I moved them into a dedicated entries dictionary. Master Password Integration: The app now requires a master password immediately upon boot. It checks this password against the JSON file before unlocking the menu. Right now everything is just in the json file in clear text. i want to change that for the next devlog. Right Now: def load_vault(master_password: str) -> dict: “”“Loads the vault and checks the password in plain text (Simulated).””” if not os.path.exists(DB_FILE): return {“cipher”: “VERSCHLÜSSELUNG_CIPHER”, “entries”: {}} with open(DB_FILE, "r") as f: data = json.load(f) # Checking the password in plain text for now if data.get("passwort_schutz") != master_password: console.print("\n[bold red] Wrong password![/bold red]\n") return None return {"cipher": data.get("cipher", "VERSCHLÜSSELUNG_CIPHER"), "entries": data.get("entries", {})}
I replaced all of the saving code that saved the pw in cleartext with real encryption to make it secure. I used the cryptography library and Imported Fernet and hashing tools (PBKDF2HMAC) to do the encryption. I also used Key Derivation and Added a function that takes the master password and hashes it 480.000 times and also with a random salt. I uses AES-256 which takes a 256-bit and uses it to encrypt your vault data by transforming it into 128 bit blocks. Also gemini helped me with that. kdf = PBKDF2HMAC( algorithm=hashes.SHA256(), length=32, # 32 bytes = 256 bits salt=salt, iterations=480000, ) aes_key = base64.urlsafe_b64encode(kdf.derive(master_password.encode()))
I added a dictionary where the .json file will be saved, so its not in the same folder as the .py. For that i used the package PlatformDirs: dirs = PlatformDirs(“TokenShield”, ensure_exists=True) After texting i noticed, that there is no way in chaning the master password and no way in deleting a entry. Entry Deletion (Option 4): Users can now completely remove an app entry from their vault. It also has a confirmation (y/n) to prevent accidental deletion Master Password Change (Option 5): Added a way to update the master password. It decrypts the vault using the old password and generates a new one. It was challenging to make the password change. I had to ensure the vault was fully decrypted first, then generate a brand new random (os.urandom(16)) for encryptiom and immediately re encrypt everything with the new key.
I started working in the implementation for 2FA totp code generator. This works because the totp qr code wont change for the account so you can implement it once in the password manager. I updated the tables to show a new 2FA column. The program can now generate a TOTP code if a secret is available. I also started adding QR code support so users can import their 2FA setup instead of entering the secret manually. Right now not every qr code is working and im trying to figure out why for like an hour… current_code = generate_current_totp(details.get(“totp_secret”, “-”)) Also my muffin head wrote everything in german.. Needed to change it again…
Completed the 2FA implementation and added QR code support. You can now import the 2FA QR Code and you will see the current secret code. The biggest challenge was reading QR codes right everytime. I didnt know that opencv only reads qr codes with a white border, so some qr code did work and some didnt. This is why i added: white = [255, 255, 255] img_with_border = cv2.copyMakeBorder( img, 20, 20, 20, 20, borderType=cv2.BORDER_CONSTANT, value=white ) Which adds a white border around the qr code.
Ships:
I created a terminal based password manager with integrated 2FA TOTP authentication written in Python. It can store passwords, generate random passwords, scan QR codes for 2FA setup and display current TOTP codes. I started this project, because it annoyed me that everytime I had to Authenticate with TOTP, I needed to grab my phone. With this, i just need to click a few times on my PC and i have my current TOTP Security Code. The most challenging parts were implementing secure encryption, with the master password system, and adding TOTP authentification. I havent done anything before with encryption except in school a bit and i needed to look up, what methods are common what is good what not. I am proud that i learned alot through this project. I could use a bit of my school knowledge which made me happy that moment and I like that it is done now. (More details in the readme…) To test the project you need Python installed and have to install the required dependencies. After starting the program, they can create a master password and use the menu to add, search, and manage password entries....
|
1792878871.724229
|
1793742871.724229
|
|
37401
|
CrystalCave by @timon | Stardance
|
timon
|
0
|
2.0
|
0
|
[]
|
[{"post_id": 31453, "ts": "202 [{"post_id": 31453, "ts": "2026-07-19T20:24:44Z", "hours": 1.0, "text": "I registered new blocks and items. It was difficult to find how to register these. In my mods before ive never added new blocks biomes ore anything like that. As the unobfuscated versions of minecraft arent out that long, it is difficult to find good documentations of the class names. I first tried fabrics AbstractBlock settings which looked like this: val SAPPHIRE_ORE = registerBlock( “sapphire_ore”, Block(AbstractBlock.Settings.create() .mapColor(MapColor.STONE_GRAY) .instrument(Instrument.BASE_DRUM) .requiresTool() .strength(3.0f, 3.0f) .sounds(BlockSoundGroup.STONE)) ) After asking Gemini and telling it that I am working with the latest minecraft version (and that it is NOT 1.21.4) I made the system use lateinit var and an helper function."}, {"post_id": 31978, "ts": "2026-07-20T20:18:12Z", "hours": 1.0, "text": "Whats new: -An extra inventory tab for the items that the mods adds -Registered the crafting recipe -Feature of sapphire added The creation of the new Tab was pretty easy. I only needed to register it with “CreativeModeTab = Registry.register” then just add every item in this format: output.accept(ModItems.SAPPHIRE) output.accept(ModItems.MOONSTONE) … The custom recipes were a bit more difficult. I created SapphireUpgradeRecipe. It scans the crafting grid to check if the center slot has an item with durability, surrounded by Sapphires. Inside assemble(), it copies the item and calculates a +20% increase to its MAX_DAMAGE. I first was confused because i thought damage would be the damage you are dealing with it (just like in the ItemEdit Plugin or Paper) Though, the damage on the item is meant. So basically the durability. val currentMax = result.maxDamage val newMax = currentMax + ceil(currentMax * 0.20).toInt().coerceAtLeast(1) result.set(DataComponents.MAX_DAMAGE, newMax) In MoonstoneUpgradeRecipe, when you craft a item with 8 Moonstones around it, it attaches a custom NBT marker (crystalcave_moonstone_upgrade) to the item’s data components. I will add a ServerTickEvents event loop in the future which then will target every monster in a 64 block radius or soemthing like that."}]...
|
Title: CrystalCave by @timon | Stardance
Devlogs: Title: CrystalCave by @timon | Stardance
Devlogs:
Whats new: -An extra inventory tab for the items that the mods adds -Registered the crafting recipe -Feature of sapphire added The creation of the new Tab was pretty easy. I only needed to register it with “CreativeModeTab = Registry.register” then just add every item in this format: output.accept(ModItems.SAPPHIRE) output.accept(ModItems.MOONSTONE) … The custom recipes were a bit more difficult. I created SapphireUpgradeRecipe. It scans the crafting grid to check if the center slot has an item with durability, surrounded by Sapphires. Inside assemble(), it copies the item and calculates a +20% increase to its MAX_DAMAGE. I first was confused because i thought damage would be the damage you are dealing with it (just like in the ItemEdit Plugin or Paper) Though, the damage on the item is meant. So basically the durability. val currentMax = result.maxDamage val newMax = currentMax + ceil(currentMax * 0.20).toInt().coerceAtLeast(1) result.set(DataComponents.MAX_DAMAGE, newMax) In MoonstoneUpgradeRecipe, when you craft a item with 8 Moonstones around it, it attaches a custom NBT marker (crystalcave_moonstone_upgrade) to the item’s data components. I will add a ServerTickEvents event loop in the future which then will target every monster in a 64 block radius or soemthing like that.
I registered new blocks and items. It was difficult to find how to register these. In my mods before ive never added new blocks biomes ore anything like that. As the unobfuscated versions of minecraft arent out that long, it is difficult to find good documentations of the class names. I first tried fabrics AbstractBlock settings which looked like this: val SAPPHIRE_ORE = registerBlock( “sapphire_ore”, Block(AbstractBlock.Settings.create() .mapColor(MapColor.STONE_GRAY) .instrument(Instrument.BASE_DRUM) .requiresTool() .strength(3.0f, 3.0f) .sounds(BlockSoundGroup.STONE)) ) After asking Gemini and telling it that I am working with the latest minecraft version (and that it is NOT 1.21.4) I made the system use lateinit var and an helper function....
|
1792892858.59291
|
1793756858.59291
|
|
53376
|
Ambient Backlight for monitor by @timon | Stardanc Ambient Backlight for monitor by @timon | Stardance...
|
timon
|
0
|
7.23
|
0
|
[]
|
[{"post_id": 56224, "ts": "202 [{"post_id": 56224, "ts": "2026-08-27T21:52:23Z", "hours": 1.5683, "text": "I improved the GPU readback so the CPU no longer has to wait for the GPU every frame (Gemini noticed that this happend and with its help I fixxed it). Before the resul buffer was copied and read immediately which could cause the CPU to block while the GPU was still processing shader. This is difficult because getting the CPU and GPU sync right is tough. As the CPU should only read a buffer when the GPU finished writing on it. I used ID3D11Query events for it: if (r.pending && context->GetData(r.query.Get(), nullptr, 0, 0) == S_OK) { context->Map(r.buffer.Get(), 0, D3D11_MAP_READ, 0, &m); serial.send((const UINT*)m.pData); context->Unmap(r.buffer.Get(), 0); r.pending = false; }"}, {"post_id": 54644, "ts": "2026-08-25T17:51:14Z", "hours": 0.3275, "text": "Fixed a few issues in the shader. First of all the border mapping wasnt complete and I forgot the top and left side of the LEDs.. Also removed Typos. I also added sRGB and improved the saturation handling as before they didnt match accurate. I fixed it by the colors to linear space before processing them. Before: float luma = dot(rgb, float3(0.2126, 0.7152, 0.0722)); rgb = saturate(lerp(luma.xxx, rgb, saturationBoost) * brightness); After: sum += ToLinear(desktop.Load(int3(pixel, 0)).rgb); float3 rgb = ToSrgb(sum / (samplesAcross * samplesDeep)); rgb = saturate(BoostSaturation(rgb) * brightness);"}, {"post_id": 54597, "ts": "2026-08-25T16:57:24Z", "hours": 0.9733, "text": "Using an HLSL compute shader and [numthreads(90, 1, 1)] the GPU spawns 90 parralel threads which are calculating the average color for every LED simaultaneously. As only picking one pixel at each led would be pretty inaccurate, we are taking zones and use the average color of ever zone. (For now the average of every zone is picked, if I am testing it in real life, we might change it - maybe the outer pixels are doubled for a more accurate color that looks better at the end). I had an issue where some LEDs were using the wrong part of the screen because of incorrect index calculation. I fixed it by correcting the LED and screen coordinates: (in the picture)"}, {"post_id": 54370, "ts": "2026-08-25T10:38:24Z", "hours": 2.9539, "text": "Before doing the PC side and video capture code, I made the the code for the physical ahrdware (the esp32). I set up a Arduino sketch using FastLED library to manage the output signal on GPIO (in my case DATA_PIN 2), I configured the setup for the 90 LEDS I have on the RGB Strip (ws2812b usually have 60 LEDS per 1m and i need 1,5m). I set the communication speed to 921.600 baud. void setup() { FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS); FastLED.setBrightness(BRIGHTNESS); FastLED.clear(true); Serial.begin(921600);} To avoid lagging, I built a simple step by step parser that handles incoming data byte by byte: Ready how many Leds are sent It Checks if the data is valid and mathces the 90 LEDS and if anything is wrong it resets and waits for the next frame. Once all 270 bytes (90 lights * 3 colors) arrive, it calls FastLED.show() to light up the strip I started working on the communication between the PC and the LED hardware with serial. Serial is the channel used to send binary color data directly to the esp32. To make sure the lights dont stay lit when the program closes the destructor sends a black frame on exit to turn of all lights. I didnt notice that it would be a problem but when troubleshooting for another proble, gemini noticed it: ~Serial() { black(); if (handle_ != INVALID_HANDLE_VALUE) CloseHandle(handle_); } I am using DXGI Desktop duplication that can capture the frames directly from the gpu. This is good so the frames dont need to be loaded again for the LEDs."}, {"post_id": 53386, "ts": "2026-08-23T22:17:51Z", "hours": 1.4044, "text": "I started with creating the circuit in KiCad. I noticed that there was not the right ESP32 for me so i looked online and found this: https://github.com/davidkleymann/doit-esp32-devkit-kicad I build everything in KiCad just to see that the libraries are probably outdated (or i just did something wrong but i dont believe that) After about 20 of trouble shooting I got it working but I noticed that KiCad is not the best place for what im trying to do so I gave up. I searched for a new programm and found https://wokwi.com . It worked well. Though, they did not have splicing connectors / wago connectors so i made it with a Breadboard in this circuit instead. In the real version I will do it instead with splicing connectors. Also the LED strip name for the negative power supply pin was VSS, i thought it should be GND and learned the difference then."}]...
|
Title: Ambient Backlight for monitor by @timon | S Title: Ambient Backlight for monitor by @timon | Stardance
Devlogs:
I started with creating the circuit in KiCad. I noticed that there was not the right ESP32 for me so i looked online and found this: https://github.com/davidkleymann/doit-esp32-devkit-kicad I build everything in KiCad just to see that the libraries are probably outdated (or i just did something wrong but i dont believe that) After about 20 of trouble shooting I got it working but I noticed that KiCad is not the best place for what im trying to do so I gave up. I searched for a new programm and found https://wokwi.com . It worked well. Though, they did not have splicing connectors / wago connectors so i made it with a Breadboard in this circuit instead. In the real version I will do it instead with splicing connectors. Also the LED strip name for the negative power supply pin was VSS, i thought it should be GND and learned the difference then.
Before doing the PC side and video capture code, I made the the code for the physical ahrdware (the esp32). I set up a Arduino sketch using FastLED library to manage the output signal on GPIO (in my case DATA_PIN 2), I configured the setup for the 90 LEDS I have on the RGB Strip (ws2812b usually have 60 LEDS per 1m and i need 1,5m). I set the communication speed to 921.600 baud. void setup() { FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS); FastLED.setBrightness(BRIGHTNESS); FastLED.clear(true); Serial.begin(921600);} To avoid lagging, I built a simple step by step parser that handles incoming data byte by byte: Ready how many Leds are sent It Checks if the data is valid and mathces the 90 LEDS and if anything is wrong it resets and waits for the next frame. Once all 270 bytes (90 lights * 3 colors) arrive, it calls FastLED.show() to light up the strip I started working on the communication between the PC and the LED hardware with serial. Serial is the channel used to send binary color data directly to the esp32. To make sure the lights dont stay lit when the program closes the destructor sends a black frame on exit to turn of all lights. I didnt notice that it would be a problem but when troubleshooting for another proble, gemini noticed it: ~Serial() { black(); if (handle_ != INVALID_HANDLE_VALUE) CloseHandle(handle_); } I am using DXGI Desktop duplication that can capture the frames directly from the gpu. This is good so the frames dont need to be loaded again for the LEDs.
Using an HLSL compute shader and [numthreads(90, 1, 1)] the GPU spawns 90 parralel threads which are calculating the average color for every LED simaultaneously. As only picking one pixel at each led would be pretty inaccurate, we are taking zones and use the average color of ever zone. (For now the average of every zone is picked, if I am testing it in real life, we might change it - maybe the outer pixels are doubled for a more accurate color that looks better at the end). I had an issue where some LEDs were using the wrong part of the screen because of incorrect index calculation. I fixed it by correcting the LED and screen coordinates: (in the picture)
Fixed a few issues in the shader. First of all the border mapping wasnt complete and I forgot the top and left side of the LEDs.. Also removed Typos. I also added sRGB and improved the saturation handling as before they didnt match accurate. I fixed it by the colors to linear space before processing them. Before: float luma = dot(rgb, float3(0.2126, 0.7152, 0.0722)); rgb = saturate(lerp(luma.xxx, rgb, saturationBoost) * brightness); After: sum += ToLinear(desktop.Load(int3(pixel, 0)).rgb); float3 rgb = ToSrgb(sum / (samplesAcross * samplesDeep)); rgb = saturate(BoostSaturation(rgb) * brightness);
I improved the GPU readback so the CPU no longer has to wait for the GPU every frame (Gemini noticed that this happend and with its help I fixxed it). Before the resul buffer was copied and read immediately which could cause the CPU to block while the GPU was still processing shader. This is difficult because getting the CPU and GPU sync right is tough. As the CPU should only read a buffer when the GPU finished writing on it. I used ID3D11Query events for it: if (r.pending && context->GetData(r.query.Get(), nullptr, 0, 0) == S_OK) { context->Map(r.buffer.Get(), 0, D3D11_MAP_READ, 0, &m); serial.send((const UINT*)m.pData); context->Unmap(r.buffer.Get(), 0); r.pending = false; }...
|
1793483756.8545556
|
1794088556.8545556
|
|
55938
|
Daydream Shader by @timon | Stardance
|
timon
|
1
|
14.0
|
105
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-29T14:35:46Z", "hours": 14.0, "multiplier": 7.33, "payout": 105, "blessing": "neutral", "text": "I made a tuff minecraft shader. Daydream is a lightweight Minecraft shader focused on making the vanilla world feel more atmospgeric without completely changing the look. WHY LIGHTWEIGHT: First of all the changes: I improved the lighting, colors, shadows and fog. And for that I used many vibrancy increases and exposure increases that look really good and stunning but dont take much code (basically just 1 line) and dont require much performance. Im proud of trying and learning something new. It started all with a video on my YouTube fy page talking about how to start a shader and when i saw another shader project here on stardance by a beginner i started too. I like that it is lightweight because of those visual vibrancy and exposure increases.", "repo": "https://github.com/Facticee/Daydream", "demo": "https://modrinth.com/shader/daydream-shader"}]...
|
[{"post_id": 75212, "ts": "202 [{"post_id": 75212, "ts": "2026-09-29T14:30:52Z", "hours": 0.8022, "text": "Last Devlog (as im finished) FINALLY 😁 Whats new: I tested alot with the vibrancy values and changed the sky color values to: baseSky.r *= 0.1;baseSky.g *= 0.45;baseSky.b *= 9.0; The 9.0 wont change anything at daytime, but makes the sky way more blue on night time. I used the same lighting setup for both day and night. Now I use seperate Light values making the night natively darker while keeping block lighting the same as before. float skyLight = day ? lm.y : lm.y * 0.45;vec3 lighting = skyLight * (vec3(0.5, 0.62, 0.75) + vec3(1.0, 0.92, 0.78) * sun * shadowCol)+ vec3(1.0, 0.6, 0.3) * lm.x * lm.x + 0.03; Also, before the entites were glowing very hard. This was because the lightmap was applied directly on the entities. I removed it: lmdata = vec4(lmcoord, 0.0, 1.0); (Picture of the glowing pig also here)"}, {"post_id": 75002, "ts": "2026-09-28T20:29:06Z", "hours": 1.905, "text": "I made some small and easy updates. I tested alot and wrote alot and deleted most things. Gemin had the Fog Idea :) First Change: I changed the gbuffers_skybasic.fsh color grading for the sky. It makes the sky way more light blue isntead of the dark blue I had before (image included) baseSky.r *= 0.1; baseSky.g *= 0.65; baseSky.b *= 1.8; Second Change: I added Exposure to the final.fsh. One Problem was that it got so bright, that lighter texutres like sand looked basically white. So i went in the composite.fsh and multiplied the lighting by 0.85 so it will get darker and compensates the Exposure (image included before and after): final.fsh: float exposure = 1.3;color.rgb *= exposure; composite.fsh: vec3 finalColor = albedo.rgb * lighting * 0.85; Third Change: I added a fog near the render distance. It was Geminis Idea to add fog. It was only 2 lines to add: float fog = smoothstep(far * 0.7, far, length(viewPos.xyz));finalColor = mix(finalColor, fogColor, fog);"}, {"post_id": 72832, "ts": "2026-09-23T20:41:26Z", "hours": 6.1117, "text": "This is a devlog with much time because first i forgot to devlog and second because i had one huge problem and i was working on it for like two and a half hour (also much with ai on that problem, ill admit that i was furious after 1,5 hours) So yeah. Whats new: Shadow Rewrite, Color Grading, Lighting, Wave update. Starting Small: I made Waves faster to make them more visible. Before: float wave = sin(p.x * 1.20 + frameTimeCounter * 2.50) * 0.01; Now: float wave = sin(p.x * 1.20 + frameTimeCounter * 2.50) * 0.05; Like seen in the last Devlogs, the shadow never really looked nice. Before i used like manual 5 samplig grid to soften the shadows which is okay for performance but it looks weird. In the new version i completely threw that out. Instead I decided to move over to PCF Percentage Closer FIltering (was claudes idea). It makes the shadow look soft and way smoother. vec3 pcf(vec4 clip) { ivec2 s = ivec2(texcoord * vec2(viewWidth, viewHeight)) % 64; float a = texelFetch(noisetex, s, 0).r * 6.2831853; mat2 r = mat2(cos(a), -sin(a), sin(a), cos(a)); vec3 sum = vec3(0.0); float n = 0.0; for (int x = -PCF_RANGE; x <= PCF_RANGE; x++) { for (int y = -PCF_RANGE; y <= PCF_RANGE; y++) { vec4 p = clip + vec4(r * (vec2(x, y) * (PCF_RADIUS / 8092.0)), -0.002, 0.0); p.xyz = warpShadowClipPos(p.xyz); p.xyz = p.xyz / p.w * 0.5 + 0.5; if (all(greaterThanEqual(p.xy, vec2(0.0))) && all(lessThanEqual(p.xy, vec2(1.0)))) { sum += sh(p.xyz); n += 1.0; } } } return n > 0.0 ? sum / n : vec3(1.0); } While rewriting the composite I had multiple transparent bugs (seen in the pictures below). Basically my palyer hand and mobs were see through. The mob bug was pretty easy fix. gbuffers_entities.vsh wasnt actually passing down normal vectors to the fragment shader. (This was also found by gemini not me) For the Hand fix, i ran into a problem becuase it was the fault of composite.fsh. I was doing some weird depth buffer checks that basically told the shader to ignore the hand and draw the world behind it. (And again this was found by gemini) In the composite shader, I had this depth check to filter out water and sky: if (d0 != d2) { color = albedo; return; } By using if (d0 == 1.0 || d0 < d1 || d0 != d2) the shader now correctly renders it. The Problem was becase how Miencraft renders the hand. The hand renders into depthtex2 but it usually doesnt render into depthtex0. Because the hand depth in d2 was different freom the sky block depthh in d0 it triggered and the composite shader skipped drawing the hand. ( I hope I understood it right). Then came the 2.5 hour problem 😩: Random blocky shadows appeated on water (seen in pictures). Because the problem didnt occured before and because I just reworked the composite i tried everything. I changed things back to old. asked AI nothing helped. In the end it was because gbuffers_water.vsh was calcuilating the shadow coordiantes without applying the shadow map distorion. It was trying to read warped shadow map using undistoreted coordinates. nce I added the #include “libs/distort.glsl” it worked… (again found by gemini, i troubleshooted ALOT with it). Lasty i addewd Color Grading tweaks in final.fsh. Just more vibrance and contras."}, {"post_id": 59077, "ts": "2026-08-31T18:05:00Z", "hours": 4.2739, "text": "I spent some time remaking the water. Before the Waves were pretty symmetrical. I added more randomness by adding more cos and sin waves with different speed and direction. Before: wavePos = floor(wavePos * 16.0) / 16.0; float wave = sin(wavePos.x * 1.5 + frameTimeCounter * 2.0) * 0.08 + cos(wavePos.z * 1.5 + frameTimeCounter * 1.8) * 0.08; After: float wave = 0.0; wave += sin(wavePos.x * 1.2 + frameTimeCounter * 1.6) * 0.07; wave += sin(wavePos.z * 1.4 + frameTimeCounter * 1.9) * 0.05; wave += sin((wavePos.x + wavePos.z) * 1.0 + frameTimeCounter * 1.1) * 0.04; wave += cos((wavePos.x - wavePos.z) * 1.1 + frameTimeCounter * 1.3) * 0.045; Then I went to the gbuffer_terrain.fsh and gbuffer_terrain.vsh. It is there fore the foundation for shadow mapping by calculating the shadow coordinates in the vertex shader and getting the shadow map. When i finnished that i went to the composite.fsh to actually getting the shadows to run. But first i began working on the overall lighting to make it feel much brighter and cooler. vec3 sunLight = vec3(1.0, 0.92, 0.78) * shadow * lm.y;vec3 skyAmbient = vec3(0.3, 0.42, 0.55) * lm.y;vec3 blocklight = vec3(1.0, 0.6, 0.3) * lm.x * lm.x;vec3 lighting = sunLight + skyAmbient + blocklight + 0.03; Now the shadows. The shadowSample() function takes the reconstructed player position and normal ( reconstructed player = 3d world position from a pixel, normal = where a surface is facing to) and transforms it into the shadow map. I also added 6 shadow samples around the pixel (geminis advice) to make the shadows softer instead of sharp (Though i might change that because as you will se in the picture the shadow is ugly… It might be because of that). float shadow = step(sp.z, texture2D(shadowtex0, sp.xy).r) * 0.4+ step(sp.z, texture2D(shadowtex0, sp.xy + vec2( r, r)).r) * 0.15+ step(sp.z, texture2D(shadowtex0, sp.xy + vec2(-r, r)).r) * 0.15+ step(sp.z, texture2D(shadowtex0, sp.xy + vec2( r, -r)).r) * 0.15+ step(sp.z, texture2D(shadowtex0, sp.xy + vec2(-r, -r)).r) * 0.15; The shadow itself is actiavated in main() with: float shadow = shadowSample(playerPos, normal); After all that though, the shadow didnt work and i was looking for it like 30 minutes and also troubleshootign with AI and after changeing the code like 10 times it also didnt work so I reverted the changes and noticed that: uniform float shadowDistance; is wrong because it of course needs a number :/ -> uniform float shadowDistance = 128.0;"}, {"post_id": 57547, "ts": "2026-08-29T18:39:44Z", "hours": 1.1972, "text": "Im making a shader for Minecraft and after upgrading the template from 1.21.5 to 26.2 I implemented waves to water.. It took long 😭 but it wasnt that difficult. I also added a pciture here. With mc_Entity i added blockID for specifically Water to the IDs 10034 and 10033. For the animation I used sine and cosine functions. After i styled the Water by blending its texture with a blue tint: vec3 waterColor = vec3(0.1, 0.4, 0.8); Though, because it was all the same color, you couldnt really see the waved that were further away than 3 blocks, so I implented a bit of shadow: shadow = texture(shadowtex0, shadowCoord.st).r;albedo.rgb *=mix(0.5, 1.0, shadow);"}]...
|
Title: Daydream Shader by @timon | Stardance
Devl Title: Daydream Shader by @timon | Stardance
Devlogs:
Im making a shader for Minecraft and after upgrading the template from 1.21.5 to 26.2 I implemented waves to water.. It took long 😭 but it wasnt that difficult. I also added a pciture here. With mc_Entity i added blockID for specifically Water to the IDs 10034 and 10033. For the animation I used sine and cosine functions. After i styled the Water by blending its texture with a blue tint: vec3 waterColor = vec3(0.1, 0.4, 0.8); Though, because it was all the same color, you couldnt really see the waved that were further away than 3 blocks, so I implented a bit of shadow: shadow = texture(shadowtex0, shadowCoord.st).r;albedo.rgb *=mix(0.5, 1.0, shadow);
I spent some time remaking the water. Before the Waves were pretty symmetrical. I added more randomness by adding more cos and sin waves with different speed and direction. Before: wavePos = floor(wavePos * 16.0) / 16.0; float wave = sin(wavePos.x * 1.5 + frameTimeCounter * 2.0) * 0.08 + cos(wavePos.z * 1.5 + frameTimeCounter * 1.8) * 0.08; After: float wave = 0.0; wave += sin(wavePos.x * 1.2 + frameTimeCounter * 1.6) * 0.07; wave += sin(wavePos.z * 1.4 + frameTimeCounter * 1.9) * 0.05; wave += sin((wavePos.x + wavePos.z) * 1.0 + frameTimeCounter * 1.1) * 0.04; wave += cos((wavePos.x - wavePos.z) * 1.1 + frameTimeCounter * 1.3) * 0.045; Then I went to the gbuffer_terrain.fsh and gbuffer_terrain.vsh. It is there fore the foundation for shadow mapping by calculating the shadow coordinates in the vertex shader and getting the shadow map. When i finnished that i went to the composite.fsh to actually getting the shadows to run. But first i began working on the overall lighting to make it feel much brighter and cooler. vec3 sunLight = vec3(1.0, 0.92, 0.78) * shadow * lm.y;vec3 skyAmbient = vec3(0.3, 0.42, 0.55) * lm.y;vec3 blocklight = vec3(1.0, 0.6, 0.3) * lm.x * lm.x;vec3 lighting = sunLight + skyAmbient + blocklight + 0.03; Now the shadows. The shadowSample() function takes the reconstructed player position and normal ( reconstructed player = 3d world position from a pixel, normal = where a surface is facing to) and transforms it into the shadow map. I also added 6 shadow samples around the pixel (geminis advice) to make the shadows softer instead of sharp (Though i might change that because as you will se in the picture the shadow is ugly… It might be because of that). float shadow = step(sp.z, texture2D(shadowtex0, sp.xy).r) * 0.4+ step(sp.z, texture2D(shadowtex0, sp.xy + vec2( r, r)).r) * 0.15+ step(sp.z, texture2D(shadowtex0, sp.xy + vec2(-r, r)).r) * 0.15+ step(sp.z, texture2D(shadowtex0, sp.xy + vec2( r, -r)).r) * 0.15+ step(sp.z, texture2D(shadowtex0, sp.xy + vec2(-r, -r)).r) * 0.15; The shadow itself is actiavated in main() with: float shadow = shadowSample(playerPos, normal); After all that though, the shadow didnt work and i was looking for it like 30 minutes and also troubleshootign with AI and after changeing the code like 10 times it also didnt work so I reverted the changes and noticed that: uniform float shadowDistance; is wrong because it of course needs a number :/ -> uniform float shadowDistance = 128.0;
This is a devlog with much time because first i forgot to devlog and second because i had one huge problem and i was working on it for like two and a half hour (also much with ai on that problem, ill admit that i was furious after 1,5 hours) So yeah. Whats new: Shadow Rewrite, Color Grading, Lighting, Wave update. Starting Small: I made Waves faster to make them more visible. Before: float wave = sin(p.x * 1.20 + frameTimeCounter * 2.50) * 0.01; Now: float wave = sin(p.x * 1.20 + frameTimeCounter * 2.50) * 0.05; Like seen in the last Devlogs, the shadow never really looked nice. Before i used like manual 5 samplig grid to soften the shadows which is okay for performance but it looks weird. In the new version i completely threw that out. Instead I decided to move over to PCF Percentage Closer FIltering (was claudes idea). It makes the shadow look soft and way smoother. vec3 pcf(vec4 clip) { ivec2 s = ivec2(texcoord * vec2(viewWidth, viewHeight)) % 64; float a = texelFetch(noisetex, s, 0).r * 6.2831853; mat2 r = mat2(cos(a), -sin(a), sin(a), cos(a)); vec3 sum = vec3(0.0); float n = 0.0; for (int x = -PCF_RANGE; x <= PCF_RANGE; x++) { for (int y = -PCF_RANGE; y <= PCF_RANGE; y++) { vec4 p = clip + vec4(r * (vec2(x, y) * (PCF_RADIUS / 8092.0)), -0.002, 0.0); p.xyz = warpShadowClipPos(p.xyz); p.xyz = p.xyz / p.w * 0.5 + 0.5; if (all(greaterThanEqual(p.xy, vec2(0.0))) && all(lessThanEqual(p.xy, vec2(1.0)))) { sum += sh(p.xyz); n += 1.0; } } } return n > 0.0 ? sum / n : vec3(1.0); } While rewriting the composite I had multiple transparent bugs (seen in the pictures below). Basically my palyer hand and mobs were see through. The mob bug was pretty easy fix. gbuffers_entities.vsh wasnt actually passing down normal vectors to the fragment shader. (This was also found by gemini not me) For the Hand fix, i ran into a problem becuase it was the fault of composite.fsh. I was doing some weird depth buffer checks that basically told the shader to ignore the hand and draw the world behind it. (And again this was found by gemini) In the composite shader, I had this depth check to filter out water and sky: if (d0 != d2) { color = albedo; return; } By using if (d0 == 1.0 || d0 < d1 || d0 != d2) the shader now correctly renders it. The Problem was becase how Miencraft renders the hand. The hand renders into depthtex2 but it usually doesnt render into depthtex0. Because the hand depth in d2 was different freom the sky block depthh in d0 it triggered and the composite shader skipped drawing the hand. ( I hope I understood it right). Then came the 2.5 hour problem 😩: Random blocky shadows appeated on water (seen in pictures). Because the problem didnt occured before and because I just reworked the composite i tried everything. I changed things back to old. asked AI nothing helped. In the end it was because gbuffers_water.vsh was calcuilating the shadow coordiantes without applying the shadow map distorion. It was trying to read warped shadow map using undistoreted coordinates. nce I added the #include “libs/distort.glsl” it worked… (again found by gemini, i troubleshooted ALOT with it). Lasty i addewd Color Grading tweaks in final.fsh. Just more vibrance and contras.
I made some small and easy updates. I tested alot and wrote alot and deleted most things. Gemin had the Fog Idea :) First Change: I changed the gbuffers_skybasic.fsh color grading for the sky. It makes the sky way more light blue isntead of the dark blue I had before (image included) baseSky.r *= 0.1; baseSky.g *= 0.65; baseSky.b *= 1.8; Second Change: I added Exposure to the final.fsh. One Problem was that it got so bright, that lighter texutres like sand looked basically white. So i went in the composite.fsh and multiplied the lighting by 0.85 so it will get darker and compensates the Exposure (image included before and after): final.fsh: float exposure = 1.3;color.rgb *= exposure; composite.fsh: vec3 finalColor = albedo.rgb * lighting * 0.85; Third Change: I added a fog near the render distance. It was Geminis Idea to add fog. It was only 2 lines to add: float fog = smoothstep(far * 0.7, far, length(viewPos.xyz));finalColor = mix(finalColor, fogColor, fog);
Last Devlog (as im finished) FINALLY 😁 Whats new: I tested alot with the vibrancy values and changed the sky color values to: baseSky.r *= 0.1;baseSky.g *= 0.45;baseSky.b *= 9.0; The 9.0 wont change anything at daytime, but makes the sky way more blue on night time. I used the same lighting setup for both day and night. Now I use seperate Light values making the night natively darker while keeping block lighting the same as before. float skyLight = day ? lm.y : lm.y * 0.45;vec3 lighting = skyLight * (vec3(0.5, 0.62, 0.75) + vec3(1.0, 0.92, 0.78) * sun * shadowCol)+ vec3(1.0, 0.6, 0.3) * lm.x * lm.x + 0.03; Also, before the entites were glowing very hard. This was because the lightmap was applied directly on the entities. I removed it: lmdata = vec4(lmcoord, 0.0, 1.0); (Picture of the glowing pig also here)
Ships:
I made a tuff minecraft shader. Daydream is a lightweight Minecraft shader focused on making the vanilla world feel more atmospgeric without completely changing the look. WHY LIGHTWEIGHT: First of all the changes: I improved the lighting, colors, shadows and fog. And for that I used many vibrancy increases and exposure increases that look really good and stunning but dont take much code (basically just 1 line) and dont require much performance. Im proud of trying and learning something new. It started all with a video on my YouTube fy page talking about how to start a shader and when i saw another shader project here on stardance by a beginner i started too. I like that it is lightweight because of those visual vibrancy and exposure increases....
|
1793346672.429923
|
1793433072.429923
|
|
66353
|
E-reader by @timmol65 | Stardance
|
timmol65
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: E-reader by @timmol65 | Stardance
|
1793098242.0993185
|
1793703042.0993185
|
|
67855
|
My awesome macropad! by @timijan | Stardance
|
timijan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @timijan | Stardanc Title: My awesome macropad! by @timijan | Stardance...
|
1793116127.6461225
|
1793720927.6461225
|
|
5696
|
Hackpad 101 by @timi-the-toaster | Stardance
|
timi-the-toaster
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Hackpad 101 by @timi-the-toaster | Stardanc Title: Hackpad 101 by @timi-the-toaster | Stardance...
|
1793379299.409581
|
1793984099.409581
|
|
12309
|
Untitled by @timi-the-toaster | Stardance
|
timi-the-toaster
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @timi-the-toaster | Stardance
|
1793325115.9313633
|
1793929915.9313633
|
|
60005
|
SlideStitch by @timetiger | Stardance
|
timetiger
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: SlideStitch by @timetiger | Stardance
|
1793030045.5350294
|
1793634845.5350294
|
|
13954
|
Untitled project by @timenox | Stardance
|
timenox
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @timenox | Stardance
|
1793476651.2116647
|
1794081451.2116647
|
|
64474
|
My awesome macropad! by @timelessvintagearchive | My awesome macropad! by @timelessvintagearchive | Stardance...
|
timelessvintagearchive
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @timelessvintagearc Title: My awesome macropad! by @timelessvintagearchive | Stardance...
|
1793062534.840891
|
1793667334.840891
|
|
1346
|
I accidentally made this, Idk what it is please ig I accidentally made this, Idk what it is please ignore by @time | Stardance...
|
time
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: I accidentally made this, Idk what it is pl Title: I accidentally made this, Idk what it is please ignore by @time | Stardance...
|
1793455007.3023918
|
1794059807.3023918
|
|
2874
|
My Portfolio by @time | Stardance
|
time
|
1
|
3.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-29T22:31:15Z", "hours": 3.0, "multiplier": 1.09, "payout": 3, "blessing": "neutral", "text": "This is my Portfolio! I made it over the course of a few hours (some I accidentally didn’t log oops) and I’m so happy to finally ship it! Lets get into the features! Features: Top navigator Social media link Home page Art page Coding page (like the types of work I’ve done etc etc) It feels great to ship this quick test of my beginner abilities for you guys! Please feel free to use assets from it for your own work! Let me know if there are any issues or things I could do better next site! I’m still improving. See you guys in the next project!", "repo": "https://github.com/TimeWithNoTime/Portfolioproject/", "demo": "https://timewithnotime.github.io/Portfolioproject/"}]...
|
[{"post_id": 17108, "ts": "202 [{"post_id": 17108, "ts": "2026-06-27T19:42:00Z", "hours": 1.4467, "text": "Added the top layout to my coding work site and art site! might ship later this week!"}, {"post_id": 1140, "ts": "2026-06-02T23:53:07Z", "hours": 0.8033, "text": "Just made a large amount of progress on my portfolio! I added a name card and a link to social media Hopefully I can put in a few more hours and finish up the website"}, {"post_id": 943, "ts": "2026-06-02T18:21:51Z", "hours": 0.2694, "text": "I started making my website! Its simple for the time I spent but I’m kinda just relearning as I see the need to! (I have like 45 minutes of unlogged work because I accidentally forgot to start recording twice)"}]...
|
Title: My Portfolio by @time | Stardance
Devlogs: Title: My Portfolio by @time | Stardance
Devlogs:
I started making my website! Its simple for the time I spent but I’m kinda just relearning as I see the need to! (I have like 45 minutes of unlogged work because I accidentally forgot to start recording twice)
Just made a large amount of progress on my portfolio! I added a name card and a link to social media Hopefully I can put in a few more hours and finish up the website
Added the top layout to my coding work site and art site! might ship later this week!
Ships:
This is my Portfolio! I made it over the course of a few hours (some I accidentally didn’t log oops) and I’m so happy to finally ship it! Lets get into the features! Features: Top navigator Social media link Home page Art page Coding page (like the types of work I’ve done etc etc) It feels great to ship this quick test of my beginner abilities for you guys! Please feel free to use assets from it for your own work! Let me know if there are any issues or things I could do better next site! I’m still improving. See you guys in the next project!...
|
1793433188.4770827
|
1793519588.4770827
|
|
14822
|
ToonOS by @timcluely | Stardance
|
timcluely
|
0
|
1.5
|
0
|
[]
|
[{"post_id": 51478, "ts": "202 [{"post_id": 51478, "ts": "2026-08-21T06:36:21Z", "hours": 1.5014, "text": "I’ve had lots of time to think of how I want my website to be and I’ve decided that before I can even start making a REAL website I need more experience. So instead I’ve decided to start off with a Portfolio called TOONBoom in which I plan to do at least two projects (one in C++ and one in Python) per a day. That alongside the coding I do with creating the webpage to showcase each project will hopeful help me quickly develop some good programming skills."}]...
|
Title: ToonOS by @timcluely | Stardance
Devlogs:
Title: ToonOS by @timcluely | Stardance
Devlogs:
I’ve had lots of time to think of how I want my website to be and I’ve decided that before I can even start making a REAL website I need more experience. So instead I’ve decided to start off with a Portfolio called TOONBoom in which I plan to do at least two projects (one in C++ and one in Python) per a day. That alongside the coding I do with creating the webpage to showcase each project will hopeful help me quickly develop some good programming skills....
|
1793497665.7270894
|
1794102465.7270894
|
|
12564
|
Music Chaos by @timberlay_thunfiss | Stardance
|
timberlay_thunfiss
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Music Chaos by @timberlay_thunfiss | Starda Title: Music Chaos by @timberlay_thunfiss | Stardance...
|
1793177328.8905702
|
1793782128.8905702
|
|
11024
|
TRACE by @tim_kopeszky | Stardance
|
tim_kopeszky
|
0
|
15.82
|
0
|
[]
|
[{"post_id": 8879, "ts": "2026 [{"post_id": 8879, "ts": "2026-06-14T19:53:02Z", "hours": 12.5625, "text": "Finished the schematic What’s New Added the functionality of an oscilloscope using the AD9283 ADC clocked at 50 MHz Cancelled the DAC (now only signal generation using the AD9833 for sine, square and triangle) Added the functionality to choose the voltage of the ISP programmer in software (with hardware safety) Next Steps Double check the schematic Start PCB layout"}, {"post_id": 4824, "ts": "2026-06-08T10:32:00Z", "hours": 3.2569, "text": "TRACE Update 1 What’s New Defined architecture: two MCUs RP2350 handles logic analyzer, programmers and function generation ESP32-S3 handles WiFi, web UI and AI agent Selected key components: ADS1115 for voltage measurement, AD9833 for function generator, MCP4922 as DAC Started KiCad schematic — analog power section with split ground plane done Interface WiFi: access from any device (phone, PC) via web UI USB: direct connection to host for PulseView (logic analyzer) AI integration: Claude agent to control the instrument Describe your problem in plain language and Claude automatically measures and diagnoses it Next Steps Complete ESP32-S3 and RP2350 schematics Start PCB layout"}]...
|
Title: TRACE by @tim_kopeszky | Stardance
Devlogs Title: TRACE by @tim_kopeszky | Stardance
Devlogs:
TRACE Update 1 What’s New Defined architecture: two MCUs RP2350 handles logic analyzer, programmers and function generation ESP32-S3 handles WiFi, web UI and AI agent Selected key components: ADS1115 for voltage measurement, AD9833 for function generator, MCP4922 as DAC Started KiCad schematic — analog power section with split ground plane done Interface WiFi: access from any device (phone, PC) via web UI USB: direct connection to host for PulseView (logic analyzer) AI integration: Claude agent to control the instrument Describe your problem in plain language and Claude automatically measures and diagnoses it Next Steps Complete ESP32-S3 and RP2350 schematics Start PCB layout
Finished the schematic What’s New Added the functionality of an oscilloscope using the AD9283 ADC clocked at 50 MHz Cancelled the DAC (now only signal generation using the AD9833 for sine, square and triangle) Added the functionality to choose the voltage of the ISP programmer in software (with hardware safety) Next Steps Double check the schematic Start PCB layout...
|
1793501516.296857
|
1794106316.296857
|
|
18735
|
Yoke by @tim_kopeszky | Stardance
|
tim_kopeszky
|
0
|
6.41
|
0
|
[]
|
[{"post_id": 24567, "ts": "202 [{"post_id": 24567, "ts": "2026-07-08T07:36:53Z", "hours": 3.4906, "text": "Devlog #1 — PCB Layout Complete The layout is finished. What’s on the board The Yoke runs on an STM32G491VE (LQFP100) — enough pins for the touch display, the button matrix, and FDCAN without fighting over alternate functions. The wheel talks to the base over CAN, using the TCAN332G transceiver. Stackup Signal / PWR/ GND/ Signal. Nothing exotic, but the ground plane sits directly over the bottom signal layer, which gives every fast signal a clean return path right beneath it. That mattered most for two things: CANH/CANL — routed as a differential pair, tight and short, transceiver right at the connector. USB — the two datalines D+, D- are routed as a differential pair, so they need a clean path to ground. What’s next Fabrication. Gerbers are generated, BOM is assembled, and the whole project is under Git now. Then assembly, then the part where I find out what I got wrong."}, {"post_id": 23630, "ts": "2026-07-06T18:22:06Z", "hours": 2.9231, "text": "Devlog #0 — Schematic done! Wrapped up the schematic for the wheel. Key component choices: STM32G491VE — picked for the built-in CAN peripheral and the high GPIO count (needed the pins for buttons, encoders, LEDs, and display). TCAN332G — CAN transceiver handling the physical layer to the base unit. Touch display — shows live driving data right on the wheel (speed, gear, telemetry over CAN). Charge pump — lets me hot-plug the wheel into the base without inrush issues. Next up: PCB routing."}]...
|
Title: Yoke by @tim_kopeszky | Stardance
Devlogs: Title: Yoke by @tim_kopeszky | Stardance
Devlogs:
Devlog #0 — Schematic done! Wrapped up the schematic for the wheel. Key component choices: STM32G491VE — picked for the built-in CAN peripheral and the high GPIO count (needed the pins for buttons, encoders, LEDs, and display). TCAN332G — CAN transceiver handling the physical layer to the base unit. Touch display — shows live driving data right on the wheel (speed, gear, telemetry over CAN). Charge pump — lets me hot-plug the wheel into the base without inrush issues. Next up: PCB routing.
Devlog #1 — PCB Layout Complete The layout is finished. What’s on the board The Yoke runs on an STM32G491VE (LQFP100) — enough pins for the touch display, the button matrix, and FDCAN without fighting over alternate functions. The wheel talks to the base over CAN, using the TCAN332G transceiver. Stackup Signal / PWR/ GND/ Signal. Nothing exotic, but the ground plane sits directly over the bottom signal layer, which gives every fast signal a clean return path right beneath it. That mattered most for two things: CANH/CANL — routed as a differential pair, tight and short, transceiver right at the connector. USB — the two datalines D+, D- are routed as a differential pair, so they need a clean path to ground. What’s next Fabrication. Gerbers are generated, BOM is assembled, and the whole project is under Git now. Then assembly, then the part where I find out what I got wrong....
|
1793148443.5531788
|
1793753243.5531788
|
|
33334
|
Untitled by @tim_kopeszky | Stardance
|
tim_kopeszky
|
0
|
3.39
|
0
|
[]
|
[{"post_id": 25804, "ts": "202 [{"post_id": 25804, "ts": "2026-07-10T08:32:37Z", "hours": 3.3906, "text": "PartSync Devlog #0 The Task PartSync is a database program that automatically imports order CSV files from DigiKey into a local database — so you always know which parts you actually have at home before starting your next project. Why Anyone who orders electronics components regularly knows the problem: you buy parts for one project, some leftovers end up in a bin, and a few months later you have no idea what’s actually in stock. PartSync solves this by turning your DigiKey order history into a searchable local inventory. How it works (so far) Backend: Flask + SQLite- DigiKey API v4 integration with full OAuth2 authentication flow- CSV import pipeline that parses DigiKey order exports and matches them against the DigiKey product API to pull full part details (description, datasheet, footprint, etc.)- Local database stores everything so lookups don’t need to hit the API every time ##Progress ✅ OAuth2 token flow (including refresh) working end-to-end 🔄 CSV import → product detail matching 🔄 Search/BOM frontend"}]...
|
Title: Untitled by @tim_kopeszky | Stardance
Devl Title: Untitled by @tim_kopeszky | Stardance
Devlogs:
PartSync Devlog #0 The Task PartSync is a database program that automatically imports order CSV files from DigiKey into a local database — so you always know which parts you actually have at home before starting your next project. Why Anyone who orders electronics components regularly knows the problem: you buy parts for one project, some leftovers end up in a bin, and a few months later you have no idea what’s actually in stock. PartSync solves this by turning your DigiKey order history into a searchable local inventory. How it works (so far) Backend: Flask + SQLite- DigiKey API v4 integration with full OAuth2 authentication flow- CSV import pipeline that parses DigiKey order exports and matches them against the DigiKey product API to pull full part details (description, datasheet, footprint, etc.)- Local database stores everything so lookups don’t need to hit the API every time ##Progress ✅ OAuth2 token flow (including refresh) working end-to-end 🔄 CSV import → product detail matching 🔄 Search/BOM frontend...
|
1793483550.976024
|
1794088350.976024
|
|
6660
|
My awesome macropad! by @tim_foil | Stardance
|
tim_foil
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @tim_foil | Stardan Title: My awesome macropad! by @tim_foil | Stardance...
|
1793188353.1142707
|
1793793153.1142707
|
|
10264
|
DynDNS by @tim08 | Stardance
|
tim08
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: DynDNS by @tim08 | Stardance
|
1793156053.1725204
|
1793760853.1725204
|
|
2161
|
Minecraft Launcher by @tilstoermer | Stardance
|
tilstoermer
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Minecraft Launcher by @tilstoermer | Starda Title: Minecraft Launcher by @tilstoermer | Stardance...
|
1793414881.1150663
|
1794019681.1150663
|
|
8525
|
My awesome macropad! by @tillus | Stardance
|
tillus
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @tillus | Stardance
|
1793411508.2376857
|
1794016308.2376857
|
|
8529
|
fishin by @tillus | Stardance
|
tillus
|
0
|
0.52
|
0
|
[]
|
[{"post_id": 4255, "ts": "2026 [{"post_id": 4255, "ts": "2026-06-07T14:38:27Z", "hours": 0.5228, "text": "I was re-exploring an iOS Metal project I worked on a few weeks ago. I want to use it as a starting point to create a game based on procedural animations like in this YouTube video: https://www.youtube.com/watch?v=qlfh_rv6khY"}]...
|
Title: fishin by @tillus | Stardance
Devlogs:
I w Title: fishin by @tillus | Stardance
Devlogs:
I was re-exploring an iOS Metal project I worked on a few weeks ago. I want to use it as a starting point to create a game based on procedural animations like in this YouTube video: https://www.youtube.com/watch?v=qlfh_rv6khY...
|
1793386151.4776037
|
1793990951.4776037
|
|
13619
|
tourcraft by @tillus | Stardance
|
tillus
|
0
|
1.18
|
0
|
[]
|
[{"post_id": 6990, "ts": "2026 [{"post_id": 6990, "ts": "2026-06-11T18:48:52Z", "hours": 0.6506, "text": "I did some UI improvements and added Apple Private Cloud Compute Capabilities to enable the use of advanced Apple Intelligence features."}, {"post_id": 5795, "ts": "2026-06-09T18:32:14Z", "hours": 0.5317, "text": "Today I created the basic structure of the home view."}]...
|
Title: tourcraft by @tillus | Stardance
Devlogs:
Title: tourcraft by @tillus | Stardance
Devlogs:
Today I created the basic structure of the home view.
I did some UI improvements and added Apple Private Cloud Compute Capabilities to enable the use of advanced Apple Intelligence features....
|
1793267264.901789
|
1793872064.901789
|
|
61812
|
My own site! by @tilen_pavlin | Stardance
|
tilen_pavlin
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @tilen_pavlin | Stardance
|
1793040869.4910116
|
1793645669.4910116
|
|
69098
|
project generator by @tile308217 | Stardance
|
tile308217
|
0
|
15.2
|
0
|
[]
|
[{"post_id": 78740, "ts": "202 [{"post_id": 78740, "ts": "2026-10-11T13:26:30Z", "hours": 15.2044, "text": "A desktop app that generate book for Android app"}]...
|
Title: project generator by @tile308217 | Stardanc Title: project generator by @tile308217 | Stardance
Devlogs:
A desktop app that generate book for Android app...
|
1793472521.937258
|
1794336521.937258
|
|
20299
|
My first slack bot! by @tikor2009 | Stardance
|
tikor2009
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @tikor2009 | Stardan Title: My first slack bot! by @tikor2009 | Stardance...
|
1793173995.486537
|
1793778795.486537
|
|
10606
|
My first slack bot! by @tikkiiiii | Stardance
|
tikkiiiii
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @tikkiiiii | Stardan Title: My first slack bot! by @tikkiiiii | Stardance...
|
1793332249.933391
|
1793937049.933391
|
|
62811
|
My first slack bot! by @tika_K | Stardance
|
tika_K
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @tika_K | Stardance
|
1793047806.6490138
|
1793652606.6490138
|
|
63239
|
alarm clock - light reaction game by @tika_K | Sta alarm clock - light reaction game by @tika_K | Stardance...
|
tika_K
|
0
|
4.59
|
0
|
[]
|
[{"post_id": 79549, "ts": "202 [{"post_id": 79549, "ts": "2026-10-14T15:44:35Z", "hours": 1.6153, "text": "I’m trying to make my alarm clock a game! You wake up your alarm goes off but if you want to stop it you have to press the buttons that light up as fast as you can"}, {"post_id": 72773, "ts": "2026-09-23T18:36:04Z", "hours": 1.0144, "text": "learning how to use kicad"}, {"post_id": 72666, "ts": "2026-09-23T13:46:23Z", "hours": 1.9575, "text": "I am making a clock into a game"}]...
|
Title: alarm clock - light reaction game by @tika_ Title: alarm clock - light reaction game by @tika_K | Stardance
Devlogs:
I am making a clock into a game
learning how to use kicad
I’m trying to make my alarm clock a game! You wake up your alarm goes off but if you want to stop it you have to press the buttons that light up as fast as you can...
|
1793051256.974137
|
1793656056.974137
|
|
70840
|
how fast can you hop? by @tika_K | Stardance
|
tika_K
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: how fast can you hop? by @tika_K | Stardanc Title: how fast can you hop? by @tika_K | Stardance...
|
1793307126.050791
|
1793911926.050791
|
|
70841
|
escape room python text story!! by @tika_K | Stard escape room python text story!! by @tika_K | Stardance...
|
tika_K
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-23T21:13:17Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a text story escape room with python, this is my first python project so i’m pretty proud. It only works if you type the correct words that are given so good luck", "repo": "https://github.com/tikakerckenaere-debug/folktale_game./blob/main/escaperoom.PY", "demo": "https://pym.dev/p/2xky5/"}]...
|
[{"post_id": 82088, "ts": "202 [{"post_id": 82088, "ts": "2026-10-23T20:21:47Z", "hours": 0.3528, "text": "finished!!! for now"}, {"post_id": 81620, "ts": "2026-10-21T19:50:20Z", "hours": 0.9897, "text": "I fixed the problem and learned how to use loops in python! I think i finished the game , or like the outlines and it should work but i shall test it tomorrow to find anything to fix"}, {"post_id": 81570, "ts": "2026-10-21T18:28:29Z", "hours": 2.5494, "text": "So i typed the text i wrote on a paper at school but there’s a problem: when you finish room red button blue or red i typed in the program room == “red” thinking it would go on and say the text again from room red but it doesn’t ill fix it next time i work on it"}]...
|
Title: escape room python text story!! by @tika_K Title: escape room python text story!! by @tika_K | Stardance
Devlogs:
So i typed the text i wrote on a paper at school but there’s a problem: when you finish room red button blue or red i typed in the program room == “red” thinking it would go on and say the text again from room red but it doesn’t ill fix it next time i work on it
I fixed the problem and learned how to use loops in python! I think i finished the game , or like the outlines and it should work but i shall test it tomorrow to find anything to fix
finished!!! for now
Ships:
I made a text story escape room with python, this is my first python project so i’m pretty proud. It only works if you type the correct words that are given so good luck...
|
1793540861.2490213
|
1793627261.2490213
|
|
71030
|
flying cats by @tika_K | Stardance
|
tika_K
|
0
|
4.35
|
0
|
[]
|
[{"post_id": 82251, "ts": "202 [{"post_id": 82251, "ts": "2026-10-24T12:06:20Z", "hours": 1.2197, "text": "So now we’ve got the welcome page and the top bar thingy with info now i’ll figure out how to the time and maybe the weather thingy live and then we’ll make more windows or something yay!"}, {"post_id": 82087, "ts": "2026-10-23T20:20:13Z", "hours": 3.1256, "text": "An os web with my funk personalisation, I learned how to use certain things in html i changed the text style how to add pictures, videos a song and more style things and like text thingy’s"}]...
|
Title: flying cats by @tika_K | Stardance
Devlogs Title: flying cats by @tika_K | Stardance
Devlogs:
An os web with my funk personalisation, I learned how to use certain things in html i changed the text style how to add pictures, videos a song and more style things and like text thingy’s
So now we’ve got the welcome page and the top bar thingy with info now i’ll figure out how to the time and maybe the weather thingy live and then we’ll make more windows or something yay!...
|
1793501476.2388303
|
1794106276.2388303
|
|
69766
|
website by @tijeshudit | Stardance
|
tijeshudit
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: website by @tijeshudit | Stardance
|
1792857369.6925619
|
1793462169.6925619
|
|
49515
|
A money budgetting and tracking app by @tijani | S A money budgetting and tracking app by @tijani | Stardance...
|
tijani
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: A money budgetting and tracking app by @tij Title: A money budgetting and tracking app by @tijani | Stardance...
|
1793289073.3207376
|
1793893873.3207376
|
|
19961
|
AI stuff by @tigerlion0502 | Stardance
|
tigerlion0502
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: AI stuff by @tigerlion0502 | Stardance
|
1793537760.2940285
|
1794142560.2940285
|
|
8517
|
Untitled project by @tigerjdeng_stardance | Starda Untitled project by @tigerjdeng_stardance | Stardance...
|
tigerjdeng_stardance
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @tigerjdeng_stardance | Title: Untitled project by @tigerjdeng_stardance | Stardance...
|
1793314301.579914
|
1793919101.579914
|
|
8364
|
Instagram Recipe Lister by @tigane_guelloul | Star Instagram Recipe Lister by @tigane_guelloul | Stardance...
|
tigane_guelloul
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Instagram Recipe Lister by @tigane_guelloul Title: Instagram Recipe Lister by @tigane_guelloul | Stardance...
|
1793184500.0877764
|
1793789300.0877764
|
|
22832
|
Frictionless by @tiffanyy | Stardance
|
tiffanyy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @tiffanyy | Stardance
|
1793134113.328266
|
1793738913.328266
|
|
20779
|
My very own WebOS by @tiffany | Stardance
|
tiffany
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @tiffany | Stardance
|
1793353782.9064412
|
1793958582.9064412
|
|
46845
|
My awesome macropad! by @tiffanee_buffalo | Starda My awesome macropad! by @tiffanee_buffalo | Stardance...
|
tiffanee_buffalo
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @tiffanee_buffalo | Title: My awesome macropad! by @tiffanee_buffalo | Stardance...
|
1793155890.1055424
|
1793760690.1055424
|
|
46847
|
School Planner by @tiffanee_buffalo | Stardance
|
tiffanee_buffalo
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: School Planner by @tiffanee_buffalo | Stard Title: School Planner by @tiffanee_buffalo | Stardance...
|
1793155898.7953656
|
1793760698.7953656
|
|
16177
|
My awesome macropad! by @tienminh21109 | Stardance
|
tienminh21109
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @tienminh21109 | St Title: My awesome macropad! by @tienminh21109 | Stardance...
|
1793523385.1344304
|
1794128185.1344304
|
|
72345
|
WORLDCHRONICLE by @tibbx | Stardance
|
tibbx
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: WORLDCHRONICLE by @tibbx | Stardance
|
1793450827.782328
|
1794055627.782328
|
|
15471
|
My awesome macropad! by @tiarashah | Stardance
|
tiarashah
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @tiarashah | Starda Title: My awesome macropad! by @tiarashah | Stardance...
|
1793314393.0686176
|
1793919193.0686176
|
|
16489
|
Pico WH Regular and Mecanum Wheeled Robot by @tiar Pico WH Regular and Mecanum Wheeled Robot by @tiara_kothari | Stardance...
|
tiara_kothari
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Pico WH Regular and Mecanum Wheeled Robot b Title: Pico WH Regular and Mecanum Wheeled Robot by @tiara_kothari | Stardance...
|
1793292690.3524814
|
1793897490.3524814
|