|
6392
|
My first slack bot! by @twinx | Stardance
|
twinx
|
1
|
1.29
|
4
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-11T02:42:43Z", "hours": 1.0, "multiplier": 3.34, "payout": 4, "blessing": "neutral", "text": "I made a slack bot using JavaScript. The challenging part was to find api that are available for free and without any login. To test my bot you can use /y-help in slack to get a help msg from the bot.", "repo": "https://github.com/Philast-015/Bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0BBJCZ79RN"}]...
|
[{"post_id": 9306, "ts": "2026 [{"post_id": 9306, "ts": "2026-06-15T16:57:44Z", "hours": 0.2883, "text": "Made few changes in README.md that helps user read it more clearly and re-shiping because previous one got rejected due to demo url."}, {"post_id": 6582, "ts": "2026-06-11T01:49:25Z", "hours": 0.5919, "text": "Added more commands such as coin-flip , random choice , jokes , quotes , cat-facts .etc"}, {"post_id": 1501, "ts": "2026-06-03T15:57:46Z", "hours": 0.5175, "text": "Made 3 commands i.e. status , art and joke"}]...
|
Title: My first slack bot! by @twinx | Stardance
Title: My first slack bot! by @twinx | Stardance
Devlogs:
Made 3 commands i.e. status , art and joke
Added more commands such as coin-flip , random choice , jokes , quotes , cat-facts .etc
Made few changes in README.md that helps user read it more clearly and re-shiping because previous one got rejected due to demo url.
Ships:
I made a slack bot using JavaScript. The challenging part was to find api that are available for free and without any login. To test my bot you can use /y-help in slack to get a help msg from the bot....
|
1792839201.4774635
|
1792925601.4774635
|
|
10339
|
The Knight by @coolRitvik | Stardance
|
coolRitvik
|
0
|
5.47
|
0
|
[]
|
[{"post_id": 9319, "ts": "2026 [{"post_id": 9319, "ts": "2026-06-15T17:12:59Z", "hours": 5.4736, "text": "(Almost) Finished Movement, Camera Following & Currently Working on a Combat System + NPC Behavior Movement is almost completely done, I only need to add a jump motion (which hasn’t been necessary yet so I decided to focus on other things) The Camera following system also took a while and a bit of debugging since I’ve never really tried to make a full 3d 1st person game in unity before, but now it works. Also I am trying to adjust the sensitivity levels for the camera rotation so that it feels right so it would be appreciated if you could let me know whether the sensitivity in this video feels right (although as it gets closer to shipping I’ll probably have it be adjustable). As you can also see in the video I made a terrain and it was my first time doing it, so right now its mostly plain (and there are no structures yet). My attempts at UI so far really only involve the game pause screen that you can see because I want to wait till I spend some time on the aesthetics of the game and the branding to fully develop the UI. I am now working on the combat system; if you saw in the video the mace the character was holding moved back and forth a bit, which was my attempt at a combat system (spoiler alert: it did not work). I am still trying to make it work in a system where the player drags and holds a mouse click and then their weapon follows the mouse, to make a more interactive combat system and experience. I am trying to add NPC behavior too into the game, which is why you can see another soldier on the map, but I am just getting started so it doesn’t do anything yet. Specifically, I’m going to start with hostile NPC behavior. You can also see a very low quality screenshot of a 3d character I was attempting to make using blender (the assets you see in the video are from the Unity store that I found and will hopefully only be placeholders till I make some of my own). However, as trying to make some space on my computer’s storage, this file was accidentally lost forever so all I have to show for it is the screenshot from lapse :( Now that I’ve done it once though, hopefully the next time will be much easier (and faster)."}]...
|
Title: The Knight by @coolRitvik | Stardance
Devl Title: The Knight by @coolRitvik | Stardance
Devlogs:
(Almost) Finished Movement, Camera Following & Currently Working on a Combat System + NPC Behavior Movement is almost completely done, I only need to add a jump motion (which hasn’t been necessary yet so I decided to focus on other things) The Camera following system also took a while and a bit of debugging since I’ve never really tried to make a full 3d 1st person game in unity before, but now it works. Also I am trying to adjust the sensitivity levels for the camera rotation so that it feels right so it would be appreciated if you could let me know whether the sensitivity in this video feels right (although as it gets closer to shipping I’ll probably have it be adjustable). As you can also see in the video I made a terrain and it was my first time doing it, so right now its mostly plain (and there are no structures yet). My attempts at UI so far really only involve the game pause screen that you can see because I want to wait till I spend some time on the aesthetics of the game and the branding to fully develop the UI. I am now working on the combat system; if you saw in the video the mace the character was holding moved back and forth a bit, which was my attempt at a combat system (spoiler alert: it did not work). I am still trying to make it work in a system where the player drags and holds a mouse click and then their weapon follows the mouse, to make a more interactive combat system and experience. I am trying to add NPC behavior too into the game, which is why you can see another soldier on the map, but I am just getting started so it doesn’t do anything yet. Specifically, I’m going to start with hostile NPC behavior. You can also see a very low quality screenshot of a 3d character I was attempting to make using blender (the assets you see in the video are from the Unity store that I found and will hopefully only be placeholders till I make some of my own). However, as trying to make some space on my computer’s storage, this file was accidentally lost forever so all I have to show for it is the screenshot from lapse :( Now that I’ve done it once though, hopefully the next time will be much easier (and faster)....
|
1792903946.6418157
|
1793767946.6418157
|
|
18252
|
Daily Compliment Generator by @sriyank | Stardance
|
sriyank
|
0
|
1.82
|
0
|
[]
|
[{"post_id": 9330, "ts": "2026 [{"post_id": 9330, "ts": "2026-06-15T17:27:06Z", "hours": 1.025, "text": "I added a time and i made notifications appear"}, {"post_id": 8889, "ts": "2026-06-14T20:04:13Z", "hours": 0.7919, "text": "So basicly I am starting on a new project where i create a daily compliment generator and after pondering for hours in my sleep I came across the idea of displaying the compliments in a phone so i started on creating the phone . I also made it so when you click the dynamic ilsand something happens."}]...
|
Title: Daily Compliment Generator by @sriyank | St Title: Daily Compliment Generator by @sriyank | Stardance
Devlogs:
So basicly I am starting on a new project where i create a daily compliment generator and after pondering for hours in my sleep I came across the idea of displaying the compliments in a phone so i started on creating the phone . I also made it so when you click the dynamic ilsand something happens.
I added a time and i made notifications appear...
|
1792572836.2529738
|
1793177636.2529738
|
|
18041
|
columbus by @sivaprakashkrp | Stardance
|
sivaprakashkrp
|
1
|
3.0
|
36
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T11:49:38Z", "hours": 3.0, "multiplier": 12.09, "payout": 36, "blessing": "neutral", "text": "I worked on columbus which is a GUI like TUI file manager. I worked on implementing custom colour themes in columbus. With that, I refactored some code, fixed some bugs and released the stable version of columbus.", "repo": "https://github.com/sivaprakashkrp/columbus", "demo": "https://github.com/sivaprakashkrp/columbus/releases/latest"}]...
|
[{"post_id": 9333, "ts": "2026 [{"post_id": 9333, "ts": "2026-06-15T17:34:34Z", "hours": 2.1806, "text": "Implemented a way to customize color theme through a color_theme.toml file. Fixed some bugs that caused compilation errors in Linux. Added columbus to the awesome-ratatui list repository. Released 2 move versions of columbus in crates.io because the first release had a bug. Released the latest version to the AUR."}, {"post_id": 8121, "ts": "2026-06-13T15:43:04Z", "hours": 0.7953, "text": "Added “/” to the end of directory names in the Explorer. Added confirmation for delete feature. Refactored some old code."}]...
|
Title: columbus by @sivaprakashkrp | Stardance
De Title: columbus by @sivaprakashkrp | Stardance
Devlogs:
Added “/” to the end of directory names in the Explorer. Added confirmation for delete feature. Refactored some old code.
Implemented a way to customize color theme through a color_theme.toml file. Fixed some bugs that caused compilation errors in Linux. Added columbus to the awesome-ratatui list repository. Released 2 move versions of columbus in crates.io because the first release had a bug. Released the latest version to the AUR.
Ships:
I worked on columbus which is a GUI like TUI file manager. I worked on implementing custom colour themes in columbus. With that, I refactored some code, fixed some bugs and released the stable version of columbus....
|
1792839208.1063578
|
1792925608.1063578
|
|
5273
|
Chill Trin Ride by @Lol123rl | Stardance
|
Lol123rl
|
0
|
0.29
|
0
|
[]
|
[{"post_id": 934, "ts": "2026- [{"post_id": 934, "ts": "2026-06-02T18:04:15Z", "hours": 0.2872, "text": "Bilding a train game"}]...
|
Title: Chill Trin Ride by @Lol123rl | Stardance
D Title: Chill Trin Ride by @Lol123rl | Stardance
Devlogs:
Bilding a train game...
|
1792749028.9370568
|
1793353828.9370568
|
|
18267
|
My very own WebOS by @zak_books1 | Stardance
|
zak_books1
|
1
|
2.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T18:03:20Z", "hours": 2.0, "multiplier": 1.64, "payout": 3, "blessing": "neutral", "text": "i made a os that can be run in the web", "repo": "https://github.com/zakbooks1/QWERTY-OS", "demo": "https://qwerty-os.vercel.app/"}]...
|
[{"post_id": 9342, "ts": "2026 [{"post_id": 9342, "ts": "2026-06-15T17:54:03Z", "hours": 0.4083, "text": "I’m finally done"}, {"post_id": 8926, "ts": "2026-06-14T20:55:47Z", "hours": 0.7894, "text": "changed the style from mac to windows xp"}, {"post_id": 8850, "ts": "2026-06-14T18:35:34Z", "hours": 0.8056, "text": "just got a start screen up"}]...
|
Title: My very own WebOS by @zak_books1 | Stardanc Title: My very own WebOS by @zak_books1 | Stardance
Devlogs:
just got a start screen up
changed the style from mac to windows xp
I’m finally done
Ships:
i made a os that can be run in the web...
|
1792850018.6100113
|
1792936418.6100113
|
|
18071
|
WinSentry by @Sgattix | Stardance
|
Sgattix
|
1
|
10.0
|
137
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T18:08:39Z", "hours": 10.0, "multiplier": 14.33, "payout": 137, "blessing": "neutral", "text": "Shipped: WinSentry v1.0 (Rust) Windows loves to treat power users like guests on their own hardware. Despite running an i7-12700K and 32GB of DDR5, I was sick of locked UI threads, disappearing taskbar icons, and silent disk-space bloating. So, I spent the last few hours building WinSentry—a lightweight, native Windows daemon built in Rust to force the OS to be clean, stable, and responsive. What it does: The 300ms UI Panic Button: A low-level global keyboard hook (Ctrl + Alt + W) that forcefully kills explorer.exe, deletes the corrupted IconCache.db file while the thread is dead, and instantly spawns a fresh shell instance. Frozen taskbars fixed instantly. Automated System Debloater: A highly optimized background runner that wakes up every 30 minutes to sweep system-generated trash paths (%TEMP%, crash dumps) without locking active files. Safe Developer Staging Queue: An on-demand CLI engine (winsentry –scan) that recursively walks user-specified workspace paths to look for massive black holes like node_modules and pycache . It stages them in a local queue.json file so you can safely review and approve the purge via winsentry –purge. Centralized Config: Everything is fully customizable via %APPDATA%/WinSentry/config.toml. Performance Profiles (Zero Bloat): Because this was built in Rust to combat OS sluggishness, it has a completely invisible footprint: Idle: 0% CPU | 2.4MB RAM (Sits quietly listening for the hotkey message loop). Peak Scan/Discovery Phase: Max 10% CPU | 5MB RAM (Even while recursively scanning thousands of developer subdirectories). Built with embedded UAC manifest integration so it automatically handles the administrative privileges required to clean up system directories right out of the box. Time to stop waiting for the OS.", "repo": "https://github.com/Sgattix/winsentry", "demo": "https://github.com/Sgattix/WinSentry/releases"}]...
|
[{"post_id": 9348, "ts": "2026 [{"post_id": 9348, "ts": "2026-06-15T18:03:32Z", "hours": 3.7375, "text": "It is finally done. After 3 hours and 40 minutes, WinSentry is complete, fully optimized, and running flawlessly. The final block of development focused entirely on the user-controlled workspace clearing engine and rigorous resource profiling. The Final Piece: The Safe Developer Staging Queue The automated system janitor is great for temp folders, but developer bloat like node_modules or pycache requires absolute user safety. How it works: I implemented a high-speed, sequential directory traversal engine. When triggered on-demand via the CLI (winsentry –scan), the tool walks through user-specified workspace paths looking for target directory names defined in the config. The Guardrail: Instead of deleting anything, the tool calculates the total directory size and flushes the data to a local state file inside %APPDATA%/WinSentry/queue.json. The Interactive Review: The user is notified via the terminal that bloat has been discovered. Running winsentry –purge loads the JSON queue and gives the user an interactive, explicit review prompt to check boxes or type all to confirm deletion. Absolute control, zero risk of accidental data loss. Production Performance Benchmarks Since this tool was built to fight Windows sluggishness, it could not afford to be heavy. Running a fast compiled systems language like Rust paid off massively. Here are the real-world metrics monitored via Windows Task Manager: Idle Footprint: 0% CPU and 0.9MB of RAM. It sits completely dormant in the background, listening for the global hotkey message loop and waiting for the 30-minute system interval. Peak Scan & Discovery Footprint: Maximum 10% CPU usage and a peak of 5MB of RAM while actively traversing thousands of subdirectories and calculating file sizes during a deep disk scan. On an NVMe and DDR5 setup, the scan completes in seconds, meaning the system never hitches and the user never has to wait for the utility. READY TO SHIP!"}, {"post_id": 8751, "ts": "2026-06-14T15:37:52Z", "hours": 3.8133, "text": "Two more hours in, and WinSentry now has a fully functioning debloating engine and a robust multi-threaded architecture. What’s new I ripped out the real-time event watcher and replaced it with a task that executes once every 30 minutes. It sleeps completely in between cycles. Performance dropped immediately back to 0% CPU on idle, achieving the exact “invisible” footprint a performance tool needs. Reworked Threading: Thread safety is locked down. The core engine now cleanly separates the global UI hotkey listener thread from the background debloating loop, ensuring a heavy system cleanup never hitches or delays the 300ms “Panic Button” response. System Debloater: The 30-minute janitor thread now actively sweeps system-generated trash paths (configured via %APPDATA%/WinSentry/config.toml). It safely bypasses active, locked files while cleanly executing deep purges on dead telemetry and crash dumps. Robust Logging & Documentation: Implemented a lightweight, structured local logging system to track exactly how many megabytes of ghost space are reclaimed over time. I also laid down the full README.md. Next Up Implementing the User-Specified Safe Queue (queue.json). I’ll be writing the directory traversal logic to detect massive developer black holes (node_modules, pycache ) and scaffolding the manual CLI review step so users can safely approve massive space reclamation."}, {"post_id": 8168, "ts": "2026-06-13T16:42:58Z", "hours": 2.1289, "text": "Windows has a bad habit of treating the user like a guest on their own machine. Despite running an i7-12700K, 32GB of DDR5, and a fast NVMe, I still run into locked UI threads, disappearing taskbar icons, and a persistent “waiting for the OS” feeling. Instead of dealing with it, I’m building WinSentry—a lightweight, native Windows daemon written in Rust designed to force the OS to be responsive and clean. What I Built (The First 2 Hours) Instead of cutting corners, I spent the first block of development setting up a bulletproof core architecture: The 300ms Panic Button: Implemented a low-level global keyboard hook using the Win32 API (RegisterHotKey). Pressing Ctrl + Alt + W forcefully kills explorer.exe, wipes the easily-corrupted local %localappdata%\\IconCache.db file while the thread is dead, clears the icons registry at HKEY_CURRENT_USER \\ Software \\ Classes \\ .png and instantly spawns a clean shell instance. Configuration System: Designed a centralized configuration system that initializes inside a specified directory. Users can customize their hotkeys and define exact target paths. Aggressive Binary Optimization: The background daemon sits completely idle at 0% CPU and takes up less than 1MB of RAM, making it practically invisible to the system. Next Up Moving on to the storage engine: Implementing ReadDirectoryChangesW for zero-overhead, real-time event tracking on high-bloat system folders (%TEMP%, crash dumps). Building the staging queue pipeline (queue.json) to safely scaffold and manually review massive developer black holes like node_modules and pycache before purging them."}]...
|
Title: WinSentry by @Sgattix | Stardance
Devlogs: Title: WinSentry by @Sgattix | Stardance
Devlogs:
Windows has a bad habit of treating the user like a guest on their own machine. Despite running an i7-12700K, 32GB of DDR5, and a fast NVMe, I still run into locked UI threads, disappearing taskbar icons, and a persistent “waiting for the OS” feeling. Instead of dealing with it, I’m building WinSentry—a lightweight, native Windows daemon written in Rust designed to force the OS to be responsive and clean. What I Built (The First 2 Hours) Instead of cutting corners, I spent the first block of development setting up a bulletproof core architecture: The 300ms Panic Button: Implemented a low-level global keyboard hook using the Win32 API (RegisterHotKey). Pressing Ctrl + Alt + W forcefully kills explorer.exe, wipes the easily-corrupted local %localappdata%\IconCache.db file while the thread is dead, clears the icons registry at HKEY_CURRENT_USER \ Software \ Classes \ .png and instantly spawns a clean shell instance. Configuration System: Designed a centralized configuration system that initializes inside a specified directory. Users can customize their hotkeys and define exact target paths. Aggressive Binary Optimization: The background daemon sits completely idle at 0% CPU and takes up less than 1MB of RAM, making it practically invisible to the system. Next Up Moving on to the storage engine: Implementing ReadDirectoryChangesW for zero-overhead, real-time event tracking on high-bloat system folders (%TEMP%, crash dumps). Building the staging queue pipeline (queue.json) to safely scaffold and manually review massive developer black holes like node_modules and pycache before purging them.
Two more hours in, and WinSentry now has a fully functioning debloating engine and a robust multi-threaded architecture. What’s new I ripped out the real-time event watcher and replaced it with a task that executes once every 30 minutes. It sleeps completely in between cycles. Performance dropped immediately back to 0% CPU on idle, achieving the exact “invisible” footprint a performance tool needs. Reworked Threading: Thread safety is locked down. The core engine now cleanly separates the global UI hotkey listener thread from the background debloating loop, ensuring a heavy system cleanup never hitches or delays the 300ms “Panic Button” response. System Debloater: The 30-minute janitor thread now actively sweeps system-generated trash paths (configured via %APPDATA%/WinSentry/config.toml). It safely bypasses active, locked files while cleanly executing deep purges on dead telemetry and crash dumps. Robust Logging & Documentation: Implemented a lightweight, structured local logging system to track exactly how many megabytes of ghost space are reclaimed over time. I also laid down the full README.md. Next Up Implementing the User-Specified Safe Queue (queue.json). I’ll be writing the directory traversal logic to detect massive developer black holes (node_modules, pycache ) and scaffolding the manual CLI review step so users can safely approve massive space reclamation.
It is finally done. After 3 hours and 40 minutes, WinSentry is complete, fully optimized, and running flawlessly. The final block of development focused entirely on the user-controlled workspace clearing engine and rigorous resource profiling. The Final Piece: The Safe Developer Staging Queue The automated system janitor is great for temp folders, but developer bloat like node_modules or pycache requires absolute user safety. How it works: I implemented a high-speed, sequential directory traversal engine. When triggered on-demand via the CLI (winsentry –scan), the tool walks through user-specified workspace paths looking for target directory names defined in the config. The Guardrail: Instead of deleting anything, the tool calculates the total directory size and flushes the data to a local state file inside %APPDATA%/WinSentry/queue.json. The Interactive Review: The user is notified via the terminal that bloat has been discovered. Running winsentry –purge loads the JSON queue and gives the user an interactive, explicit review prompt to check boxes or type all to confirm deletion. Absolute control, zero risk of accidental data loss. Production Performance Benchmarks Since this tool was built to fight Windows sluggishness, it could not afford to be heavy. Running a fast compiled systems language like Rust paid off massively. Here are the real-world metrics monitored via Windows Task Manager: Idle Footprint: 0% CPU and 0.9MB of RAM. It sits completely dormant in the background, listening for the global hotkey message loop and waiting for the 30-minute system interval. Peak Scan & Discovery Footprint: Maximum 10% CPU usage and a peak of 5MB of RAM while actively traversing thousands of subdirectories and calculating file sizes during a deep disk scan. On an NVMe and DDR5 setup, the scan completes in seconds, meaning the system never hitches and the user never has to wait for the utility. READY TO SHIP!
Ships:
Shipped: WinSentry v1.0 (Rust) Windows loves to treat power users like guests on their own hardware. Despite running an i7-12700K and 32GB of DDR5, I was sick of locked UI threads, disappearing taskbar icons, and silent disk-space bloating. So, I spent the last few hours building WinSentry—a lightweight, native Windows daemon built in Rust to force the OS to be clean, stable, and responsive. What it does: The 300ms UI Panic Button: A low-level global keyboard hook (Ctrl + Alt + W) that forcefully kills explorer.exe, deletes the corrupted IconCache.db file while the thread is dead, and instantly spawns a fresh shell instance. Frozen taskbars fixed instantly. Automated System Debloater: A highly optimized background runner that wakes up every 30 minutes to sweep system-generated trash paths (%TEMP%, crash dumps) without locking active files. Safe Developer Staging Queue: An on-demand CLI engine (winsentry –scan) that recursively walks user-specified workspace paths to look for massive black holes like node_modules and pycache . It stages them in a local queue.json file so you can safely review and approve the purge via winsentry –purge. Centralized Config: Everything is fully customizable via %APPDATA%/WinSentry/config.toml. Performance Profiles (Zero Bloat): Because this was built in Rust to combat OS sluggishness, it has a completely invisible footprint: Idle: 0% CPU | 2.4MB RAM (Sits quietly listening for the hotkey message loop). Peak Scan/Discovery Phase: Max 10% CPU | 5MB RAM (Even while recursively scanning thousands of developer subdirectories). Built with embedded UAC manifest integration so it automatically handles the administrative privileges required to clean up system directories right out of the box. Time to stop waiting for the OS....
|
1792849729.8600655
|
1792936129.8600655
|
|
17639
|
Minecraft Challenge Mod by @timon | Stardance
|
timon
|
1
|
13.0
|
174
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T18:11:10Z", "hours": 13.0, "multiplier": 13.04, "payout": 174, "blessing": "neutral", "text": "I made a Minecraft Challenges Mod with Fabric. You have multiple challegnes such as shared damage among your friends, ice track udner you and more. Additionally you can add a randomizer to your challenge which makes it that every block drop is different from the original one. Try it out with /challenges", "repo": "https://github.com/Facticee/challenges-mod", "demo": "https://modrinth.com/mod/challenge-mod"}]...
|
[{"post_id": 9353, "ts": "2026 [{"post_id": 9353, "ts": "2026-06-15T18:09:27Z", "hours": 2.0, "text": "I finished the Mod! There were a few bugs left, where whe nyou would rejoin, the randomizer wouldnt work but i could fix it pretty easily."}, {"post_id": 8148, "ts": "2026-06-13T16:15:55Z", "hours": 2.0, "text": "I added two new challenges. one is pretty simple. Every time you jump you get a random item dropped to you. mixin into jumpFromGround, grab a random item from the registry and spawn it. (might also have been easier with just giving it to the player but it works for now. i will go into testing later if one has bugs) the second one is the ice trail. you can sneak to toggle it on and off and a 3x3 platform of ice spawns under you wherever you walk. The ice will only replace air blocks and not existing blocks / blockentities. getting the sneak toggle to work was annoying as to mixin into a sneak method didnt work because i couldnt find the right class. ended up using client.options.keyShift.isDown in a client tick event."}, {"post_id": 8027, "ts": "2026-06-13T12:00:35Z", "hours": 2.0, "text": "The first challegne “shared life” is done. The core mechanic is when a player takes damage, everyone else gets the same amount. sounds simple, but it took me quiet a bit to get that right. the method i needed to use is called hurtServer in 26.x, not hurt like every tutorial says (cause of old yarn mappings like alr said in last devlog). @Inject (method = [“hurtServer”], at = [At(“TAIL”)]) private fun onHurtServer(level: ServerLevel, source: DamageSource, amount: Float, cir: CallbackInfoReturnable) { if (!cir.returnValue) return if (ChallengeState.activeChallenge !is SharedLifeChallenge) return val entity = this as? ServerPlayer ?: return if (source.directEntity == null && source.entity == null) return SharedLifeChallenge.onPlayerHurt(entity, amount) } the directEntity == null check is to prevent an infinite loop. When we deal damage to the other players, that would trigger the mixin again. Generic damage (the kind I use to pass the damage to other players) has no entity source so we can filter it out that way."}, {"post_id": 7726, "ts": "2026-06-12T21:53:39Z", "hours": 5.0, "text": "I have been building a challenges mod for minecraft 26.x and the idea is pretty simple. You type /challenges, a menu opens, you pick a challenge and it changes the gameplay. First challenge I am working on is shared life, where damage shared with every player. Getting it running was honestly kind of a pain. 26.x doesnt need yarn mappings anymore since mojang ships unobfuscated now. Which sounds great until you realize nearly every of the classes isnt the same as yarn mappings and nothing matches the (now outdated) tutorials. For example: hurt() is now hurtServer(), GuiGraphics is GuiGraphicsExtractor. I used AI to help look stuff up which sped things up a lot but even that was not always right. I am finished with the Menu and I started with the challenge code."}]...
|
Title: Minecraft Challenge Mod by @timon | Stardan Title: Minecraft Challenge Mod by @timon | Stardance
Devlogs:
I have been building a challenges mod for minecraft 26.x and the idea is pretty simple. You type /challenges, a menu opens, you pick a challenge and it changes the gameplay. First challenge I am working on is shared life, where damage shared with every player. Getting it running was honestly kind of a pain. 26.x doesnt need yarn mappings anymore since mojang ships unobfuscated now. Which sounds great until you realize nearly every of the classes isnt the same as yarn mappings and nothing matches the (now outdated) tutorials. For example: hurt() is now hurtServer(), GuiGraphics is GuiGraphicsExtractor. I used AI to help look stuff up which sped things up a lot but even that was not always right. I am finished with the Menu and I started with the challenge code.
The first challegne “shared life” is done. The core mechanic is when a player takes damage, everyone else gets the same amount. sounds simple, but it took me quiet a bit to get that right. the method i needed to use is called hurtServer in 26.x, not hurt like every tutorial says (cause of old yarn mappings like alr said in last devlog). @Inject (method = [“hurtServer”], at = [At(“TAIL”)]) private fun onHurtServer(level: ServerLevel, source: DamageSource, amount: Float, cir: CallbackInfoReturnable) { if (!cir.returnValue) return if (ChallengeState.activeChallenge !is SharedLifeChallenge) return val entity = this as? ServerPlayer ?: return if (source.directEntity == null && source.entity == null) return SharedLifeChallenge.onPlayerHurt(entity, amount) } the directEntity == null check is to prevent an infinite loop. When we deal damage to the other players, that would trigger the mixin again. Generic damage (the kind I use to pass the damage to other players) has no entity source so we can filter it out that way.
I added two new challenges. one is pretty simple. Every time you jump you get a random item dropped to you. mixin into jumpFromGround, grab a random item from the registry and spawn it. (might also have been easier with just giving it to the player but it works for now. i will go into testing later if one has bugs) the second one is the ice trail. you can sneak to toggle it on and off and a 3x3 platform of ice spawns under you wherever you walk. The ice will only replace air blocks and not existing blocks / blockentities. getting the sneak toggle to work was annoying as to mixin into a sneak method didnt work because i couldnt find the right class. ended up using client.options.keyShift.isDown in a client tick event.
I finished the Mod! There were a few bugs left, where whe nyou would rejoin, the randomizer wouldnt work but i could fix it pretty easily.
Ships:
I made a Minecraft Challenges Mod with Fabric. You have multiple challegnes such as shared damage among your friends, ice track udner you and more. Additionally you can add a randomizer to your challenge which makes it that every block drop is different from the original one. Try it out with /challenges...
|
1792882056.8581257
|
1793746056.8581257
|
|
19132
|
Broke code by @TheShovel | Stardance
|
TheShovel
|
0
|
3.34
|
0
|
[]
|
[{"post_id": 9362, "ts": "2026 [{"post_id": 9362, "ts": "2026-06-15T18:18:03Z", "hours": 3.3381, "text": "hiiii!! basic functionality is done! you can now prompt it, and it will run a free small llm to decide the complexity of the task, and then it will make the actual llm do the task! saves tons of money and stuff ypeeeee gonna work some more on it cuz i actually want to use this. im making something i need right now lmao"}]...
|
Title: Broke code by @TheShovel | Stardance
Devlo Title: Broke code by @TheShovel | Stardance
Devlogs:
hiiii!! basic functionality is done! you can now prompt it, and it will run a free small llm to decide the complexity of the task, and then it will make the actual llm do the task! saves tons of money and stuff ypeeeee gonna work some more on it cuz i actually want to use this. im making something i need right now lmao...
|
1792806729.9889593
|
1793411529.9889593
|
|
14215
|
ReadAloud by @hemvardhanb | Stardance
|
hemvardhanb
|
0
|
0.78
|
0
|
[]
|
[{"post_id": 9368, "ts": "2026 [{"post_id": 9368, "ts": "2026-06-15T18:22:37Z", "hours": 0.7836, "text": "While studying for my finals, and more importantly trying not to sleep while slogging through a textbook, the idea of having it read aloud at the same pace I read came to me. With a quick google search, its clear that the combination of reading and actively listening can boost retention by upwards of 20%. So, this is my project target towards helping students excel! I mainly decided to build it out in the form of an extension and mainly want to actually get it published on the chrome extension store because those are two goals I have never done!"}]...
|
Title: ReadAloud by @hemvardhanb | Stardance
Devl Title: ReadAloud by @hemvardhanb | Stardance
Devlogs:
While studying for my finals, and more importantly trying not to sleep while slogging through a textbook, the idea of having it read aloud at the same pace I read came to me. With a quick google search, its clear that the combination of reading and actively listening can boost retention by upwards of 20%. So, this is my project target towards helping students excel! I mainly decided to build it out in the form of an extension and mainly want to actually get it published on the chrome extension store because those are two goals I have never done!...
|
1792543746.370514
|
1793148546.370514
|
|
9621
|
Isles by @derped1 | Stardance
|
derped1
|
1
|
4.0
|
10
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T19:19:36Z", "hours": 4.0, "multiplier": 2.57, "payout": 10, "blessing": "neutral", "text": "Isles is a small Minecraft plugin I made that generates Skyblock-style islands in a grid, with each player getting their own island. I built it for my SMP because I wanted something my friends and I could play for about a week that felt more interesting than starting another normal vanilla world. I’m honestly proud that it lasted that long, because most of my friends are not as into Minecraft anymore. Even though the plugin is simple, it created a good social environment where people could hang out, trade, bridge to each other, and actually interact instead of everyone splitting off and doing their own thing. The hardest part was probably figuring out island placement. I had to find a good middle ground where the islands were far enough apart to feel separate, but not so far that bridging to friends became annoying. That decision ended up mattering a lot because the whole point of Isles is that every island exists in the same physical world, with a center island connecting everything together. What makes Isles different from normal Skyblock is that it is not just a bunch of isolated islands. Everyone is still in the same world, so you can visit your friends, trade with them, and build connections between islands. My favorite part was not really one specific feature, but just seeing the server turn into a place where my friends could mess around together for a week. I would rather people try Isles with their own friends before voting on it instead of just upvoting or downvoting blindly. It is meant to be judged by how it feels to play socially, not just by looking at the code or the idea from the outside.", "repo": "https://github.com/Derpedyea/Isles", "demo": "https://modrinth.com/plugin/isles"}]...
|
[{"post_id": 9370, "ts": "2026 [{"post_id": 9370, "ts": "2026-06-15T18:26:40Z", "hours": 3.0722, "text": "I made some more changes but it was a while ago so I don’t remember exactly. I made a little wiki and the project is basically done as the server is over so I’m going to ship it. I also made gravel obtainable in the center to allow for more dirt."}, {"post_id": 3444, "ts": "2026-06-06T11:53:10Z", "hours": 0.8689, "text": "I made the basic plugin it has islands that generate in a grid around the center which is an array of “asteroids” with resources that players can pvp and bridge too."}]...
|
Title: Isles by @derped1 | Stardance
Devlogs:
I m Title: Isles by @derped1 | Stardance
Devlogs:
I made the basic plugin it has islands that generate in a grid around the center which is an array of “asteroids” with resources that players can pvp and bridge too.
I made some more changes but it was a while ago so I don’t remember exactly. I made a little wiki and the project is basically done as the server is over so I’m going to ship it. I also made gravel obtainable in the center to allow for more dirt.
Ships:
Isles is a small Minecraft plugin I made that generates Skyblock-style islands in a grid, with each player getting their own island. I built it for my SMP because I wanted something my friends and I could play for about a week that felt more interesting than starting another normal vanilla world. I’m honestly proud that it lasted that long, because most of my friends are not as into Minecraft anymore. Even though the plugin is simple, it created a good social environment where people could hang out, trade, bridge to each other, and actually interact instead of everyone splitting off and doing their own thing. The hardest part was probably figuring out island placement. I had to find a good middle ground where the islands were far enough apart to feel separate, but not so far that bridging to friends became annoying. That decision ended up mattering a lot because the whole point of Isles is that every island exists in the same physical world, with a center island connecting everything together. What makes Isles different from normal Skyblock is that it is not just a bunch of isolated islands. Everyone is still in the same world, so you can visit your friends, trade with them, and build connections between islands. My favorite part was not really one specific feature, but just seeing the server turn into a place where my friends could mess around together for a week. I would rather people try Isles with their own friends before voting on it instead of just upvoting or downvoting blindly. It is meant to be judged by how it feels to play socially, not just by looking at the code or the idea from the outside....
|
1792820966.6701267
|
1792907366.6701267
|
|
8377
|
Nautica API by @xellu | Stardance
|
xellu
|
1
|
26.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T18:37:11Z", "hours": 26.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I’ve updated the Service Manager, including the dependency resolver. These changes include: New lifecycle hook “onSetup”, intended for setting up databases, etc. I’ve mostly added this to split “start servers” and “setup things” all being in onStart. This way the separation between those 2 tasks is clear and helps to eliminate certain race conditions. Toggle switches are now generated automatically Before you had to manually declare a key in a config in onInstall, and then read it in isEnabled, which was just extra boilerplate. So I automated the process in the Service class. “?”, “:after” and “:after?” parameters for dependencies Before this, the boot order was still fragile even with dependencies defined, because the ability to define a dependency, and make it start only AFTER your dependency is initialized wasn’t a thing. Now you can do this by simply appending “:after” to the dependency name. “?” at the end also makes the dependency optional. Few fixes relating to dependency resolution and boot orders HTTP API Got a decently big update as well.. The performance is now up ~70% from previous versions, finally surpassing FastAPI, I’ve achieved this adding an option to disable unnecessary messages from being logged. Which only goes to show how heavy the logging manager I use is, but I doubt I’ll be rewriting it, since the way it is now helps with DX. Response validation using “@HTTP.Responses(…)” and ReplyModels: Before you were able to only validate what’s coming in, but not what’s going out. The validator has a strict mode, which when enabled adds an extra layer of “security”. If strict mode is disabled, the responses are only used for OpenAPI docs generation. Tho the framework may still complain if you’re sending invalid responses. Nested object validation and Require.ListOf Static methods in Reply Since the framework is built on Starlette, you may need to use Starlette’s responses in some cases. OpenAPI Docs generation This was kinda a big thing on my list ever since I realized that I can automatically generate SDKs instead of having to write request calls manually. I also wanted to add a way to expose the docs with an endpoint, but I’m holding off on that. The Package registry & manager were introduced as well. The package registry it itself built on Nautica, and works with the package manager integrated into the Nautica’s CLI. Likewise I’ve started work on the Landing page & docs website for the framework, but I’m putting it off for a bit, because of finals. I’ve also fixed countless bugs, refactored things, and over all made many QoL changes, which helped to make the framework feel more polished. This might be a strange project, since I’m somewhat “reinventing the wheel”, but I really didn’t like the way FastAPI, Flask and other Python HTTP frameworks work. It basically handles ONLY the http part, which is fine, but in bigger projects YOU have to manage everything else around it. When I was building small apps it wasn’t that big of an issue, but it became pretty apparent in bigger projects. The complexity and boilerplate that comes with large projects isn’t something I can handle well, while also having to enforce my own conventions. I made Nautica to fix these issues, and I’d say I succeeded. The boilerplate that’s needed per route is minimal, compared to other frameworks; The package manager adds an intuitive way to add plugins (services, packages), and the service system itself does a lot of the heavy lifting for you, by automatically deciding on the boot order instead of you having to write do it explicitly using imports, etc. In conclusion, Nautica takes away some freedom and in exchange gives you structure, less boilerplate and tools to debug your code, which makes shipping apps easier and faster.", "repo": "https://github.com/xellu/nautica-api", "demo": "https://napm.xellu.xyz/"}]...
|
[{"post_id": 9382, "ts": "2026 [{"post_id": 9382, "ts": "2026-06-15T18:35:53Z", "hours": 0.2822, "text": "A showcase of what Nautica can actually do ~20% faster than FastAPI ( https://github.com/xellu/nautica-api/wiki/Performance-Benchmark ) See Nautica in action: https://napm.xellu.xyz/ ( https://github.com/xellu/nautica-package-manager ) A video demonstration:"}, {"post_id": 9251, "ts": "2026-06-15T15:12:52Z", "hours": 3.4914, "text": "I’ve released v3.2.2, the new things there include: OpenAPI Docs generator Changed expression for nested requirements from nested(...) to {...} Request schemas in errors can be hidden now Added descriptions for commands in help Renamed Reply.IsList() into .asList() Added import aliases for Requirement s in napi These are mostly QoL changes, I made formatting of certain things so it’d be easier to read, use, or to make sense linguistically. I also made it a little bit more secure by giving other developers an option to hide their request schemas in error messages. I’ve also included the new benchmark numbers in the README. OpenAPI Docs generator mostly works now, but it doesn’t expose the docs to /nautica:docs yet, I’m also considering making the endpoint the developer’s concern, and not the framework’s. Surprisingly it wasn’t as hard as i expected it to be, but some weird edge cases were definitely annoying to deal with. Anyways, alongside the updates to the framework itself, I’ve also now documented the new changes made since version 3.0.2 , so they’re now up to date with the latest release (that being 3.2.2). I know it took a while but i was more focused on releasing fixes and updates first. https://github.com/xellu/nautica-api/wiki https://github.com/xellu/nautica-api/compare/3.2.0...3.2.2"}, {"post_id": 7424, "ts": "2026-06-12T11:29:02Z", "hours": 2.5219, "text": "I’ve started work on OpenAPI Docs generator, I’d imagine it’ll take me a while to complete. Anyways I’ve released v3.2, see below for new changes Changelog Improved speed and latency New onSetup hook for services Auto Switch registration for services New Require.ListOf validator Validator support for nested objects Better dependency resolver More on these changes here: post 1 , post 2 And new, undocumented changes include: 7. Moving typeToString into models, from http api (didn’t really make sense to have it there) 8. Added static methods into Reply for starlette responses, these include: Reply.plainText , Reply.html , Reply.stream , Reply.file , Reply.redirect . Known Issues v3.2.0 ’s dependency resolver incorrectly handles the :after parameter, a fix is already available in the branch for version 3.2.1"}, {"post_id": 5590, "ts": "2026-06-09T13:20:22Z", "hours": 3.5031, "text": "I’ve added a few QoL features, those being: Reply Models Before, you could only verify whats coming IN, but not whats coming OUT of the server. Now, you can do that easily: from napi.http import HTTP , Reply , Require , ReplyModel , Error @HTTP.GET () @HTTP.Responses ( ReplyModel ( 200 , str ), ReplyModel ( 400 , Error ), strict = True ) @HTTP.Require () async def hello ( ctx ): if ctx . body . get ( \" hello \" ): raise Error ( 400 , \" No hello \" ) return \" Hello World! \" In this case, the request will go through without an issue, but if, for example, you returned anything other than a string: return 0 The request will fail automatically. This will also be useful for when I add OpenAPI generation, as the generator will have access to the responses. This behavior can be disabled, by setting strict to False. Nested object validation @HTTP.Require(body = {\"hello\": {\"world\": str}) <- This code used to be invalid before. I since added support for nested objects (no depth limit). Automatic Toggle Switch Registration Plugins used to register their own keys in the config, and then setup isEnabled method that would determine if the service should be started or not. To reduce the headache and boilerplate of this approach, Nautica now automatically creates a key with your service’s name under services in config.n3 . If you want your own logic in isEnabled , you can do so by overwriting the method. By doing so you’ll disable the automatic registration and the framework gives you the freedom to do it your way. If you want custom logic AND automatic registration, it can simply be combined by using super().isEnabled() . Require.ListOf(…) I’d say this is a highly useful addition. It does exactly what it sounds like: It checks if all the items in a list match a certain schema. Require . ListOf ( str ) List of just strings Require . ListOf ({ \" hello \" : str }) List of dictionaries Requrie . ListOf ( Require . AnyTypeOf ( str , int )) List of strings and integers"}, {"post_id": 5477, "ts": "2026-06-09T08:37:59Z", "hours": 2.5575, "text": "I’ve been optimizing the framework today, here’s what changed: 1. Massive performance boosts I managed to go from 2279 requests/sec to 3929 , which is 72% increase . After running new benchmarks, I’ve also surpassed FastAPI by ~24% (recorded 3154 requests/sec). I did this by minimizing the amount of logging that is done per request (can be configured). Because my log manager is fairly heavy, this helped a lot. 2. Better dependency resolver The dependency resolver I had for services was okay, but it lacked 2 important features: Optional dependencies and explicit order. The old system was simply: Service.Export(MyPlugin, depends_on=[\"HTTPRouter\"]) Which is fine for simple plugins, but you start doing more complex work, you’ll hit the limits fast. The new system now handles: ? at the end makes the dependency optional :after tells the dependency to start AFTER your plugin, not before. Essentially adds your plugin as the target’s dependency. 3. Split onStart Before, onStart handled both starting database and HTTP servers, bots. Because of this, I’ve decided to split the setup logic and startup logic into 2: onSetup and onStart 4. Other changes I also removed some legacy aliases for methods."}, {"post_id": 4899, "ts": "2026-06-08T14:01:14Z", "hours": 4.65, "text": "Spent almost 5 hours on a navbar, finally figured it out though. The open/close logic on hovering was a nightmare to do. In the end i settled for IDs and an event listener for mouseover . It’s probably one of the worse solutions, but I’m not gonna touch it since it works finally. I also changed the background to something that fits better."}, {"post_id": 4426, "ts": "2026-06-07T19:03:56Z", "hours": 3.8883, "text": "I’ve started work on a web for the framework. For now I only managed to set up the project and make the hero on the landing page, for which I took inspiration from payloadcms and rig.ai The landing page itself was hard to make, since I had to figure out how to structure the grid, and even now it’s not up to my standards."}, {"post_id": 4114, "ts": "2026-06-07T09:41:14Z", "hours": 2.2639, "text": "Nautica Package Registry is Live! napi install mongodb now downloads the package into project plugins and installs any PyPI dependencies automatically. 2 Packages are up already: MongoDB: Adapter for pymongo NAuth: A simple session manager (using Mongo) The registry itself runs on Nautica, with both packages installed https://github.com/xellu/nautica-package-manager https://napm.xellu.xyz/"}, {"post_id": 3635, "ts": "2026-06-06T17:32:12Z", "hours": 2.7833, "text": "Hello y’all. I’m making a framework for backend development, called Nautica. I’m also bundling a package manager, similar to npm/PyPI, to allow people to share their plugins. I’ve started working on this project before Stardance, but this sounds like a good opportunity to get feedback on it. Today’s update notes (v3.1.3): Fixed shell sleeping while in systemd mode Fixed file reading during http requests Fixed package manager connection issues Added commands to list http and websocket endpoints For anyone interested in the specifics, the HTTP part of the API is built on top Starlette. Unlike FastAPI, I made my own request validation system that gives you more freedom, though it may perform worse under load. From the benchmarks I’ve ran, my framework seems to be just a little faster than FastAPI (which is also based on Starlette): FastAPI: 2259 requests/second Nautica: 2271 requests/second ~0.53% faster Though these numbers are a bit dated, and may be off. I’m still working on the package manager, but I’ll post a showcase of that soon. For now, here’s a showcase of how Nautica itself works:"}]...
|
Title: Nautica API by @xellu | Stardance
Devlogs: Title: Nautica API by @xellu | Stardance
Devlogs:
Hello y’all. I’m making a framework for backend development, called Nautica. I’m also bundling a package manager, similar to npm/PyPI, to allow people to share their plugins. I’ve started working on this project before Stardance, but this sounds like a good opportunity to get feedback on it. Today’s update notes (v3.1.3): Fixed shell sleeping while in systemd mode Fixed file reading during http requests Fixed package manager connection issues Added commands to list http and websocket endpoints For anyone interested in the specifics, the HTTP part of the API is built on top Starlette. Unlike FastAPI, I made my own request validation system that gives you more freedom, though it may perform worse under load. From the benchmarks I’ve ran, my framework seems to be just a little faster than FastAPI (which is also based on Starlette): FastAPI: 2259 requests/second Nautica: 2271 requests/second ~0.53% faster Though these numbers are a bit dated, and may be off. I’m still working on the package manager, but I’ll post a showcase of that soon. For now, here’s a showcase of how Nautica itself works:
Nautica Package Registry is Live! napi install mongodb now downloads the package into project plugins and installs any PyPI dependencies automatically. 2 Packages are up already: MongoDB: Adapter for pymongo NAuth: A simple session manager (using Mongo) The registry itself runs on Nautica, with both packages installed https://github.com/xellu/nautica-package-manager https://napm.xellu.xyz/
I’ve started work on a web for the framework. For now I only managed to set up the project and make the hero on the landing page, for which I took inspiration from payloadcms and rig.ai The landing page itself was hard to make, since I had to figure out how to structure the grid, and even now it’s not up to my standards.
Spent almost 5 hours on a navbar, finally figured it out though. The open/close logic on hovering was a nightmare to do. In the end i settled for IDs and an event listener for mouseover . It’s probably one of the worse solutions, but I’m not gonna touch it since it works finally. I also changed the background to something that fits better.
I’ve been optimizing the framework today, here’s what changed: 1. Massive performance boosts I managed to go from 2279 requests/sec to 3929 , which is 72% increase . After running new benchmarks, I’ve also surpassed FastAPI by ~24% (recorded 3154 requests/sec). I did this by minimizing the amount of logging that is done per request (can be configured). Because my log manager is fairly heavy, this helped a lot. 2. Better dependency resolver The dependency resolver I had for services was okay, but it lacked 2 important features: Optional dependencies and explicit order. The old system was simply: Service.Export(MyPlugin, depends_on=["HTTPRouter"]) Which is fine for simple plugins, but you start doing more complex work, you’ll hit the limits fast. The new system now handles: ? at the end makes the dependency optional :after tells the dependency to start AFTER your plugin, not before. Essentially adds your plugin as the target’s dependency. 3. Split onStart Before, onStart handled both starting database and HTTP servers, bots. Because of this, I’ve decided to split the setup logic and startup logic into 2: onSetup and onStart 4. Other changes I also removed some legacy aliases for methods.
I’ve added a few QoL features, those being: Reply Models Before, you could only verify whats coming IN, but not whats coming OUT of the server. Now, you can do that easily: from napi.http import HTTP , Reply , Require , ReplyModel , Error @HTTP.GET () @HTTP.Responses ( ReplyModel ( 200 , str ), ReplyModel ( 400 , Error ), strict = True ) @HTTP.Require () async def hello ( ctx ): if ctx . body . get ( " hello " ): raise Error ( 400 , " No hello " ) return " Hello World! " In this case, the request will go through without an issue, but if, for example, you returned anything other than a string: return 0 The request will fail automatically. This will also be useful for when I add OpenAPI generation, as the generator will have access to the responses. This behavior can be disabled, by setting strict to False. Nested object validation @HTTP.Require(body = {"hello": {"world": str}) <- This code used to be invalid before. I since added support for nested objects (no depth limit). Automatic Toggle Switch Registration Plugins used to register their own keys in the config, and then setup isEnabled method that would determine if the service should be started or not. To reduce the headache and boilerplate of this approach, Nautica now automatically creates a key with your service’s name under services in config.n3 . If you want your own logic in isEnabled , you can do so by overwriting the method. By doing so you’ll disable the automatic registration and the framework gives you the freedom to do it your way. If you want custom logic AND automatic registration, it can simply be combined by using super().isEnabled() . Require.ListOf(…) I’d say this is a highly useful addition. It does exactly what it sounds like: It checks if all the items in a list match a certain schema. Require . ListOf ( str ) List of just strings Require . ListOf ({ " hello " : str }) List of dictionaries Requrie . ListOf ( Require . AnyTypeOf ( str , int )) List of strings and integers
I’ve started work on OpenAPI Docs generator, I’d imagine it’ll take me a while to complete. Anyways I’ve released v3.2, see below for new changes Changelog Improved speed and latency New onSetup hook for services Auto Switch registration for services New Require.ListOf validator Validator support for nested objects Better dependency resolver More on these changes here: post 1 , post 2 And new, undocumented changes include: 7. Moving typeToString into models, from http api (didn’t really make sense to have it there) 8. Added static methods into Reply for starlette responses, these include: Reply.plainText , Reply.html , Reply.stream , Reply.file , Reply.redirect . Known Issues v3.2.0 ’s dependency resolver incorrectly handles the :after parameter, a fix is already available in the branch for version 3.2.1
I’ve released v3.2.2, the new things there include: OpenAPI Docs generator Changed expression for nested requirements from nested(...) to {...} Request schemas in errors can be hidden now Added descriptions for commands in help Renamed Reply.IsList() into .asList() Added import aliases for Requirement s in napi These are mostly QoL changes, I made formatting of certain things so it’d be easier to read, use, or to make sense linguistically. I also made it a little bit more secure by giving other developers an option to hide their request schemas in error messages. I’ve also included the new benchmark numbers in the README. OpenAPI Docs generator mostly works now, but it doesn’t expose the docs to /nautica:docs yet, I’m also considering making the endpoint the developer’s concern, and not the framework’s. Surprisingly it wasn’t as hard as i expected it to be, but some weird edge cases were definitely annoying to deal with. Anyways, alongside the updates to the framework itself, I’ve also now documented the new changes made since version 3.0.2 , so they’re now up to date with the latest release (that being 3.2.2). I know it took a while but i was more focused on releasing fixes and updates first. https://github.com/xellu/nautica-api/wiki https://github.com/xellu/nautica-api/compare/3.2.0...3.2.2
A showcase of what Nautica can actually do ~20% faster than FastAPI ( https://github.com/xellu/nautica-api/wiki/Performance-Benchmark ) See Nautica in action: https://napm.xellu.xyz/ ( https://github.com/xellu/nautica-package-manager ) A video demonstration:
Ships:
I’ve updated the Service Manager, including the dependency resolver. These changes include: New lifecycle hook “onSetup”, intended for setting up databases, etc. I’ve mostly added this to split “start servers” and “setup things” all being in onStart. This way the separation between those 2 tasks is clear and helps to eliminate certain race conditions. Toggle switches are now generated automatically Before you had to manually declare a key in a config in onInstall, and then read it in isEnabled, which was just extra boilerplate. So I automated the process in the Service class. “?”, “:after” and “:after?” parameters for dependencies Before this, the boot order was still fragile even with dependencies defined, because the ability to define a dependency, and make it start only AFTER your dependency is initialized wasn’t a thing. Now you can do this by simply appending “:after” to the dependency name. “?” at the end also makes the dependency optional. Few fixes relating to dependency resolution and boot orders HTTP API Got a decently big update as well.. The performance is now up ~70% from previous versions, finally surpassing FastAPI, I’ve achieved this adding an option to disable unnecessary messages from being logged. Which only goes to show how heavy the logging manager I use is, but I doubt I’ll be rewriting it, since the way it is now helps with DX. Response validation using “@HTTP.Responses(…)” and ReplyModels: Before you were able to only validate what’s coming in, but not what’s going out. The validator has a strict mode, which when enabled adds an extra layer of “security”. If strict mode is disabled, the responses are only used for OpenAPI docs generation. Tho the framework may still complain if you’re sending invalid responses. Nested object validation and Require.ListOf Static methods in Reply Since the framework is built on Starlette, you may need to use Starlette’s responses in some cases. OpenAPI Docs generation This was kinda a big thing on my list ever since I realized that I can automatically generate SDKs instead of having to write request calls manually. I also wanted to add a way to expose the docs with an endpoint, but I’m holding off on that. The Package registry & manager were introduced as well. The package registry it itself built on Nautica, and works with the package manager integrated into the Nautica’s CLI. Likewise I’ve started work on the Landing page & docs website for the framework, but I’m putting it off for a bit, because of finals. I’ve also fixed countless bugs, refactored things, and over all made many QoL changes, which helped to make the framework feel more polished. This might be a strange project, since I’m somewhat “reinventing the wheel”, but I really didn’t like the way FastAPI, Flask and other Python HTTP frameworks work. It basically handles ONLY the http part, which is fine, but in bigger projects YOU have to manage everything else around it. When I was building small apps it wasn’t that big of an issue, but it became pretty apparent in bigger projects. The complexity and boilerplate that comes with large projects isn’t something I can handle well, while also having to enforce my own conventions. I made Nautica to fix these issues, and I’d say I succeeded. The boilerplate that’s needed per route is minimal, compared to other frameworks; The package manager adds an intuitive way to add plugins (services, packages), and the service system itself does a lot of the heavy lifting for you, by automatically deciding on the boot order instead of you having to write do it explicitly using imports, etc. In conclusion, Nautica takes away some freedom and in exchange gives you structure, less boilerplate and tools to debug your code, which makes shipping apps easier and faster....
|
1792842901.0619216
|
1792929301.0619216
|
|
17334
|
Frictionless by @harshithn | Stardance
|
harshithn
|
1
|
11.11
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-14T20:55:03Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built recall, a local full-text search tool for macOS. It indexes your clipboard, browser history, Apple Notes, shell history, mail, Slack, and Discord into a single SQLite FTS5 database, then lets you search all of it with one CLI command or a small web UI. The problem: I kept losing 5 minutes bouncing between Slack search, Gmail search, browser history, and Notes whenever I tried to find something I knew I’d seen. recall kills that — one box, sub-second results, 100% local. No cloud, no account, no telemetry. What was challenging: macOS permissions (Apple Notes + Mail need Full Disk Access and fail silently without it). I added a recall doctor command that surfaces these failures with actionable hints. Thread-safety in SQLite when the HTTP server and indexer share a connection. The vanilla-JS web UI had to feel snappy without a framework — no React, no build step, just debounced fetch + DOM. What I’m proud of: the whole thing is ~2,500 lines of Python plus a 200-line vanilla-JS web UI. Zero external runtime dependencies. Anyone can read the whole thing in an hour and trust it with their data because the data never leaves the machine. To try it: git clone https://github.com/hnelabhotla-boop/Recall , run ./install.sh, then recall ui to open the search box.", "repo": "https://github.com/hnelabhotla-boop/Recall", "demo": "https://github.com/hnelabhotla-boop/Recall#readme"}]...
|
[{"post_id": 9387, "ts": "2026 [{"post_id": 9387, "ts": "2026-06-15T18:44:49Z", "hours": 4.2847, "text": "URL search results show the real page title now, not the raw link Before: https://news.ycombinator.com/item?id=12345 After: Show HN: I built X – Hacker News Cached locally so URLs only get fetched once New recall titles command to backfill the whole index No new dependencies"}, {"post_id": 9213, "ts": "2026-06-15T13:54:58Z", "hours": 3.3175, "text": "Fixed silent failure on Apple Notes (and Mail) indexing Root cause: macOS Full Disk Access not granted to the user’s terminal New recall setup command — click-by-step walkthrough Detects your terminal (Terminal, iTerm, Warp, VS Code) Opens the right System Settings pane Reminds you to quit+reopen the terminal (the #1 gotcha) recall doctor now points to recall setup instead of just saying “Full Disk Access required” Apple Notes indexer now logs a clear permission warning instead of failing silently README gets a new “macOS permissions (one-time, ~30 seconds)” section Triggered by reviewer feedback: “I couldn’t get indexing notes to work”"}, {"post_id": 8996, "ts": "2026-06-15T00:09:49Z", "hours": 0.5086, "text": "Fixed the issue regarding the try project button"}, {"post_id": 8909, "ts": "2026-06-14T20:33:18Z", "hours": 0.8881, "text": "New recall doctor subcommand that runs a full setup check Verifies Python, SQLite FTS5, pbpaste, osascript, index DB Checks every data source — clipboard, browsers, notes, mail, chat Surfaces permission-gated failures (e.g. Apple Notes needs Full Disk Access) Found 7 issues on my own machine that the indexer was silently skipping Use it whenever something feels off: recall doctor"}, {"post_id": 7538, "ts": "2026-06-12T16:17:55Z", "hours": 1.8083, "text": "Built recall, a local full-text search tool for macOS. One hotkey searches your clipboard, browser history, Notes, shell, mail, and chat apps at once. No cloud, no account everything stays on your Sub-2-second searches across 1,600+ items on first run."}]...
|
Title: Frictionless by @harshithn | Stardance
Dev Title: Frictionless by @harshithn | Stardance
Devlogs:
Built recall, a local full-text search tool for macOS. One hotkey searches your clipboard, browser history, Notes, shell, mail, and chat apps at once. No cloud, no account everything stays on your Sub-2-second searches across 1,600+ items on first run.
New recall doctor subcommand that runs a full setup check Verifies Python, SQLite FTS5, pbpaste, osascript, index DB Checks every data source — clipboard, browsers, notes, mail, chat Surfaces permission-gated failures (e.g. Apple Notes needs Full Disk Access) Found 7 issues on my own machine that the indexer was silently skipping Use it whenever something feels off: recall doctor
Fixed the issue regarding the try project button
Fixed silent failure on Apple Notes (and Mail) indexing Root cause: macOS Full Disk Access not granted to the user’s terminal New recall setup command — click-by-step walkthrough Detects your terminal (Terminal, iTerm, Warp, VS Code) Opens the right System Settings pane Reminds you to quit+reopen the terminal (the #1 gotcha) recall doctor now points to recall setup instead of just saying “Full Disk Access required” Apple Notes indexer now logs a clear permission warning instead of failing silently README gets a new “macOS permissions (one-time, ~30 seconds)” section Triggered by reviewer feedback: “I couldn’t get indexing notes to work”
URL search results show the real page title now, not the raw link Before: https://news.ycombinator.com/item?id=12345 After: Show HN: I built X – Hacker News Cached locally so URLs only get fetched once New recall titles command to backfill the whole index No new dependencies
Ships:
I built recall, a local full-text search tool for macOS. It indexes your clipboard, browser history, Apple Notes, shell history, mail, Slack, and Discord into a single SQLite FTS5 database, then lets you search all of it with one CLI command or a small web UI. The problem: I kept losing 5 minutes bouncing between Slack search, Gmail search, browser history, and Notes whenever I tried to find something I knew I’d seen. recall kills that — one box, sub-second results, 100% local. No cloud, no account, no telemetry. What was challenging: macOS permissions (Apple Notes + Mail need Full Disk Access and fail silently without it). I added a recall doctor command that surfaces these failures with actionable hints. Thread-safety in SQLite when the HTTP server and indexer share a connection. The vanilla-JS web UI had to feel snappy without a framework — no React, no build step, just debounced fetch + DOM. What I’m proud of: the whole thing is ~2,500 lines of Python plus a 200-line vanilla-JS web UI. Zero external runtime dependencies. Anyone can read the whole thing in an hour and trust it with their data because the data never leaves the machine. To try it: git clone https://github.com/hnelabhotla-boop/Recall , run ./install.sh, then recall ui to open the search box....
|
1792820911.6702757
|
1792907311.6702757
|
|
12546
|
Weather App for ESP32 with screen by @sebimala | S Weather App for ESP32 with screen by @sebimala | Stardance...
|
sebimala
|
0
|
0.76
|
0
|
[]
|
[{"post_id": 9409, "ts": "2026 [{"post_id": 9409, "ts": "2026-06-15T19:20:06Z", "hours": 0.4683, "text": "Devlog 1: I have made the first stable, “bugfree” version of this WeatherApp for an esp32 arduino. It works with OpenWeatherMap, and uses the libraries TFT_eSPI, ArduinoJSON, lvgl. I will try to add touch screen capibilyties i the future. If you want to see what i based my app on, check out: https://github.com/witnessmenow/ESP32-Cheap-Yellow-Display/ PS. there are lots of other versions of this thing i making"}, {"post_id": 7993, "ts": "2026-06-13T10:27:27Z", "hours": 0.2875, "text": "Start of the esp32 weather app!"}]...
|
Title: Weather App for ESP32 with screen by @sebim Title: Weather App for ESP32 with screen by @sebimala | Stardance
Devlogs:
Start of the esp32 weather app!
Devlog 1: I have made the first stable, “bugfree” version of this WeatherApp for an esp32 arduino. It works with OpenWeatherMap, and uses the libraries TFT_eSPI, ArduinoJSON, lvgl. I will try to add touch screen capibilyties i the future. If you want to see what i based my app on, check out: https://github.com/witnessmenow/ESP32-Cheap-Yellow-Display/ PS. there are lots of other versions of this thing i making...
|
1792734888.1557596
|
1793339688.1557596
|
|
10125
|
Chamber's Card by @RishuKamboj | Stardance
|
RishuKamboj
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T19:44:23Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a 3D model of the ability card of Chamber from Valorant. Made this to get better at designing in Fusion360, im really happy with how it turned out.", "repo": "https://github.com/rydei/Chamber-Card", "demo": ""}]...
|
[{"post_id": 9422, "ts": "2026 [{"post_id": 9422, "ts": "2026-06-15T19:42:38Z", "hours": 0.2958, "text": "Final Product! Here are my Printer Settings: - (0.4 mm nozzle) -Layer Height: 0.12mm Fine -Build Plate: Textured PEI Plate (you can use any) -Wall Generator: Arachne -Order of walls: Outer/Inner -Ironing: Topmost Surfaces only -Only one wall on top surfaces: Enabled -Outer Wall Speed: 50 mm/s -Top Surface Speed: 50 mm/s -No Brim"}, {"post_id": 4287, "ts": "2026-06-07T15:23:29Z", "hours": 1.9464, "text": "Finished with Modelling the designs , will post Printed Version soon."}]...
|
Title: Chamber's Card by @RishuKamboj | Starda Title: Chamber's Card by @RishuKamboj | Stardance
Devlogs:
Finished with Modelling the designs , will post Printed Version soon.
Final Product! Here are my Printer Settings: - (0.4 mm nozzle) -Layer Height: 0.12mm Fine -Build Plate: Textured PEI Plate (you can use any) -Wall Generator: Arachne -Order of walls: Outer/Inner -Ironing: Topmost Surfaces only -Only one wall on top surfaces: Enabled -Outer Wall Speed: 50 mm/s -Top Surface Speed: 50 mm/s -No Brim
Ships:
I made a 3D model of the ability card of Chamber from Valorant. Made this to get better at designing in Fusion360, im really happy with how it turned out....
|
1792835288.7884662
|
1792921688.7884662
|
|
18949
|
Hangman!!!!! by @AK_47 | Stardance
|
AK_47
|
1
|
0.0
|
1
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T20:48:33Z", "hours": 0.0, "multiplier": 1.83, "payout": 1, "blessing": "neutral", "text": "I made a simple hangman game you can play against a computer! It uses HTML, and I used Google Gemini to explain my bugs in the code. I wasn’t able to log all of my time on this project, though, so it might be A LOT less than what I actually spent. You play against the computer with a preset list of words(with a hint before you start entering your first guess). Have fun :)", "repo": "https://github.com/AKKKKKK-47/hangman/blob/main/index.html", "demo": "https://akkkkkk-47.github.io/hangman/"}]...
|
[{"post_id": 9434, "ts": "2026 [{"post_id": 9434, "ts": "2026-06-15T19:54:58Z", "hours": 0.3836, "text": "I finally finished the code for the hangman game!"}]...
|
Title: Hangman!!!!! by @AK_47 | Stardance
Devlogs Title: Hangman!!!!! by @AK_47 | Stardance
Devlogs:
I finally finished the code for the hangman game!
Ships:
I made a simple hangman game you can play against a computer! It uses HTML, and I used Google Gemini to explain my bugs in the code. I wasn’t able to log all of my time on this project, though, so it might be A LOT less than what I actually spent. You play against the computer with a preset list of words(with a hint before you start entering your first guess). Have fun :)...
|
1792831646.5702498
|
1792918046.5702498
|
|
17537
|
The Gitboard 2.0 by @aamir_pa2009 | Stardance
|
aamir_pa2009
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T22:35:14Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a 8 key 2x4 Matrix wired keypad that is preprogrammed with commonly used git phrases to make my programming easier, this was my first time using Fusion 360 and KiCAD. Please tell me if you have any improvements. Thanks!", "repo": "https://github.com/AamirKPathan/TheGitboard2.0", "demo": ""}]...
|
[{"post_id": 9435, "ts": "2026 [{"post_id": 9435, "ts": "2026-06-15T19:55:37Z", "hours": 1.8803, "text": "I Finally Finished my Hackpad, GITBOARD2.0 with pre programmed git messages, just waiting on approval now."}]...
|
Title: The Gitboard 2.0 by @aamir_pa2009 | Stardan Title: The Gitboard 2.0 by @aamir_pa2009 | Stardance
Devlogs:
I Finally Finished my Hackpad, GITBOARD2.0 with pre programmed git messages, just waiting on approval now.
Ships:
I made a 8 key 2x4 Matrix wired keypad that is preprogrammed with commonly used git phrases to make my programming easier, this was my first time using Fusion 360 and KiCAD. Please tell me if you have any improvements. Thanks!...
|
1792842923.3526654
|
1792929323.3526654
|
|
18545
|
Pixel Chess by @UltimateForm | Stardance
|
UltimateForm
|
0
|
2.2
|
0
|
[]
|
[{"post_id": 9437, "ts": "2026 [{"post_id": 9437, "ts": "2026-06-15T19:57:00Z", "hours": 0.8386, "text": "worked on legal moves and pieces resetting after loss or win"}, {"post_id": 8975, "ts": "2026-06-14T22:51:19Z", "hours": 0.6594, "text": "started working on basic game logic & piece nodes + board interactability"}, {"post_id": 8693, "ts": "2026-06-14T13:18:44Z", "hours": 0.7036, "text": "designed base textures using LibreSprite, started working on 2d camera stuff in Godot (camera shake, noise etc.)"}]...
|
Title: Pixel Chess by @UltimateForm | Stardance
D Title: Pixel Chess by @UltimateForm | Stardance
Devlogs:
designed base textures using LibreSprite, started working on 2d camera stuff in Godot (camera shake, noise etc.)
started working on basic game logic & piece nodes + board interactability
worked on legal moves and pieces resetting after loss or win...
|
1792788557.0823643
|
1793393357.0823643
|
|
10122
|
boom n zoom by @remainium | Stardance
|
remainium
|
0
|
6.36
|
0
|
[]
|
[{"post_id": 9446, "ts": "2026 [{"post_id": 9446, "ts": "2026-06-15T20:14:44Z", "hours": 0.885, "text": "forward fuselage cad started"}, {"post_id": 9410, "ts": "2026-06-15T19:20:36Z", "hours": 5.4783, "text": "designing the main wing airfoil"}]...
|
Title: boom n zoom by @remainium | Stardance
Devl Title: boom n zoom by @remainium | Stardance
Devlogs:
designing the main wing airfoil
forward fuselage cad started...
|
1792695219.257077
|
1793300019.257077
|
|
19076
|
pos-todo v2 by @vividsystem | Stardance
|
vividsystem
|
0
|
3.86
|
0
|
[]
|
[{"post_id": 9450, "ts": "2026 [{"post_id": 9450, "ts": "2026-06-15T20:18:56Z", "hours": 3.8556, "text": "Just made a custom (therefore a bit shitty) markdown parser to parse slack messages and format them correctly when being printed"}]...
|
Title: pos-todo v2 by @vividsystem | Stardance
De Title: pos-todo v2 by @vividsystem | Stardance
Devlogs:
Just made a custom (therefore a bit shitty) markdown parser to parse slack messages and format them correctly when being printed...
|
1792558195.0691285
|
1793162995.0691285
|
|
19349
|
town hall bot by @valentine | Stardance
|
valentine
|
0
|
9.17
|
0
|
[]
|
[{"post_id": 9456, "ts": "2026 [{"post_id": 9456, "ts": "2026-06-15T20:21:58Z", "hours": 9.1719, "text": "I’ve implemented many things so far, like a honeypot channel to catch spam bots, a ticket system for users to get support from staff, information messages for rules and guidelines, user verification via a button press, and new member announcements with custom images. (pictured below)"}]...
|
Title: town hall bot by @valentine | Stardance
De Title: town hall bot by @valentine | Stardance
Devlogs:
I’ve implemented many things so far, like a honeypot channel to catch spam bots, a ticket system for users to get support from staff, information messages for rules and guidelines, user verification via a button press, and new member announcements with custom images. (pictured below)...
|
1792580024.7618306
|
1793184824.7618306
|
|
1719
|
First attempt at Agentic AI by @navak | Stardance
|
navak
|
0
|
0.45
|
0
|
[]
|
[{"post_id": 9457, "ts": "2026 [{"post_id": 9457, "ts": "2026-06-15T20:22:31Z", "hours": 0.4461, "text": "Today I worked on setting up my Ollama and vs code intigration"}]...
|
Title: First attempt at Agentic AI by @navak | Sta Title: First attempt at Agentic AI by @navak | Stardance
Devlogs:
Today I worked on setting up my Ollama and vs code intigration...
|
1792702444.9712355
|
1793307244.9712355
|
|
5347
|
Equiplane by @qqxzew | Stardance
|
qqxzew
|
1
|
14.0
|
217
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T20:28:36Z", "hours": 14.0, "multiplier": 15.16, "payout": 217, "blessing": "neutral", "text": "I made EquipLane, an industrial maintenance ticketing system where clients can report equipment problems, engineers can manage assigned repair tasks, and admins can control the whole maintenance workflow. The hardest part was coming up with the idea and building the project from scratch without much previous experience. I had to figure out the structure, database, roles, authentication, and the whole workflow step by step. I’m most proud that I was able to finish a working project and also make the GitHub repository look organized and well documented. This is my first major portfolio project, so I’m proud that it turned into something complete. To test it, just open the project link and log in using the demo credentials from the README.", "repo": "https://github.com/qqxzew/equiplane", "demo": "https://klidnapraha.fun/login.php"}]...
|
[{"post_id": 9458, "ts": "2026 [{"post_id": 9458, "ts": "2026-06-15T20:22:33Z", "hours": 0.5267, "text": "have add deployment😀"}, {"post_id": 9388, "ts": "2026-06-15T18:47:23Z", "hours": 1.4058, "text": "What I did: Wrapped up the EquipLane project and prepared it for my portfolio. I containerized the entire application using Docker and Docker Compose, linking a PHP 8.2 server with a MariaDB database so the whole environment can be spun up with a single command. I also set up a CI pipeline using GitHub Actions to automatically lint and check PHP syntax on every push. Finally, I generated a complete Entity-Relationship Diagram (ERD) to visualize the database architecture and wrote a comprehensive README explaining the core mechanics, security features, and the PRG pattern I implemented. The struggles: I definitely reached the limit of what makes sense to build with pure procedural PHP. Refactoring and maintaining this architecture showed me exactly why OOP and modern frameworks exist. It was a great learning experience for understanding the fundamentals, but I am definitely ready to move on to Nette for my next hackathon projects."}, {"post_id": 8946, "ts": "2026-06-14T21:29:13Z", "hours": 3.6275, "text": "What I did: Massive architectural and security overhaul today. I completely rewrote the form submission logic to follow the Post-Redirect-Get (PRG) pattern, integrating session-based Flash messages and strict CSRF token validation across all endpoints. I also implemented “Sticky Forms” so users never lose their detailed text inputs if a validation error occurs. For the administration side, I built full CRUD interfaces to manage personnel roles, corporate clients, and the equipment registry without needing direct database access. Finally, I wrote SQL-level pagination for the main tickets table to keep the application fast and scalable as data grows. The struggles: I finally switched from VS Code to PhpStorm today and I am just in shock at how insanely cool and powerful it is. It instantly highlighted database schema mismatches I missed and forced me to write much cleaner code, though getting used to its strict warnings definitely took some time."}, {"post_id": 6933, "ts": "2026-06-11T16:52:18Z", "hours": 2.3361, "text": "What I did: Expanded the engineer’s resource reporting logic. When resolving a ticket, engineers are now required to input the exact hours spent and the cost of replacement parts. Built a financial calculation module on the backend that automatically aggregates these costs, applies the Czech 21% VAT (DPH), and displays a detailed invoice summary to admins and clients. Also implemented a critical backup request feature: engineers can now submit a “Request Backup” flag along with a specific text reason if they encounter blocking issues on-site. Admins immediately see an approval panel to either accept the request (and assign additional help) or reject it. The struggles: I had no idea for frontend"}, {"post_id": 5086, "ts": "2026-06-08T19:30:11Z", "hours": 1.7997, "text": "Built the ticket creation page with role protection. Clients can now select their equipment, set priorities, and safely submit maintenance requests to the database via PDO prepared statements. The struggles: Broken the SQL query and html :>"}, {"post_id": 4452, "ts": "2026-06-07T19:34:13Z", "hours": 2.2319, "text": "Milestone: From Static UI to Secure Multi-User App What I did: Since the last update on the UI dashboard, I have completely transformed the project from a static frontend into a secure, functional multi-user system using native PHP and MariaDB. Authentication & Session Management: Built a backend login system from scratch. Implemented secure password hashing using bcrypt. Set up native PHP sessions to track users across pages. Security Guards & Logout: Created a centralized guard script to prevent unauthorized URI access. If a user isn’t logged in, they are killed and redirected to the login page. Added a full session-destroying logout mechanism. Role-Based Access Control (RBAC): Differentiated the system for Admins, Engineers, and Clients. The UI now dynamically hides navigation links based on roles, and the backend explicitly throws a 403 Forbidden error if a non-admin tries to access the core control panel. Profile & Password Updates: Built a personal profile page that fetches current user details and handles password modification with server-side validation. The struggles: Ran into multiple syntax walls, including incorrect sql, forgotten POST block brackets, and a lot of typo mismatches. Also had to deal with MariaDB unique constraint violations during database seed testing, which I resolved by writing a structured TRUNCATE routine to clear tables before fresh seeding. Now the app actually feels like a secure industrial tool rather than just a Tailwind template."}, {"post_id": 1647, "ts": "2026-06-03T19:33:34Z", "hours": 0.3758, "text": "After getting the database connected, I built the main dashboard U, also I dont have any idea for design after hard day so I asked AI about help…"}, {"post_id": 1619, "ts": "2026-06-03T19:08:20Z", "hours": 1.1228, "text": "Honestly, it is my first time building a real website in PHP, and I realized I had completely forgotten most of my HTML and CSS. Today I successfully parsed the environment variables, securely connected the MariaDB database via PDO, and built a clean industrial dashboard layout using Tailwind CSS. EquipLane is finally coming to life."}, {"post_id": 1002, "ts": "2026-06-02T19:45:55Z", "hours": 0.9236, "text": "Today I set up the initial structure for Equiplane, an industrial equipment maintenance workflow system I prepared the first part of the database schema for the project, including the base tables for users and companies. The goal is to build a system where clients can report equipment failures, admins can assign engineers, and engineers can manage repair tickets."}]...
|
Title: Equiplane by @qqxzew | Stardance
Devlogs:
Title: Equiplane by @qqxzew | Stardance
Devlogs:
Today I set up the initial structure for Equiplane, an industrial equipment maintenance workflow system I prepared the first part of the database schema for the project, including the base tables for users and companies. The goal is to build a system where clients can report equipment failures, admins can assign engineers, and engineers can manage repair tickets.
Honestly, it is my first time building a real website in PHP, and I realized I had completely forgotten most of my HTML and CSS. Today I successfully parsed the environment variables, securely connected the MariaDB database via PDO, and built a clean industrial dashboard layout using Tailwind CSS. EquipLane is finally coming to life.
After getting the database connected, I built the main dashboard U, also I dont have any idea for design after hard day so I asked AI about help…
Milestone: From Static UI to Secure Multi-User App What I did: Since the last update on the UI dashboard, I have completely transformed the project from a static frontend into a secure, functional multi-user system using native PHP and MariaDB. Authentication & Session Management: Built a backend login system from scratch. Implemented secure password hashing using bcrypt. Set up native PHP sessions to track users across pages. Security Guards & Logout: Created a centralized guard script to prevent unauthorized URI access. If a user isn’t logged in, they are killed and redirected to the login page. Added a full session-destroying logout mechanism. Role-Based Access Control (RBAC): Differentiated the system for Admins, Engineers, and Clients. The UI now dynamically hides navigation links based on roles, and the backend explicitly throws a 403 Forbidden error if a non-admin tries to access the core control panel. Profile & Password Updates: Built a personal profile page that fetches current user details and handles password modification with server-side validation. The struggles: Ran into multiple syntax walls, including incorrect sql, forgotten POST block brackets, and a lot of typo mismatches. Also had to deal with MariaDB unique constraint violations during database seed testing, which I resolved by writing a structured TRUNCATE routine to clear tables before fresh seeding. Now the app actually feels like a secure industrial tool rather than just a Tailwind template.
Built the ticket creation page with role protection. Clients can now select their equipment, set priorities, and safely submit maintenance requests to the database via PDO prepared statements. The struggles: Broken the SQL query and html :>
What I did: Expanded the engineer’s resource reporting logic. When resolving a ticket, engineers are now required to input the exact hours spent and the cost of replacement parts. Built a financial calculation module on the backend that automatically aggregates these costs, applies the Czech 21% VAT (DPH), and displays a detailed invoice summary to admins and clients. Also implemented a critical backup request feature: engineers can now submit a “Request Backup” flag along with a specific text reason if they encounter blocking issues on-site. Admins immediately see an approval panel to either accept the request (and assign additional help) or reject it. The struggles: I had no idea for frontend
What I did: Massive architectural and security overhaul today. I completely rewrote the form submission logic to follow the Post-Redirect-Get (PRG) pattern, integrating session-based Flash messages and strict CSRF token validation across all endpoints. I also implemented “Sticky Forms” so users never lose their detailed text inputs if a validation error occurs. For the administration side, I built full CRUD interfaces to manage personnel roles, corporate clients, and the equipment registry without needing direct database access. Finally, I wrote SQL-level pagination for the main tickets table to keep the application fast and scalable as data grows. The struggles: I finally switched from VS Code to PhpStorm today and I am just in shock at how insanely cool and powerful it is. It instantly highlighted database schema mismatches I missed and forced me to write much cleaner code, though getting used to its strict warnings definitely took some time.
What I did: Wrapped up the EquipLane project and prepared it for my portfolio. I containerized the entire application using Docker and Docker Compose, linking a PHP 8.2 server with a MariaDB database so the whole environment can be spun up with a single command. I also set up a CI pipeline using GitHub Actions to automatically lint and check PHP syntax on every push. Finally, I generated a complete Entity-Relationship Diagram (ERD) to visualize the database architecture and wrote a comprehensive README explaining the core mechanics, security features, and the PRG pattern I implemented. The struggles: I definitely reached the limit of what makes sense to build with pure procedural PHP. Refactoring and maintaining this architecture showed me exactly why OOP and modern frameworks exist. It was a great learning experience for understanding the fundamentals, but I am definitely ready to move on to Nette for my next hackathon projects.
have add deployment😀
Ships:
I made EquipLane, an industrial maintenance ticketing system where clients can report equipment problems, engineers can manage assigned repair tasks, and admins can control the whole maintenance workflow. The hardest part was coming up with the idea and building the project from scratch without much previous experience. I had to figure out the structure, database, roles, authentication, and the whole workflow step by step. I’m most proud that I was able to finish a working project and also make the GitHub repository look organized and well documented. This is my first major portfolio project, so I’m proud that it turned into something complete. To test it, just open the project link and log in using the demo credentials from the README....
|
1792835611.2994766
|
1792922011.2994766
|
|
15853
|
Python Quiz by @Mymy | Stardance
|
Mymy
|
0
|
1.91
|
0
|
[]
|
[{"post_id": 9459, "ts": "2026 [{"post_id": 9459, "ts": "2026-06-15T20:23:12Z", "hours": 0.9556, "text": "Today i worked on more questions and more logical stuff! I will share all of my code when i am done. Look at these drawings i made. Its a pirate and wizard if you couldnt tell."}, {"post_id": 6499, "ts": "2026-06-10T22:25:00Z", "hours": 0.9517, "text": "Hey I am making a pirate quiz game! It will be interesting because right now they are the best i can do"}]...
|
Title: Python Quiz by @Mymy | Stardance
Devlogs:
Title: Python Quiz by @Mymy | Stardance
Devlogs:
Hey I am making a pirate quiz game! It will be interesting because right now they are the best i can do
Today i worked on more questions and more logical stuff! I will share all of my code when i am done. Look at these drawings i made. Its a pirate and wizard if you couldnt tell....
|
1792666196.858894
|
1793270996.858894
|
|
14549
|
brainrotOS by @franco | Stardance
|
franco
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T20:29:25Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hey, i’ve made an operating system called BrainrotOS yeah…. It has 4 main apps: Welcome Weather Zero Paloma Clicker I am not proud of the project idea but ive advanced way to much. sorry for making you review this. 🥀", "repo": "https://github.com/Franco-Senes/BrainrotOS", "demo": "https://franco-senes.github.io/BrainrotOS/"}]...
|
[{"post_id": 9461, "ts": "2026 [{"post_id": 9461, "ts": "2026-06-15T20:24:57Z", "hours": 0.3458, "text": "Made the windows smoother and also fixed some bugs"}, {"post_id": 9438, "ts": "2026-06-15T19:57:14Z", "hours": 0.4631, "text": "finished the os add weather and my personal portfolio i hate this project 🥀😭"}, {"post_id": 5953, "ts": "2026-06-09T23:33:03Z", "hours": 0.3744, "text": "what is this 😭🥀"}]...
|
Title: brainrotOS by @franco | Stardance
Devlogs: Title: brainrotOS by @franco | Stardance
Devlogs:
what is this 😭🥀
finished the os add weather and my personal portfolio i hate this project 🥀😭
Made the windows smoother and also fixed some bugs
Ships:
Hey, i’ve made an operating system called BrainrotOS yeah…. It has 4 main apps: Welcome Weather Zero Paloma Clicker I am not proud of the project idea but ive advanced way to much. sorry for making you review this. 🥀...
|
1792849726.8604333
|
1792936126.8604333
|
|
19342
|
Pulse VR by @rylvion | Stardance
|
rylvion
|
1
|
31.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T21:46:08Z", "hours": 31.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i created a web app for Unit 15: Website Development as part of my coursework, hosted on GitHub Pages, with multiple pages and a 4-step booking flow. a major challenge was working under time constraints while fixing bugs, improving the website, documenting, writing up the report and way way more than i expected. I am most proud of the booking system, advanced GitHub Actions, and achieving 90+ on PageSpeed Insights. To test the project, users should explore different pages and try the full booking flow (bookings tab) on both mobile and desktop. also there is 1 devlog and im shipping it rn to gather end user feedback for the next stage of u15 (review + refinement + documenting + bug fixing + more )", "repo": "https://github.com/rylvion/pulse-vr/", "demo": "https://rylvion.github.io/pulse-vr/"}]...
|
[{"post_id": 9467, "ts": "2026 [{"post_id": 9467, "ts": "2026-06-15T20:29:21Z", "hours": 30.7233, "text": "booking flow (4 steps process) home/pricing/loads of other pages rlly advanced github actions more stuff that i cant remember wireframes: https://app.moqups.com/7pztHxaFX9Yz5oI0v58osy9wUSSnmtnt/view/page/aaef4bdbf"}]...
|
Title: Pulse VR by @rylvion | Stardance
Devlogs:
Title: Pulse VR by @rylvion | Stardance
Devlogs:
booking flow (4 steps process) home/pricing/loads of other pages rlly advanced github actions more stuff that i cant remember wireframes: https://app.moqups.com/7pztHxaFX9Yz5oI0v58osy9wUSSnmtnt/view/page/aaef4bdbf
Ships:
i created a web app for Unit 15: Website Development as part of my coursework, hosted on GitHub Pages, with multiple pages and a 4-step booking flow. a major challenge was working under time constraints while fixing bugs, improving the website, documenting, writing up the report and way way more than i expected. I am most proud of the booking system, advanced GitHub Actions, and achieving 90+ on PageSpeed Insights. To test the project, users should explore different pages and try the full booking flow (bookings tab) on both mobile and desktop. also there is 1 devlog and im shipping it rn to gather end user feedback for the next stage of u15 (review + refinement + documenting + bug fixing + more )...
|
1792835588.5726848
|
1792921988.5726848
|
|
11699
|
albumFinder by @maruscarebecca | Stardance
|
maruscarebecca
|
1
|
2.29
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-09T17:39:46Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Today I’ve worked on my first ever website! After following some really entertaining, interactive (and sometimes hard) lessons and tutorials from CodeDex, I’ve finally put my (beginner) web dev skills to use and made a website. Of course, out of my own stubborness, I jumped into a harder tutorial than needed, and just slightly lost my mind a couple of times from confusion, but I made it nevertheless. It was fun working with the Spotify Web API, and it was a really special and unique experience for me to use it for my first ever website, since music is such a big part of my life and identity:)) My final goal is building a more complex and interactive app with music using Spotify’s APIs, so stay tuned for that, but this was certainly a fun stepping stone :)", "repo": "https://github.com/rebecca-marusca/albumFinder", "demo": "https://album-finder-ten.vercel.app/"}]...
|
[{"post_id": 9471, "ts": "2026 [{"post_id": 9471, "ts": "2026-06-15T20:31:20Z", "hours": 0.2897, "text": "Changed parts of the UI so my eyes stopped hurting from the white album covers:))"}, {"post_id": 5757, "ts": "2026-06-09T17:35:06Z", "hours": 2.4564, "text": "🎵 Wrapped up work on my first ever web project!! It was a fun and rewarding (and frustrating) experience, as it always is with coding, and I enjoyed (and hated) every second:) Still looooots to improve, and will surely do so :))"}]...
|
Title: albumFinder by @maruscarebecca | Stardance
Title: albumFinder by @maruscarebecca | Stardance
Devlogs:
🎵 Wrapped up work on my first ever web project!! It was a fun and rewarding (and frustrating) experience, as it always is with coding, and I enjoyed (and hated) every second:) Still looooots to improve, and will surely do so :))
Changed parts of the UI so my eyes stopped hurting from the white album covers:))
Ships:
Today I’ve worked on my first ever website! After following some really entertaining, interactive (and sometimes hard) lessons and tutorials from CodeDex, I’ve finally put my (beginner) web dev skills to use and made a website. Of course, out of my own stubborness, I jumped into a harder tutorial than needed, and just slightly lost my mind a couple of times from confusion, but I made it nevertheless. It was fun working with the Spotify Web API, and it was a really special and unique experience for me to use it for my first ever website, since music is such a big part of my life and identity:)) My final goal is building a more complex and interactive app with music using Spotify’s APIs, so stay tuned for that, but this was certainly a fun stepping stone :)...
|
1792846518.0505092
|
1792932918.0505092
|
|
6289
|
Gravity Simulator by @lyra_stiglitz | Stardance
|
lyra_stiglitz
|
0
|
1.25
|
0
|
[]
|
[{"post_id": 9475, "ts": "2026 [{"post_id": 9475, "ts": "2026-06-15T20:36:46Z", "hours": 1.25, "text": "Hi! Welcome to my project GravitySimulator and my first devlog. Right now the project will likely be a little boring to watch since I’m working on stage 1 (learning basic 2D graphics in java). Learned how to create a java canvas, draw basic shapes, text, and import images."}]...
|
Title: Gravity Simulator by @lyra_stiglitz | Stard Title: Gravity Simulator by @lyra_stiglitz | Stardance
Devlogs:
Hi! Welcome to my project GravitySimulator and my first devlog. Right now the project will likely be a little boring to watch since I’m working on stage 1 (learning basic 2D graphics in java). Learned how to create a java canvas, draw basic shapes, text, and import images....
|
1792810178.6120698
|
1793414978.6120698
|
|
15351
|
My awesome macropad! by @MattyO | Stardance
|
MattyO
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T20:00:39Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created my first Macropad and learned how to use Kicad along with how to code in python. I also used CAD which I have used in the past. I am hoping the parts will be shipped out soon so I can build this!", "repo": "https://github.com/Matty-0/Macropad-MattyO", "demo": ""}]...
|
[{"post_id": 9483, "ts": "2026 [{"post_id": 9483, "ts": "2026-06-15T20:43:56Z", "hours": 0.3922, "text": "I just finished creating the firmware for my Macropad"}]...
|
Title: My awesome macropad! by @MattyO | Stardance Title: My awesome macropad! by @MattyO | Stardance
Devlogs:
I just finished creating the firmware for my Macropad
Ships:
I created my first Macropad and learned how to use Kicad along with how to code in python. I also used CAD which I have used in the past. I am hoping the parts will be shipped out soon so I can build this!...
|
1792831721.1200292
|
1792918121.1200292
|
|
19143
|
WaterMelon OS by @Tanish1 | Stardance
|
Tanish1
|
0
|
0.32
|
0
|
[]
|
[{"post_id": 9485, "ts": "2026 [{"post_id": 9485, "ts": "2026-06-15T20:45:21Z", "hours": 0.3175, "text": "Got a lot of the intro screen ready, but almost done with it. Looks very polished"}]...
|
Title: WaterMelon OS by @Tanish1 | Stardance
Devl Title: WaterMelon OS by @Tanish1 | Stardance
Devlogs:
Got a lot of the intro screen ready, but almost done with it. Looks very polished...
|
1792504283.1859741
|
1793109083.1859741
|
|
19309
|
K-Bot by @angledangel | Stardance
|
angledangel
|
0
|
0.97
|
0
|
[]
|
[{"post_id": 9487, "ts": "2026 [{"post_id": 9487, "ts": "2026-06-15T20:46:54Z", "hours": 0.9742, "text": "For some reason my code glitched so I couldn’t get the bot to say the latency + push to github. But I did it!"}]...
|
Title: K-Bot by @angledangel | Stardance
Devlogs: Title: K-Bot by @angledangel | Stardance
Devlogs:
For some reason my code glitched so I couldn’t get the bot to say the latency + push to github. But I did it!...
|
1792601542.0552647
|
1793206342.0552647
|
|
1389
|
Pixel Art Maker by @alexdougherty | Stardance
|
alexdougherty
|
0
|
3.48
|
0
|
[]
|
[{"post_id": 950, "ts": "2026- [{"post_id": 950, "ts": "2026-06-02T18:31:16Z", "hours": 1.3447, "text": "Python Pixel Art Maker Devlog #2: Added functionality to some buttons Added an adjustable grid (able to have dimensions changed) Added Asyncio Tried Pygbag to add Web Functionality (struggling…) Any suggestions? Thanks!"}, {"post_id": 364, "ts": "2026-06-01T18:15:45Z", "hours": 2.1344, "text": "I’ve finally created a base UI to surround my custom Pixel Art creation program!"}]...
|
Title: Pixel Art Maker by @alexdougherty | Stardan Title: Pixel Art Maker by @alexdougherty | Stardance
Devlogs:
I’ve finally created a base UI to surround my custom Pixel Art creation program!
Python Pixel Art Maker Devlog #2: Added functionality to some buttons Added an adjustable grid (able to have dimensions changed) Added Asyncio Tried Pygbag to add Web Functionality (struggling…) Any suggestions? Thanks!...
|
1792691497.214663
|
1793296297.214663
|
|
17882
|
0xKit by @ghita | Stardance
|
ghita
|
1
|
3.0
|
42
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T20:48:57Z", "hours": 3.0, "multiplier": 13.37, "payout": 42, "blessing": "neutral", "text": "0xKit | an offline CTF field kit that runs entirely in your browser What I made 0xKit is a toolkit for Capture The Flag: recon, classical and modern crypto, encodings, and file forensics, all in one page, all client-side. It started life as DevBox, a drawer of generic dev converters, and I reprofiled the whole thing around one user, a CTF player, instead of bolting more tools onto a pile. The centerpiece is a chainable pipeline. Instead of one tool per page, you stack operations into a recipe and each step feeds the next: From Base64, then From Hex, then XOR. Underneath, every operation speaks one language, raw bytes, so a gzip blob survives the chain instead of getting mangled. And there’s a Magic button: paste a blob you don’t understand, and it tries a pile of decodes, scores each result on how much it looks like real data, and hands you the ranked chains to click into. Around that sit a Cipher Solver, an XOR brute-forcer, a File Inspector, a Hash Identifier, and the usual recon suspects (JWT, regex, diff, timestamp). What was challenging Writing by hand the things you’d normally just install. MD5, SHA-1 and SHA-256 from scratch, with all the 32-bit integer and padding fiddliness. A base58 codec that shipped with a sneaky all-zeros bug a test caught. The Magic detector was the hardest part conceptually: scoring “does this look like real data” using printable ratio, entropy, dictionary words, file magic bytes and flag markers, then recursing through candidate decodes without blowing up. Keeping the whole thing byte-accurate end to end so binary data never gets corrupted mid-pipeline took real care. What I’m proud of That it has a point of view now. It’s for someone, instead of being odds and ends. It runs with zero runtime dependencies, no UI library, no router, no crypto packages, just React, Vite and plain CSS, and it’s all backed by a real test suite (68 tests). I committed to the bet hard enough to delete the old generic tools, rebuild the look as a clean monochrome shell with hand-drawn line icons, and ship it as an installable, fully offline PWA. Nothing you paste ever leaves your machine, which for competition data actually matters. How to test it Open the Pipeline tool, paste SGVsbG8gMHhLaXQ=, click Magic, and watch it suggest From Base64 and decode to “Hello 0xKit”. Click the suggestion to load it. Try XOR Brute-Force: set format to hex, paste 2e2225236d3a3631386f6738273f, and the top candidate reveals flag{xor_me} with its key. Cipher Solver brute-forces all 26 Caesar shifts at once; the default text decodes at ROT23. Drop any PNG, PDF or ZIP into File Inspector to see magic-byte detection, a hex dump and extracted strings, all without uploading the file. Paste an MD5 into Hash Identifier to see it guess the algorithm from the digest’s shape. Hit Ctrl+K to jump between tools. Install it as an app and turn off your wifi: it still works.", "repo": "https://github.com/AndreiRazvanGhita/0xKit", "demo": "https://andreirazvanghita.github.io/0xKit/"}]...
|
[{"post_id": 9501, "ts": "2026 [{"post_id": 9501, "ts": "2026-06-15T21:05:15Z", "hours": 1.5628, "text": "Devlog 3 - DevBox becomes 0xKit Big pivot. DevBox is turning into 0xKit, a toolkit for CTF recon, crypto and forensics. Same offline browser app, sharper focus. The honest reason: DevBox worked, but it was a pile of converters you could find in ten other places. No reason to reach for it. So instead of bolting on more generic tools, I pointed the whole thing at one user, a CTF player, and built the harder tools that crowd actually needs. What sold me on the pivot was realising DevBox’s “nice to have” is a real selling point here. Everything runs in your browser and never leaves your machine. For a dev formatting JSON, who cares. For someone poking at competition data they shouldn’t paste into a random website, that matters. The centerpiece is a pipeline. Instead of one tool per page, you stack operations and each feeds the next: From Base64, then From Hex, then XOR. It’s the CyberChef idea, rebuilt small and dependency-free. Underneath, every operation speaks one language, raw bytes, so a gzip blob survives the chain instead of getting mangled. Building it meant writing things by hand you’d normally install: MD5, SHA-1, a base58 codec with a sneaky all-zeros bug a test caught. So was it worth it? Yes. 0xKit has a point of view now, it’s for someone instead of being a drawer of odds and ends. And it forced real work: a composable engine, hand-rolled crypto, a pile of tests. I even cut JSON, color and cron to commit to the bet. Felt scary, then immediately right. Next up: the Magic button, which guesses the decode chain for a blob you don’t understand, then the crypto and forensics tools, and getting 0xKit live."}, {"post_id": 8338, "ts": "2026-06-13T21:09:06Z", "hours": 0.58, "text": "Devlog 2 - Four more tools and search DevBox grew up a bit this round. It went from three tools to seven, and the sidebar finally got a search box. The new ones: Regex tester, Timestamp converter, Color converter, and Text Case. The Regex one is my favorite - it highlights matches live as you type and counts them, with the g/i/m flags as little checkboxes. Timestamp figures out on its own whether you handed it seconds or milliseconds. Color swaps between HEX, RGB and HSL and shows a swatch. Text Case turns whatever you type into camelCase, snake_case, kebab-case and the rest. Now that the list was getting longer, I added a search box up top - just start typing to filter, or hit Ctrl+K to jump straight to it. The fiddly bits were the small edge cases. Regex with something like \\d* used to duplicate the text in the preview, and the case converter choked on acronyms like parseHTTPRequest. Both fixed now. Boring stuff, but it’s the difference between a toy and something you actually trust. Next up: a hash generator, and making the whole thing work offline as an installable app."}, {"post_id": 8270, "ts": "2026-06-13T19:19:48Z", "hours": 1.0867, "text": "Devlog 1 - Getting started My first devlog! DevBox just went from an empty folder to something I can actually use, with three working tools. The idea: one page with all the little tools devs keep googling - JSON, Base64, URL encoding - running right in your browser. No submit buttons, works offline, nothing you type ever leaves your machine. I started with the shell, so adding a tool is dead easy: one folder plus one line in a config file gets it into the sidebar, routing, and search. Then the first three tools - JSON Formatter, Base64, and URL, the last two auto-detecting whether to encode or decode. The tricky part was that auto-detect: it only treats input as Base64 if it survives a clean round-trip, otherwise plain text turns to garbage. Next up: four more tools (Regex, Timestamp, Color, Text Case)."}]...
|
Title: 0xKit by @ghita | Stardance
Devlogs:
Devlo Title: 0xKit by @ghita | Stardance
Devlogs:
Devlog 1 - Getting started My first devlog! DevBox just went from an empty folder to something I can actually use, with three working tools. The idea: one page with all the little tools devs keep googling - JSON, Base64, URL encoding - running right in your browser. No submit buttons, works offline, nothing you type ever leaves your machine. I started with the shell, so adding a tool is dead easy: one folder plus one line in a config file gets it into the sidebar, routing, and search. Then the first three tools - JSON Formatter, Base64, and URL, the last two auto-detecting whether to encode or decode. The tricky part was that auto-detect: it only treats input as Base64 if it survives a clean round-trip, otherwise plain text turns to garbage. Next up: four more tools (Regex, Timestamp, Color, Text Case).
Devlog 2 - Four more tools and search DevBox grew up a bit this round. It went from three tools to seven, and the sidebar finally got a search box. The new ones: Regex tester, Timestamp converter, Color converter, and Text Case. The Regex one is my favorite - it highlights matches live as you type and counts them, with the g/i/m flags as little checkboxes. Timestamp figures out on its own whether you handed it seconds or milliseconds. Color swaps between HEX, RGB and HSL and shows a swatch. Text Case turns whatever you type into camelCase, snake_case, kebab-case and the rest. Now that the list was getting longer, I added a search box up top - just start typing to filter, or hit Ctrl+K to jump straight to it. The fiddly bits were the small edge cases. Regex with something like \d* used to duplicate the text in the preview, and the case converter choked on acronyms like parseHTTPRequest. Both fixed now. Boring stuff, but it’s the difference between a toy and something you actually trust. Next up: a hash generator, and making the whole thing work offline as an installable app.
Devlog 3 - DevBox becomes 0xKit Big pivot. DevBox is turning into 0xKit, a toolkit for CTF recon, crypto and forensics. Same offline browser app, sharper focus. The honest reason: DevBox worked, but it was a pile of converters you could find in ten other places. No reason to reach for it. So instead of bolting on more generic tools, I pointed the whole thing at one user, a CTF player, and built the harder tools that crowd actually needs. What sold me on the pivot was realising DevBox’s “nice to have” is a real selling point here. Everything runs in your browser and never leaves your machine. For a dev formatting JSON, who cares. For someone poking at competition data they shouldn’t paste into a random website, that matters. The centerpiece is a pipeline. Instead of one tool per page, you stack operations and each feeds the next: From Base64, then From Hex, then XOR. It’s the CyberChef idea, rebuilt small and dependency-free. Underneath, every operation speaks one language, raw bytes, so a gzip blob survives the chain instead of getting mangled. Building it meant writing things by hand you’d normally install: MD5, SHA-1, a base58 codec with a sneaky all-zeros bug a test caught. So was it worth it? Yes. 0xKit has a point of view now, it’s for someone instead of being a drawer of odds and ends. And it forced real work: a composable engine, hand-rolled crypto, a pile of tests. I even cut JSON, color and cron to commit to the bet. Felt scary, then immediately right. Next up: the Magic button, which guesses the decode chain for a blob you don’t understand, then the crypto and forensics tools, and getting 0xKit live.
Ships:
0xKit | an offline CTF field kit that runs entirely in your browser What I made 0xKit is a toolkit for Capture The Flag: recon, classical and modern crypto, encodings, and file forensics, all in one page, all client-side. It started life as DevBox, a drawer of generic dev converters, and I reprofiled the whole thing around one user, a CTF player, instead of bolting more tools onto a pile. The centerpiece is a chainable pipeline. Instead of one tool per page, you stack operations into a recipe and each step feeds the next: From Base64, then From Hex, then XOR. Underneath, every operation speaks one language, raw bytes, so a gzip blob survives the chain instead of getting mangled. And there’s a Magic button: paste a blob you don’t understand, and it tries a pile of decodes, scores each result on how much it looks like real data, and hands you the ranked chains to click into. Around that sit a Cipher Solver, an XOR brute-forcer, a File Inspector, a Hash Identifier, and the usual recon suspects (JWT, regex, diff, timestamp). What was challenging Writing by hand the things you’d normally just install. MD5, SHA-1 and SHA-256 from scratch, with all the 32-bit integer and padding fiddliness. A base58 codec that shipped with a sneaky all-zeros bug a test caught. The Magic detector was the hardest part conceptually: scoring “does this look like real data” using printable ratio, entropy, dictionary words, file magic bytes and flag markers, then recursing through candidate decodes without blowing up. Keeping the whole thing byte-accurate end to end so binary data never gets corrupted mid-pipeline took real care. What I’m proud of That it has a point of view now. It’s for someone, instead of being odds and ends. It runs with zero runtime dependencies, no UI library, no router, no crypto packages, just React, Vite and plain CSS, and it’s all backed by a real test suite (68 tests). I committed to the bet hard enough to delete the old generic tools, rebuild the look as a clean monochrome shell with hand-drawn line icons, and ship it as an installable, fully offline PWA. Nothing you paste ever leaves your machine, which for competition data actually matters. How to test it Open the Pipeline tool, paste SGVsbG8gMHhLaXQ=, click Magic, and watch it suggest From Base64 and decode to “Hello 0xKit”. Click the suggestion to load it. Try XOR Brute-Force: set format to hex, paste 2e2225236d3a3631386f6738273f, and the top candidate reveals flag{xor_me} with its key. Cipher Solver brute-forces all 26 Caesar shifts at once; the default text decodes at ROT23. Drop any PNG, PDF or ZIP into File Inspector to see magic-byte detection, a hex dump and extracted strings, all without uploading the file. Paste an MD5 into Hash Identifier to see it guess the algorithm from the digest’s shape. Hit Ctrl+K to jump between tools. Install it as an app and turn off your wifi: it still works....
|
1792839223.0233178
|
1792925623.0233178
|
|
18663
|
Fusion 360 Macro by @suhaasvishnubhatla | Stardanc Fusion 360 Macro by @suhaasvishnubhatla | Stardance...
|
suhaasvishnubhatla
|
0
|
2.52
|
0
|
[]
|
[{"post_id": 9503, "ts": "2026 [{"post_id": 9503, "ts": "2026-06-15T21:08:44Z", "hours": 2.52, "text": "Devlog #1 (6/15/2026 @ 5:02 PM EST): Finished Up my schematic, and assigned footprints to my Macro360 Macropad on KiCad for Fusion360 3d modeling. I am deciding whether or not I should remove one of my rows of keys (4 keys per row) to make room on my RP2040 Seeeduino for a display AND rotary encoder (ec11 one included in kit.) I will most likely proceed with the 3 row version with a screen and encoder since these features will make the experience cooler and much more fun for me (yes, I know it will be a pain in the butt when I get to firmware because I have never made a firmware before.) but thats part of the fun of designing it! I have linked 3 pictures below. One is my schematic another of the footprints I used for my Xiao, I also added the alternative footprint for my switches I found (actually Reid on the slack told me. THX reid:)) Thanks for reading this is Suhaas, Signing off."}]...
|
Title: Fusion 360 Macro by @suhaasvishnubhatla | S Title: Fusion 360 Macro by @suhaasvishnubhatla | Stardance
Devlogs:
Devlog #1 (6/15/2026 @ 5:02 PM EST): Finished Up my schematic, and assigned footprints to my Macro360 Macropad on KiCad for Fusion360 3d modeling. I am deciding whether or not I should remove one of my rows of keys (4 keys per row) to make room on my RP2040 Seeeduino for a display AND rotary encoder (ec11 one included in kit.) I will most likely proceed with the 3 row version with a screen and encoder since these features will make the experience cooler and much more fun for me (yes, I know it will be a pain in the butt when I get to firmware because I have never made a firmware before.) but thats part of the fun of designing it! I have linked 3 pictures below. One is my schematic another of the footprints I used for my Xiao, I also added the alternative footprint for my switches I found (actually Reid on the slack told me. THX reid:)) Thanks for reading this is Suhaas, Signing off....
|
1792536669.9155378
|
1793141469.9155378
|
|
1953
|
Virtual Rubix cube by @claysonV | Stardance
|
claysonV
|
0
|
4.38
|
0
|
[]
|
[{"post_id": 951, "ts": "2026- [{"post_id": 951, "ts": "2026-06-02T18:32:37Z", "hours": 1.9317, "text": "Setting up the input framework for RubixC! Wrote a custom useKeyboard React hook to map standard virtual cubing keys (I, J, K, L, F, H) to U, D, L, R, F, B faces. Also wired up Shift for prime moves and Alt for double moves. The keys are successfully registering in the console, but they don’t actually turn the 3D model yet. That will come next"}, {"post_id": 602, "ts": "2026-06-02T03:08:21Z", "hours": 1.2256, "text": "“Wired up the generateWcaScramble function in TypeScript today for the Rubix Cube. Implemented the logic to check against the previous move and opposite faces, ensuring every 20-move sequence is fully WCA-compliant (no redundant moves like U U’ or R L R). Linked it straight to the frontend UI."}, {"post_id": 521, "ts": "2026-06-02T00:11:54Z", "hours": 1.2194, "text": "First session down for the Speedcubing Algorithm Trainer. Spent the hour drafting the 3x3x3 model geometry and getting the individual cubies locked in before I start wiring up the rotation logic."}]...
|
Title: Virtual Rubix cube by @claysonV | Stardance Title: Virtual Rubix cube by @claysonV | Stardance
Devlogs:
First session down for the Speedcubing Algorithm Trainer. Spent the hour drafting the 3x3x3 model geometry and getting the individual cubies locked in before I start wiring up the rotation logic.
“Wired up the generateWcaScramble function in TypeScript today for the Rubix Cube. Implemented the logic to check against the previous move and opposite faces, ensuring every 20-move sequence is fully WCA-compliant (no redundant moves like U U’ or R L R). Linked it straight to the frontend UI.
Setting up the input framework for RubixC! Wrote a custom useKeyboard React hook to map standard virtual cubing keys (I, J, K, L, F, H) to U, D, L, R, F, B faces. Also wired up Shift for prime moves and Alt for double moves. The keys are successfully registering in the console, but they don’t actually turn the 3D model yet. That will come next...
|
1792666087.419535
|
1793270887.419535
|
|
14566
|
My first slack bot! by @viviennem | Stardance
|
viviennem
|
0
|
0.42
|
0
|
[]
|
[{"post_id": 9510, "ts": "2026 [{"post_id": 9510, "ts": "2026-06-15T21:31:48Z", "hours": 0.4178, "text": "My First Slackbot!"}]...
|
Title: My first slack bot! by @viviennem | Stardan Title: My first slack bot! by @viviennem | Stardance
Devlogs:
My First Slackbot!...
|
1792615955.9498749
|
1793220755.9498749
|
|
1074
|
My awesome macropad! by @lillylike123 | Stardance
|
lillylike123
|
0
|
0.72
|
0
|
[]
|
[{"post_id": 9513, "ts": "2026 [{"post_id": 9513, "ts": "2026-06-15T21:39:27Z", "hours": 0.7186, "text": "Worked on the schematic of my first-ever Hackpad (yippee!!!). I am super happy I was able to get the hang of KiCad and its different editors. I hope this Hackpad won’t be my last, and I will make more macro pads for the future!!!"}]...
|
Title: My awesome macropad! by @lillylike123 | Sta Title: My awesome macropad! by @lillylike123 | Stardance
Devlogs:
Worked on the schematic of my first-ever Hackpad (yippee!!!). I am super happy I was able to get the hang of KiCad and its different editors. I hope this Hackpad won’t be my last, and I will make more macro pads for the future!!!...
|
1792572508.261356
|
1793177308.261356
|
|
14914
|
Magic Mirror by @spakshots | Stardance
|
spakshots
|
0
|
1.07
|
0
|
[]
|
[{"post_id": 9532, "ts": "2026 [{"post_id": 9532, "ts": "2026-06-15T22:07:44Z", "hours": 0.4261, "text": "02 | Devlog Here is my MagicMirror. Personal profiles are live, the Obsidian vault is linked, and the mirror knows who’s in front of it. what I did: built out personal profiles with custom profile photos and rounded borders profile switching is fully automatic and activated via facial recognition after 20 seconds of no face detected, the mirror drops back to lock mode if the PIR also hasn’t triggered in those 20 seconds, it goes full sleep linked the mirror to my local Obsidian vault by parsing the daily markdown file daily objectives from my notes now show up live on the display how the profile switch works: the moment it picks up your face, your personal modules load in once you walk away, the 20 second timer starts. if there is no face and no motion then the mirror sleeps it’s a two-layer falloff that keeps the mirror from staying lit for no reason so that I can sleep at night Obsidian integration: I’m pulling from my daily notes vault by reading and parsing the markdown file directly on the pi. whatever objectives I’ve written for the day show up on the mirror automatically through my private github repository current stats: profiles: 2 (Brady + Camren) profile trigger: face recognition, automatic lock timeout: 20 seconds after last face detected sleep trigger: no PIR + no face for 20 seconds Obsidian source: local daily notes vault (syncing with github), parsed from markdown what’s next: implementing the SR-04 ultrasonic sensor soldering the modules CADing housing for the mirror modules"}, {"post_id": 6497, "ts": "2026-06-10T22:20:42Z", "hours": 0.6481, "text": "01 | Devlog Here is my MagicMirror. I successfully cloned the magicmirror repo to my raspberry pi, and now my phone’s apple calendar is finally showing up on the display. I plan to later implement facial recognition and integration into my obsidian vault. what I did: cloned the magicmirror repo and installed it on my pi configured the calendar to pull from my personal apple calendar time and weather displayed got facial recognition working on my logitech usb camera current stats: Pi model: 4B with 4GB ram Webcam: Logitech Pro Stream Webcam mirror UI: 120 fps facial recognition frames: 15 fps CV scalar: 1 I decided to go with a CV scalar of 1 to improve the model’s scanning at longer distances since the pi held up under the heavier processing. what’s next: I plan to add personal profiles based on the facial recognition model each profile will have their personalized calendar and sports teams’ schedule displayed then I’ll be adding a SR-501 InfraRed sensor and a SR-04 Ultrasonic sensor to wake up the mirror from sleep mode"}]...
|
Title: Magic Mirror by @spakshots | Stardance
Dev Title: Magic Mirror by @spakshots | Stardance
Devlogs:
01 | Devlog Here is my MagicMirror. I successfully cloned the magicmirror repo to my raspberry pi, and now my phone’s apple calendar is finally showing up on the display. I plan to later implement facial recognition and integration into my obsidian vault. what I did: cloned the magicmirror repo and installed it on my pi configured the calendar to pull from my personal apple calendar time and weather displayed got facial recognition working on my logitech usb camera current stats: Pi model: 4B with 4GB ram Webcam: Logitech Pro Stream Webcam mirror UI: 120 fps facial recognition frames: 15 fps CV scalar: 1 I decided to go with a CV scalar of 1 to improve the model’s scanning at longer distances since the pi held up under the heavier processing. what’s next: I plan to add personal profiles based on the facial recognition model each profile will have their personalized calendar and sports teams’ schedule displayed then I’ll be adding a SR-501 InfraRed sensor and a SR-04 Ultrasonic sensor to wake up the mirror from sleep mode
02 | Devlog Here is my MagicMirror. Personal profiles are live, the Obsidian vault is linked, and the mirror knows who’s in front of it. what I did: built out personal profiles with custom profile photos and rounded borders profile switching is fully automatic and activated via facial recognition after 20 seconds of no face detected, the mirror drops back to lock mode if the PIR also hasn’t triggered in those 20 seconds, it goes full sleep linked the mirror to my local Obsidian vault by parsing the daily markdown file daily objectives from my notes now show up live on the display how the profile switch works: the moment it picks up your face, your personal modules load in once you walk away, the 20 second timer starts. if there is no face and no motion then the mirror sleeps it’s a two-layer falloff that keeps the mirror from staying lit for no reason so that I can sleep at night Obsidian integration: I’m pulling from my daily notes vault by reading and parsing the markdown file directly on the pi. whatever objectives I’ve written for the day show up on the mirror automatically through my private github repository current stats: profiles: 2 (Brady + Camren) profile trigger: face recognition, automatic lock timeout: 20 seconds after last face detected sleep trigger: no PIR + no face for 20 seconds Obsidian source: local daily notes vault (syncing with github), parsed from markdown what’s next: implementing the SR-04 ultrasonic sensor soldering the modules CADing housing for the mirror modules...
|
1792511693.0775466
|
1793116493.0775466
|
|
19373
|
3D Print Shredddder by @Right_Bright | Stardance
|
Right_Bright
|
0
|
2.31
|
0
|
[]
|
[{"post_id": 9535, "ts": "2026 [{"post_id": 9535, "ts": "2026-06-15T22:11:28Z", "hours": 2.31, "text": "I finished a very rough version of the housing for the planer to sit in & TRIED to print it… instead the filament roll got stuck and it stopped extruding :( Fortunately, it printed just enough for me to check out some of how my measurements played out & moved on to create V2! (calipers for the win, but I really wish I had a 3D scanner for this T-T [I also tried using a picture of the planer, but I just could not get a good head-on picture :( ]) For V2 I cut down the top a lot because I only need the feeding chute coming out. I also added some more support on the bottom for the planer, and added a bottom; changed the feeding chute to have a slope at the bottom to hopefully help feed prints into the blade; and realized the print orientation should be rotated so that the back lays flat on the print bed as this removes almost all supports (with some design tweaks). Oh, I also learned the very basics I needed to get some renders of the prints using Blender which was cool! Next up: Test the shredding (what do the shredded pieces look like, do concurrent passes make them smaller, at what point does it stop, how loud is it, how fast is it, etc…) Look into next steps to modify this idea to shred larger parts"}]...
|
Title: 3D Print Shredddder by @Right_Bright | Star Title: 3D Print Shredddder by @Right_Bright | Stardance
Devlogs:
I finished a very rough version of the housing for the planer to sit in & TRIED to print it… instead the filament roll got stuck and it stopped extruding :( Fortunately, it printed just enough for me to check out some of how my measurements played out & moved on to create V2! (calipers for the win, but I really wish I had a 3D scanner for this T-T [I also tried using a picture of the planer, but I just could not get a good head-on picture :( ]) For V2 I cut down the top a lot because I only need the feeding chute coming out. I also added some more support on the bottom for the planer, and added a bottom; changed the feeding chute to have a slope at the bottom to hopefully help feed prints into the blade; and realized the print orientation should be rotated so that the back lays flat on the print bed as this removes almost all supports (with some design tweaks). Oh, I also learned the very basics I needed to get some renders of the prints using Blender which was cool! Next up: Test the shredding (what do the shredded pieces look like, do concurrent passes make them smaller, at what point does it stop, how loud is it, how fast is it, etc…) Look into next steps to modify this idea to shred larger parts...
|
1792756623.2103882
|
1793361423.2103882
|
|
4971
|
ARTEMIS - Laser shooting game by @Kika | Stardance
|
Kika
|
0
|
0.68
|
0
|
[]
|
[{"post_id": 954, "ts": "2026- [{"post_id": 954, "ts": "2026-06-02T18:38:52Z", "hours": 0.6792, "text": "I decided to do a mid scope project as my debut in hackclub, i got an idea and here it is, the Artemis - coming from the Greek goddess of hunting. Today i spent about 2 hours getting the idea planned and time tracking to work (it still doesnt work on hardware) so tomorrow i will just use lapse and journal the stuff properly in hopes of my time being counted as i was told on slack."}]...
|
Title: ARTEMIS - Laser shooting game by @Kika | St Title: ARTEMIS - Laser shooting game by @Kika | Stardance
Devlogs:
I decided to do a mid scope project as my debut in hackclub, i got an idea and here it is, the Artemis - coming from the Greek goddess of hunting. Today i spent about 2 hours getting the idea planned and time tracking to work (it still doesnt work on hardware) so tomorrow i will just use lapse and journal the stuff properly in hopes of my time being counted as i was told on slack....
|
1792702205.020076
|
1793307005.020076
|
|
19413
|
Perry. by @urged-st | Stardance
|
urged-st
|
1
|
1.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T22:27:58Z", "hours": 1.0, "multiplier": 2.48, "payout": 3, "blessing": "neutral", "text": "I made a site that shows a short story of “perry the period blood” It is not intended as educational or informative mainly just a light spin on a topic rarely talked about.", "repo": "https://github.com/urged-st/perry", "demo": "https://perrytheperiodblood.vercel.app"}]...
|
[{"post_id": 9542, "ts": "2026 [{"post_id": 9542, "ts": "2026-06-15T22:24:54Z", "hours": 1.0739, "text": "1hr challenge to make perry the period blood This is a small site that has a short story of perry the period blood It is based off an inside joke with my friends I challenged myself to build it in an hour I guess it worked, now i can do something useful!"}]...
|
Title: Perry. by @urged-st | Stardance
Devlogs:
1 Title: Perry. by @urged-st | Stardance
Devlogs:
1hr challenge to make perry the period blood This is a small site that has a short story of perry the period blood It is based off an inside joke with my friends I challenged myself to build it in an hour I guess it worked, now i can do something useful!
Ships:
I made a site that shows a short story of “perry the period blood” It is not intended as educational or informative mainly just a light spin on a topic rarely talked about....
|
1792878753.3268752
|
1793742753.3268752
|
|
10063
|
Slack Bot by @Lunixx | Stardance
|
Lunixx
|
1
|
3.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T22:34:29Z", "hours": 3.0, "multiplier": 1.75, "payout": 3, "blessing": "neutral", "text": "I made a slack bot :D learned a lot about VS code and slack. I’m proud that I didn’t give up even when I wanted to. this has so far been an amazing learning opportunity to get more verse with programming and creating projects. :D", "repo": "https://github.com/jasonweng3141592-pixel/slack_bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0BCDTMAHNV"}]...
|
[{"post_id": 9544, "ts": "2026 [{"post_id": 9544, "ts": "2026-06-15T22:27:57Z", "hours": 1.1458, "text": "finally have it running 24/7 :D after restarting."}, {"post_id": 6871, "ts": "2026-06-11T14:58:47Z", "hours": 2.1953, "text": "got the bot to work now I just have to run it on nest :D"}]...
|
Title: Slack Bot by @Lunixx | Stardance
Devlogs:
Title: Slack Bot by @Lunixx | Stardance
Devlogs:
got the bot to work now I just have to run it on nest :D
finally have it running 24/7 :D after restarting.
Ships:
I made a slack bot :D learned a lot about VS code and slack. I’m proud that I didn’t give up even when I wanted to. this has so far been an amazing learning opportunity to get more verse with programming and creating projects. :D...
|
1792810411.3750672
|
1792896811.3750672
|
|
3379
|
Catch the parcel by @srijayan | Stardance
|
srijayan
|
0
|
0.89
|
0
|
[]
|
[{"post_id": 9557, "ts": "2026 [{"post_id": 9557, "ts": "2026-06-15T22:40:58Z", "hours": 0.8922, "text": "Here’s what I’m working on: I’m building a game called “Catch the parcel” and I took inspiration from a game i used to play on my granny’s nokia when i was little (I don’t exactly know what it was called, but I will replicate the idea behind that game). Here’s how the game works: The setting is a blue background, with green ground, and there is a cart on the ground which can be moved in the x direction, there are parcels falling from the sky, at the beginning they are falling slow but as the time progresses, the rate of parcels falling down would increase. The goal of this game is to collect as many parcels, while making sure no more than 3 parcels fall on the ground. As of now, I just planned one difficulty level, after completing that I would build multiple speed levels, and then later leaderboards and stuff. That’s basically what I’ve figured out till now, I will start building the project now. I have attached a picture/sketch of how it will look like. (Please dont mind my drawing)"}]...
|
Title: Catch the parcel by @srijayan | Stardance
Title: Catch the parcel by @srijayan | Stardance
Devlogs:
Here’s what I’m working on: I’m building a game called “Catch the parcel” and I took inspiration from a game i used to play on my granny’s nokia when i was little (I don’t exactly know what it was called, but I will replicate the idea behind that game). Here’s how the game works: The setting is a blue background, with green ground, and there is a cart on the ground which can be moved in the x direction, there are parcels falling from the sky, at the beginning they are falling slow but as the time progresses, the rate of parcels falling down would increase. The goal of this game is to collect as many parcels, while making sure no more than 3 parcels fall on the ground. As of now, I just planned one difficulty level, after completing that I would build multiple speed levels, and then later leaderboards and stuff. That’s basically what I’ve figured out till now, I will start building the project now. I have attached a picture/sketch of how it will look like. (Please dont mind my drawing)...
|
1792529699.5005796
|
1793134499.5005796
|
|
6665
|
Spotify Screen by @Matthew | Stardance
|
Matthew
|
1
|
12.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T03:49:20Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Spotify player for my desk. It is kind of similar to the Spotify Car Thing, but a lot less advanced. I had many UI challenges, because this was my first lvgl project. I also had challenges of refreshing the authentication, it kept returning an HTML 400 error no matter what I did, but I eventually got it fixed. You do have to own an Arduino GIGA R1 and a Display Shield to go with it to test it, but I included a video of what it can do.", "repo": "https://github.com/matthew0112/spotifyScreen", "demo": ""}]...
|
[{"post_id": 9569, "ts": "2026 [{"post_id": 9569, "ts": "2026-06-15T22:53:07Z", "hours": 0.5494, "text": "I added documentation to get ready for shipping"}, {"post_id": 9536, "ts": "2026-06-15T22:15:29Z", "hours": 0.9539, "text": "I added Time Labels, made the progress somewhat smoother, and made it display all of the artists. It has gotten a lot simpler to add things, because It’s just small tweaks to the strong base I already have."}, {"post_id": 9415, "ts": "2026-06-15T19:28:57Z", "hours": 1.1864, "text": "I was able to add the repeat and shuffle buttons to my ui. They change color when active. Now I want to add the little text to say how much time is left"}, {"post_id": 9055, "ts": "2026-06-15T03:40:14Z", "hours": 4.7778, "text": "I got a UI working. I decided the album image was a little bit to complicated for me right now, so I have playback controls, seeking, and the title. I want to add the repeat and shuffle buttons"}, {"post_id": 7875, "ts": "2026-06-13T04:16:50Z", "hours": 1.7183, "text": "I got a basic lvgl ui working, the buttons work, however there is no seeking or getting what song is playing yet"}, {"post_id": 2548, "ts": "2026-06-05T02:52:10Z", "hours": 0.5444, "text": "I got a Connecting UI, when connecting to WiFi. I also rotated the screen to landscape. I’m currently exploring switching to lvgl for improved ui"}, {"post_id": 1890, "ts": "2026-06-04T03:27:08Z", "hours": 1.4294, "text": "I got a basic, temporary UI to test out the on click to pause"}, {"post_id": 1670, "ts": "2026-06-03T20:13:30Z", "hours": 0.3778, "text": "I got the Wifi Working"}]...
|
Title: Spotify Screen by @Matthew | Stardance
Dev Title: Spotify Screen by @Matthew | Stardance
Devlogs:
I got the Wifi Working
I got a basic, temporary UI to test out the on click to pause
I got a Connecting UI, when connecting to WiFi. I also rotated the screen to landscape. I’m currently exploring switching to lvgl for improved ui
I got a basic lvgl ui working, the buttons work, however there is no seeking or getting what song is playing yet
I got a UI working. I decided the album image was a little bit to complicated for me right now, so I have playback controls, seeking, and the title. I want to add the repeat and shuffle buttons
I was able to add the repeat and shuffle buttons to my ui. They change color when active. Now I want to add the little text to say how much time is left
I added Time Labels, made the progress somewhat smoother, and made it display all of the artists. It has gotten a lot simpler to add things, because It’s just small tweaks to the strong base I already have.
I added documentation to get ready for shipping
Ships:
I made a Spotify player for my desk. It is kind of similar to the Spotify Car Thing, but a lot less advanced. I had many UI challenges, because this was my first lvgl project. I also had challenges of refreshing the authentication, it kept returning an HTML 400 error no matter what I did, but I eventually got it fixed. You do have to own an Arduino GIGA R1 and a Display Shield to go with it to test it, but I included a video of what it can do....
|
1792824989.0044668
|
1792911389.0044668
|
|
4125
|
PHANTOM_LEGION by @PhantomPilot4729 | Stardance
|
PhantomPilot4729
|
1
|
12.92
|
54
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-04T04:32:14Z", "hours": 8.0, "multiplier": 7.76, "payout": 54, "blessing": "neutral", "text": "So, I made a program that is largely for data mining for specific things on the internet. Uses OSINT tools such as Maltego, as well as internet archives. Best way to launch it is osint-agent gui, if it doesn’t want to work all the time.", "repo": "https://github.com/PhantomPilot4729/PHANTOM_LEIGON", "demo": "https://github.com/PhantomPilot4729/PHANTOM_LEGION/releases/tag/MK1.0.0-DEMO"}]...
|
[{"post_id": 9573, "ts": "2026 [{"post_id": 9573, "ts": "2026-06-15T23:01:17Z", "hours": 4.9203, "text": "So, Currently doing some research on the next stages for the PHANTOM_LEGION project. Specifically, improving the quality of the ship, migrating to C# or CSS or C++ for more optimized performance per-device, as well as considering using TOR to search the web to help maximize privacy. In addition, R&D has begun for a man-portable unit that can gather real-time info on devices around the user."}, {"post_id": 1883, "ts": "2026-06-04T03:15:19Z", "hours": 3.4153, "text": "Upped the ESP32 Firmware, patched holes. Now passes all github tests, seems to be working flawlessly. Here’s the current scuffed UI"}, {"post_id": 1187, "ts": "2026-06-03T01:23:40Z", "hours": 3.2028, "text": "Largely been working on making the portable version, involved a crap ton of python and trying to figure out how to use the arduino proprietary C"}, {"post_id": 644, "ts": "2026-06-02T05:00:13Z", "hours": 0.8869, "text": "Patching holes, trying to add ESP32 server hosting, so I can access this from anywhere in the world. driving me crazy though how it’s not working properly."}]...
|
Title: PHANTOM_LEGION by @PhantomPilot4729 | Stard Title: PHANTOM_LEGION by @PhantomPilot4729 | Stardance
Devlogs:
Patching holes, trying to add ESP32 server hosting, so I can access this from anywhere in the world. driving me crazy though how it’s not working properly.
Largely been working on making the portable version, involved a crap ton of python and trying to figure out how to use the arduino proprietary C
Upped the ESP32 Firmware, patched holes. Now passes all github tests, seems to be working flawlessly. Here’s the current scuffed UI
So, Currently doing some research on the next stages for the PHANTOM_LEGION project. Specifically, improving the quality of the ship, migrating to C# or CSS or C++ for more optimized performance per-device, as well as considering using TOR to search the web to help maximize privacy. In addition, R&D has begun for a man-portable unit that can gather real-time info on devices around the user.
Ships:
So, I made a program that is largely for data mining for specific things on the internet. Uses OSINT tools such as Maltego, as well as internet archives. Best way to launch it is osint-agent gui, if it doesn’t want to work all the time....
|
1792835242.3097553
|
1792921642.3097553
|
|
15747
|
SAT Math Tutoring Help Extension by @charliem | St SAT Math Tutoring Help Extension by @charliem | Stardance...
|
charliem
|
1
|
0.0
|
9
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T14:55:07Z", "hours": 0.0, "multiplier": 8.58, "payout": 9, "blessing": "neutral", "text": "Note: even thoughit says it only took 1h i moved around folders and really took closer to 5h, look at screenshot. What I made I built the Math SAT Browser Extension Tutor (with cursor), a lightweight in-browser assistant that provides real-time AI-driven guidance on any SAT practice site. By running models entirely locally, the tool allows students to scan an infinite number of math problems without encountering subscription barriers or API rate limits. Also provides a cool plant that grows with you as you study to encourage staying focused. After study session khan academy links to topics scanned will be provided for further help. What was challenging LaTeX Corruption: Local models frequently produced “glued” prose or broken LaTeX syntax which required extensive regex-based repair modules to normalize text and equation formatting. What we’re proud of User Engagement: The integration of session-based tracking and “plant health” focus mechanics provides a tangible and gamified incentive for students to stay on task. Performance: By utilizing local Ollama models with a multi-stage extraction and cleanup process, we achieved a high-speed tutoring experience that functions locally without heavy reliance on external API latency. How to test the project To test the extension, you will need to clone the repository from the GitHub link. Local Setup: Since the extension runs locally, ensure you have Ollama installed and the qwen2.5vl:7b and qwen2.5:7b models pulled. Then navigate to any SAT practice site of your choice, open the extension sidebar, and use the scan feature on a math problem to initiate the AI tutoring session.", "repo": "https://github.com/Cm30V/satmathextension", "demo": "https://github.com/Cm30V/satmathextension/releases/tag/zip%2Fcrx"}]...
|
[{"post_id": 9574, "ts": "2026 [{"post_id": 9574, "ts": "2026-06-15T23:03:24Z", "hours": 0.0, "text": "Added cleaning up of AI output to handle corrupt REGEX. Scraped Khan Academy’s website so after you finish your study session the AI gives you links to topics you needed help on"}]...
|
Title: SAT Math Tutoring Help Extension by @charli Title: SAT Math Tutoring Help Extension by @charliem | Stardance
Devlogs:
Added cleaning up of AI output to handle corrupt REGEX. Scraped Khan Academy’s website so after you finish your study session the AI gives you links to topics you needed help on
Ships:
Note: even thoughit says it only took 1h i moved around folders and really took closer to 5h, look at screenshot. What I made I built the Math SAT Browser Extension Tutor (with cursor), a lightweight in-browser assistant that provides real-time AI-driven guidance on any SAT practice site. By running models entirely locally, the tool allows students to scan an infinite number of math problems without encountering subscription barriers or API rate limits. Also provides a cool plant that grows with you as you study to encourage staying focused. After study session khan academy links to topics scanned will be provided for further help. What was challenging LaTeX Corruption: Local models frequently produced “glued” prose or broken LaTeX syntax which required extensive regex-based repair modules to normalize text and equation formatting. What we’re proud of User Engagement: The integration of session-based tracking and “plant health” focus mechanics provides a tangible and gamified incentive for students to stay on task. Performance: By utilizing local Ollama models with a multi-stage extraction and cleanup process, we achieved a high-speed tutoring experience that functions locally without heavy reliance on external API latency. How to test the project To test the extension, you will need to clone the repository from the GitHub link. Local Setup: Since the extension runs locally, ensure you have Ollama installed and the qwen2.5vl:7b and qwen2.5:7b models pulled. Then navigate to any SAT practice site of your choice, open the extension sidebar, and use the scan feature on a math problem to initiate the AI tutoring session....
|
1792824528.7303245
|
1792910928.7303245
|
|
18185
|
Noesis by @Anaximandrus | Stardance
|
Anaximandrus
|
0
|
4.34
|
0
|
[]
|
[{"post_id": 9578, "ts": "2026 [{"post_id": 9578, "ts": "2026-06-15T23:14:08Z", "hours": 4.3444, "text": "Devlog #1: Kicking off the project. I started off with the idea of having all L.L.M.s work inside it’s specific folder and writing down memories saved themselves. Yeah, that’s a bad idea. They’re stochastic. They hallucinate. Unreliable. So I changed my plan: instead of having them write down misinformation, why not “interrogate” their terminals myself and let the actual machine do some of the work? Using FTS5 and SQLite along with a bunch of .md files, Noesis will allow for cross-L.L.M.s collaboration and a much bigger memory. Not much has been implemented so far tho… but it’s just the beginning! 🐱 P.S.: inspired by Claudian ( https://github.com/YishenTu/claudian )"}]...
|
Title: Noesis by @Anaximandrus | Stardance
Devlog Title: Noesis by @Anaximandrus | Stardance
Devlogs:
Devlog #1: Kicking off the project. I started off with the idea of having all L.L.M.s work inside it’s specific folder and writing down memories saved themselves. Yeah, that’s a bad idea. They’re stochastic. They hallucinate. Unreliable. So I changed my plan: instead of having them write down misinformation, why not “interrogate” their terminals myself and let the actual machine do some of the work? Using FTS5 and SQLite along with a bunch of .md files, Noesis will allow for cross-L.L.M.s collaboration and a much bigger memory. Not much has been implemented so far tho… but it’s just the beginning! 🐱 P.S.: inspired by Claudian ( https://github.com/YishenTu/claudian )...
|
1792673557.014417
|
1793278357.014417
|
|
16857
|
KiwiCubed by @Kiwian | Stardance
|
Kiwian
|
0
|
10.88
|
0
|
[]
|
[{"post_id": 9580, "ts": "2026 [{"post_id": 9580, "ts": "2026-06-15T23:18:58Z", "hours": 7.7656, "text": "Thread safety and OpenGL Threads are a huge part of KiwiCubed. When running an integrated server, you are already running 5 central threads at once (render/tick/network for the client, and tick/network for the server). And getting these threads to work together is rarely simple. After I had first finished getting the server to send over player join packets, and getting player models to parse and render correctly, I figured I’d be done. However, whenever the client would try to render a new player, I’d get a weird OpenGL error saying that no vertex array object was bound. This was weird, because I have a simple abstraction layer over OpenGL, that currently is very aggressive with making sure that no errors like this occur, forsaking a small amount of performance (because OpenGL is not what I want to spend my time debugging when implementing features). Because of this, it should have been basically impossible for the program to ever be in an invalid OpenGL state. After adding some logs to see the exact ID of every vertex array object generated, saw that the ID for the player was always 0, and finally realized the problem. When the client received a packet informing it of a new entity, the NetworkHandler would call a callback registered by a different part of the program. This callback would immediately spawn and setup the full entity. Crucially, for entities with EntityRenderableComponent ‘s, this included generating OpenGL buffers and uploading data to them. The thing is, LiteNetLib (the networking library I use) doesn’t run on the main thread. It uses some worker thread(s?) so it can send and receive packets asynchronously. This meant that, all entity setup code from network-received entities would be run on a background thread. If you don’t know, OpenGL is very thread aware, and only lets you do operations from the thread where the OpenGL context is generated. You can manually set up a “shared context”, but the shared context actually doesn’t support specifically vertex array object creation, which makes it useless for my purposes anyways. Basically, what would happen, is that the NetworkHandler would receive the entity and set it up on that thread, and then OpenGL would SILENTLY fail the several operations involved in setting up an entity. Moral of the story: I hate threading. And also why does OpenGL not give errors for trying to use it from the wrong thread? wtf (I used lazy initialization to fix it. Kind of a band-aid fix but it was the best I could think of at the time)"}, {"post_id": 7295, "ts": "2026-06-12T05:00:09Z", "hours": 3.1147, "text": "Finally fixed a client-side rendering issue I introduced while trying to implement multiplayer. See, for normal entities, their positions are only updated roughly every 3 frames (1 tick w/ 20tps & 60fps). Because of this, the render thread actually keeps track of each entity’s current and last position, and then interpolates between those positions based on how far through the current tick is when rendering. This is the same method I used for determining the camera position for the player. However, there is an issue with this method. It’s very hard to get the tick thread to run on an exact 50ms interval because of OS-level limitations. Because of this, based on how the render/tick threads are aligned, the render thread may find that the value used for seeing how far along the current tick is (usually 0.0-1.0) is actually 1.0+. When this happens, it causes visible stuttering and jittering with entity positions. Now, this issue doesn’t really affect entities, as there is a simple solution, which is to simply keep a slightly larger buffer of entity positions. Then, instead of using the current/last tick positions to interpolate, it uses the 2/3 last positions in the buffer, allowing the tick thread some wiggle room. Of course, this doesn’t work for the player, which needs to update visually as quickly as possible. And I finally made the connection that this method I was planning to use on other entities wouldn’t work on the player. So I’ve finally changed the engine to query player input and apply player physics every frame, separate from all other entities, and I’ve refactored the physics system to be able to handle being called at differing rates (20tps vs 60fps);"}]...
|
Title: KiwiCubed by @Kiwian | Stardance
Devlogs:
Title: KiwiCubed by @Kiwian | Stardance
Devlogs:
Finally fixed a client-side rendering issue I introduced while trying to implement multiplayer. See, for normal entities, their positions are only updated roughly every 3 frames (1 tick w/ 20tps & 60fps). Because of this, the render thread actually keeps track of each entity’s current and last position, and then interpolates between those positions based on how far through the current tick is when rendering. This is the same method I used for determining the camera position for the player. However, there is an issue with this method. It’s very hard to get the tick thread to run on an exact 50ms interval because of OS-level limitations. Because of this, based on how the render/tick threads are aligned, the render thread may find that the value used for seeing how far along the current tick is (usually 0.0-1.0) is actually 1.0+. When this happens, it causes visible stuttering and jittering with entity positions. Now, this issue doesn’t really affect entities, as there is a simple solution, which is to simply keep a slightly larger buffer of entity positions. Then, instead of using the current/last tick positions to interpolate, it uses the 2/3 last positions in the buffer, allowing the tick thread some wiggle room. Of course, this doesn’t work for the player, which needs to update visually as quickly as possible. And I finally made the connection that this method I was planning to use on other entities wouldn’t work on the player. So I’ve finally changed the engine to query player input and apply player physics every frame, separate from all other entities, and I’ve refactored the physics system to be able to handle being called at differing rates (20tps vs 60fps);
Thread safety and OpenGL Threads are a huge part of KiwiCubed. When running an integrated server, you are already running 5 central threads at once (render/tick/network for the client, and tick/network for the server). And getting these threads to work together is rarely simple. After I had first finished getting the server to send over player join packets, and getting player models to parse and render correctly, I figured I’d be done. However, whenever the client would try to render a new player, I’d get a weird OpenGL error saying that no vertex array object was bound. This was weird, because I have a simple abstraction layer over OpenGL, that currently is very aggressive with making sure that no errors like this occur, forsaking a small amount of performance (because OpenGL is not what I want to spend my time debugging when implementing features). Because of this, it should have been basically impossible for the program to ever be in an invalid OpenGL state. After adding some logs to see the exact ID of every vertex array object generated, saw that the ID for the player was always 0, and finally realized the problem. When the client received a packet informing it of a new entity, the NetworkHandler would call a callback registered by a different part of the program. This callback would immediately spawn and setup the full entity. Crucially, for entities with EntityRenderableComponent ‘s, this included generating OpenGL buffers and uploading data to them. The thing is, LiteNetLib (the networking library I use) doesn’t run on the main thread. It uses some worker thread(s?) so it can send and receive packets asynchronously. This meant that, all entity setup code from network-received entities would be run on a background thread. If you don’t know, OpenGL is very thread aware, and only lets you do operations from the thread where the OpenGL context is generated. You can manually set up a “shared context”, but the shared context actually doesn’t support specifically vertex array object creation, which makes it useless for my purposes anyways. Basically, what would happen, is that the NetworkHandler would receive the entity and set it up on that thread, and then OpenGL would SILENTLY fail the several operations involved in setting up an entity. Moral of the story: I hate threading. And also why does OpenGL not give errors for trying to use it from the wrong thread? wtf (I used lazy initialization to fix it. Kind of a band-aid fix but it was the best I could think of at the time)...
|
1792659287.447789
|
1793264087.447789
|
|
17542
|
Lane Assignment Display by @Chrissy | Stardance
|
Chrissy
|
0
|
3.17
|
0
|
[]
|
[{"post_id": 9583, "ts": "2026 [{"post_id": 9583, "ts": "2026-06-15T23:23:37Z", "hours": 3.1669, "text": "I’m working on a small display that sits on your dashboard and uses public data + your GPS info to tell you what each lane is. Next up: cleaning up code, accepting lane data, accepting GPS data, and thinking about hardware (I love hardware)"}]...
|
Title: Lane Assignment Display by @Chrissy | Stard Title: Lane Assignment Display by @Chrissy | Stardance
Devlogs:
I’m working on a small display that sits on your dashboard and uses public data + your GPS info to tell you what each lane is. Next up: cleaning up code, accepting lane data, accepting GPS data, and thinking about hardware (I love hardware)...
|
1792756198.0206597
|
1793360998.0206597
|
|
13556
|
Self Watering Flower Pot by @Chrissy | Stardance
|
Chrissy
|
0
|
4.2
|
0
|
[]
|
[{"post_id": 9585, "ts": "2026 [{"post_id": 9585, "ts": "2026-06-15T23:29:20Z", "hours": 2.1864, "text": "Moving on to the next stage of my self watering flower pot: CAD! I made a modular system that lets you change sizes of parts. Each of the three parts you see here connects under the central part ( the pot holder ) using basic “keys”. These make it so that any of the parts can change size without having to reprint everything, and so that it can be printed on a smaller printer. The reason the peripheral parts are so far away, is because the pot will be quite large. I’m using 3d printed pins at the moment to hold the custom PCB in, but when I tried it, my first version had bad tolerances, and my second version, while fitting, the pins broke easily and didn’t hold it very well. I also worked on code. I have done quite a bit for code. When powered, the board hosts its own wifi. If you join it and go to its IP address, you can see a website that IS the UI for the board, with controls and data and stuff. You can also give it your wifi and connect to the board without leaving the comfort of your network. Finally, (while I forgot to track time for this,) I finally soldered the pump on. It works, but the board consistently browns out 8/10 times when I try to run it. I ordered a better power supply to try to fix it. I knew I should’ve added those capacitors!"}, {"post_id": 5271, "ts": "2026-06-08T23:54:15Z", "hours": 2.0139, "text": "Testing the soil moisture sensor for the first time. I started the project before I joined stardance; this project is a self watering flower pot, I am using an ESP 32 module to power it. Today, I got my capacitive soil sensor from Amazon, and it seems to work. I tested it using the website I had the ESP host. Rather than putting a screen on, I’m having it host a wifi network, then you can go to it’s IP adress, and you can see the UI. When I wrapped the sensor in a moist towel, the output dropped from 3500 or so, to 2650 or so. This is promising. When I get my MOSFETs, I will solder one on, and test out the motor! Then, it’s a bit of SolidWorks to make a housing and we’re good!"}]...
|
Title: Self Watering Flower Pot by @Chrissy | Star Title: Self Watering Flower Pot by @Chrissy | Stardance
Devlogs:
Testing the soil moisture sensor for the first time. I started the project before I joined stardance; this project is a self watering flower pot, I am using an ESP 32 module to power it. Today, I got my capacitive soil sensor from Amazon, and it seems to work. I tested it using the website I had the ESP host. Rather than putting a screen on, I’m having it host a wifi network, then you can go to it’s IP adress, and you can see the UI. When I wrapped the sensor in a moist towel, the output dropped from 3500 or so, to 2650 or so. This is promising. When I get my MOSFETs, I will solder one on, and test out the motor! Then, it’s a bit of SolidWorks to make a housing and we’re good!
Moving on to the next stage of my self watering flower pot: CAD! I made a modular system that lets you change sizes of parts. Each of the three parts you see here connects under the central part ( the pot holder ) using basic “keys”. These make it so that any of the parts can change size without having to reprint everything, and so that it can be printed on a smaller printer. The reason the peripheral parts are so far away, is because the pot will be quite large. I’m using 3d printed pins at the moment to hold the custom PCB in, but when I tried it, my first version had bad tolerances, and my second version, while fitting, the pins broke easily and didn’t hold it very well. I also worked on code. I have done quite a bit for code. When powered, the board hosts its own wifi. If you join it and go to its IP address, you can see a website that IS the UI for the board, with controls and data and stuff. You can also give it your wifi and connect to the board without leaving the comfort of your network. Finally, (while I forgot to track time for this,) I finally soldered the pump on. It works, but the board consistently browns out 8/10 times when I try to run it. I ordered a better power supply to try to fix it. I knew I should’ve added those capacitors!...
|
1792731235.1267645
|
1793336035.1267645
|