|
19155
|
DungeonStacks by @ASOM | Stardance
|
ASOM
|
2
|
40.0
|
567
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T06:05:07Z", "hours": 15.0, "multiplier": 19.44, "payout": 298, "blessing": "neutral", "text": "In this ship, I have addressed commonly reported game issues and bugs. Additionally, I refactored the messiest parts of the codebase to improve to improve maintainability and introduced several UX enhancements. Resolved common community-reported issues and glitches Refactored core legacy sections for cleaner and more robust code Added dynamic screenshake effects Implemented popup numbers (combat/damage indicators) Added an in-game tutorial system More detailed info can be found in git log history", "repo": "https://github.com/ASOM846/DungeonStacks", "demo": "https://asom846.itch.io/dungeoncards"}, {"ship_num": 2, "ts": "2026-06-19T15:08:45Z", "hours": 25.0, "multiplier": 10.72, "payout": 269, "blessing": "neutral", "text": "I have created a card game inspired by Scoundrel. The most challenging part was managing a large amount of interactions between cards and making the game visually appealing.", "repo": "https://github.com/ASOM846/DungeonStacks", "demo": "https://asom846.itch.io/dungeoncards"}]...
|
[{"post_id": 19797, "ts": "202 [{"post_id": 19797, "ts": "2026-07-01T05:47:13Z", "hours": 0.6911, "text": "DungeonCards V0.1.10 Finishing touches before shipping Key features implemented in this version: Updated game version on itch.io Updated readme file Checkout Git log for additional info Cheers"}, {"post_id": 16946, "ts": "2026-06-27T14:50:33Z", "hours": 4.77, "text": "DungeonCards V0.1.9 UX update Key features implemented in this version: Architecture and game-play changes Implemented new TutorialState class and entry from main menu. Updated FloatingText now it’s starting size depends on the amount of damage dealt / hp healed Added ANVIL card, allowing player to repair weapon Added textures for new items Deleted unused includes Window is now resizable Added missing descriptions for items Changed buttons size in main menu Acknowledged and fixed bugs Wrong cards defeated counting in InteractionManager EnemyVsShield using wrong value when triggering FloatingText Blocked player from using items located in backpack, now player has to swap them with one item in hand Checkout Git log for additional info Cheers"}, {"post_id": 15711, "ts": "2026-06-25T15:45:38Z", "hours": 4.2694, "text": "DungeonCards V0.1.8 Key features implemented in this version: Architecture changes Simplified InteractionManager now instead of passing lots of arguments it passes new InteractionContext struct witch contains necessary variables. Game-play and graphic changes Key card can be used to open the chest Chest card can be open using Key contains huge amount of coins score Durability indicator for SPELL e.g. LIVESTEAL Added floating text it is used for displaying damage, healing etc. -Added swapping items between hands and backpack,. Be aware that when you want to for instance swap WEAPON_UPGRADE with WEAPON you need to select weapon first, other ways the weapon upgrade effect will apply itself to weapon. It is build like this to maintain simple compatibility with android build, that hopefully, will be out soon:D Checkout Git log for additional info Cheers"}, {"post_id": 14971, "ts": "2026-06-24T09:51:18Z", "hours": 5.5831, "text": "DungeonCards V0.1.7 Implemented features: Architecture changes: Cleaned card generation logic Implemented new CardGenerator class Added extra weapon textures Switched from random weapon generating to preset weapon configs Added weapon durability and durability indicator Added weapon max/min damage to make the game more random"}, {"post_id": 11958, "ts": "2026-06-19T14:49:54Z", "hours": 3.2069, "text": "DungeonCards V0.1.6 Finishing touches Implemented features: Implemented auto window resizing and auto item positioning Extracted piles aligning logic to new function Implemented current run progress bar Fully implemented Score and card description window in bottom left Implemented more weapon graphics and names Fixed ice wand graphic Implemented new Game Over / Game Won screen with return to menu button Implemented Flee button And much more e.g. bug fixes and little touches"}, {"post_id": 11873, "ts": "2026-06-19T10:40:48Z", "hours": 2.6083, "text": "DungeonCards V0.1.5 (old DungeonStacks) Menu and WindowManager Implemented features: Architecture changes: Extracted window initialization and handling to new WindowManager class New Menu class handled form WindowManager Graphics changes Custom font in menu (no plans on implementing in anywhere else) Game title drawing with shadow"}, {"post_id": 11393, "ts": "2026-06-18T17:29:36Z", "hours": 2.7969, "text": "DungeonCards V0.1.4 Graphics update Implemented features: Graphics changes: Background texture (thanks to NanoBanana) Vignette drawing Better card description rendering When card is hovered it pops up a bit making game more interactive and immersive Hands drawing itch.io Architecture changes: Better card interactions e.g. now attacking with weapon from backpack is impossible Empty piles e.g. left hand is now lighted up if selected item can be moved to it"}, {"post_id": 11223, "ts": "2026-06-18T11:27:00Z", "hours": 2.4167, "text": "DungeonCards 0.1.3 Implemented features: Graphics :D thanks to 0x72 assets from itch.io More spells Added missing resolving interactions TO-DO Implement remaining graphics Better UI Start menu High-score Checkout previous TO-DO"}, {"post_id": 11121, "ts": "2026-06-18T05:56:57Z", "hours": 4.3942, "text": "DungeonCardsV0.1.2 Implemented features: Added new item type SPELL Added new spells and graphics Added interactions for spells Added context aware highlighting Added hover card description drawing TO-DO Better graphics and UI Start Menu High-score"}, {"post_id": 10524, "ts": "2026-06-17T08:44:35Z", "hours": 2.7008, "text": "DungeonStack V0.1.1 Architecture changes: Shaped and improved core mechanic. Better randomness, now using weighted pool Implemented features: Added damage absorption item (shield)"}, {"post_id": 9919, "ts": "2026-06-16T13:02:25Z", "hours": 2.4494, "text": "DungeonStacks V0.1.0 First build to be called something playable. Working on improving core logic. Architecture changes: Extracted interactions to InteractionManager (split monolith logic into smaller methods) Added Element enum to Card struct to prevent “if-else” explosion Implemented features: Temporary drawings using Raylib shapes Added fire and ice wands Added fire and ice enemies Added cards counter under piles Fixed a bug where card elements were inherited by subsequent random spawns TO-DO / Next Steps: Handle victory/defeat conditions (Player HP <= 0) Resolve text clipping issues using text wrapping Replace temporary shapes with custom graphics"}, {"post_id": 9850, "ts": "2026-06-16T09:38:11Z", "hours": 3.4497, "text": "DungeonStacks working on core mechanics and essentials Implemented features: Text centering on cards Lose condition Architecture changes: Extracted game logic to separate classes e.g. Game class PileManager class Pile class Ui class Removed GameState class Need to be implemented: Better visuals start menu more types of items"}, {"post_id": 9263, "ts": "2026-06-15T15:35:52Z", "hours": 1.1214, "text": "DungeonStacks Core mechanics and essentials Currently features: Stack-Based Architecture Tactical combat system Dynamic UI and Centering Card eneration Interaction logic Upcoming features: Win/lose condition Visual feedback More interactions More card types"}]...
|
Title: DungeonStacks by @ASOM | Stardance
Devlogs Title: DungeonStacks by @ASOM | Stardance
Devlogs:
DungeonStacks Core mechanics and essentials Currently features: Stack-Based Architecture Tactical combat system Dynamic UI and Centering Card eneration Interaction logic Upcoming features: Win/lose condition Visual feedback More interactions More card types
DungeonStacks working on core mechanics and essentials Implemented features: Text centering on cards Lose condition Architecture changes: Extracted game logic to separate classes e.g. Game class PileManager class Pile class Ui class Removed GameState class Need to be implemented: Better visuals start menu more types of items
DungeonStacks V0.1.0 First build to be called something playable. Working on improving core logic. Architecture changes: Extracted interactions to InteractionManager (split monolith logic into smaller methods) Added Element enum to Card struct to prevent “if-else” explosion Implemented features: Temporary drawings using Raylib shapes Added fire and ice wands Added fire and ice enemies Added cards counter under piles Fixed a bug where card elements were inherited by subsequent random spawns TO-DO / Next Steps: Handle victory/defeat conditions (Player HP <= 0) Resolve text clipping issues using text wrapping Replace temporary shapes with custom graphics
DungeonStack V0.1.1 Architecture changes: Shaped and improved core mechanic. Better randomness, now using weighted pool Implemented features: Added damage absorption item (shield)
DungeonCardsV0.1.2 Implemented features: Added new item type SPELL Added new spells and graphics Added interactions for spells Added context aware highlighting Added hover card description drawing TO-DO Better graphics and UI Start Menu High-score
DungeonCards 0.1.3 Implemented features: Graphics :D thanks to 0x72 assets from itch.io More spells Added missing resolving interactions TO-DO Implement remaining graphics Better UI Start menu High-score Checkout previous TO-DO
DungeonCards V0.1.4 Graphics update Implemented features: Graphics changes: Background texture (thanks to NanoBanana) Vignette drawing Better card description rendering When card is hovered it pops up a bit making game more interactive and immersive Hands drawing itch.io Architecture changes: Better card interactions e.g. now attacking with weapon from backpack is impossible Empty piles e.g. left hand is now lighted up if selected item can be moved to it
DungeonCards V0.1.5 (old DungeonStacks) Menu and WindowManager Implemented features: Architecture changes: Extracted window initialization and handling to new WindowManager class New Menu class handled form WindowManager Graphics changes Custom font in menu (no plans on implementing in anywhere else) Game title drawing with shadow
DungeonCards V0.1.6 Finishing touches Implemented features: Implemented auto window resizing and auto item positioning Extracted piles aligning logic to new function Implemented current run progress bar Fully implemented Score and card description window in bottom left Implemented more weapon graphics and names Fixed ice wand graphic Implemented new Game Over / Game Won screen with return to menu button Implemented Flee button And much more e.g. bug fixes and little touches
DungeonCards V0.1.7 Implemented features: Architecture changes: Cleaned card generation logic Implemented new CardGenerator class Added extra weapon textures Switched from random weapon generating to preset weapon configs Added weapon durability and durability indicator Added weapon max/min damage to make the game more random
DungeonCards V0.1.8 Key features implemented in this version: Architecture changes Simplified InteractionManager now instead of passing lots of arguments it passes new InteractionContext struct witch contains necessary variables. Game-play and graphic changes Key card can be used to open the chest Chest card can be open using Key contains huge amount of coins score Durability indicator for SPELL e.g. LIVESTEAL Added floating text it is used for displaying damage, healing etc. -Added swapping items between hands and backpack,. Be aware that when you want to for instance swap WEAPON_UPGRADE with WEAPON you need to select weapon first, other ways the weapon upgrade effect will apply itself to weapon. It is build like this to maintain simple compatibility with android build, that hopefully, will be out soon:D Checkout Git log for additional info Cheers
DungeonCards V0.1.9 UX update Key features implemented in this version: Architecture and game-play changes Implemented new TutorialState class and entry from main menu. Updated FloatingText now it’s starting size depends on the amount of damage dealt / hp healed Added ANVIL card, allowing player to repair weapon Added textures for new items Deleted unused includes Window is now resizable Added missing descriptions for items Changed buttons size in main menu Acknowledged and fixed bugs Wrong cards defeated counting in InteractionManager EnemyVsShield using wrong value when triggering FloatingText Blocked player from using items located in backpack, now player has to swap them with one item in hand Checkout Git log for additional info Cheers
DungeonCards V0.1.10 Finishing touches before shipping Key features implemented in this version: Updated game version on itch.io Updated readme file Checkout Git log for additional info Cheers
Ships:
I have created a card game inspired by Scoundrel. The most challenging part was managing a large amount of interactions between cards and making the game visually appealing.
In this ship, I have addressed commonly reported game issues and bugs. Additionally, I refactored the messiest parts of the codebase to improve to improve maintainability and introduced several UX enhancements. Resolved common community-reported issues and glitches Refactored core legacy sections for cleaner and more robust code Added dynamic screenshake effects Implemented popup numbers (combat/damage indicators) Added an in-game tutorial system More detailed info can be found in git log history...
|
1792993795.9576266
|
1793080195.9576266
|
|
8128
|
Realm Panel by @Stijn | Stardance
|
Stijn
|
3
|
65.0
|
565
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-21T01:12:05Z", "hours": 4.0, "multiplier": 17.09, "payout": 68, "blessing": "neutral", "text": "Just a beautiful panel", "repo": "https://github.com/realmctl/panel", "demo": "https://demo.realmctl.com/"}, {"ship_num": 2, "ts": "2026-07-07T16:03:10Z", "hours": 48.0, "multiplier": 15.55, "payout": 318, "blessing": "neutral", "text": "Realm is a modern, ground-up reimagining of the Pterodactyl Panel, rebuilt from scratch with a focus on performance, maintainability, automation, and developer experience. Instead of patching an existing codebase, Realm introduces a cleaner architecture designed for the future of game server hosting. During Stardance, Realm evolved from a prototype into a much more complete server management platform. What was built Complete server panel redesign Reworked dashboards, tables, modals, and workflows for a more consistent UI. Converted old card-based interfaces into faster, cleaner table-based views. Added improved server information displays, resource indicators, and public IP lookup. Advanced file management Replaced the old tree-based explorer with a modern row-based file browser. Added faster navigation, bulk actions, improved context menus, breadcrumbs, and cleaner dialogs. Removed outdated components and simplified the architecture. Plugin management Added a built-in plugin manager so users can install and manage server plugins directly from the panel instead of manually uploading files. Automation & infrastructure Added Cloudflare integration for automatic subdomain provisioning. Improved server lifecycle management and reliability. Added support for deduplicated and encrypted backups using rustic, reducing storage usage while improving backup capabilities. AI integration Built a flexible AI provider system supporting providers such as OpenAI, Anthropic, Google Gemini, DeepSeek, OpenRouter, and custom OpenAI-compatible APIs. Added AI-powered console log summaries. Permissions & collaboration Added reusable permission templates for teams. Users can create custom roles and quickly apply them when managing server access. Engineering improvements A major focus was not only adding features, but improving the foundation: Large backend refactors for better maintainability. Shared service architecture for integrations. Improved validation and configuration handling. Fixed hidden infrastructure issues affecting settings persistence and backups. Removed thousands of lines of outdated code while simplifying the codebase. Results In roughly 42 hours of development during Stardance, Realm grew into a significantly more complete game server management platform: Modernized user experience Faster file operations Automated server provisioning Better backups AI-assisted management Team collaboration features Cleaner, more scalable architecture Realm’s goal is simple: make managing game servers feel less like operating infrastructure and more like using a modern developer platform.", "repo": "https://github.com/realmctl/panel", "demo": "https://demo.realmctl.com/"}, {"ship_num": 3, "ts": "2026-06-05T20:16:58Z", "hours": 13.0, "multiplier": 15.92, "payout": 179, "blessing": "neutral", "text": "Realm is a modern, ground-up reimagining of the Pterodactyl game server management panel. Instead of forking and patching an existing codebase, I’m rebuilding the platform from scratch with a focus on performance, maintainability, and a better developer and user experience. The goal is to provide a cleaner architecture, improved usability, and a foundation that can support future hosting and automation features.", "repo": "https://github.com/realmctl/panel", "demo": "https://demo.realmctl.com/"}]...
|
[{"post_id": 32091, "ts": "202 [{"post_id": 32091, "ts": "2026-07-21T00:39:37Z", "hours": 4.0272, "text": "Spent today mostly cleaning up how the panel actually looks instead of adding new stuff. Started because the Activity Log page just looked off next to Settings, turned out it was using its own hardcoded hex colors instead of the actual design tokens, so I went through and fixed that. Then I noticed the whole Account section (API keys, SSH keys, permission templates, all of it) had the exact same problem, every page had basically copy pasted the same fake card styling by hand instead of using the real component. Fixed all five pages while I was at it. Also turned Permission Templates into its own little “Environment” section with a sidebar, mostly so I have somewhere to dump future account wide settings later without having to rebuild the page again. Got told the permission checkboxes looked bad (fair, they did, gray boxes that didn’t match anything) so rewrote those too, normal casing instead of uppercase everywhere, nicer list layout instead of a grid of boxes. That led me into the confirm dialogs since those had the same gray leftover style, so now every delete confirmation in the app actually matches the rest of the panel instead of being a random gray popup. Ended the day renaming the URLs, /server became /instance and /account became /user, just cleaner and more consistent with how the rest of the panel is named. Sounds simple but had to make sure old links and bookmarks still work and that the 2FA redirect didn’t break, that part was hardcoded into a Laravel route so easy to miss. Nothing groundbreaking today, just a lot of small stuff that was bugging me for a while. ✻ Brewed for 6s · 3 shells still running ❯ can u now implement a demo mode on a new branch…. just that the instance resets every hour. so the node and the panel reset every 1 hour. accounts get reset back. players get admin but they cant ruin everything because panel gets resetted each hour too, normal casing instead of uppercase everywhere, nicer list layout instead of a grid of boxes. That led me into the confirm dialogs since those had the same gray leftover style, so now every delete confirmation in the app actually matches the rest of the panel instead of being a random gray popup. Ended the day renaming the URLs, /server became /instance and /account became /user, just cleaner and more consistent with how the rest of the panel is named. Sounds simple but had to make sure old links and bookmarks still work and that the 2FA redirect didn’t break, that part was hardcoded into a Laravel route so easy to miss. Nothing groundbreaking today, just a lot of small stuff that was bugging me for a while."}, {"post_id": 24174, "ts": "2026-07-07T16:00:55Z", "hours": 2.4944, "text": "Today’s pass on Realm’s server panel was all file manager: ripped out the old tree-sidebar explorer and replaced it with a flat table-row browser, matching the same table-ification sweep the rest of the panel got this week (allocations, databases, backups). The old file manager was built around FileManagerTreeSidebar (643 lines), a persistent expandable tree on the side, drag-and-drop context (ExplorerDragContext, 261 lines), a separate context-menu component (FileTreeContextMenu, 401 lines), and its own icon/media/upload util files. All of that’s gone now. In its place: FileObjectRow — one row per file/folder in a 12-col grid: checkbox + icon + name, size, relative modified time, and a dropdown menu on the right. Right-click still works, it just dispatches a custom event to open the row’s own dropdown instead of mounting a separate tree context-menu component. FileDropdownMenu — replaces FileTreeContextMenu. Same actions (rename, copy, archive/extract, download, chmod, delete) but scoped per-row instead of per-tree-node. FileManagerBreadcrumbs — simple path breadcrumb bar, replacing the always-visible tree for navigation. SelectFileCheckbox — per-row selection, feeding the existing MassActionsBar for bulk delete/move. FileManagerContainer — rewritten around the new row list (585 lines touched, net smaller). Also folded PullFileButton into NewDirectoryButton (renamed file, kept git history via rename-detection) and moved NewDirectoryButton + SftpDetailsButton off the old Dialog/asDialog HOC pattern onto the shared Modal component — same one now used by all the wizard modals across the panel, so file manager dialogs finally look consistent with everything else instead of being the last holdout on the old dialog system. Net effect: 38 files touched, ~1,150 lines added, ~4,250 removed. Deleted six now-dead util files outright (archivePathUtils, fileExplorerDrag, fileMediaUtils, fileTreeIcons, fileUploadUtils, useFileEditingPresence) along with their routes in routes.ts. No behavior loss — same actions available, just row-based instead of tree-based, and finally matching the modal/table conventions the rest of the panel converged on this week."}, {"post_id": 22483, "ts": "2026-07-04T23:27:18Z", "hours": 5.8878, "text": "Today was a full pass on Realm’s server panel: three feature threads (dashboard, AI, DNS) and a long UI-consistency sweep, capped off by one infra bug that had been silently breaking every dynamic setting in the panel. Started with the dashboard: replaced the old card-style ServerRow list with a proper ServerTable — sortable by name and game type, with circular progress indicators for resource usage instead of flat bars. Added a public IP lookup service and a ServerInfoCard for the console page showing location, IP, and domain info at a glance. Then built an AI provider helper: admin picks one provider (Claude, OpenAI, DeepSeek, Gemini, OpenRouter, or a custom OpenAI-compatible endpoint), drops in an API key, done. No multi-provider list to manage — one row in the DB, one config screen under Settings → Advanced. Wrote three concrete provider adapters behind a shared interface (AnthropicProvider talks the native /v1/messages API, GoogleProvider handles Gemini’s role mapping, OpenAiCompatibleProvider covers everything that speaks the OpenAI wire format) so future features can just call AiService::complete() without caring which backend is configured. Also wired up Cloudflare zone management for subdomains, and gave the Console a log-upload + AI-summarize action. What I built: ServerTable (sortable dashboard) + circular resource indicators, IP lookup + ServerInfoCard Single-provider AI helper: model, factory, three adapters, admin UI, wired into Console’s summarize feature Cloudflare integration for subdomain zone/record management A full step-wizard treatment (sidebar steps, numbered circles, review step) rolled out to every creation modal that used to be a plain form: Change Version, Invite Subuser, Allocation Firewall, Create Subdomain, Create Database, Create Backup Converted Allocations, Databases, and Backups from card grids to proper tables (header row, divide-y rows, right-click context menu on allocations instead of a button pile), with the “create new” action moved to plain text + hyperlink below each table instead of a header-bar button Restyled the base Modal component itself — dropped the floating X close icon, added consistent border/radius, gave it an optional title/footer API so simple confirm dialogs get the same content-pane-plus-footer-bar layout as the wizards Footer now shows the git commit hash + panel version with a fork icon instead of a static copyright line The interesting part was two bugs that had nothing to do with what I was actively building. First: Settings → Advanced looked like it saved, but nothing actually persisted — not the AI config, not the allocation port range. Chased it through three layers: my own save logic, then a native HTML required attribute silently blocking the shared form submit, and finally the real one — SettingsServiceProvider, the class responsible for merging DB-stored settings back into Laravel’s config() on every request, was never registered in config/app.php. Every dynamic setting in the entire panel — mail, OAuth, allocations, all of it — had silently never worked, completely unrelated to anything I’d touched that day. Second: tried to delete a backup in the dev environment and got a 500. Wings was shelling out to a rustic binary that straight-up didn’t exist in the container — the Dockerfile never installed it, so every backup on this dev box had been failing since day one without anyone noticing (because dev servers don’t usually need backups). Added the install step to build/wings/Dockerfile, rebuilt the image, and the failed backup’s leftover DB row still needed a manual delete since its rustic repo was never initialized in the first place. Neither of those two bugs was flashy, but both had been quietly breaking things for a while — the kind of thing you only find when you actually click through the feature end-to-end instead of trusting that tsc passing means it works."}, {"post_id": 21640, "ts": "2026-07-03T18:09:16Z", "hours": 1.1011, "text": "Today I added deduplicated, encrypted backups to Realm, my game server panel. Previously every backup was a full .tar.gz archive — so backing up a 125MB server ten times ate over a gigabyte of disk, even though almost nothing changed between backups. Painful if you want frequent backups. Now backups can run through rustic, a Rust backup tool that deduplicates and encrypts data. Ten backups of that same server now cost a fraction of the disk, because identical blocks are stored once and shared across every snapshot. You can turn it on per node, or set it as the panel-wide default — one dropdown in the node settings. What I built: A new rustic backup adapter in Wings (the Go daemon), covering the full lifecycle: init the repository, back up on delete. Since rustic hasno Go bindings I shell out to the binary, with a per-repository lock so concurrent backups on a shared node repgo through env vars, neverthe process args, and the repo is daemon-owned so game containers never see the path or password. A backup_adapter column on nodes (plus migration) and the panel-side logic to pick the adapter, with a per-nodes a global backupdestination. A “Backup adapter” dropdowd hiding the Download buttonfor rustic backups since they live in a shared repo instead of as one downloadable file. A production Docker image that bundles the rustic binary, plus docs: a full setup guide and a config reference The interesting part was tesd TypeScript was happy, but I spun up the whole dev stack and ran it against a real rustic binary and a real game server anyway — and immediatiler couldn’t see. My deletecommand was missing a flag and crashed every time, my snapshot filter was silently returning nothing (which broxpected the wrong outputshape, and the Dockerfile pinned a rustic version that didn’t exist. Two of those would have shipped a featureothing. After fixing them, Iwatched the full create → restore → delete flow run clean through the real panel-to-daemon path: a snapestored from it, and deleting it cleared the snapshot and reclaimed the space. Not a flashy feature, but it means you can now keep way more backups for way less disk — and it was a good remindere near “it works.”"}, {"post_id": 21432, "ts": "2026-07-03T11:43:08Z", "hours": 18.1886, "text": "Today I added permission templates to Realm, my game server panel. Previously, when you wanted to give someone limited access to your server, you had to manually check off permissions one by one from a list of 60+ options every single time — annoying if you’re managing several servers with a team. Now you can save a named template (like “Moderator” or “Console Operator”) with a specific set of permissions once, and apply it with a single click whenever you invite or edit a subuser. It shows up right alongside the built-in presets in the invite/edit UI. What I built: A new subuser_permission_templates table, scoped per-account so each user manages their own templates A small Laravel API (create/list/update/delete) that validates permissions against the real whitelist so templates can never smuggle in a permission you’re not allowed to grant A new “Permission Templates” page under Account settings — pick a name, check the permissions you want, save Wired the templates into the existing subuser invite/edit forms so they appear as one-click buttons next to “View only”, “Operator”, “Manager”, etc. Tested it end-to-end in the browser: created a “Console Operator” template with console+start permissions, confirmed it landed in the database correctly, then applied it while inviting a user and watched it auto-select the right 2 permissions instantly. Small feature, but it’s the kind of thing that saves real time once you’re managing more than one or two servers with a team."}, {"post_id": 5577, "ts": "2026-06-09T12:51:30Z", "hours": 20.0064, "text": "Spent the last few days deep in the parts of Realm that people actually touch every day, and honestly it’s the stuff I’m most proud of so far. The file manager got a real overhaul. The old flow felt clunky. too many round trips, slow loads on big directories, and editing a config meant fighting the UI more than the file. I rebuilt how the panel talks to the daemon for file operations so listing, uploading, and editing all feel instant now. Dragging files around, renaming, moving things between folders. it just works the way you’d expect it to, without the lag that used to make me wince. The plugin manager is the other big one. Instead of telling people to SSH in and drop jars into a folder by hand, you can now browse, install, and manage plugins straight from the panel. It pulls the right versions, handles the install, and keeps track of what’s actually running on the server. Watching a plugin install from a button click the first time it worked end to end was a genuinely good moment. There’s also been a lot of quieter work under the hood. subdomain provisioning is wired in now so spinning up a server gives you something reachable without manual DNS fiddling, and I cleaned up a pile of reliability issues in the server management layer that were causing weird edge-case failures. More to come. Still a lot I want to ship."}, {"post_id": 2909, "ts": "2026-06-05T20:16:05Z", "hours": 1.4078, "text": "Devlog — 2026-06-05 — VersionChangerController Fix An issue was identified in VersionChangerController where the install process attempted to reuse the getDownloadUrl() route method by creating a standard Laravel Request object and passing it directly to the method. The getDownloadUrl() method is designed as a route action and expects a GetDownloadUrlRequest instance. Because a regular Illuminate\\Http\\Request was passed instead, Laravel could not satisfy the method’s type requirements, resulting in a TypeError during execution. To resolve this, the download URL resolution logic was separated from the request handling layer. A new protected helper method, resolveDownloadUrl(?string $type, ?string $version): array, was introduced to contain the shared business logic. The getDownloadUrl() endpoint now reads the validated request parameters and delegates the actual resolution work to the helper method, preserving route validation behavior. The install() method was updated to call resolveDownloadUrl() directly, eliminating the need to construct or fake request objects internally. As part of the cleanup, the unused Illuminate\\Http\\Request import was removed. Modified file: panel/app/Http/Controllers/Api/Client/Servers/VersionChangerController.php For future development, any controller methods that require the same resolution logic should call the helper directly rather than attempting to reuse route actions with manually constructed Request instances."}, {"post_id": 2813, "ts": "2026-06-05T17:14:08Z", "hours": 12.0089, "text": "Realm is a modern, ground-up reimagining of the Pterodactyl game server management panel. Instead of forking and patching an existing codebase, I’m rebuilding the platform from scratch with a focus on performance, maintainability, and a better developer and user experience. The goal is to provide a cleaner architecture, improved usability, and a foundation that can support future hosting and automation features."}]...
|
Title: Realm Panel by @Stijn | Stardance
Devlogs: Title: Realm Panel by @Stijn | Stardance
Devlogs:
Realm is a modern, ground-up reimagining of the Pterodactyl game server management panel. Instead of forking and patching an existing codebase, I’m rebuilding the platform from scratch with a focus on performance, maintainability, and a better developer and user experience. The goal is to provide a cleaner architecture, improved usability, and a foundation that can support future hosting and automation features.
Devlog — 2026-06-05 — VersionChangerController Fix An issue was identified in VersionChangerController where the install process attempted to reuse the getDownloadUrl() route method by creating a standard Laravel Request object and passing it directly to the method. The getDownloadUrl() method is designed as a route action and expects a GetDownloadUrlRequest instance. Because a regular Illuminate\Http\Request was passed instead, Laravel could not satisfy the method’s type requirements, resulting in a TypeError during execution. To resolve this, the download URL resolution logic was separated from the request handling layer. A new protected helper method, resolveDownloadUrl(?string $type, ?string $version): array, was introduced to contain the shared business logic. The getDownloadUrl() endpoint now reads the validated request parameters and delegates the actual resolution work to the helper method, preserving route validation behavior. The install() method was updated to call resolveDownloadUrl() directly, eliminating the need to construct or fake request objects internally. As part of the cleanup, the unused Illuminate\Http\Request import was removed. Modified file: panel/app/Http/Controllers/Api/Client/Servers/VersionChangerController.php For future development, any controller methods that require the same resolution logic should call the helper directly rather than attempting to reuse route actions with manually constructed Request instances.
Spent the last few days deep in the parts of Realm that people actually touch every day, and honestly it’s the stuff I’m most proud of so far. The file manager got a real overhaul. The old flow felt clunky. too many round trips, slow loads on big directories, and editing a config meant fighting the UI more than the file. I rebuilt how the panel talks to the daemon for file operations so listing, uploading, and editing all feel instant now. Dragging files around, renaming, moving things between folders. it just works the way you’d expect it to, without the lag that used to make me wince. The plugin manager is the other big one. Instead of telling people to SSH in and drop jars into a folder by hand, you can now browse, install, and manage plugins straight from the panel. It pulls the right versions, handles the install, and keeps track of what’s actually running on the server. Watching a plugin install from a button click the first time it worked end to end was a genuinely good moment. There’s also been a lot of quieter work under the hood. subdomain provisioning is wired in now so spinning up a server gives you something reachable without manual DNS fiddling, and I cleaned up a pile of reliability issues in the server management layer that were causing weird edge-case failures. More to come. Still a lot I want to ship.
Today I added permission templates to Realm, my game server panel. Previously, when you wanted to give someone limited access to your server, you had to manually check off permissions one by one from a list of 60+ options every single time — annoying if you’re managing several servers with a team. Now you can save a named template (like “Moderator” or “Console Operator”) with a specific set of permissions once, and apply it with a single click whenever you invite or edit a subuser. It shows up right alongside the built-in presets in the invite/edit UI. What I built: A new subuser_permission_templates table, scoped per-account so each user manages their own templates A small Laravel API (create/list/update/delete) that validates permissions against the real whitelist so templates can never smuggle in a permission you’re not allowed to grant A new “Permission Templates” page under Account settings — pick a name, check the permissions you want, save Wired the templates into the existing subuser invite/edit forms so they appear as one-click buttons next to “View only”, “Operator”, “Manager”, etc. Tested it end-to-end in the browser: created a “Console Operator” template with console+start permissions, confirmed it landed in the database correctly, then applied it while inviting a user and watched it auto-select the right 2 permissions instantly. Small feature, but it’s the kind of thing that saves real time once you’re managing more than one or two servers with a team.
Today I added deduplicated, encrypted backups to Realm, my game server panel. Previously every backup was a full .tar.gz archive — so backing up a 125MB server ten times ate over a gigabyte of disk, even though almost nothing changed between backups. Painful if you want frequent backups. Now backups can run through rustic, a Rust backup tool that deduplicates and encrypts data. Ten backups of that same server now cost a fraction of the disk, because identical blocks are stored once and shared across every snapshot. You can turn it on per node, or set it as the panel-wide default — one dropdown in the node settings. What I built: A new rustic backup adapter in Wings (the Go daemon), covering the full lifecycle: init the repository, back up on delete. Since rustic hasno Go bindings I shell out to the binary, with a per-repository lock so concurrent backups on a shared node repgo through env vars, neverthe process args, and the repo is daemon-owned so game containers never see the path or password. A backup_adapter column on nodes (plus migration) and the panel-side logic to pick the adapter, with a per-nodes a global backupdestination. A “Backup adapter” dropdowd hiding the Download buttonfor rustic backups since they live in a shared repo instead of as one downloadable file. A production Docker image that bundles the rustic binary, plus docs: a full setup guide and a config reference The interesting part was tesd TypeScript was happy, but I spun up the whole dev stack and ran it against a real rustic binary and a real game server anyway — and immediatiler couldn’t see. My deletecommand was missing a flag and crashed every time, my snapshot filter was silently returning nothing (which broxpected the wrong outputshape, and the Dockerfile pinned a rustic version that didn’t exist. Two of those would have shipped a featureothing. After fixing them, Iwatched the full create → restore → delete flow run clean through the real panel-to-daemon path: a snapestored from it, and deleting it cleared the snapshot and reclaimed the space. Not a flashy feature, but it means you can now keep way more backups for way less disk — and it was a good remindere near “it works.”
Today was a full pass on Realm’s server panel: three feature threads (dashboard, AI, DNS) and a long UI-consistency sweep, capped off by one infra bug that had been silently breaking every dynamic setting in the panel. Started with the dashboard: replaced the old card-style ServerRow list with a proper ServerTable — sortable by name and game type, with circular progress indicators for resource usage instead of flat bars. Added a public IP lookup service and a ServerInfoCard for the console page showing location, IP, and domain info at a glance. Then built an AI provider helper: admin picks one provider (Claude, OpenAI, DeepSeek, Gemini, OpenRouter, or a custom OpenAI-compatible endpoint), drops in an API key, done. No multi-provider list to manage — one row in the DB, one config screen under Settings → Advanced. Wrote three concrete provider adapters behind a shared interface (AnthropicProvider talks the native /v1/messages API, GoogleProvider handles Gemini’s role mapping, OpenAiCompatibleProvider covers everything that speaks the OpenAI wire format) so future features can just call AiService::complete() without caring which backend is configured. Also wired up Cloudflare zone management for subdomains, and gave the Console a log-upload + AI-summarize action. What I built: ServerTable (sortable dashboard) + circular resource indicators, IP lookup + ServerInfoCard Single-provider AI helper: model, factory, three adapters, admin UI, wired into Console’s summarize feature Cloudflare integration for subdomain zone/record management A full step-wizard treatment (sidebar steps, numbered circles, review step) rolled out to every creation modal that used to be a plain form: Change Version, Invite Subuser, Allocation Firewall, Create Subdomain, Create Database, Create Backup Converted Allocations, Databases, and Backups from card grids to proper tables (header row, divide-y rows, right-click context menu on allocations instead of a button pile), with the “create new” action moved to plain text + hyperlink below each table instead of a header-bar button Restyled the base Modal component itself — dropped the floating X close icon, added consistent border/radius, gave it an optional title/footer API so simple confirm dialogs get the same content-pane-plus-footer-bar layout as the wizards Footer now shows the git commit hash + panel version with a fork icon instead of a static copyright line The interesting part was two bugs that had nothing to do with what I was actively building. First: Settings → Advanced looked like it saved, but nothing actually persisted — not the AI config, not the allocation port range. Chased it through three layers: my own save logic, then a native HTML required attribute silently blocking the shared form submit, and finally the real one — SettingsServiceProvider, the class responsible for merging DB-stored settings back into Laravel’s config() on every request, was never registered in config/app.php. Every dynamic setting in the entire panel — mail, OAuth, allocations, all of it — had silently never worked, completely unrelated to anything I’d touched that day. Second: tried to delete a backup in the dev environment and got a 500. Wings was shelling out to a rustic binary that straight-up didn’t exist in the container — the Dockerfile never installed it, so every backup on this dev box had been failing since day one without anyone noticing (because dev servers don’t usually need backups). Added the install step to build/wings/Dockerfile, rebuilt the image, and the failed backup’s leftover DB row still needed a manual delete since its rustic repo was never initialized in the first place. Neither of those two bugs was flashy, but both had been quietly breaking things for a while — the kind of thing you only find when you actually click through the feature end-to-end instead of trusting that tsc passing means it works.
Today’s pass on Realm’s server panel was all file manager: ripped out the old tree-sidebar explorer and replaced it with a flat table-row browser, matching the same table-ification sweep the rest of the panel got this week (allocations, databases, backups). The old file manager was built around FileManagerTreeSidebar (643 lines), a persistent expandable tree on the side, drag-and-drop context (ExplorerDragContext, 261 lines), a separate context-menu component (FileTreeContextMenu, 401 lines), and its own icon/media/upload util files. All of that’s gone now. In its place: FileObjectRow — one row per file/folder in a 12-col grid: checkbox + icon + name, size, relative modified time, and a dropdown menu on the right. Right-click still works, it just dispatches a custom event to open the row’s own dropdown instead of mounting a separate tree context-menu component. FileDropdownMenu — replaces FileTreeContextMenu. Same actions (rename, copy, archive/extract, download, chmod, delete) but scoped per-row instead of per-tree-node. FileManagerBreadcrumbs — simple path breadcrumb bar, replacing the always-visible tree for navigation. SelectFileCheckbox — per-row selection, feeding the existing MassActionsBar for bulk delete/move. FileManagerContainer — rewritten around the new row list (585 lines touched, net smaller). Also folded PullFileButton into NewDirectoryButton (renamed file, kept git history via rename-detection) and moved NewDirectoryButton + SftpDetailsButton off the old Dialog/asDialog HOC pattern onto the shared Modal component — same one now used by all the wizard modals across the panel, so file manager dialogs finally look consistent with everything else instead of being the last holdout on the old dialog system. Net effect: 38 files touched, ~1,150 lines added, ~4,250 removed. Deleted six now-dead util files outright (archivePathUtils, fileExplorerDrag, fileMediaUtils, fileTreeIcons, fileUploadUtils, useFileEditingPresence) along with their routes in routes.ts. No behavior loss — same actions available, just row-based instead of tree-based, and finally matching the modal/table conventions the rest of the panel converged on this week.
Spent today mostly cleaning up how the panel actually looks instead of adding new stuff. Started because the Activity Log page just looked off next to Settings, turned out it was using its own hardcoded hex colors instead of the actual design tokens, so I went through and fixed that. Then I noticed the whole Account section (API keys, SSH keys, permission templates, all of it) had the exact same problem, every page had basically copy pasted the same fake card styling by hand instead of using the real component. Fixed all five pages while I was at it. Also turned Permission Templates into its own little “Environment” section with a sidebar, mostly so I have somewhere to dump future account wide settings later without having to rebuild the page again. Got told the permission checkboxes looked bad (fair, they did, gray boxes that didn’t match anything) so rewrote those too, normal casing instead of uppercase everywhere, nicer list layout instead of a grid of boxes. That led me into the confirm dialogs since those had the same gray leftover style, so now every delete confirmation in the app actually matches the rest of the panel instead of being a random gray popup. Ended the day renaming the URLs, /server became /instance and /account became /user, just cleaner and more consistent with how the rest of the panel is named. Sounds simple but had to make sure old links and bookmarks still work and that the 2FA redirect didn’t break, that part was hardcoded into a Laravel route so easy to miss. Nothing groundbreaking today, just a lot of small stuff that was bugging me for a while. ✻ Brewed for 6s · 3 shells still running ❯ can u now implement a demo mode on a new branch…. just that the instance resets every hour. so the node and the panel reset every 1 hour. accounts get reset back. players get admin but they cant ruin everything because panel gets resetted each hour too, normal casing instead of uppercase everywhere, nicer list layout instead of a grid of boxes. That led me into the confirm dialogs since those had the same gray leftover style, so now every delete confirmation in the app actually matches the rest of the panel instead of being a random gray popup. Ended the day renaming the URLs, /server became /instance and /account became /user, just cleaner and more consistent with how the rest of the panel is named. Sounds simple but had to make sure old links and bookmarks still work and that the 2FA redirect didn’t break, that part was hardcoded into a Laravel route so easy to miss. Nothing groundbreaking today, just a lot of small stuff that was bugging me for a while.
Ships:
Realm is a modern, ground-up reimagining of the Pterodactyl game server management panel. Instead of forking and patching an existing codebase, I’m rebuilding the platform from scratch with a focus on performance, maintainability, and a better developer and user experience. The goal is to provide a cleaner architecture, improved usability, and a foundation that can support future hosting and automation features.
Realm is a modern, ground-up reimagining of the Pterodactyl Panel, rebuilt from scratch with a focus on performance, maintainability, automation, and developer experience. Instead of patching an existing codebase, Realm introduces a cleaner architecture designed for the future of game server hosting. During Stardance, Realm evolved from a prototype into a much more complete server management platform. What was built Complete server panel redesign Reworked dashboards, tables, modals, and workflows for a more consistent UI. Converted old card-based interfaces into faster, cleaner table-based views. Added improved server information displays, resource indicators, and public IP lookup. Advanced file management Replaced the old tree-based explorer with a modern row-based file browser. Added faster navigation, bulk actions, improved context menus, breadcrumbs, and cleaner dialogs. Removed outdated components and simplified the architecture. Plugin management Added a built-in plugin manager so users can install and manage server plugins directly from the panel instead of manually uploading files. Automation & infrastructure Added Cloudflare integration for automatic subdomain provisioning. Improved server lifecycle management and reliability. Added support for deduplicated and encrypted backups using rustic, reducing storage usage while improving backup capabilities. AI integration Built a flexible AI provider system supporting providers such as OpenAI, Anthropic, Google Gemini, DeepSeek, OpenRouter, and custom OpenAI-compatible APIs. Added AI-powered console log summaries. Permissions & collaboration Added reusable permission templates for teams. Users can create custom roles and quickly apply them when managing server access. Engineering improvements A major focus was not only adding features, but improving the foundation: Large backend refactors for better maintainability. Shared service architecture for integrations. Improved validation and configuration handling. Fixed hidden infrastructure issues affecting settings persistence and backups. Removed thousands of lines of outdated code while simplifying the codebase. Results In roughly 42 hours of development during Stardance, Realm grew into a significantly more complete game server management platform: Modernized user experience Faster file operations Automated server provisioning Better backups AI-assisted management Team collaboration features Cleaner, more scalable architecture Realm’s goal is simple: make managing game servers feel less like operating infrastructure and more like using a modern developer platform.
Just a beautiful panel...
|
1792982925.9635112
|
1793069325.9635112
|
|
16909
|
ThreatWise - App by @benMakesStuff | Stardance
|
benMakesStuff
|
1
|
42.0
|
563
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T04:57:40Z", "hours": 42.0, "multiplier": 13.35, "payout": 563, "blessing": "neutral", "text": "I made a cybersecurity teaching app. Its target audience is upper primary school kids or lower highschool (also called middleschool). It has multiple features including minigames, chatbot, email simulator, courses, password strength checker, report page (just a demo, dosnt actually send SOS), xp systems, streak systems, and some peak animations that took me a really long time to make.", "repo": "https://github.com/benvelzul/ThreatWise", "demo": "https://benvelzul.github.io/Threat-Wise-Premiers-Coding-Challenge/"}]...
|
[{"post_id": 65194, "ts": "202 [{"post_id": 65194, "ts": "2026-09-10T04:52:02Z", "hours": 0.5717, "text": "Did some extra documentation and its now finished for stardance so im shiping rn hope u guys like it"}, {"post_id": 64525, "ts": "2026-09-09T00:11:07Z", "hours": 4.4867, "text": "ye7eyeyyeyeyeye. I finally finished and its looking decent, its got 3 minigames and it is just good stuff. One of the minigames are one URL detector, matching pairs, and a priority thingy sorter. And im deploying rn, so better be ready to rate. and i also got confused 3 times with how to deploy so i hav deployed 2 times, the first one i took a template for deploying flutter from the internet and forgot to save it then i pushed and found out it didnt push, then the second time i put it but forgot to put my repo name on it so it didnt work, and then the third one i am doing it rn so hopefully it works"}, {"post_id": 63325, "ts": "2026-09-07T02:52:47Z", "hours": 9.8392, "text": "I finished the course engine, xp systems and everythign tah needed finishing with the exception of minigames. But i had like 4 hours that didnt go through because my school laptop broke and then they gave me an loan, so i needed to reinstall everything then some days later they gave me my laptop back WIPED so i had to reinstall everything again and i tried redoing the mascot on RIVE but sadly i suck at designing and it took me 4 hours to make a new mascot that didnt work so just bad stuff happening and the app is due in 4 days and i still have so much stuff to do, so yes im gonna pull all nighters for the next 4 days. and i also reached my first 100 hours in hackatime."}, {"post_id": 57078, "ts": "2026-08-29T05:12:24Z", "hours": 4.3103, "text": "I finished the grading engine (it had a critical bug), made a course engine and got some friends to make courses, and i made some sick animations in the thing (video below) and it looks good but i also did something with vs code and now it the run button doesnt work and now i have to run it from the terminal"}, {"post_id": 52226, "ts": "2026-08-22T10:11:23Z", "hours": 8.5944, "text": "I made the scenario models, data (over 30k emails can be generated), grading algorythm, and scenario UI. And the project is due on 3 weeks and i have so much stuff to doooooooo."}, {"post_id": 31624, "ts": "2026-07-20T05:35:46Z", "hours": 5.2817, "text": "did lots of work in this 5 hours, i just dont remember what exacly i did."}, {"post_id": 23274, "ts": "2026-07-06T03:58:32Z", "hours": 1.5003, "text": "I worked on finishing the Gargoyle (bad cop) and its now looking pretty good, and i had to redo all of the body because it looked like it was drawn by a 3 year old. But now its looking amazing for being my first project on Adobe Illustrator."}, {"post_id": 23190, "ts": "2026-07-06T00:40:30Z", "hours": 2.4572, "text": "I worked on getting the Mascot for the app and decided for the good cop, bad cop and i also worked on a UI more similar to Duolingo’s and Brilliant’s and i change the palette for the app so its easier to change and more equal all around the app"}, {"post_id": 19597, "ts": "2026-06-30T23:05:28Z", "hours": 2.1467, "text": "I worked on adding a mascot to the app, just like Duo in Duolingo; or Koi in Brilliant. So im between adding a gargoyle or a padlock. The paddlock is mostly finished (but im not convinced since its really boring), and the gargoyle is still in the process of learning the anatomy of one and how it looks better (but its looking better for a mascot than the padlock) but i still need to chose between them to be the mascot. Or use them both, like good cop, bad cop: padlock (good cop), and gargoyle (bad cop). So if anyone can help me choosing it would be amazing. I will keep working on them and then i will show the progress made."}, {"post_id": 14827, "ts": "2026-06-24T02:39:16Z", "hours": 2.9617, "text": "I worked on the project architecture, ui for all the pages and networking between them."}]...
|
Title: ThreatWise - App by @benMakesStuff | Starda Title: ThreatWise - App by @benMakesStuff | Stardance
Devlogs:
I worked on the project architecture, ui for all the pages and networking between them.
I worked on adding a mascot to the app, just like Duo in Duolingo; or Koi in Brilliant. So im between adding a gargoyle or a padlock. The paddlock is mostly finished (but im not convinced since its really boring), and the gargoyle is still in the process of learning the anatomy of one and how it looks better (but its looking better for a mascot than the padlock) but i still need to chose between them to be the mascot. Or use them both, like good cop, bad cop: padlock (good cop), and gargoyle (bad cop). So if anyone can help me choosing it would be amazing. I will keep working on them and then i will show the progress made.
I worked on getting the Mascot for the app and decided for the good cop, bad cop and i also worked on a UI more similar to Duolingo’s and Brilliant’s and i change the palette for the app so its easier to change and more equal all around the app
I worked on finishing the Gargoyle (bad cop) and its now looking pretty good, and i had to redo all of the body because it looked like it was drawn by a 3 year old. But now its looking amazing for being my first project on Adobe Illustrator.
did lots of work in this 5 hours, i just dont remember what exacly i did.
I made the scenario models, data (over 30k emails can be generated), grading algorythm, and scenario UI. And the project is due on 3 weeks and i have so much stuff to doooooooo.
I finished the grading engine (it had a critical bug), made a course engine and got some friends to make courses, and i made some sick animations in the thing (video below) and it looks good but i also did something with vs code and now it the run button doesnt work and now i have to run it from the terminal
I finished the course engine, xp systems and everythign tah needed finishing with the exception of minigames. But i had like 4 hours that didnt go through because my school laptop broke and then they gave me an loan, so i needed to reinstall everything then some days later they gave me my laptop back WIPED so i had to reinstall everything again and i tried redoing the mascot on RIVE but sadly i suck at designing and it took me 4 hours to make a new mascot that didnt work so just bad stuff happening and the app is due in 4 days and i still have so much stuff to do, so yes im gonna pull all nighters for the next 4 days. and i also reached my first 100 hours in hackatime.
ye7eyeyyeyeyeye. I finally finished and its looking decent, its got 3 minigames and it is just good stuff. One of the minigames are one URL detector, matching pairs, and a priority thingy sorter. And im deploying rn, so better be ready to rate. and i also got confused 3 times with how to deploy so i hav deployed 2 times, the first one i took a template for deploying flutter from the internet and forgot to save it then i pushed and found out it didnt push, then the second time i put it but forgot to put my repo name on it so it didnt work, and then the third one i am doing it rn so hopefully it works
Did some extra documentation and its now finished for stardance so im shiping rn hope u guys like it
Ships:
I made a cybersecurity teaching app. Its target audience is upper primary school kids or lower highschool (also called middleschool). It has multiple features including minigames, chatbot, email simulator, courses, password strength checker, report page (just a demo, dosnt actually send SOS), xp systems, streak systems, and some peak animations that took me a really long time to make....
|
1792983313.8163352
|
1793069713.8163352
|
|
42698
|
clearfx by @satvikhardat | Stardance
|
satvikhardat
|
1
|
39.47
|
563
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-06T12:40:30Z", "hours": 37.0, "multiplier": 18.75, "payout": 563, "blessing": "neutral", "text": "A small CLI + website where people can upload TUI designs, and anyone can make those TUI animations show up whenever they type a specific command in their terminal like “clear” or “ls” while also doing the job of that command!!! Package Manager Install the core CLI globally via pip. pip install clearfx Shell Hooks Initialize shell integrations to wrap the clear command automatically. clearfx setup-shell Quick Wrap Want to animate a specific command? Wrap it directly (e.g., wrap ls with the Aurora Fold animation). clearfx wrap ls --anim aurora-fold Reload Shell Source your configuration file to apply the newly added shell hooks. source ~/.bashrc # or ~/.zshrc if you wanna stop the animation you can run clearfx reset", "repo": "https://github.com/random-unknown-username/clearfx/", "demo": "https://clearfx-zeta.vercel.app/"}]...
|
[{"post_id": 41926, "ts": "202 [{"post_id": 41926, "ts": "2026-08-06T13:29:40Z", "hours": 2.4739, "text": "Fixed vercel hosting hell, the whole thing js didnt want to work for soon long, small fix not much, not writing a huge devlog, because the ships already done, and probably wont be working on this again moving forward"}, {"post_id": 41330, "ts": "2026-08-05T14:06:46Z", "hours": 12.5803, "text": "devlog 3: debugging hell and nuking the UI bruh the last 10 hours were an absolute nightmare. the web UI preview was completely broken. you’d hit play, and it would just flash and disappear. i was losing my mind trying to figure out why the terminal was instantly clearing itself. turns out, the core engine’s TerminalSession was doing its job too well. when the animation finished, it sent the ANSI sequence to exit the alternate screen buffer, which is exactly what you want in a real terminal. but in xterm.js , exiting the alternate screen just leaves you with a blank black box! had to wire up a --keep-screen flag all the way through the CLI architecture to intercept that sequence when running inside the web preview. # src/clearfx/engine/terminal.py def __exit__ ( self , exc_type , exc_val , exc_tb ): if not self . keep_screen : # restore alternate screen self . write ( b \" \\033 [?1049l \" ) then there was the resizing bug. xterm.js was fitting to the container, but the PTY backend was hardcoded to 80x24. so it looked super misaligned. had to intercept term.cols and term.rows in React and pass them through the WebSocket JSON payload. wsRef . current . send ( JSON . stringify ({ type : ' run ' , code , width : termRef . current . cols , height : termRef . current . rows })); once the bugs were dead, i looked at the web UI and realized it looked like generic SaaS slop. huge glowing pills, purple gradients everywhere… it was dog shit. so i nuked index.css entirely. built a custom design system inspired by factory.ai. pure dark operations console vibes. strictly monochrome, 8px spacing grid, geist monospace fonts for technical labels, and tiny orange/green signal dots instead of giant colored backgrounds. /* replaced the generic slop with this */ :root { --bg-canvas : #101010 ; --bg-surface : #1D1A18 ; --border-hairline : #34312F ; --signal-orange : #EE6018 ; --font-mono : 'Geist Mono' , monospace ; } the hero section now has a literal UI-in-UI terminal preview embedded in a custom .product-frame . the whole app feels like a precision engineering tool now, not a marketing page. we finally shipped a safe, strictly declarative, gorgeous terminal engine."}, {"post_id": 39256, "ts": "2026-08-02T03:27:42Z", "hours": 10.2494, "text": "devlog 2: nuking the backend and building a safe package format so after the engine was running, i needed a marketplace. initially i spun up a whole fastAPI backend, but maintaining that sounded like a nightmare. so i ripped it all out and moved the entire catalog to firebase. but here’s the catch: if i’m letting randos upload python animations to a public marketplace, they could literally just inject os.system(\"rm -rf /\") inside their design.py and wipe everyone’s machines when they run clear . security was a massive issue. to fix this, i built a compiler that parses the python animation locally, extracts all the elements and keyframes, and bakes them into a purely declarative design.json . def pack ( self , directory : str | Path ) -> Path : # we literally run their code in an isolated builder # and dump the resulting state. no logic is saved. design_data = { \" elements \" : builder . _elements , \" keyframes \" : builder . _keyframes , \" config \" : builder . _config } with zipfile . ZipFile ( out_path , ' w ' ) as zf : zf . writestr ( \" manifest.toml \" , toml_content ) zf . writestr ( \" design.json \" , json . dumps ( design_data )) this means .clearfx packages are just dumb JSON files. the CLI’s DesignInterpreter reads the JSON and feeds it back into the engine safely. zero arbitrary code execution. then i had to build the web studio so people could preview their animations in the browser. getting a live terminal running in react is a pain. i used xterm.js on the frontend, and built a websocket server in python using pty.fork() to spin up a fake terminal session. @app.websocket ( \" /ws/studio \" ) async def websocket_studio ( websocket : WebSocket , width : int = 80 , height : int = 24 ): pid , fd = pty . fork () if pid == 0 : # child process - sets up the fake terminal size winsize = struct . pack ( \" HHHH \" , height , width , 0 , 0 ) fcntl . ioctl ( sys . stdout . fileno (), termios . TIOCSWINSZ , winsize ) os . execvpe ( \" python \" , [ \" python \" , \" -m \" , \" clearfx.cli.main \" , \" preview \" , temp_dir ], env ) so when you click “execute” in the web UI, it literally sends the python code over websockets, saves it to a temp dir, forks a new PTY, runs the engine natively, and pipes the raw ANSI output back to xterm.js . it’s basically magic. but the resize bugs were driving me insane."}, {"post_id": 38827, "ts": "2026-08-01T12:02:35Z", "hours": 14.2386, "text": "devlog 1: building a terminal engine from scratch because clear is boring bro i got so tired of just typing clear and seeing the terminal instantly snap to empty. it’s so boring. so i decided to build a full double-buffered animation engine in python just to replace the clear command. the idea was to make something that hooks into your .bashrc or .zshrc and intercepts clear , plays a sick terminal animation, and then actually clears the screen. first thing i realized: you can’t just print strings to the terminal and expect it to look like a smooth 60fps animation. the flickering is insane if you do that. so i had to build a double-buffered FrameBuffer system from scratch. class FrameBuffer : def diff ( self ) -> list [ tuple [ int , int , Cell ]]: \"\"\" returns only the cells that changed since last frame. \"\"\" changes = [] for i in range ( len ( self . front . cells )): if self . front . cells [ i ] != self . back . cells [ i ]: x = i % self . width y = i // self . width changes . append (( x , y , self . front . cells [ i ])) return changes this is the secret sauce. instead of redrawing 80x24 characters every frame, we only send ANSI escape codes for the exact pixels (cells) that changed. then i built a DiffRenderer that takes those changes and constructs the smallest possible ANSI sequence to move the cursor and update the colors. # snippet from renderer.py for x , y , cell in changes : # only move cursor if we aren't already there if not ( y == cy and x == cx ): out . append ( f \" \\033 [ { y + 1 } ; { x + 1 } H \" ) # write the actual character with truecolor out . append ( f \" \\033 [38;2; { cell . fg [ 0 ] } ; { cell . fg [ 1 ] } ; { cell . fg [ 2 ] } m { cell . char } \" ) after getting the engine running, i needed a way to safely inject it into the shell without destroying people’s configs. built a ShellIntegration class that detects zsh/bash/fish, backs up the config, and safely appends a wrapper. # >>> clearfx managed block >>> if command -v clearfx &>/dev/null ; then clear () { command clearfx play --clear-after } fi # <<< clearfx managed block <<< i spent like 10 hours just getting the core engine to hit 60fps consistently. python is slow, so minimizing string concatenations and using sys.stdout.buffer.write instead of print() was mandatory. next up was actually building out the animation formats and getting a marketplace running so people could share these."}]...
|
Title: clearfx by @satvikhardat | Stardance
Devlo Title: clearfx by @satvikhardat | Stardance
Devlogs:
devlog 1: building a terminal engine from scratch because clear is boring bro i got so tired of just typing clear and seeing the terminal instantly snap to empty. it’s so boring. so i decided to build a full double-buffered animation engine in python just to replace the clear command. the idea was to make something that hooks into your .bashrc or .zshrc and intercepts clear , plays a sick terminal animation, and then actually clears the screen. first thing i realized: you can’t just print strings to the terminal and expect it to look like a smooth 60fps animation. the flickering is insane if you do that. so i had to build a double-buffered FrameBuffer system from scratch. class FrameBuffer : def diff ( self ) -> list [ tuple [ int , int , Cell ]]: """ returns only the cells that changed since last frame. """ changes = [] for i in range ( len ( self . front . cells )): if self . front . cells [ i ] != self . back . cells [ i ]: x = i % self . width y = i // self . width changes . append (( x , y , self . front . cells [ i ])) return changes this is the secret sauce. instead of redrawing 80x24 characters every frame, we only send ANSI escape codes for the exact pixels (cells) that changed. then i built a DiffRenderer that takes those changes and constructs the smallest possible ANSI sequence to move the cursor and update the colors. # snippet from renderer.py for x , y , cell in changes : # only move cursor if we aren't already there if not ( y == cy and x == cx ): out . append ( f " \033 [ { y + 1 } ; { x + 1 } H " ) # write the actual character with truecolor out . append ( f " \033 [38;2; { cell . fg [ 0 ] } ; { cell . fg [ 1 ] } ; { cell . fg [ 2 ] } m { cell . char } " ) after getting the engine running, i needed a way to safely inject it into the shell without destroying people’s configs. built a ShellIntegration class that detects zsh/bash/fish, backs up the config, and safely appends a wrapper. # >>> clearfx managed block >>> if command -v clearfx &>/dev/null ; then clear () { command clearfx play --clear-after } fi # <<< clearfx managed block <<< i spent like 10 hours just getting the core engine to hit 60fps consistently. python is slow, so minimizing string concatenations and using sys.stdout.buffer.write instead of print() was mandatory. next up was actually building out the animation formats and getting a marketplace running so people could share these.
devlog 2: nuking the backend and building a safe package format so after the engine was running, i needed a marketplace. initially i spun up a whole fastAPI backend, but maintaining that sounded like a nightmare. so i ripped it all out and moved the entire catalog to firebase. but here’s the catch: if i’m letting randos upload python animations to a public marketplace, they could literally just inject os.system("rm -rf /") inside their design.py and wipe everyone’s machines when they run clear . security was a massive issue. to fix this, i built a compiler that parses the python animation locally, extracts all the elements and keyframes, and bakes them into a purely declarative design.json . def pack ( self , directory : str | Path ) -> Path : # we literally run their code in an isolated builder # and dump the resulting state. no logic is saved. design_data = { " elements " : builder . _elements , " keyframes " : builder . _keyframes , " config " : builder . _config } with zipfile . ZipFile ( out_path , ' w ' ) as zf : zf . writestr ( " manifest.toml " , toml_content ) zf . writestr ( " design.json " , json . dumps ( design_data )) this means .clearfx packages are just dumb JSON files. the CLI’s DesignInterpreter reads the JSON and feeds it back into the engine safely. zero arbitrary code execution. then i had to build the web studio so people could preview their animations in the browser. getting a live terminal running in react is a pain. i used xterm.js on the frontend, and built a websocket server in python using pty.fork() to spin up a fake terminal session. @app.websocket ( " /ws/studio " ) async def websocket_studio ( websocket : WebSocket , width : int = 80 , height : int = 24 ): pid , fd = pty . fork () if pid == 0 : # child process - sets up the fake terminal size winsize = struct . pack ( " HHHH " , height , width , 0 , 0 ) fcntl . ioctl ( sys . stdout . fileno (), termios . TIOCSWINSZ , winsize ) os . execvpe ( " python " , [ " python " , " -m " , " clearfx.cli.main " , " preview " , temp_dir ], env ) so when you click “execute” in the web UI, it literally sends the python code over websockets, saves it to a temp dir, forks a new PTY, runs the engine natively, and pipes the raw ANSI output back to xterm.js . it’s basically magic. but the resize bugs were driving me insane.
devlog 3: debugging hell and nuking the UI bruh the last 10 hours were an absolute nightmare. the web UI preview was completely broken. you’d hit play, and it would just flash and disappear. i was losing my mind trying to figure out why the terminal was instantly clearing itself. turns out, the core engine’s TerminalSession was doing its job too well. when the animation finished, it sent the ANSI sequence to exit the alternate screen buffer, which is exactly what you want in a real terminal. but in xterm.js , exiting the alternate screen just leaves you with a blank black box! had to wire up a --keep-screen flag all the way through the CLI architecture to intercept that sequence when running inside the web preview. # src/clearfx/engine/terminal.py def __exit__ ( self , exc_type , exc_val , exc_tb ): if not self . keep_screen : # restore alternate screen self . write ( b " \033 [?1049l " ) then there was the resizing bug. xterm.js was fitting to the container, but the PTY backend was hardcoded to 80x24. so it looked super misaligned. had to intercept term.cols and term.rows in React and pass them through the WebSocket JSON payload. wsRef . current . send ( JSON . stringify ({ type : ' run ' , code , width : termRef . current . cols , height : termRef . current . rows })); once the bugs were dead, i looked at the web UI and realized it looked like generic SaaS slop. huge glowing pills, purple gradients everywhere… it was dog shit. so i nuked index.css entirely. built a custom design system inspired by factory.ai. pure dark operations console vibes. strictly monochrome, 8px spacing grid, geist monospace fonts for technical labels, and tiny orange/green signal dots instead of giant colored backgrounds. /* replaced the generic slop with this */ :root { --bg-canvas : #101010 ; --bg-surface : #1D1A18 ; --border-hairline : #34312F ; --signal-orange : #EE6018 ; --font-mono : 'Geist Mono' , monospace ; } the hero section now has a literal UI-in-UI terminal preview embedded in a custom .product-frame . the whole app feels like a precision engineering tool now, not a marketing page. we finally shipped a safe, strictly declarative, gorgeous terminal engine.
Fixed vercel hosting hell, the whole thing js didnt want to work for soon long, small fix not much, not writing a huge devlog, because the ships already done, and probably wont be working on this again moving forward
Ships:
A small CLI + website where people can upload TUI designs, and anyone can make those TUI animations show up whenever they type a specific command in their terminal like “clear” or “ls” while also doing the job of that command!!! Package Manager Install the core CLI globally via pip. pip install clearfx Shell Hooks Initialize shell integrations to wrap the clear command automatically. clearfx setup-shell Quick Wrap Want to animate a specific command? Wrap it directly (e.g., wrap ls with the Aurora Fold animation). clearfx wrap ls --anim aurora-fold Reload Shell Source your configuration file to apply the newly added shell hooks. source ~/.bashrc # or ~/.zshrc if you wanna stop the animation you can run clearfx reset...
|
1792878689.518756
|
1793742689.518756
|
|
6658
|
Slack-ASM by @SeradedStripes | Stardance
|
SeradedStripes
|
1
|
40.0
|
562
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-04T18:50:51Z", "hours": 40.0, "multiplier": 13.9, "payout": 562, "blessing": "neutral", "text": "I made slack-asm! A slack bot written fully in x86_64 Assembly only. ARM support coming in the next ship. With 0.35MB ram usage and a peak of 0.52 CPU %, its a really really lightweight and fast slackbot. (The image below of ram and cpu usage may be slightly off from what I said here) Though it only has a small list of commands, it is very easy to add more to it!", "repo": "https://github.com/SeradedStripes/slack-asm", "demo": "https://hackclub.enterprise.slack.com/archives/C0B8BL6P3T3"}]...
|
[{"post_id": 61692, "ts": "202 [{"post_id": 61692, "ts": "2026-09-04T18:45:55Z", "hours": 0.7156, "text": "Finishing Touches So time to ship Basically finished up by: Doing example env Using a proper deploy workflow Add env reading support via CLI args Nuked docker compose And ofc, a bunch of readme updates"}, {"post_id": 28314, "ts": "2026-07-14T14:21:34Z", "hours": 1.7544, "text": "Updates Did a banner & Logo Add a pung command, it pings a certain user when you use it Added slash commands where the slash cmd msg is deleted instead of kept Fixed help cmd deleting slash cmd msg when it should not be"}, {"post_id": 27913, "ts": "2026-07-13T20:46:30Z", "hours": 1.2239, "text": "Updates Updated docker-compose Added pinging bot as a way to use its commands Auto reconnect ws after slack api decides to end it help cmd responds without threading due to slack api limitations Commands when pinging bot always responds in thread, even help cmd Added a meow cmd"}, {"post_id": 27407, "ts": "2026-07-12T23:16:02Z", "hours": 8.8964, "text": "Updates This Devlog took a while 😭 Anyway on to the changes.. Slack-asm help command Ability to respond in threads Roadmap updates Docker updates Minor help message updates Just check the commit messages 😭 Added Slack bot token handling and HTTP POST functionality Introduced load_bot_token function to extract the bot token from the environment buffer. Implemented slack_send_http_post function for making HTTP POST requests to Slack API with optional authorization. Updated slack_fetch_channel_ts to utilize the new bot token for API calls. Enhanced slash command handlers to send responses using slack_send_http_post . Added support for response URLs in slash command responses. Introduced memmem function for searching byte sequences in memory. Added debug logging for TLS operations to aid in troubleshooting. /slack-asm help now replies in a thread, though its not the correct thread The screeny below is from after i ram /slack-asm help What happened is it deleted the /slack-asm help msg and instead replied in my most recent other message"}, {"post_id": 22123, "ts": "2026-07-04T12:41:43Z", "hours": 2.9303, "text": "Updates We implemented a frick ton of tests sha256 hmac tests prf kdf tests tls record tests tls handshake tests tls connect tests aes cbc tests encrypted record tests x509 tests http tests rsa tests gcm tests"}, {"post_id": 21631, "ts": "2026-07-03T17:50:21Z", "hours": 1.6853, "text": "updates WE GOT WORKING SLASH COMMANDS (See screenshot below) Also fixed an indirect address displacement warning Fixed us not replying to the slack api with proper json Still not deployed Next up Messages that are visible to everyone It replying to certain phrases (maybe)"}, {"post_id": 21458, "ts": "2026-07-03T12:43:00Z", "hours": 5.3064, "text": "Updates FD might kill me We spent 2hrs fixing the first 3 bytes of keystream being wrong for the last block when we were calling the slack api. Implemented a ENV parser Yet another gitignore update Fixed parsing extensions wrong Reached 8.2K LOC"}, {"post_id": 20735, "ts": "2026-07-02T12:52:23Z", "hours": 1.1747, "text": "Updates/Status Report Changes for this devlog TLS alert Handling Updated content length from 32 to 64 bit for >4GB response bodies Status Report We have Full HTTPS working end-to-end This includes but not limited to: Full TLS 1.2 incl handshakes Full HTTP support TLS libraries: SHA-256 HMAC-SHA256 AES-128- CBC & GCM RSA support ECDHE key exchange They are implemented enough for TLS We have Linux syscalls We at 10161 lines of asm, 7.6k LOC, 1.2k Comments & 1.3K blanks What Next? We integrating this bad boy with slack api PS: ignore the bad request part in the image below"}, {"post_id": 19240, "ts": "2026-06-30T14:34:43Z", "hours": 3.335, "text": "Updates Padding fix HTTP versioning parsing implementation Chunked transfer encoding as https is horrible 2 commits i did were just random gitignore updates in between a massive 2k line addition commit Made an abbreviation YAGU or Yet another gitignore update Implemented P-256 elliptic curve primitives for ECDHE Key Exchange AES-128-GCM for TLS1.2 Tests for AES-128-GCM (they were horrible to do, purely because my GCM code was not working TLS code updates for aes128 & ecc Yes i am aware my gcm_tests below give horrible information to help lmao"}, {"post_id": 17549, "ts": "2026-06-28T11:40:19Z", "hours": 1.2286, "text": "Updates TLS Handshake fixes: Added server_ccs field to the tls_ctx struct Initialized server_ccs in tls_init Fixed PKCS#7 padding byte value in tls_send fixed big endian length field encoding in CCS header Removed CCS Peak Probably something I missed RSA Big integer rewrite Added STDERR & increased tls_ctx_buf Commented out test_harness call and added dump_keys stub Updated the Makefile Discovered i messed something up in compiled binary"}, {"post_id": 17004, "ts": "2026-06-27T16:17:17Z", "hours": 0.6667, "text": "Updates DNS resolution in pure assembly Fixed a bug where exit 255 was not in the RSA big_mod code, it was instead in the tls code for whatever reason We at like 5.4K LOC in Assembly now Thats it"}, {"post_id": 15053, "ts": "2026-06-24T13:29:51Z", "hours": 0.7378, "text": "Updates Removed the need of der file in the repo by hardcoding the value of the RSA-2048 test key Implemented Basic HTTP response parsing Began work on a very very basic dns resoultion system"}, {"post_id": 10506, "ts": "2026-06-17T08:05:55Z", "hours": 4.5422, "text": "Updates f952ca5 Added push rdp/ pop rbp to preserve rdp across sha256_transform updates rsa.asm RSA PKCS#1 RSA OAEP encoding Montgomery ladder modular exponentiation Big number helpers tls.asm New exports New externs More constants A bunch of file changes, see the actual commit for all of it test.asm Extend test_harness SHA256, HMAC-SHA256 test vectors KDF intermediate HMAC computation test PRF output comparison against known vector Key derivation: client/server write MAC keys, write keys, IVs Full TLS 1.2 handshake Some more i dont remember about Slack.asm Updated banner, added externs for new functions Cleaned up _start to call main then exit 2 Random commits just updating gitignore imbetween 38dad3c tls.asm Register clobber fix CCS read_seq MAC double-count fix Verify_data mismatch Removed debug writes Disconnect Comment test.asm ServerHello hash offset update PRF target address update Fix MAC length byte-order Seq number update Child ClientHello receive update socket.asm sys_send update Summary Frick me, most of this devlog what trying to fix one single bug. The hardest part of this devlog was fixing the stupid bugs i had."}, {"post_id": 6824, "ts": "2026-06-11T13:29:56Z", "hours": 1.0872, "text": "Updates Agents file and Contributing file X.509 certificate parsing & basic validity checking No longer include .der files (gitignore change) Updated Commenting, ie. made it more clearer and standardized it a bit. Updated Readme & Roadmap Code Now at 4.5k lines of assembly, 3.3k lines are actual code, 701 commenting lines. By the way its 3,300 lines exactly for the asm code lines"}, {"post_id": 5485, "ts": "2026-06-09T09:09:47Z", "hours": 1.6078, "text": "Updates Added AES-128-CBC encryption & decryption Implement pre_master_secret generation The line counts have increased Currently 3.7k lines of asm, (2.8k LOC) AES-128-CBC Notes: Most of my time was spent debugging it Thats it I think Oh Yeah and somehow all tests pass!"}, {"post_id": 3486, "ts": "2026-06-06T13:22:49Z", "hours": 0.8539, "text": "Updates Added Key derivation functions & its tests Added TLS 1.2 PRF implemnentation & its tests Sitting at 1759 lines of asm code now Still a bunch to go"}, {"post_id": 2722, "ts": "2026-06-05T13:40:16Z", "hours": 0.8997, "text": "Updates Stardance went off as I tried to post a devlog (this is redoing it) Added TLS 1.2 handshake & TLS record layer Finished RFC 4231 test cases"}, {"post_id": 2671, "ts": "2026-06-05T10:48:41Z", "hours": 0.85, "text": "Updates My wakatime broke Added SHA256 in pure asm Added hmac_sha256 in pure asm Fixed the sha256 error Comment out object files Readme & Roadmap polishing Update repo structure to now have code in src/"}, {"post_id": 2115, "ts": "2026-06-04T13:20:16Z", "hours": 0.6239, "text": "Updates Im sad from no md support in sd Added a makefile Thin TLS wrapper TLS stubs Test harness Dependabot for gh actions"}, {"post_id": 2081, "ts": "2026-06-04T12:26:21Z", "hours": 0.2942, "text": "Basic project repo setup & Skeleton of the app"}]...
|
Title: Slack-ASM by @SeradedStripes | Stardance
D Title: Slack-ASM by @SeradedStripes | Stardance
Devlogs:
Basic project repo setup & Skeleton of the app
Updates Im sad from no md support in sd Added a makefile Thin TLS wrapper TLS stubs Test harness Dependabot for gh actions
Updates My wakatime broke Added SHA256 in pure asm Added hmac_sha256 in pure asm Fixed the sha256 error Comment out object files Readme & Roadmap polishing Update repo structure to now have code in src/
Updates Stardance went off as I tried to post a devlog (this is redoing it) Added TLS 1.2 handshake & TLS record layer Finished RFC 4231 test cases
Updates Added Key derivation functions & its tests Added TLS 1.2 PRF implemnentation & its tests Sitting at 1759 lines of asm code now Still a bunch to go
Updates Added AES-128-CBC encryption & decryption Implement pre_master_secret generation The line counts have increased Currently 3.7k lines of asm, (2.8k LOC) AES-128-CBC Notes: Most of my time was spent debugging it Thats it I think Oh Yeah and somehow all tests pass!
Updates Agents file and Contributing file X.509 certificate parsing & basic validity checking No longer include .der files (gitignore change) Updated Commenting, ie. made it more clearer and standardized it a bit. Updated Readme & Roadmap Code Now at 4.5k lines of assembly, 3.3k lines are actual code, 701 commenting lines. By the way its 3,300 lines exactly for the asm code lines
Updates f952ca5 Added push rdp/ pop rbp to preserve rdp across sha256_transform updates rsa.asm RSA PKCS#1 RSA OAEP encoding Montgomery ladder modular exponentiation Big number helpers tls.asm New exports New externs More constants A bunch of file changes, see the actual commit for all of it test.asm Extend test_harness SHA256, HMAC-SHA256 test vectors KDF intermediate HMAC computation test PRF output comparison against known vector Key derivation: client/server write MAC keys, write keys, IVs Full TLS 1.2 handshake Some more i dont remember about Slack.asm Updated banner, added externs for new functions Cleaned up _start to call main then exit 2 Random commits just updating gitignore imbetween 38dad3c tls.asm Register clobber fix CCS read_seq MAC double-count fix Verify_data mismatch Removed debug writes Disconnect Comment test.asm ServerHello hash offset update PRF target address update Fix MAC length byte-order Seq number update Child ClientHello receive update socket.asm sys_send update Summary Frick me, most of this devlog what trying to fix one single bug. The hardest part of this devlog was fixing the stupid bugs i had.
Updates Removed the need of der file in the repo by hardcoding the value of the RSA-2048 test key Implemented Basic HTTP response parsing Began work on a very very basic dns resoultion system
Updates DNS resolution in pure assembly Fixed a bug where exit 255 was not in the RSA big_mod code, it was instead in the tls code for whatever reason We at like 5.4K LOC in Assembly now Thats it
Updates TLS Handshake fixes: Added server_ccs field to the tls_ctx struct Initialized server_ccs in tls_init Fixed PKCS#7 padding byte value in tls_send fixed big endian length field encoding in CCS header Removed CCS Peak Probably something I missed RSA Big integer rewrite Added STDERR & increased tls_ctx_buf Commented out test_harness call and added dump_keys stub Updated the Makefile Discovered i messed something up in compiled binary
Updates Padding fix HTTP versioning parsing implementation Chunked transfer encoding as https is horrible 2 commits i did were just random gitignore updates in between a massive 2k line addition commit Made an abbreviation YAGU or Yet another gitignore update Implemented P-256 elliptic curve primitives for ECDHE Key Exchange AES-128-GCM for TLS1.2 Tests for AES-128-GCM (they were horrible to do, purely because my GCM code was not working TLS code updates for aes128 & ecc Yes i am aware my gcm_tests below give horrible information to help lmao
Updates/Status Report Changes for this devlog TLS alert Handling Updated content length from 32 to 64 bit for >4GB response bodies Status Report We have Full HTTPS working end-to-end This includes but not limited to: Full TLS 1.2 incl handshakes Full HTTP support TLS libraries: SHA-256 HMAC-SHA256 AES-128- CBC & GCM RSA support ECDHE key exchange They are implemented enough for TLS We have Linux syscalls We at 10161 lines of asm, 7.6k LOC, 1.2k Comments & 1.3K blanks What Next? We integrating this bad boy with slack api PS: ignore the bad request part in the image below
Updates FD might kill me We spent 2hrs fixing the first 3 bytes of keystream being wrong for the last block when we were calling the slack api. Implemented a ENV parser Yet another gitignore update Fixed parsing extensions wrong Reached 8.2K LOC
updates WE GOT WORKING SLASH COMMANDS (See screenshot below) Also fixed an indirect address displacement warning Fixed us not replying to the slack api with proper json Still not deployed Next up Messages that are visible to everyone It replying to certain phrases (maybe)
Updates We implemented a frick ton of tests sha256 hmac tests prf kdf tests tls record tests tls handshake tests tls connect tests aes cbc tests encrypted record tests x509 tests http tests rsa tests gcm tests
Updates This Devlog took a while 😭 Anyway on to the changes.. Slack-asm help command Ability to respond in threads Roadmap updates Docker updates Minor help message updates Just check the commit messages 😭 Added Slack bot token handling and HTTP POST functionality Introduced load_bot_token function to extract the bot token from the environment buffer. Implemented slack_send_http_post function for making HTTP POST requests to Slack API with optional authorization. Updated slack_fetch_channel_ts to utilize the new bot token for API calls. Enhanced slash command handlers to send responses using slack_send_http_post . Added support for response URLs in slash command responses. Introduced memmem function for searching byte sequences in memory. Added debug logging for TLS operations to aid in troubleshooting. /slack-asm help now replies in a thread, though its not the correct thread The screeny below is from after i ram /slack-asm help What happened is it deleted the /slack-asm help msg and instead replied in my most recent other message
Updates Updated docker-compose Added pinging bot as a way to use its commands Auto reconnect ws after slack api decides to end it help cmd responds without threading due to slack api limitations Commands when pinging bot always responds in thread, even help cmd Added a meow cmd
Updates Did a banner & Logo Add a pung command, it pings a certain user when you use it Added slash commands where the slash cmd msg is deleted instead of kept Fixed help cmd deleting slash cmd msg when it should not be
Finishing Touches So time to ship Basically finished up by: Doing example env Using a proper deploy workflow Add env reading support via CLI args Nuked docker compose And ofc, a bunch of readme updates
Ships:
I made slack-asm! A slack bot written fully in x86_64 Assembly only. ARM support coming in the next ship. With 0.35MB ram usage and a peak of 0.52 CPU %, its a really really lightweight and fast slackbot. (The image below of ram and cpu usage may be slightly off from what I said here) Though it only has a small list of commands, it is very easy to add more to it!...
|
1792997275.0188718
|
1793083675.0188718
|
|
27126
|
Poem AI by @kallenseelo | Stardance
|
kallenseelo
|
1
|
35.0
|
560
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-17T06:23:03Z", "hours": 35.0, "multiplier": 15.84, "payout": 560, "blessing": "neutral", "text": "PoemAI is a small neural language model built from scratch with the goal of generating English poetry. Instead of using something like PyTorch or fine-tuning an existing small LLM, I attempted to build a simple neural network to generate poetry, and it was trained on a large collection of English poetry. This project is mainly a way for me to learn how LLMs and transformers work under the hood and attempt to build my own very basic one! It also helps me learn how processing the dataset and adjusting settings can affect the performance and overall quality of large language models, such as Top-K, epochs, learning rate, etc. IF YOU WANT TO TRY THIS, just click on the link and type anything out. Honestly, while it doesn’t produce really coherent text, it’s super interesting to read and see the patterns and formations take shape from just a bunch of lines of data and some math! And it creates some actually impressive connections, even if the poems/sonnets don’t make much sense! There are a few challenges I encountered when building and coding this neural language model. The first was getting my head wrapped around the concepts and understanding, “What the heck am I doing?” It was a lot of learning concepts and looking at how other people build and code large language models so that I could implement them myself! The second challenge was getting the LLM from training to chat. I had no idea really how to do this, as it’s easy to train and develop the backend of the LLM, but getting it from training to talking took a while, and I ended up using AI to help me learn. Gemini’s learning mode helped me actually understand what the heck I was doing and not just copy and paste! Finally, the final one was optimization; my architecture honestly sucked, so I had to spend a lot of time learning and fixing the bugs and issues in my code that let it eat up 10 GB of RAM. I honestly think I’m proud that I even finished this project, as it was such a pain, but looking back on it, it was super rewarding overall. My other favourite part was the website, getting streaming working, and building HTML for the first time, with absolutely no AI at all. Overall it was super rewarding, and I WOULD recommend doing something similar for your project!", "repo": "https://github.com/k754a/PoemAI", "demo": "https://k754a.hackclub.app/PoemAi"}]...
|
[{"post_id": 48685, "ts": "202 [{"post_id": 48685, "ts": "2026-08-17T06:05:35Z", "hours": 4.7856, "text": "Finished the project! Better outputs, using torch, output streaming, and a readme! Try it! -> https://k754a.hackclub.app/PoemAi Ok, a decent amount of stuff! First, after the retraining of the model, I got it up and running on the server; that didn’t take too long. What took the longest was switching from the AI slop of the chat to using a simpler torch approach. I’m going to be honest, AI did do a lot of the handholding for the inference, but it really helped me learn and did save me 15+ hours for sure, though I did write a large chunk of it, using learning mode, rather than the fast answer. The next thing was output streaming. Output streaming made it feel so much faster and more efficient and less slow overall and helped a lot! Finally, the readme. The readme took a bit, as I made a few graphs and some stats and stuff, but it’s all done! Overall this project was a super fun and interesting project that helped me learn a LOT about AI and how they are trained, and I have mad respect for the people who figured this out from basically nothing!"}, {"post_id": 47930, "ts": "2026-08-16T06:13:50Z", "hours": 5.3281, "text": "Small changes to the website, better training data, efficiency, and performance! Try it! -> https://k754a.hackclub.app/PoemAi This took so freaking long, just because of all the random bugs, issues, and problems training an AI can have. But some of the biggest changes came from the dataset. Changing the dataset from a lot of junk to more Shakespeare ended up really improving output and structure (even though it doesn’t really rhyme). The other things were mixing the data. Instead of training on the same text doc, I shuffle the data around, still in the chunks so as to not affect output performance, but because of shuffling each epoch, running longer training (like 400 epochs) created much better results. Another update was because of these larger parameters and changes to the model; it created a problem where my loader could no longer load the model file, so I switched it to a bin and to store pure binary, allowing much faster loading and a memory drop from 3 GB to 1.1, running on the NEST server! Overall, this has been a super fun project! There is still one thing I want to change: the main chat loader is basically all AI, and I kind of hate using it, so I’m going to attempt to code my own. I could see that taking a bit, but then I’m done! EDIT: I’ve also been testing with different learning speeds, epochs, and context windows, and i ended up getting a even better model than the one currently, so i’m going to run the 400 epochs, overnight, and it should be updated by morning!"}, {"post_id": 46747, "ts": "2026-08-14T07:04:46Z", "hours": 3.1731, "text": "Web interface up, backend, and changes to CSS and HTML for all devices! Try it out!! -> https://k754a.hackclub.app/PoemAi Ok, this was not too hard; I updated a bunch of the CSS to make sure it worked for mobile and other aspect ratios (and stuff like that)! Next was the harder part: I coded the backend and sent a packet requesting the poem and got a packet back from the server. This was probably the hardest part, but overall it was good! I ended up changing a lot of the original AI chatbot to update it to take in a request and send it back out, but I did use a bit more AI to make it efficient, as it was using 2 GB of RAM on Nest lol, but that was probably the only AI part, and I really didn’t use AI for anything else, definitely keeping it under 30%.Overall it was good. I want to get a better model, as it’s alright, but it’s lowkey lacking, so yeah!"}, {"post_id": 46590, "ts": "2026-08-13T22:37:18Z", "hours": 5.3225, "text": "Faster sorting and work on the chat UI! Over the last bit, I’ve worked a lot on building a basic chat UI. I’m going to be honest, even though I’ve built a browser engine, I’ve actually not done that much HTML coding (without tons of AI), so without using AI, I built just a basic chat UI that lets you send in your word and get the poem back (but it hasn’t been wired yet). This took me a ridiculously long time, as I’m just not very good at HTML, but everyone has to start somewhere! The sorting was also another change; this allowed the AI to train so much faster, and I also changed a few compiler settings to have faster training times, but overall that was it. I’m not a huge fan of all of it, so I want to put in some more work for the UI, get it running and hosted on NEST, then just improve the AI and be done! So yeah."}, {"post_id": 45460, "ts": "2026-08-11T22:59:59Z", "hours": 3.1222, "text": "Finished training the BoW (Bag of Words) custom architecture model, with 0.7m and 3m parameter models. It’s been a hot minute since I’ve worked on this project, but I decided I gotta finish this, ‘cause those hours won’t earn themselves! Today, I fixed a few bugs with the training, but the main change was upping the dataset size from 96k chars to 600k and a 3m version as well. This proved to create much higher AI performance and took about 4 hours to train for both (as it’s trained on CPU, with one thread). While it works, i used some quick ai just code the chat part, to test to make sure the models worked, and to fix any bugs, but i plan to write the chat connection in c++ (as the ai version is in python), then to create the web view, and hook it up to my nest site! Overall a good day, and I should finish it up soon."}, {"post_id": 18731, "ts": "2026-06-29T22:21:35Z", "hours": 4.5611, "text": "Migrated to C++, as well as made training faster and smarter! Some of the main things I changed were to add epochs (going through the data more than once). Also, thanks to C++, I was able to improve the speed from about an hour and a half to under 2 seconds; however, with epochs, it’s about a minute, which isn’t too bad overall! I’m almost done with this project; I’ll build the chat interface, then I’m planning to make a UI for it on Nest so that people can use it! This project has really taught me a lot about ML and LLMs, and I’m starting to understand (and appreciate) how they are built! There really isnt much to see still, but next time i should have a vid of it working fully!"}, {"post_id": 17800, "ts": "2026-06-28T18:44:44Z", "hours": 4.0686, "text": "Converted the tokenizer and data processing to C++! Ok, this wasn’t as horrible as I thought it would be; however, it was just super long, as I had to search for similar functions and fix tons of errors, and overall it took a bit! However, I’m in the perfect place for converting the training part, then testing it! So stay tuned for that. :) The vid below shows just the basic loop running! (Not much to see, though)"}, {"post_id": 17404, "ts": "2026-06-28T05:22:44Z", "hours": 2.3661, "text": "Trained the first version! Ok, so today, I was able to build a full tokenizer and train the first version! However, it was super duper slow, but thanks to learning how to do this in Python (with very minimal libraries), I think I can code it in C++! The AI took about 2 hours for about 100 neurons and 96k samples. My plan is to make this train faster and smarter, as it has poetry structure but not the poetry part overall! The video below shows the code, as the AI currently returns bad outputs! Thanks for reading!"}, {"post_id": 17046, "ts": "2026-06-27T17:51:51Z", "hours": 2.6456, "text": "Started work on the AI! Ok, taking a break from my other project, I wanted to program a simple AI without using libraries like PyTorch, as well as learn Python! The idea for my AI is you give it a word, and it creates poetry from that word (even if it doesn’t make much sense, I’m just trying to get it to rhyme)! Today, I worked on learning some Python, as well as building the start of the tokenizer! So far it’s not too bad, and I should have it finished by the end of today! Some challenges I’ve been running into are just learning Python in general, because I keep trying to do std::cout to print things, lol, but overall it’s going well! Thanks for reading!"}]...
|
Title: Poem AI by @kallenseelo | Stardance
Devlog Title: Poem AI by @kallenseelo | Stardance
Devlogs:
Started work on the AI! Ok, taking a break from my other project, I wanted to program a simple AI without using libraries like PyTorch, as well as learn Python! The idea for my AI is you give it a word, and it creates poetry from that word (even if it doesn’t make much sense, I’m just trying to get it to rhyme)! Today, I worked on learning some Python, as well as building the start of the tokenizer! So far it’s not too bad, and I should have it finished by the end of today! Some challenges I’ve been running into are just learning Python in general, because I keep trying to do std::cout to print things, lol, but overall it’s going well! Thanks for reading!
Trained the first version! Ok, so today, I was able to build a full tokenizer and train the first version! However, it was super duper slow, but thanks to learning how to do this in Python (with very minimal libraries), I think I can code it in C++! The AI took about 2 hours for about 100 neurons and 96k samples. My plan is to make this train faster and smarter, as it has poetry structure but not the poetry part overall! The video below shows the code, as the AI currently returns bad outputs! Thanks for reading!
Converted the tokenizer and data processing to C++! Ok, this wasn’t as horrible as I thought it would be; however, it was just super long, as I had to search for similar functions and fix tons of errors, and overall it took a bit! However, I’m in the perfect place for converting the training part, then testing it! So stay tuned for that. :) The vid below shows just the basic loop running! (Not much to see, though)
Migrated to C++, as well as made training faster and smarter! Some of the main things I changed were to add epochs (going through the data more than once). Also, thanks to C++, I was able to improve the speed from about an hour and a half to under 2 seconds; however, with epochs, it’s about a minute, which isn’t too bad overall! I’m almost done with this project; I’ll build the chat interface, then I’m planning to make a UI for it on Nest so that people can use it! This project has really taught me a lot about ML and LLMs, and I’m starting to understand (and appreciate) how they are built! There really isnt much to see still, but next time i should have a vid of it working fully!
Finished training the BoW (Bag of Words) custom architecture model, with 0.7m and 3m parameter models. It’s been a hot minute since I’ve worked on this project, but I decided I gotta finish this, ‘cause those hours won’t earn themselves! Today, I fixed a few bugs with the training, but the main change was upping the dataset size from 96k chars to 600k and a 3m version as well. This proved to create much higher AI performance and took about 4 hours to train for both (as it’s trained on CPU, with one thread). While it works, i used some quick ai just code the chat part, to test to make sure the models worked, and to fix any bugs, but i plan to write the chat connection in c++ (as the ai version is in python), then to create the web view, and hook it up to my nest site! Overall a good day, and I should finish it up soon.
Faster sorting and work on the chat UI! Over the last bit, I’ve worked a lot on building a basic chat UI. I’m going to be honest, even though I’ve built a browser engine, I’ve actually not done that much HTML coding (without tons of AI), so without using AI, I built just a basic chat UI that lets you send in your word and get the poem back (but it hasn’t been wired yet). This took me a ridiculously long time, as I’m just not very good at HTML, but everyone has to start somewhere! The sorting was also another change; this allowed the AI to train so much faster, and I also changed a few compiler settings to have faster training times, but overall that was it. I’m not a huge fan of all of it, so I want to put in some more work for the UI, get it running and hosted on NEST, then just improve the AI and be done! So yeah.
Web interface up, backend, and changes to CSS and HTML for all devices! Try it out!! -> https://k754a.hackclub.app/PoemAi Ok, this was not too hard; I updated a bunch of the CSS to make sure it worked for mobile and other aspect ratios (and stuff like that)! Next was the harder part: I coded the backend and sent a packet requesting the poem and got a packet back from the server. This was probably the hardest part, but overall it was good! I ended up changing a lot of the original AI chatbot to update it to take in a request and send it back out, but I did use a bit more AI to make it efficient, as it was using 2 GB of RAM on Nest lol, but that was probably the only AI part, and I really didn’t use AI for anything else, definitely keeping it under 30%.Overall it was good. I want to get a better model, as it’s alright, but it’s lowkey lacking, so yeah!
Small changes to the website, better training data, efficiency, and performance! Try it! -> https://k754a.hackclub.app/PoemAi This took so freaking long, just because of all the random bugs, issues, and problems training an AI can have. But some of the biggest changes came from the dataset. Changing the dataset from a lot of junk to more Shakespeare ended up really improving output and structure (even though it doesn’t really rhyme). The other things were mixing the data. Instead of training on the same text doc, I shuffle the data around, still in the chunks so as to not affect output performance, but because of shuffling each epoch, running longer training (like 400 epochs) created much better results. Another update was because of these larger parameters and changes to the model; it created a problem where my loader could no longer load the model file, so I switched it to a bin and to store pure binary, allowing much faster loading and a memory drop from 3 GB to 1.1, running on the NEST server! Overall, this has been a super fun project! There is still one thing I want to change: the main chat loader is basically all AI, and I kind of hate using it, so I’m going to attempt to code my own. I could see that taking a bit, but then I’m done! EDIT: I’ve also been testing with different learning speeds, epochs, and context windows, and i ended up getting a even better model than the one currently, so i’m going to run the 400 epochs, overnight, and it should be updated by morning!
Finished the project! Better outputs, using torch, output streaming, and a readme! Try it! -> https://k754a.hackclub.app/PoemAi Ok, a decent amount of stuff! First, after the retraining of the model, I got it up and running on the server; that didn’t take too long. What took the longest was switching from the AI slop of the chat to using a simpler torch approach. I’m going to be honest, AI did do a lot of the handholding for the inference, but it really helped me learn and did save me 15+ hours for sure, though I did write a large chunk of it, using learning mode, rather than the fast answer. The next thing was output streaming. Output streaming made it feel so much faster and more efficient and less slow overall and helped a lot! Finally, the readme. The readme took a bit, as I made a few graphs and some stats and stuff, but it’s all done! Overall this project was a super fun and interesting project that helped me learn a LOT about AI and how they are trained, and I have mad respect for the people who figured this out from basically nothing!
Ships:
PoemAI is a small neural language model built from scratch with the goal of generating English poetry. Instead of using something like PyTorch or fine-tuning an existing small LLM, I attempted to build a simple neural network to generate poetry, and it was trained on a large collection of English poetry. This project is mainly a way for me to learn how LLMs and transformers work under the hood and attempt to build my own very basic one! It also helps me learn how processing the dataset and adjusting settings can affect the performance and overall quality of large language models, such as Top-K, epochs, learning rate, etc. IF YOU WANT TO TRY THIS, just click on the link and type anything out. Honestly, while it doesn’t produce really coherent text, it’s super interesting to read and see the patterns and formations take shape from just a bunch of lines of data and some math! And it creates some actually impressive connections, even if the poems/sonnets don’t make much sense! There are a few challenges I encountered when building and coding this neural language model. The first was getting my head wrapped around the concepts and understanding, “What the heck am I doing?” It was a lot of learning concepts and looking at how other people build and code large language models so that I could implement them myself! The second challenge was getting the LLM from training to chat. I had no idea really how to do this, as it’s easy to train and develop the backend of the LLM, but getting it from training to talking took a while, and I ended up using AI to help me learn. Gemini’s learning mode helped me actually understand what the heck I was doing and not just copy and paste! Finally, the final one was optimization; my architecture honestly sucked, so I had to spend a lot of time learning and fixing the bugs and issues in my code that let it eat up 10 GB of RAM. I honestly think I’m proud that I even finished this project, as it was such a pain, but looking back on it, it was super rewarding overall. My other favourite part was the website, getting streaming working, and building HTML for the first time, with absolutely no AI at all. Overall it was super rewarding, and I WOULD recommend doing something similar for your project!...
|
1792878729.1398911
|
1793742729.1398911
|
|
2969
|
Libera by @weeewwwwwwww | Stardance
|
weeewwwwwwww
|
1
|
31.0
|
559
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T18:24:52Z", "hours": 31.0, "multiplier": 18.79, "payout": 559, "blessing": "neutral", "text": "I made an open source cross-platform tv shows and movies streaming app with torrent capabilities :D You can try it by installing the file for your platform (mind that some platforms may require extra setup)", "repo": "https://github.com/notwewnothing/libera", "demo": "https://github.com/notwewnothing/libera/releases/"}]...
|
[{"post_id": 12037, "ts": "202 [{"post_id": 12037, "ts": "2026-06-19T17:09:03Z", "hours": 10.6394, "text": "Devlog #6:The finale this is actually the largest change , it’s been mainly focused on backend, i have not only added full download support but also added full torrenting support with streaming and downlaod capabilities I have also added a settings menu but it’s rlly limited at the time The app is ready to be tested in daily driving so i am shipping it Ngl the last devlog was a week ago i forgot a lot of stuff i did and the github commit history doesn’t help much rlly :) everything should THEORETICALLY work fine there are still a lot of bugs in the app but ngl they are more of an inconvenience than a deal breaker I added limited stremIO support too since i was heavily inspired by that project and wanted to create an app that provides similar performancee without the tedious setup Changelog Fix Windows MSVC coroutine error + web icon tree-shaking crash Fix Windows MSVC coroutine error + web icon tree-shaking crash Fix CI: secrets.dart, AGP9 proguard, libtorrent Windows symlink Release v1 Desktop + web support Added torrenting + offline player Download : WIP NO WAY THIS WORKS (downloading backend + offline player) More Downloading UI + added New players and ability to change between them Downloading UI + learning the Downloading website backend I don’t have to provide a vid this time since you can install and test the app for yourself noww :DDDDD pleeaseeeeee if u doooo find any issues open a github issue telling me about itttt tnxx"}, {"post_id": 7773, "ts": "2026-06-13T00:01:32Z", "hours": 6.2378, "text": "Devlog #5 THE BIG REHALL : this might’ve been the largest update since the beginning of the project, simply put I have done a FULL UI redesign along side completing the streaming functionality along side other cool features , also the project has matured as a real project with commits to github and tests instead of just remembering what i have changed, unfortunately i can’t upload videos directly because of network issues so i have to upload to youtube So the main changes are : A heavily apple tv / apple music inspired design , I took a bunch of ss from my phone and tried to copy them as close as possible Added a watchlist and continue watching with progress parse , so you can get back from where you left off A side note here FOR SOME REASON when i tried to force it to start the video from the saved last time , the player got stuck on that specific timestamp BUT when i removed the code and returned it just to play the video from the start IT SOMEHOW WORKED , the player API FOR SOMEREASON hates when you try to force it to play from a specific time stamp , and have it’s down continue function IDK man :/ Did some Bug fixes that i didn’t notice before , it’s quite hard to find bugs since I am the only play tester and the app is not really complete so I can’t use it for a daily user case yet Performance improvements since I was working before with an android emulator so i thought performance issues were with the emulator but got to try it on bare metal now and THIS APP STILL MANAGES TO FREEZE MY S22 so i can only think what it will do to lesser phones There is just so much added I cannot talk about all of it the video should be more informative To do : The next thing is most def going to be downloads, but i am quite sure it’s the thing that’s going to take the most amount of time cuz I am going to have to somehow curl or fetch them since there is no api or somehow implement torrenting , but that’s going to be my last resort , I already have a good website in mind that acts more like a directory and it have everything in it , exactly like torrenting , but since it’s a WEBSITE , i am gonna have to try find a way to get only the stuff i am going to need I think i am going to work on the UI first Yes ik i am procrastinating but it’s HARD yk :) also here is a dancing lain since i need to upload photos"}, {"post_id": 5197, "ts": "2026-06-08T21:51:44Z", "hours": 3.7311, "text": "Devlog #4: It seems that i was able to upload vids after all :D oopppssieee , Anywayssss the main Changes in this devlog where Adding a search screen, Ik it’s UI looks awefull rn i just wanted to check that everything is working rn created a github repo (ik i am a real developer now) The UI of the whole app looks a bit bad , I started looking on the UI of the popular streaming apps and apple tv’s rllyyy looks good but it’s not that different tho soo i might borrow sm ideas from them :) I am leaving the downloads page last thing cuz it’s gonna have it’s own API (it’s not rlly an API but ill explain when i get to it ;) update; Umm it seems that the vid was too large to upload sooo here it is link enjoy this photo from a random folder for now :)"}, {"post_id": 2522, "ts": "2026-06-05T01:50:31Z", "hours": 4.3072, "text": "Devlog #3: The fact that i can only upload one photo is really bugging me , ik that i am meant to devlog each 30m but tbh most of the time i spend setting up the services and models for the API so the full UI additions will still happen in a single devlog but now there are 3 filler ones of repetitive backed work So added a detailed screen for movies and tv shows and yes i am separating them because they are separated in the code because simple TMDB doesn’t have a unified ID var but the movies have their own set of IDs so do TV shows and these IDs can overlap so to save on headache i just copied the page changed the backend to correspond to tv shows and even added the Seasons var to the text The page when loaded shows the cover art of the movie for a hardcoded 3 second (might be 6 in the code i am lazy to change it back now) and then does a fade in transition for the trailer which is taken from youtube with the youtube explode which allows me to show the vid without any overalys then comes movie title , release year , rating, runtime, and in the right the providers to it , there is an issue where a lot of the time especially is it’s a single or 2 providers it shows duplicates it’s because of the API i can fix it but it’s low priority now then under it shows the genres play add button which are placeholders now a description the cast with photos their real names and roles and finally but it’s not showing a related section that is stolen code from the home screen sidebars with correct api backend next would be probably getting to either search or fixing all the issues at one , once for all so they never bother me again prob gnna go for the search"}, {"post_id": 1837, "ts": "2026-06-04T01:38:44Z", "hours": 4.9453, "text": "Devlog #2: Sooo Home screen front end mostly done, it fetches data from TMDB but i have my own api key inserted i should add a way for users to give their own api keys So all buttons and icons are there just for show and don’t do anything yet The home screen consists of 3 main parts: -The header at the top with logo and 2 buttons -The main Box which have all relevant stuff like tv shows and movies ext -The Lists which are very modular so i can add or change them very easily later on now i have Trending Movies and Tv shows along side most popular movies from each genre The UI might not be the greatest but it works for now at least"}, {"post_id": 1161, "ts": "2026-06-03T00:25:38Z", "hours": 0.6247, "text": "Devlog #1: Since I got the proof of concept working now it’s time for a real UI , So i started working on a navbar , the app is gonna be simple with a home screen , search and downloads , I might add settings later if I found a good reason , but for now it’s staying simple :D Next thing the home screen , I found some projects with TMDB integration so I know it’s possible so no need for no proof of concept"}, {"post_id": 1091, "ts": "2026-06-02T22:24:22Z", "hours": 0.7525, "text": "Devlog #0: The start Soooo it seems that there is no good FREE streaming app for IOS/Android (especially IOS) and the ones that so either lack extremely important features or have complicated Setup, So the idea of Libera is to fix all of that and no I am not making big claims out of nothing So the implementation is already decided I am going to use TMDB api for movies/tv shows indexing since they have a free api , Vidking Player for https streaming which convininently integrates with TMDB and I think i am gonna try to find a way to curl a cool website i found with a collection to all tv shows What happened so far I got the Streaming part working fine , the api is nothing more than a customized fancy iframe that you add to websites , I just added a webviewer in the app with the ability to fullscreen , but it seems that there was an issue at first sine sometimes it would just send me to google or give me a Webpage not available , it seems that these where ads mostly which i fixed by adding a check if the website adress changed to something different and blocker the intent:// protocol which seems to only be used for ads These 2 quick fixes resulted in the player working great without ads too :D and now the player works great"}]...
|
Title: Libera by @weeewwwwwwww | Stardance
Devlog Title: Libera by @weeewwwwwwww | Stardance
Devlogs:
Devlog #0: The start Soooo it seems that there is no good FREE streaming app for IOS/Android (especially IOS) and the ones that so either lack extremely important features or have complicated Setup, So the idea of Libera is to fix all of that and no I am not making big claims out of nothing So the implementation is already decided I am going to use TMDB api for movies/tv shows indexing since they have a free api , Vidking Player for https streaming which convininently integrates with TMDB and I think i am gonna try to find a way to curl a cool website i found with a collection to all tv shows What happened so far I got the Streaming part working fine , the api is nothing more than a customized fancy iframe that you add to websites , I just added a webviewer in the app with the ability to fullscreen , but it seems that there was an issue at first sine sometimes it would just send me to google or give me a Webpage not available , it seems that these where ads mostly which i fixed by adding a check if the website adress changed to something different and blocker the intent:// protocol which seems to only be used for ads These 2 quick fixes resulted in the player working great without ads too :D and now the player works great
Devlog #1: Since I got the proof of concept working now it’s time for a real UI , So i started working on a navbar , the app is gonna be simple with a home screen , search and downloads , I might add settings later if I found a good reason , but for now it’s staying simple :D Next thing the home screen , I found some projects with TMDB integration so I know it’s possible so no need for no proof of concept
Devlog #2: Sooo Home screen front end mostly done, it fetches data from TMDB but i have my own api key inserted i should add a way for users to give their own api keys So all buttons and icons are there just for show and don’t do anything yet The home screen consists of 3 main parts: -The header at the top with logo and 2 buttons -The main Box which have all relevant stuff like tv shows and movies ext -The Lists which are very modular so i can add or change them very easily later on now i have Trending Movies and Tv shows along side most popular movies from each genre The UI might not be the greatest but it works for now at least
Devlog #3: The fact that i can only upload one photo is really bugging me , ik that i am meant to devlog each 30m but tbh most of the time i spend setting up the services and models for the API so the full UI additions will still happen in a single devlog but now there are 3 filler ones of repetitive backed work So added a detailed screen for movies and tv shows and yes i am separating them because they are separated in the code because simple TMDB doesn’t have a unified ID var but the movies have their own set of IDs so do TV shows and these IDs can overlap so to save on headache i just copied the page changed the backend to correspond to tv shows and even added the Seasons var to the text The page when loaded shows the cover art of the movie for a hardcoded 3 second (might be 6 in the code i am lazy to change it back now) and then does a fade in transition for the trailer which is taken from youtube with the youtube explode which allows me to show the vid without any overalys then comes movie title , release year , rating, runtime, and in the right the providers to it , there is an issue where a lot of the time especially is it’s a single or 2 providers it shows duplicates it’s because of the API i can fix it but it’s low priority now then under it shows the genres play add button which are placeholders now a description the cast with photos their real names and roles and finally but it’s not showing a related section that is stolen code from the home screen sidebars with correct api backend next would be probably getting to either search or fixing all the issues at one , once for all so they never bother me again prob gnna go for the search
Devlog #4: It seems that i was able to upload vids after all :D oopppssieee , Anywayssss the main Changes in this devlog where Adding a search screen, Ik it’s UI looks awefull rn i just wanted to check that everything is working rn created a github repo (ik i am a real developer now) The UI of the whole app looks a bit bad , I started looking on the UI of the popular streaming apps and apple tv’s rllyyy looks good but it’s not that different tho soo i might borrow sm ideas from them :) I am leaving the downloads page last thing cuz it’s gonna have it’s own API (it’s not rlly an API but ill explain when i get to it ;) update; Umm it seems that the vid was too large to upload sooo here it is link enjoy this photo from a random folder for now :)
Devlog #5 THE BIG REHALL : this might’ve been the largest update since the beginning of the project, simply put I have done a FULL UI redesign along side completing the streaming functionality along side other cool features , also the project has matured as a real project with commits to github and tests instead of just remembering what i have changed, unfortunately i can’t upload videos directly because of network issues so i have to upload to youtube So the main changes are : A heavily apple tv / apple music inspired design , I took a bunch of ss from my phone and tried to copy them as close as possible Added a watchlist and continue watching with progress parse , so you can get back from where you left off A side note here FOR SOME REASON when i tried to force it to start the video from the saved last time , the player got stuck on that specific timestamp BUT when i removed the code and returned it just to play the video from the start IT SOMEHOW WORKED , the player API FOR SOMEREASON hates when you try to force it to play from a specific time stamp , and have it’s down continue function IDK man :/ Did some Bug fixes that i didn’t notice before , it’s quite hard to find bugs since I am the only play tester and the app is not really complete so I can’t use it for a daily user case yet Performance improvements since I was working before with an android emulator so i thought performance issues were with the emulator but got to try it on bare metal now and THIS APP STILL MANAGES TO FREEZE MY S22 so i can only think what it will do to lesser phones There is just so much added I cannot talk about all of it the video should be more informative To do : The next thing is most def going to be downloads, but i am quite sure it’s the thing that’s going to take the most amount of time cuz I am going to have to somehow curl or fetch them since there is no api or somehow implement torrenting , but that’s going to be my last resort , I already have a good website in mind that acts more like a directory and it have everything in it , exactly like torrenting , but since it’s a WEBSITE , i am gonna have to try find a way to get only the stuff i am going to need I think i am going to work on the UI first Yes ik i am procrastinating but it’s HARD yk :) also here is a dancing lain since i need to upload photos
Devlog #6:The finale this is actually the largest change , it’s been mainly focused on backend, i have not only added full download support but also added full torrenting support with streaming and downlaod capabilities I have also added a settings menu but it’s rlly limited at the time The app is ready to be tested in daily driving so i am shipping it Ngl the last devlog was a week ago i forgot a lot of stuff i did and the github commit history doesn’t help much rlly :) everything should THEORETICALLY work fine there are still a lot of bugs in the app but ngl they are more of an inconvenience than a deal breaker I added limited stremIO support too since i was heavily inspired by that project and wanted to create an app that provides similar performancee without the tedious setup Changelog Fix Windows MSVC coroutine error + web icon tree-shaking crash Fix Windows MSVC coroutine error + web icon tree-shaking crash Fix CI: secrets.dart, AGP9 proguard, libtorrent Windows symlink Release v1 Desktop + web support Added torrenting + offline player Download : WIP NO WAY THIS WORKS (downloading backend + offline player) More Downloading UI + added New players and ability to change between them Downloading UI + learning the Downloading website backend I don’t have to provide a vid this time since you can install and test the app for yourself noww :DDDDD pleeaseeeeee if u doooo find any issues open a github issue telling me about itttt tnxx
Ships:
I made an open source cross-platform tv shows and movies streaming app with torrent capabilities :D You can try it by installing the file for your platform (mind that some platforms may require extra setup)...
|
1792993957.3185134
|
1793080357.3185134
|
|
55434
|
BKball by @Nanobi | Stardance
|
Nanobi
|
1
|
36.91
|
559
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-23T16:37:28Z", "hours": 31.0, "multiplier": 18.46, "payout": 559, "blessing": "neutral", "text": "BKball is an html game where you pull ropes to make a ball go up the wall without falling into the holes. It is playable on any platform :D You have 12 levels and you can edit them or create new ones with the level editor ! I did this project thinking about my other project: the BKpad, a custom keypad. Therefore, the game is designed to work primarily with this MacroPad, secondarily for a keyboard and then on mobile. The project is a simple html zip, made with vanilla javascript and no plugins! It is small with less than 1000 lines of code, but with more it would be difficult to make them all in one file :o Doing this project was cool! I never did javascript this much, it’s floppy but it is not too hard to code even if 0 == false ;-; I am proud of having done everything myself, especially the canvas which is not a canvas element but an svg using animated elements and curves as lines so I can bend them :3 If you want to test the project, go to bkball.rf.gd everything is updated automatically :) I am proud of my “BK” hardware project (the cat head you can see in the website at the left) and happy that now it has a new website linked to him :D", "repo": "https://github.com/Nan0b1/BKball", "demo": "https://nan0b1.github.io/BKball/"}]...
|
[{"post_id": 82634, "ts": "202 [{"post_id": 82634, "ts": "2026-10-25T13:54:43Z", "hours": 3.2014, "text": "Smol devlog 2 s2 Someone asked in the last shipment to do more devlogs so there it is What is my project It’s an html game made from scratch with no frameworks where you need to make a ball go up and not fall into other holes New things ! Brand new animations for when you win, loose, or swipe horizontally on your phone instead of vertically, all made in the svg canvas Sound ! When you win or fall in a hole, you get 4 different vfx Migrated website. The old website keeps getting blacklisted by google so I have now my website in github pages !!! I smoothed some movements and patched the keyboard response time (I was maybe checking inputs every 200ms so you had to wait the next tick :3) What’s next? I have no ideas :( For the moment I’ll finish my BKpad’s website to ship it :) If you think about a feature just ask me in comms"}, {"post_id": 82278, "ts": "2026-10-24T13:25:57Z", "hours": 2.7092, "text": "Small devlog 1 s2 What is my project? In this HTML game, you need to pull ropes to make a ball go up, but don’t fall in the holes What’s new? I tried my best to make the user experience feel better New computer controls (I keep the legacy ones hidden for the BKpad to work the best :o) Reworked gestures for phones and every touchable screen Clearer explanations for each platform A new level selector on top of the one existing, because I noticed nobody changed levels with my selector Bug fixes: ropes were bending when you used gestures and your death was delayed, but now everything works What next? A win animation? Sounds? translation fix Hope the devlog was fun to read :) Goodbye"}, {"post_id": 72679, "ts": "2026-09-23T14:11:02Z", "hours": 1.8417, "text": "SmallLog 5 :) What is my game? A hand made html/js game where you have to make the ball go up, featuring 12 levels and an entirely functional level editor where you can share your creations with others Last touches I polished the code (and added the last ; ) I added an on-close warning if you haven’t saved You can now change levels when in level editor and it saves what you did The readme is more complete now The decision was made to not make easter eggs (simpler is sometimes good and adding random things is not my priority (it’s what I did during 50 hours but nevermind)) You can test it on BKball’s official website !!!! I have completed my mission and have to say goodbye :o I won’t make new projects, I have personal work to do Goodbye, it was fun to be in the stardance hackClub :)"}, {"post_id": 72360, "ts": "2026-09-22T19:08:32Z", "hours": 9.0103, "text": "Devlog 4 !! :D What is this project about? In this html game, you have to make the ball go in the green hole, by pulling on the two lateral ropes. 8 hours of work: I worked on several things: I added a complete working level editor: functions to add holes functions to modify and delete holes ! with this I added 8 new levels! I completed french translation and integrated the language selector into the page I added many missing semicolons in the javascript because I normally code in python I added a favicon ! then I quickly fixed some bugs :) What’s next? Fix an editor mode where it edits 2 levels at once Change the mobile controls editor logo at the left one last devlog SHIP THE PROJECT!!!"}, {"post_id": 67168, "ts": "2026-09-13T07:33:07Z", "hours": 7.7208, "text": "Big Devlog 3 !!! What is this project about? I”m making a web game about pulling ropes to make a ball up but you can fall in the wall holes :o This project is pure html, javascript and css what does I added during those 7h40? I first cleaned the whole code I fixed all physics issue with reliable solutions, now if you pull too hard on one the other will loosen itself I transformed ropes lines into straight curves with the straight curves I can bend them if you push too many rope on one side I styled the whole website and added controls explanation + levels selection brand new gesture system for phones and everything that have a touchscreen I store the level you are so you can join without reselecting everything Some Minecraft Modder on github helped me to determine a localstorage related bug and implemented lang.js -> I have now french support ! I started implementing level edition! (not pushed) (it’s for me because now to do levels I need to tweak arrays in vsCode :/) An official website is now availiable , thanks to infinityfree, they are a simple and good solution! I added instant auto deployement from the github to the new website! Controls are unified, it don’t make the difference between AZERTY and QWERTY or any other random layout :) what’s next? continue level editor do levels with it add an easter egg Thanks for reading this really long devlog I didn’t saw the time going on (4h in half a day is a lot for my little brain but music helps!) Special thanks to Some Minecraft Modder for not only his help but for following my project!"}, {"post_id": 64834, "ts": "2026-09-09T15:01:19Z", "hours": 6.0619, "text": "Devlog 2 BKball !!! What is this? This is an html game where you have to make a ball up while not falling into the holes :) I do this with native html, css and javascript (with < svg> ) 5 hours of work: I added holes I added a way to win (it’s not common for a game i think ) I fixed some physics issues where you could go in the sky :o Brand new level system where you can choose a level and change with real ease -> two levels :) what I have to do? clean the code so I can dev easily :) add more level add a custom backroom level with “all of the lights” while you are being chased the whole website because for now I only have the “canvas” Thanks for reading it’s fun to do and thanks to “Some minecraft Modder” who is supporting me"}, {"post_id": 58799, "ts": "2026-08-31T11:44:44Z", "hours": 6.2797, "text": "Hello there! First devlog! I’m glad to lunch a new project: BKball What is it? You have a ball down a wall and you want to make it go up by pulling on 2 ropes :o Why is this a continuation of the BKpad? The game is designed to work directly with the potentiometers of the BKpad and later the ball will be BKthemed :) What have I done? 6h16 of work : launched the project ideas and things I would use I did the main frame, I will do native js, html and css I will not use game frameworks but items I did physics! I didn’t simulated the whole thing lol, I just used some equations :) (go see it’s fun) my grandma was with me and followed the whole process during some hours A friend of mine helped me with some css tweaks so the Github is updated :) For the future: I already have holes but I have to add collisions I need to do a level system! I will have to make a welcome popup to explain some things Goodbye :D"}]...
|
Title: BKball by @Nanobi | Stardance
Devlogs:
Hel Title: BKball by @Nanobi | Stardance
Devlogs:
Hello there! First devlog! I’m glad to lunch a new project: BKball What is it? You have a ball down a wall and you want to make it go up by pulling on 2 ropes :o Why is this a continuation of the BKpad? The game is designed to work directly with the potentiometers of the BKpad and later the ball will be BKthemed :) What have I done? 6h16 of work : launched the project ideas and things I would use I did the main frame, I will do native js, html and css I will not use game frameworks but items I did physics! I didn’t simulated the whole thing lol, I just used some equations :) (go see it’s fun) my grandma was with me and followed the whole process during some hours A friend of mine helped me with some css tweaks so the Github is updated :) For the future: I already have holes but I have to add collisions I need to do a level system! I will have to make a welcome popup to explain some things Goodbye :D
Devlog 2 BKball !!! What is this? This is an html game where you have to make a ball up while not falling into the holes :) I do this with native html, css and javascript (with < svg> ) 5 hours of work: I added holes I added a way to win (it’s not common for a game i think ) I fixed some physics issues where you could go in the sky :o Brand new level system where you can choose a level and change with real ease -> two levels :) what I have to do? clean the code so I can dev easily :) add more level add a custom backroom level with “all of the lights” while you are being chased the whole website because for now I only have the “canvas” Thanks for reading it’s fun to do and thanks to “Some minecraft Modder” who is supporting me
Big Devlog 3 !!! What is this project about? I”m making a web game about pulling ropes to make a ball up but you can fall in the wall holes :o This project is pure html, javascript and css what does I added during those 7h40? I first cleaned the whole code I fixed all physics issue with reliable solutions, now if you pull too hard on one the other will loosen itself I transformed ropes lines into straight curves with the straight curves I can bend them if you push too many rope on one side I styled the whole website and added controls explanation + levels selection brand new gesture system for phones and everything that have a touchscreen I store the level you are so you can join without reselecting everything Some Minecraft Modder on github helped me to determine a localstorage related bug and implemented lang.js -> I have now french support ! I started implementing level edition! (not pushed) (it’s for me because now to do levels I need to tweak arrays in vsCode :/) An official website is now availiable , thanks to infinityfree, they are a simple and good solution! I added instant auto deployement from the github to the new website! Controls are unified, it don’t make the difference between AZERTY and QWERTY or any other random layout :) what’s next? continue level editor do levels with it add an easter egg Thanks for reading this really long devlog I didn’t saw the time going on (4h in half a day is a lot for my little brain but music helps!) Special thanks to Some Minecraft Modder for not only his help but for following my project!
Devlog 4 !! :D What is this project about? In this html game, you have to make the ball go in the green hole, by pulling on the two lateral ropes. 8 hours of work: I worked on several things: I added a complete working level editor: functions to add holes functions to modify and delete holes ! with this I added 8 new levels! I completed french translation and integrated the language selector into the page I added many missing semicolons in the javascript because I normally code in python I added a favicon ! then I quickly fixed some bugs :) What’s next? Fix an editor mode where it edits 2 levels at once Change the mobile controls editor logo at the left one last devlog SHIP THE PROJECT!!!
SmallLog 5 :) What is my game? A hand made html/js game where you have to make the ball go up, featuring 12 levels and an entirely functional level editor where you can share your creations with others Last touches I polished the code (and added the last ; ) I added an on-close warning if you haven’t saved You can now change levels when in level editor and it saves what you did The readme is more complete now The decision was made to not make easter eggs (simpler is sometimes good and adding random things is not my priority (it’s what I did during 50 hours but nevermind)) You can test it on BKball’s official website !!!! I have completed my mission and have to say goodbye :o I won’t make new projects, I have personal work to do Goodbye, it was fun to be in the stardance hackClub :)
Small devlog 1 s2 What is my project? In this HTML game, you need to pull ropes to make a ball go up, but don’t fall in the holes What’s new? I tried my best to make the user experience feel better New computer controls (I keep the legacy ones hidden for the BKpad to work the best :o) Reworked gestures for phones and every touchable screen Clearer explanations for each platform A new level selector on top of the one existing, because I noticed nobody changed levels with my selector Bug fixes: ropes were bending when you used gestures and your death was delayed, but now everything works What next? A win animation? Sounds? translation fix Hope the devlog was fun to read :) Goodbye
Smol devlog 2 s2 Someone asked in the last shipment to do more devlogs so there it is What is my project It’s an html game made from scratch with no frameworks where you need to make a ball go up and not fall into other holes New things ! Brand new animations for when you win, loose, or swipe horizontally on your phone instead of vertically, all made in the svg canvas Sound ! When you win or fall in a hole, you get 4 different vfx Migrated website. The old website keeps getting blacklisted by google so I have now my website in github pages !!! I smoothed some movements and patched the keyboard response time (I was maybe checking inputs every 200ms so you had to wait the next tick :3) What’s next? I have no ideas :( For the moment I’ll finish my BKpad’s website to ship it :) If you think about a feature just ask me in comms
Ships:
BKball is an html game where you pull ropes to make a ball go up the wall without falling into the holes. It is playable on any platform :D You have 12 levels and you can edit them or create new ones with the level editor ! I did this project thinking about my other project: the BKpad, a custom keypad. Therefore, the game is designed to work primarily with this MacroPad, secondarily for a keyboard and then on mobile. The project is a simple html zip, made with vanilla javascript and no plugins! It is small with less than 1000 lines of code, but with more it would be difficult to make them all in one file :o Doing this project was cool! I never did javascript this much, it’s floppy but it is not too hard to code even if 0 == false ;-; I am proud of having done everything myself, especially the canvas which is not a canvas element but an svg using animated elements and curves as lines so I can bend them :3 If you want to test the project, go to bkball.rf.gd everything is updated automatically :) I am proud of my “BK” hardware project (the cat head you can see in the website at the left) and happy that now it has a new website linked to him :D...
|
1793004465.0669339
|
1793090865.0669339
|
|
9911
|
Space Station by @CoolHotDog64 | Stardance
|
CoolHotDog64
|
1
|
35.0
|
558
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-05T15:12:15Z", "hours": 35.0, "multiplier": 15.96, "payout": 558, "blessing": "neutral", "text": "Space Station I created the International Space Station using CAD (Computer Aided Design) This was a hard challenge for me, here are some of the issues I had while creating this Not enough images, there were very few images that showed the space station in detail and almost none were clear, I fixed this by finding an image made by NASA which I based my space shuttle off of Very small parts, the parts that I had to make were very small and precise, what I had to do is I had to create an object (using the extrude tool) and then I used the transform tool to “freely” move it No dimensions available, since there were none, I just had to base it off of the NASA image and estimate the size of every object, this turned out well and I think I got almost everything the right size, I probably couldn’t do any better Why this design is unique and better then others available: This design is way more realistic then many models created, many models are rushed and low effort, I worked really hard to design this project and I think mine out performs a ton of models available especially since some models are created by professionals This design is unique since it’s actually realistic and allows multi color printing, instead of just coloring the faces of the objects which doesn’t do anything, I made sure that the color was a separate object so it could be multi color printed This was a very fun and interesting project! I will also mention that this is a MODEL of the ISS, If you think that it would be better to create my own, that would defeat the whole purpose since it wouldn’t do anything if I made my own, making a model lets me create a part of history (Last rate someone thought that I should create my own space shuttle instead of copying one which ruins the whole purpose) The information on how to download and print my file is in high detail in my readme, but I will quickly explain it here: First, click try project Second, you will see a bar at the bottom of your screen with a download button Thirdly click it and a menu will pop up to print it Or you can go to the readme and above it there should be step, stl and 3mf files that you can just download This was a very fun and exciting project! Thank you for viewing my project. One thing i will mention is if you try to print it, you might get issues since some of the parts are very small, the larger the better for printing. If the print messes up its not the 3D design’s fault, its the printers", "repo": "https://github.com/CoolHotDog64/Space-Station", "demo": "https://makerworld.com/en/models/3153870-international-space-station"}]...
|
[{"post_id": 40795, "ts": "202 [{"post_id": 40795, "ts": "2026-08-04T15:33:46Z", "hours": 1.2672, "text": "I Finished My Space Station! This project was faster then the last one, but I’m very happy with the current result! The project should be rated today or tomorrow, all I need to do is create my readme and the description of my space shuttle What I did since last develog: I created the connection between the solar panels and the main body of the space station, this took a while since I needed to make it realistic and there weren’t many images sowing this component on the ISS I added a new small component to my space station, this connected to a previous piece I made I added another new part to the underside of my space station, this was hard to so since you couldn’t really see the component in the reference image I used This has been an awesome project to create! Feel free to print my project once its shipped! You should be able to multicolor print it too."}, {"post_id": 40425, "ts": "2026-08-03T22:43:52Z", "hours": 5.0711, "text": "Still Editing My Space Station I was able to get a lot done today (This devlog is longer since I did 5 hours in 1 day). This is what I finished: I fixed the supports on the many radiators, this took a while since I needed to make a lot of them and it took a while to make realistic I added 5 small, realistic panels to the space station, this took a while since I needed to base the many small parts off of 1 image I added 6 small solar panels that were missing on the space station previously, this added a lot more to the overall image of the space shuttle I added 2 Zvezda Service Modules (They look like mushrooms) I still need to add multiple small details to the space station but overall, I added every section to the exterior of the space station. This project is very close from being done! If you have any suggestions, you can leave them in the comments"}, {"post_id": 39782, "ts": "2026-08-02T23:40:39Z", "hours": 2.7942, "text": "I finished the Russian Segment On My Space Station! This includes one of the most complex parts of the space station so this took me a while This is what I did today: I worked on the dimensions of the Russian Segment on the space station. This included using tools to add realism like fillets and drafts. I moved the radiator panels closer together to increase realism and detail to the space station. I added Control Movement Gyroscopes to the space shuttle. This took a while since the part was very small and precise. What I still need to do I still need to add many smaller parts to the space shuttle. I still need to fix the Radiator Panels connection since I reduced their spacing This project is going very well and so far I’m very happy with the result. If you have any suggestions, please leave them in the comments!"}, {"post_id": 39652, "ts": "2026-08-02T19:36:50Z", "hours": 3.6136, "text": "I Am Almost Done The Canadarm On My Space Station! What I did to the Canadarm in the past 3 hours: I changed the dimensions of the Canadarm to add more realism to my model I added a realistic control panel to the space station connected to the Canadarm I added the Control Movement Gyroscope to the space shuttle I smoothed out a part of the main body structure of the space station since it was sticking out weird What I still need to work on: I still need to fix a large piece of the Canadarm since its the wrong shape and dimensions I still need to add multiple small parts to the Canadarm and other small parts to the space station I’m very happy with the current result, I hope to finish This project soon! If you have any suggestions, leave them in the comments!"}, {"post_id": 38240, "ts": "2026-07-31T15:13:39Z", "hours": 4.8233, "text": "Still Working On My Space Station So far I’m Getting very close to completing this challenging project! What I did in the past 5 hours: I added much more realism to the middle of the space stations body since before it was just a block I started creating the Canadarm, I still need to make multiple edits to it though I added more smaller details to the structure of the space station What I still need to work on: I still need to create the Canadarm and I need to attach it to the space station I still need to add some smaller parts around the space station I need to add solar panels to the Canadarm This projects is close form being done. So far I’m very happy with the result!"}, {"post_id": 35250, "ts": "2026-07-26T15:35:54Z", "hours": 5.5306, "text": "I’m Almost Done The Body Of My Space Station! So far, I’ve made huge progress on the body of the space station, and I’m very happy with the current state What I Edited On My Space Shuttle In The Past 5 Hours: I finished off the structure that I almost completed in my last devlog. This took a while since it was super precise. I added another support structure. This took less time, but it still took a long time to complete . I completely redesigned the radiator panels, adding realistic angle and dimensions. I changed the shape on some parts of the space station to add more realism. Before, it was a constant hexagon, but now it goes from a square to a hexagon. I started to add realistic supports to the Photovoltaic Radiator panels since right now they are floating. What I still need to work on: I still need to add all the supports on the Photovoltaic Radiator panels. I still have to add more realism to the body of the space shuttle. I need to add detail to the middle of the space station’s body. I still need to add the Russian Orbital Segment to the space station. Right now there is nothing there. This devlog is longer than usual since I did this in 1 day. I’m very happy with the progress and I can’t wait for the finished result. If you have any suggestions, leave them in the comments!"}, {"post_id": 34346, "ts": "2026-07-24T23:17:37Z", "hours": 3.4117, "text": "Still Working On My Space Station This project is getting more realistic every day. This is what I did in the past 3 hours and 24 minutes: I added a connection point from this “web” structure to the body of the space station. This took me a couple of tries, but after I did it the space station was much more realistic. I made the body of the space shuttle smaller since it was slightly too large, and it intersected with a lot of parts (There are still some intersection errors that I haven’t fixed yet). I added a main frame to the “web” structure. This was still a slow process, but it was still one of the fastest parts of this project. I added smaller crosses in between the “web” structure. This added much more realism. I didn’t finish though since I still have 2 more sides to do. What I still need to do: I still need to fix the “web” structure. It intersects some parts and only 60% of it’s done right now. I still need to replicate this part on the other side. So far, I have only done one side. I should be able to replicate it quickly with the mirror tool. I need to add a similar part further into the space station’s structure. This will probably take much longer and will be more challenging. I also have to add more realism to the body of the space station, since right now it’s mostly just a block. This took a long time, and I’m estimating that making these supports will take about 12 more hours since they take a long time to make. So far, this project has taken a long time, but I’m happy with the current result. If you have any suggestions, feel free to leave them in the comments!"}, {"post_id": 32580, "ts": "2026-07-21T21:01:33Z", "hours": 2.9056, "text": "Still Working On My Space Station What I fixed I fixed the shape of the body of the space station since it was the wrong shape I fixed the shape of the Thermal Radiator Panels since before they were too large and thick I changed the angle and position of the Thermal Radiator Panels since they were also wrong, I moved them from horizontal to vertical and I added a new angle I added new parts in the middle of the 2 Thermal Radiator panels (I still need to add more detail) Changed the angle of the solar panels on the space station for more realism What I still need to do: Still need to work on the body of the space station like adding supports I still need to add more to the parts in the middle of the 2 Thermal Radiator Panels since right now they are super simple and they have the wrong shapes This space station is really coming together! I can’t wait for the result. If you have any suggestions about my space station you can share them in the comments!"}, {"post_id": 31406, "ts": "2026-07-19T18:57:37Z", "hours": 3.8147, "text": "I’m Still Working On Adding Realism To My Space Station| I was able to do a lot in the past 4 hours I was able to add an angle to the solar panels on my space station I fixed the main solar panel connection to the main body I created radiator panels with realistic fillets to add realism I added a long solar panel to the end of the radiator panels What I still need to work on I still need to create the fluid manifold assembly and fix the body to add realism I need to add a little realism to other parts So far, this project is going well and I can’t wait for the end result!"}, {"post_id": 29143, "ts": "2026-07-15T20:33:33Z", "hours": 1.6956, "text": "I Just Started My Space Station! I decided to do the International Space Station! So far I have been working on the solar panels on the ISS, I have also started to connect them together and add small detail to them My next goal is to create the main frame of the building and then move on to smaller details I’m excited on where this project will go! If you have any suggestions share them in the comments."}]...
|
Title: Space Station by @CoolHotDog64 | Stardance
Title: Space Station by @CoolHotDog64 | Stardance
Devlogs:
I Just Started My Space Station! I decided to do the International Space Station! So far I have been working on the solar panels on the ISS, I have also started to connect them together and add small detail to them My next goal is to create the main frame of the building and then move on to smaller details I’m excited on where this project will go! If you have any suggestions share them in the comments.
I’m Still Working On Adding Realism To My Space Station| I was able to do a lot in the past 4 hours I was able to add an angle to the solar panels on my space station I fixed the main solar panel connection to the main body I created radiator panels with realistic fillets to add realism I added a long solar panel to the end of the radiator panels What I still need to work on I still need to create the fluid manifold assembly and fix the body to add realism I need to add a little realism to other parts So far, this project is going well and I can’t wait for the end result!
Still Working On My Space Station What I fixed I fixed the shape of the body of the space station since it was the wrong shape I fixed the shape of the Thermal Radiator Panels since before they were too large and thick I changed the angle and position of the Thermal Radiator Panels since they were also wrong, I moved them from horizontal to vertical and I added a new angle I added new parts in the middle of the 2 Thermal Radiator panels (I still need to add more detail) Changed the angle of the solar panels on the space station for more realism What I still need to do: Still need to work on the body of the space station like adding supports I still need to add more to the parts in the middle of the 2 Thermal Radiator Panels since right now they are super simple and they have the wrong shapes This space station is really coming together! I can’t wait for the result. If you have any suggestions about my space station you can share them in the comments!
Still Working On My Space Station This project is getting more realistic every day. This is what I did in the past 3 hours and 24 minutes: I added a connection point from this “web” structure to the body of the space station. This took me a couple of tries, but after I did it the space station was much more realistic. I made the body of the space shuttle smaller since it was slightly too large, and it intersected with a lot of parts (There are still some intersection errors that I haven’t fixed yet). I added a main frame to the “web” structure. This was still a slow process, but it was still one of the fastest parts of this project. I added smaller crosses in between the “web” structure. This added much more realism. I didn’t finish though since I still have 2 more sides to do. What I still need to do: I still need to fix the “web” structure. It intersects some parts and only 60% of it’s done right now. I still need to replicate this part on the other side. So far, I have only done one side. I should be able to replicate it quickly with the mirror tool. I need to add a similar part further into the space station’s structure. This will probably take much longer and will be more challenging. I also have to add more realism to the body of the space station, since right now it’s mostly just a block. This took a long time, and I’m estimating that making these supports will take about 12 more hours since they take a long time to make. So far, this project has taken a long time, but I’m happy with the current result. If you have any suggestions, feel free to leave them in the comments!
I’m Almost Done The Body Of My Space Station! So far, I’ve made huge progress on the body of the space station, and I’m very happy with the current state What I Edited On My Space Shuttle In The Past 5 Hours: I finished off the structure that I almost completed in my last devlog. This took a while since it was super precise. I added another support structure. This took less time, but it still took a long time to complete . I completely redesigned the radiator panels, adding realistic angle and dimensions. I changed the shape on some parts of the space station to add more realism. Before, it was a constant hexagon, but now it goes from a square to a hexagon. I started to add realistic supports to the Photovoltaic Radiator panels since right now they are floating. What I still need to work on: I still need to add all the supports on the Photovoltaic Radiator panels. I still have to add more realism to the body of the space shuttle. I need to add detail to the middle of the space station’s body. I still need to add the Russian Orbital Segment to the space station. Right now there is nothing there. This devlog is longer than usual since I did this in 1 day. I’m very happy with the progress and I can’t wait for the finished result. If you have any suggestions, leave them in the comments!
Still Working On My Space Station So far I’m Getting very close to completing this challenging project! What I did in the past 5 hours: I added much more realism to the middle of the space stations body since before it was just a block I started creating the Canadarm, I still need to make multiple edits to it though I added more smaller details to the structure of the space station What I still need to work on: I still need to create the Canadarm and I need to attach it to the space station I still need to add some smaller parts around the space station I need to add solar panels to the Canadarm This projects is close form being done. So far I’m very happy with the result!
I Am Almost Done The Canadarm On My Space Station! What I did to the Canadarm in the past 3 hours: I changed the dimensions of the Canadarm to add more realism to my model I added a realistic control panel to the space station connected to the Canadarm I added the Control Movement Gyroscope to the space shuttle I smoothed out a part of the main body structure of the space station since it was sticking out weird What I still need to work on: I still need to fix a large piece of the Canadarm since its the wrong shape and dimensions I still need to add multiple small parts to the Canadarm and other small parts to the space station I’m very happy with the current result, I hope to finish This project soon! If you have any suggestions, leave them in the comments!
I finished the Russian Segment On My Space Station! This includes one of the most complex parts of the space station so this took me a while This is what I did today: I worked on the dimensions of the Russian Segment on the space station. This included using tools to add realism like fillets and drafts. I moved the radiator panels closer together to increase realism and detail to the space station. I added Control Movement Gyroscopes to the space shuttle. This took a while since the part was very small and precise. What I still need to do I still need to add many smaller parts to the space shuttle. I still need to fix the Radiator Panels connection since I reduced their spacing This project is going very well and so far I’m very happy with the result. If you have any suggestions, please leave them in the comments!
Still Editing My Space Station I was able to get a lot done today (This devlog is longer since I did 5 hours in 1 day). This is what I finished: I fixed the supports on the many radiators, this took a while since I needed to make a lot of them and it took a while to make realistic I added 5 small, realistic panels to the space station, this took a while since I needed to base the many small parts off of 1 image I added 6 small solar panels that were missing on the space station previously, this added a lot more to the overall image of the space shuttle I added 2 Zvezda Service Modules (They look like mushrooms) I still need to add multiple small details to the space station but overall, I added every section to the exterior of the space station. This project is very close from being done! If you have any suggestions, you can leave them in the comments
I Finished My Space Station! This project was faster then the last one, but I’m very happy with the current result! The project should be rated today or tomorrow, all I need to do is create my readme and the description of my space shuttle What I did since last develog: I created the connection between the solar panels and the main body of the space station, this took a while since I needed to make it realistic and there weren’t many images sowing this component on the ISS I added a new small component to my space station, this connected to a previous piece I made I added another new part to the underside of my space station, this was hard to so since you couldn’t really see the component in the reference image I used This has been an awesome project to create! Feel free to print my project once its shipped! You should be able to multicolor print it too.
Ships:
Space Station I created the International Space Station using CAD (Computer Aided Design) This was a hard challenge for me, here are some of the issues I had while creating this Not enough images, there were very few images that showed the space station in detail and almost none were clear, I fixed this by finding an image made by NASA which I based my space shuttle off of Very small parts, the parts that I had to make were very small and precise, what I had to do is I had to create an object (using the extrude tool) and then I used the transform tool to “freely” move it No dimensions available, since there were none, I just had to base it off of the NASA image and estimate the size of every object, this turned out well and I think I got almost everything the right size, I probably couldn’t do any better Why this design is unique and better then others available: This design is way more realistic then many models created, many models are rushed and low effort, I worked really hard to design this project and I think mine out performs a ton of models available especially since some models are created by professionals This design is unique since it’s actually realistic and allows multi color printing, instead of just coloring the faces of the objects which doesn’t do anything, I made sure that the color was a separate object so it could be multi color printed This was a very fun and interesting project! I will also mention that this is a MODEL of the ISS, If you think that it would be better to create my own, that would defeat the whole purpose since it wouldn’t do anything if I made my own, making a model lets me create a part of history (Last rate someone thought that I should create my own space shuttle instead of copying one which ruins the whole purpose) The information on how to download and print my file is in high detail in my readme, but I will quickly explain it here: First, click try project Second, you will see a bar at the bottom of your screen with a download button Thirdly click it and a menu will pop up to print it Or you can go to the readme and above it there should be step, stl and 3mf files that you can just download This was a very fun and exciting project! Thank you for viewing my project. One thing i will mention is if you try to print it, you might get issues since some of the parts are very small, the larger the better for printing. If the print messes up its not the 3D design’s fault, its the printers...
|
1792987017.3766897
|
1793073417.3766897
|
|
56600
|
AmateurOS by @amateur_tech_guy | Stardance
|
amateur_tech_guy
|
3
|
69.0
|
558
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-14T17:45:53Z", "hours": 35.0, "multiplier": 7.59, "payout": 245, "blessing": "neutral", "text": "AmateurOS:Ship 3 AmateurOS is a web operating system that is fully functional and has the basic needs of a human being, it will get more apps on the last ship and more bugs will be debugged, but for now, i’m trying to see what the reviewers think of it, the main challenges i faced was debugging and def organizing my files, as you can clearly see from my github repo it is very messy. My main reason of shipping this NOW, is because I lost all of my work while organizing the website, so yes there will be more, but I need to make sure I don’t lose progress every now and then, if it wasn’t for github I would’ve lost everything and quit tech, genuinely. Tho I have to say I am very proud of how this is turning out to be like, I never expected to be so capable:D", "repo": "https://github.com/amateurtechguy/AmateurOS", "demo": "https://amateurtechguy.github.io/AmateurOS/"}, {"ship_num": 2, "ts": "2026-09-10T18:12:38Z", "hours": 27.0, "multiplier": 11.4, "payout": 313, "blessing": "neutral", "text": "AmateurOS This is an operating system website made with the amateur tech guy color scheme and also lots of effort:) it is unfinished sure, but I’m just shipping for the mission part, I have spent hours on this project and I really hope people rate it well, cause honestly I’m trying my hardest to show people that I am capable of making good websites, the settings part is unfinished but that’s for the 3rd ship. Please rate well, and I hope you like this project:D", "repo": "https://github.com/amateurtechguy/AmateurOS", "demo": "https://amateurtechguy.github.io/AmateurOS/"}, {"ship_num": 3, "ts": "2026-09-04T15:37:53Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Amateur0S This is an OS inspired by Edex UI, a UI that makes you feel like Mr.Robot hehe, it’s a combination of Mr.Robot and the amateur tech guy’s color scheme, now it only has draggable windows and a working clock, and also only one calculator app, but it falls with the requirements:) I’m really proud of how I executed the design and how things look like right now, either way I will be working on resizeable windows and the settings and more apps for ship 2, I really owe it all to Bro Code he’s goated he literally taught me half the stuff you see in this operating system!:D", "repo": "https://github.com/amateurtechguy/AmateurOS", "demo": "https://amateurtechguy.github.io/AmateurOS/"}]...
|
[{"post_id": 68174, "ts": "202 [{"post_id": 68174, "ts": "2026-09-14T17:26:45Z", "hours": 4.0361, "text": "devlog #21: OH MY GOD I WAS TRYING TO ORGANIZE MY FILES BY PUTTING THEM IN FOLDERS AND I LOST EVERYTHING HOLY COOKED"}, {"post_id": 67610, "ts": "2026-09-13T19:08:43Z", "hours": 2.9133, "text": "devlog #20: now I finished setting up the snake game, i still have problems with my weather API setup, ill fix it by the next devlog, but i did listen to a review and made a feature in settings functional hehe anyways not much intel in this devlog other than that, going to be adding more soon! look forward to seeing either a terminal or a car racing game next devlog:)"}, {"post_id": 67266, "ts": "2026-09-13T10:35:06Z", "hours": 12.9453, "text": "devlog #19: I vibecoded and made my javascript a LOT shorter, i tried doing the same for my css but it couldnt work so ima live with it, anyways i watched 2 youtube tutorials, i made my snake game and styled it, and my weather app but its still not working for some reason, maybe ill use AI to debug cause its frustrating me i tried everything but first im going to wait for my friend to respond to see if he can help, also going to add a car game suggestion by a very talented person👀👀👀👀 anyways im going to sleep now cause im tired i havent slept all day, ill code later and for the record i only made the games on a seperate files i havent connected them to my OS yet"}, {"post_id": 66708, "ts": "2026-09-12T16:25:33Z", "hours": 3.2939, "text": "devlog #18: so the code is getting longer and longer which is making it harder to code, if anyone has any tip pls let me know and also, i learned how to make a weather app so next devlog ill show the full product, im also planning on adding a snake game and maybe a bit more? idk yet"}, {"post_id": 66567, "ts": "2026-09-12T12:28:59Z", "hours": 3.4222, "text": "devlog #17: I finally fixed the functionality of my settings, the apps in the “apps” section can now also change color, the display can change sizes and the clock can be switched between 24 hour clock to the 12 hour clock one! however the 12 hour clock one is the default so.. we’re done with the settings feature tho! now it’s time to add more apps"}, {"post_id": 66434, "ts": "2026-09-12T08:20:18Z", "hours": 7.56, "text": "devlog #16: LESS GOO I GOT MY TIME BACK also guys i made the apps go light aswell, i hate light mode but someone suggested it on my reviews so i guess here u go"}, {"post_id": 66092, "ts": "2026-09-11T17:50:41Z", "hours": 0.7306, "text": "devlog #15: bro im so mad, they didnt count ALL my work im actually so mad ive been coding for 7 hours now and on stardance only 1 counts barely even one i hate this and everything about this omg and iit literally even shows the hackatime as 43hrs LOGGED, anyways i made a settings feature i guess its functional"}, {"post_id": 65926, "ts": "2026-09-11T12:01:43Z", "hours": 0.2961, "text": "devlog #14: okay so, i shipped my project for the second time but i got changes requested, for this specific page and in this devlog im just letting you guys know ima work real hard on this feature and finish it by tonight then ill add more apps and we’ll see what we make after that but it wont be easy so wish me luck:)"}, {"post_id": 65501, "ts": "2026-09-10T18:05:22Z", "hours": 7.2028, "text": "devlog #13: okay so today was HELL i made a files app, i tried my best and did lots of research but i just couldnt find any tutorials that showed how to connect the files file to the html ones so i just kept it as a seperate file feature that works normally but lowkey doesnt even control the desktop apps and files, im sorry yall it was just too difficult"}, {"post_id": 65040, "ts": "2026-09-09T21:01:11Z", "hours": 1.8961, "text": "devlog #12: added a news app, now making apps in my OS is becoming progressively easy, anyways thats it for tonight also might add a couple more apps and then i’ll move on to the files part:P"}, {"post_id": 64973, "ts": "2026-09-09T18:42:22Z", "hours": 3.36, "text": "devlog #11: In this update, i added a new feature, the search bar! and I even made the journal and search bar look neat in my OS and I’m really proud of how it turned out to be completely honest its so neat"}, {"post_id": 64422, "ts": "2026-09-08T19:53:02Z", "hours": 0.2628, "text": "devlog #10: shouldnt even count as a devlog but meh, quick little preview of my journal app, yk what it should look like:) OH and also, the power button now works, if u click it, it’ll kick you out"}, {"post_id": 64410, "ts": "2026-09-08T19:31:30Z", "hours": 5.1575, "text": "devlog #9: added a fully functional new journal app:) i just need to fix the CSS and ill be done with the journal feature, and then ill add a search bar in the tool bar aswell!"}, {"post_id": 63711, "ts": "2026-09-07T17:26:07Z", "hours": 1.3486, "text": "devlog #8: fixed the whole glitch with the draggable windows, now it works perfectly and the resize buttons are fully functional now!"}, {"post_id": 63066, "ts": "2026-09-06T17:36:55Z", "hours": 0.6139, "text": "devlog #7: finished debugging and even added a date :) now the calculator automatically pulls up the right size and thats pretty much it for this devlog!"}, {"post_id": 62951, "ts": "2026-09-06T14:40:44Z", "hours": 4.7283, "text": "devlog #6: worked hard on this debugging session, I still got ALOT of work to do tho, the tabs are now officially resizeable which means MORE ISSUES YAY!!😭😭😭😭😭😭😭😭😭😭😭😭 the calculator still has bugs it functions well but im tryna work on its size and stuff cause it doesnt work well for some people, i changed the positioning for the toolbar and swaped the text out with emojis cause that was fortunately the easiest thing to do, also I added a blink animation to the Online dot cause it seemed neat and yea thats all for now:)"}, {"post_id": 62217, "ts": "2026-09-05T14:07:58Z", "hours": 2.9214, "text": "devlog #5: just redid my code and debugged a bit:) it still needs ALOT of work but this should be good for mission 1, i hope, now the files and apps and settings dont work BUT im planning on making them functional on ship 2"}, {"post_id": 61572, "ts": "2026-09-04T15:31:30Z", "hours": 2.1894, "text": "devlog #4: now i finally added a calculator app, you can find it in the apps section and i used a youtube tutorial for the draggable pages thing, I’m ready for the first ship:)"}, {"post_id": 60941, "ts": "2026-09-03T16:49:27Z", "hours": 1.4261, "text": "devlog #3: for some reason hackatime isnt logging all my time in but it’s whatever, the first ship isnt even hour based so i dont mind for now, anyways i ran into a problem while making my home screen for the OS i had this but then i fixed the issue, check the second picture:O Before anyone says anything yes i know its crappy rn but itll improve, as for the files, apps and settings, theyre temporarily text, ill change them to files some time soon"}, {"post_id": 60486, "ts": "2026-09-02T20:59:57Z", "hours": 2.7281, "text": "devlog #1: I finally understand how this OS is supposed to work all thanks to @253_Mathilde_IYKYK everybody make sure to show her some support. Anyways I took inspo from the edex UI theme and added my color scheme into it, hope you guys like it cause theres going to be a lot more of this:)"}, {"post_id": 59813, "ts": "2026-09-01T19:27:42Z", "hours": 1.1214, "text": "devlog #1: hey guys! im currently working on my very own OS, heres the thing, im confused because it feels like im making a website.. i had to read further and go back and check some stuff, still im not sure how this works but ill figure it out"}]...
|
Title: AmateurOS by @amateur_tech_guy | Stardance
Title: AmateurOS by @amateur_tech_guy | Stardance
Devlogs:
devlog #1: hey guys! im currently working on my very own OS, heres the thing, im confused because it feels like im making a website.. i had to read further and go back and check some stuff, still im not sure how this works but ill figure it out
devlog #1: I finally understand how this OS is supposed to work all thanks to @253_Mathilde_IYKYK everybody make sure to show her some support. Anyways I took inspo from the edex UI theme and added my color scheme into it, hope you guys like it cause theres going to be a lot more of this:)
devlog #3: for some reason hackatime isnt logging all my time in but it’s whatever, the first ship isnt even hour based so i dont mind for now, anyways i ran into a problem while making my home screen for the OS i had this but then i fixed the issue, check the second picture:O Before anyone says anything yes i know its crappy rn but itll improve, as for the files, apps and settings, theyre temporarily text, ill change them to files some time soon
devlog #4: now i finally added a calculator app, you can find it in the apps section and i used a youtube tutorial for the draggable pages thing, I’m ready for the first ship:)
devlog #5: just redid my code and debugged a bit:) it still needs ALOT of work but this should be good for mission 1, i hope, now the files and apps and settings dont work BUT im planning on making them functional on ship 2
devlog #6: worked hard on this debugging session, I still got ALOT of work to do tho, the tabs are now officially resizeable which means MORE ISSUES YAY!!😭😭😭😭😭😭😭😭😭😭😭😭 the calculator still has bugs it functions well but im tryna work on its size and stuff cause it doesnt work well for some people, i changed the positioning for the toolbar and swaped the text out with emojis cause that was fortunately the easiest thing to do, also I added a blink animation to the Online dot cause it seemed neat and yea thats all for now:)
devlog #7: finished debugging and even added a date :) now the calculator automatically pulls up the right size and thats pretty much it for this devlog!
devlog #8: fixed the whole glitch with the draggable windows, now it works perfectly and the resize buttons are fully functional now!
devlog #9: added a fully functional new journal app:) i just need to fix the CSS and ill be done with the journal feature, and then ill add a search bar in the tool bar aswell!
devlog #10: shouldnt even count as a devlog but meh, quick little preview of my journal app, yk what it should look like:) OH and also, the power button now works, if u click it, it’ll kick you out
devlog #11: In this update, i added a new feature, the search bar! and I even made the journal and search bar look neat in my OS and I’m really proud of how it turned out to be completely honest its so neat
devlog #12: added a news app, now making apps in my OS is becoming progressively easy, anyways thats it for tonight also might add a couple more apps and then i’ll move on to the files part:P
devlog #13: okay so today was HELL i made a files app, i tried my best and did lots of research but i just couldnt find any tutorials that showed how to connect the files file to the html ones so i just kept it as a seperate file feature that works normally but lowkey doesnt even control the desktop apps and files, im sorry yall it was just too difficult
devlog #14: okay so, i shipped my project for the second time but i got changes requested, for this specific page and in this devlog im just letting you guys know ima work real hard on this feature and finish it by tonight then ill add more apps and we’ll see what we make after that but it wont be easy so wish me luck:)
devlog #15: bro im so mad, they didnt count ALL my work im actually so mad ive been coding for 7 hours now and on stardance only 1 counts barely even one i hate this and everything about this omg and iit literally even shows the hackatime as 43hrs LOGGED, anyways i made a settings feature i guess its functional
devlog #16: LESS GOO I GOT MY TIME BACK also guys i made the apps go light aswell, i hate light mode but someone suggested it on my reviews so i guess here u go
devlog #17: I finally fixed the functionality of my settings, the apps in the “apps” section can now also change color, the display can change sizes and the clock can be switched between 24 hour clock to the 12 hour clock one! however the 12 hour clock one is the default so.. we’re done with the settings feature tho! now it’s time to add more apps
devlog #18: so the code is getting longer and longer which is making it harder to code, if anyone has any tip pls let me know and also, i learned how to make a weather app so next devlog ill show the full product, im also planning on adding a snake game and maybe a bit more? idk yet
devlog #19: I vibecoded and made my javascript a LOT shorter, i tried doing the same for my css but it couldnt work so ima live with it, anyways i watched 2 youtube tutorials, i made my snake game and styled it, and my weather app but its still not working for some reason, maybe ill use AI to debug cause its frustrating me i tried everything but first im going to wait for my friend to respond to see if he can help, also going to add a car game suggestion by a very talented person👀👀👀👀 anyways im going to sleep now cause im tired i havent slept all day, ill code later and for the record i only made the games on a seperate files i havent connected them to my OS yet
devlog #20: now I finished setting up the snake game, i still have problems with my weather API setup, ill fix it by the next devlog, but i did listen to a review and made a feature in settings functional hehe anyways not much intel in this devlog other than that, going to be adding more soon! look forward to seeing either a terminal or a car racing game next devlog:)
devlog #21: OH MY GOD I WAS TRYING TO ORGANIZE MY FILES BY PUTTING THEM IN FOLDERS AND I LOST EVERYTHING HOLY COOKED
Ships:
Amateur0S This is an OS inspired by Edex UI, a UI that makes you feel like Mr.Robot hehe, it’s a combination of Mr.Robot and the amateur tech guy’s color scheme, now it only has draggable windows and a working clock, and also only one calculator app, but it falls with the requirements:) I’m really proud of how I executed the design and how things look like right now, either way I will be working on resizeable windows and the settings and more apps for ship 2, I really owe it all to Bro Code he’s goated he literally taught me half the stuff you see in this operating system!:D
AmateurOS This is an operating system website made with the amateur tech guy color scheme and also lots of effort:) it is unfinished sure, but I’m just shipping for the mission part, I have spent hours on this project and I really hope people rate it well, cause honestly I’m trying my hardest to show people that I am capable of making good websites, the settings part is unfinished but that’s for the 3rd ship. Please rate well, and I hope you like this project:D
AmateurOS:Ship 3 AmateurOS is a web operating system that is fully functional and has the basic needs of a human being, it will get more apps on the last ship and more bugs will be debugged, but for now, i’m trying to see what the reviewers think of it, the main challenges i faced was debugging and def organizing my files, as you can clearly see from my github repo it is very messy. My main reason of shipping this NOW, is because I lost all of my work while organizing the website, so yes there will be more, but I need to make sure I don’t lose progress every now and then, if it wasn’t for github I would’ve lost everything and quit tech, genuinely. Tho I have to say I am very proud of how this is turning out to be like, I never expected to be so capable:D...
|
1792997465.9149792
|
1793083865.9149792
|
|
27798
|
Word Embeddings by @stockifab | Stardance
|
stockifab
|
1
|
28.0
|
556
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-25T19:47:36Z", "hours": 28.0, "multiplier": 16.45, "payout": 556, "blessing": "neutral", "text": "Word embeddings are a way to store the meaning of word (such as “plane” or “dog”) in a large vector (= a long list of numbers) These vectors can then be used to find words similar to each other. But they can also be used to calculate with English words, e.g.: dog - bark + meow –> cat (in fact, you can try this very example on the demo website, or come up with your own calculation) In order to retrieve these embeddings, I created a model that reads through billions of words to understand how they are used. It looks at the words appearing close to each other and assumes all words with the same nearby words must have similar meaning. This retrieval of the embeddings was the hardest part: My first model was okayish and could find related words, but I could not yet calculate with them like in the example before. For the final version I used a much larger dataset, with thought-out pre-processing steps, which was more complicated then I thought (You need to ensure the words you are grouping actually belong together, so you may only group within individual sentences, groups mustn’t overlap anything inside brackets, and you can’t make a group with words you filtered in pre-processing at the same time you shouldn’t skip any words, …) Additionally the challenge with a larger dataset was, that it didnt fit into my memory, so I had to read it in chunks and train the model incrementally. The training of the final model took over 50 hours.", "repo": "https://github.com/stockifab/word-embeddings", "demo": "https://word-embeddings.happierbit.com/"}]...
|
[{"post_id": 34783, "ts": "202 [{"post_id": 34783, "ts": "2026-07-25T19:30:48Z", "hours": 1.7033, "text": "Finish Demo Website (Pages 4-8) I completed the last part of the demo website including the most exciting part about the word arithmetic."}, {"post_id": 33127, "ts": "2026-07-22T19:08:07Z", "hours": 4.3458, "text": "Embedding Demo Website (Pages 1-3) I really like the way the embeddings turned out. That’s why I want to make a website to make word embeddings as accessible and understandable as possible. I’m assuming no prior knowledge from the visitors, and try to interactively guide them through the world of embeddings, with each slide explaining something about embeddings or being interactive to try it yourself. This time i finished slides 1-3, with the last one being the interactive one. Since it should feel engaging and alive, I focus a lot on subtle animations and micro-interactions. I’ve never built a website with heavy animations before so this is the perfect opportunity to try GSAP!"}, {"post_id": 27814, "ts": "2026-07-13T18:14:42Z", "hours": 3.6242, "text": "Maths with English words With the new dataset, training took a lot longer. My computer worked for around 50 hours to run through 26GB of training data. The long wait really payed off though, the model is so much better than the previous model and it is finally capable of doing the embedding arithmetic I’ve been chasing the whole time. Embedding arithmetic is so fun, here are some examples: throw - throwing + running -> run (-ing form) better - good + friendly -> friendlier (comparasion) woman - man + king -> queen (man compared to woman is like king compared to queen) germany - berlin + paris (capitals) The model learned a lot more syntactic and semantic meaning than I had expected. Next I want to build a web app, so that you can play with the embeddings yourself."}, {"post_id": 23582, "ts": "2026-07-06T16:54:41Z", "hours": 7.0792, "text": "New Dataset + Improved Pre-Processing In an effort to increase the model’s performance I switched from the previous model’s Wikipedia Simple English dataset to a subset of the Fine Web Edu dataset. As an additional measure to improve the results I decided to use a larger context of 4 words left and right to the root word. I also completely re-wrote all the preprocessing steps. Even though the dataset is high-quality, language is very nuanced and needs filtering. But since words next to each other (4 words before and after the root word) get grouped, filtering an entire word means the group mustn’t be formed (as information is now missing), on the other hand removing punctuation from the end of a word should still allow that word to appear in a group. Overall I filter/handle: quotes brackets non-English Characters apostrophes other special characters (dashes, underscores, etc.) Another challenge is ensuring that grouped words actually belong together. In the previous dataset I simply grouped the words next to each other in a giant blob of text. This time I only group words from the same text source (the same article, document, …) and only within the sentences of that source. This ensures groups don’t span multiple sentences. This taught me a lot about working with larger amounts of data - I couldn’t load everything in memory as it would be too large, but had to read from disk in batches to process the data. After ~50 min of leaving my computer untouched I had the final dataset with ~26GB (~18GB compressed using word IDs) of filtered word groups. Next, I will have to find a way to determine unrelated words, so that I can start training the third iteration of the model."}, {"post_id": 22251, "ts": "2026-07-04T16:59:44Z", "hours": 3.2306, "text": "New (worse) model In an effort to improve on the previous model, I created a new one. Now it uses separate weights for the context instead of re-using the embedding weights in the context. The new model has 30.000.000 parameters which is double the previous one. Yet unfortunately, the results I got were disappointingly miserable: In contrast to the previous model, it doesn’t even group related words. According to the embeddings, the word “cat” is very similar in meaning to “motor” or “caution” 😂😭 I don’t know why it’s performing so poorly, but I’m curious to find out."}, {"post_id": 22092, "ts": "2026-07-04T10:56:19Z", "hours": 4.3497, "text": "First Embedding Model Using the data obtained previously I could get my first embeddings 🎉 The model (image) has 15.000.000 parameters and took roughly 1/2 hour to train. Unfortunately, the performance is below my expectations: It’s not yet good enough so that “uncle - aunt + mum” would output “dad”. However, the embeddings definitely captured some meaning: For example, the vector of “android” is close to “ios” and to “smartphones”. The vector of “cat” is close to the words “goat”, “monkeys” and “snakes”. I want to improve this model significantly until it’s good enough to meaningfully calculate with the embedding vectors."}, {"post_id": 17825, "ts": "2026-06-28T19:15:17Z", "hours": 3.9069, "text": "Data preprocessing Before the model can train to retrieve the embeddings, it needs data. I found a dataset on Kaggle with the text of 249.396 wikipedia articles. Today I did some preprocessing, first I removed any non-english words and delete special characters, then I determined the 50.000 most frequent words, and limited my vocabulary to these words. To compute the embeddings, I took the left and right words of each word in the data and put them into a pandas data frame along with two other unrelated words: (left word, center word, right word, unrelated word 1, unrelated word 2) The final dataset has 24.780.670 rows, so I likely cant train on the full dataset on my computer. The goal is for the model, when presented with the center word to predict which of the other words are similar to it which it can only do by learning the meaning of each word - which is what we want."}]...
|
Title: Word Embeddings by @stockifab | Stardance
Title: Word Embeddings by @stockifab | Stardance
Devlogs:
Data preprocessing Before the model can train to retrieve the embeddings, it needs data. I found a dataset on Kaggle with the text of 249.396 wikipedia articles. Today I did some preprocessing, first I removed any non-english words and delete special characters, then I determined the 50.000 most frequent words, and limited my vocabulary to these words. To compute the embeddings, I took the left and right words of each word in the data and put them into a pandas data frame along with two other unrelated words: (left word, center word, right word, unrelated word 1, unrelated word 2) The final dataset has 24.780.670 rows, so I likely cant train on the full dataset on my computer. The goal is for the model, when presented with the center word to predict which of the other words are similar to it which it can only do by learning the meaning of each word - which is what we want.
First Embedding Model Using the data obtained previously I could get my first embeddings 🎉 The model (image) has 15.000.000 parameters and took roughly 1/2 hour to train. Unfortunately, the performance is below my expectations: It’s not yet good enough so that “uncle - aunt + mum” would output “dad”. However, the embeddings definitely captured some meaning: For example, the vector of “android” is close to “ios” and to “smartphones”. The vector of “cat” is close to the words “goat”, “monkeys” and “snakes”. I want to improve this model significantly until it’s good enough to meaningfully calculate with the embedding vectors.
New (worse) model In an effort to improve on the previous model, I created a new one. Now it uses separate weights for the context instead of re-using the embedding weights in the context. The new model has 30.000.000 parameters which is double the previous one. Yet unfortunately, the results I got were disappointingly miserable: In contrast to the previous model, it doesn’t even group related words. According to the embeddings, the word “cat” is very similar in meaning to “motor” or “caution” 😂😭 I don’t know why it’s performing so poorly, but I’m curious to find out.
New Dataset + Improved Pre-Processing In an effort to increase the model’s performance I switched from the previous model’s Wikipedia Simple English dataset to a subset of the Fine Web Edu dataset. As an additional measure to improve the results I decided to use a larger context of 4 words left and right to the root word. I also completely re-wrote all the preprocessing steps. Even though the dataset is high-quality, language is very nuanced and needs filtering. But since words next to each other (4 words before and after the root word) get grouped, filtering an entire word means the group mustn’t be formed (as information is now missing), on the other hand removing punctuation from the end of a word should still allow that word to appear in a group. Overall I filter/handle: quotes brackets non-English Characters apostrophes other special characters (dashes, underscores, etc.) Another challenge is ensuring that grouped words actually belong together. In the previous dataset I simply grouped the words next to each other in a giant blob of text. This time I only group words from the same text source (the same article, document, …) and only within the sentences of that source. This ensures groups don’t span multiple sentences. This taught me a lot about working with larger amounts of data - I couldn’t load everything in memory as it would be too large, but had to read from disk in batches to process the data. After ~50 min of leaving my computer untouched I had the final dataset with ~26GB (~18GB compressed using word IDs) of filtered word groups. Next, I will have to find a way to determine unrelated words, so that I can start training the third iteration of the model.
Maths with English words With the new dataset, training took a lot longer. My computer worked for around 50 hours to run through 26GB of training data. The long wait really payed off though, the model is so much better than the previous model and it is finally capable of doing the embedding arithmetic I’ve been chasing the whole time. Embedding arithmetic is so fun, here are some examples: throw - throwing + running -> run (-ing form) better - good + friendly -> friendlier (comparasion) woman - man + king -> queen (man compared to woman is like king compared to queen) germany - berlin + paris (capitals) The model learned a lot more syntactic and semantic meaning than I had expected. Next I want to build a web app, so that you can play with the embeddings yourself.
Embedding Demo Website (Pages 1-3) I really like the way the embeddings turned out. That’s why I want to make a website to make word embeddings as accessible and understandable as possible. I’m assuming no prior knowledge from the visitors, and try to interactively guide them through the world of embeddings, with each slide explaining something about embeddings or being interactive to try it yourself. This time i finished slides 1-3, with the last one being the interactive one. Since it should feel engaging and alive, I focus a lot on subtle animations and micro-interactions. I’ve never built a website with heavy animations before so this is the perfect opportunity to try GSAP!
Finish Demo Website (Pages 4-8) I completed the last part of the demo website including the most exciting part about the word arithmetic.
Ships:
Word embeddings are a way to store the meaning of word (such as “plane” or “dog”) in a large vector (= a long list of numbers) These vectors can then be used to find words similar to each other. But they can also be used to calculate with English words, e.g.: dog - bark + meow –> cat (in fact, you can try this very example on the demo website, or come up with your own calculation) In order to retrieve these embeddings, I created a model that reads through billions of words to understand how they are used. It looks at the words appearing close to each other and assumes all words with the same nearby words must have similar meaning. This retrieval of the embeddings was the hardest part: My first model was okayish and could find related words, but I could not yet calculate with them like in the example before. For the final version I used a much larger dataset, with thought-out pre-processing steps, which was more complicated then I thought (You need to ensure the words you are grouping actually belong together, so you may only group within individual sentences, groups mustn’t overlap anything inside brackets, and you can’t make a group with words you filtered in pre-processing at the same time you shouldn’t skip any words, …) Additionally the challenge with a larger dataset was, that it didnt fit into my memory, so I had to read it in chunks and train the model incrementally. The training of the final model took over 50 hours....
|
1792961528.832379
|
1793047928.832379
|
|
1072
|
ESSENTIALS Shader by @ahnafiscool | Stardance
|
ahnafiscool
|
1
|
28.0
|
548
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T10:55:55Z", "hours": 28.0, "multiplier": 19.55, "payout": 548, "blessing": "neutral", "text": "Hey, read this, I’ve typed it in a way so that u don’t get bored: It is finally done… ESSENTIALS Shader is live and working so that you with a terrible device (like me) will have a chance to behold the premium look of minecraft without breaking the bank to buy a GPU. Ofc, it will not be the best looking shader since it’s optimized, but what more can you ask for? I was motivated to make a shader of my own because of 2 things: Wanting a GPU and help people to play mc smoothly with iGPU. I was planning to submit this shader to Lumen so that I’ll be eligible to win a GPU (unfortunately it ended well before I finished). The hardest part was actually testing it, yeah really. I can’t even count how many times MC crashed when I turned on n off the shader everytime. And hackatime did not support on my Win7 so I had to both write codes in codespaces and locally to commit changes (2X work already here) and hours of work was not properly recorded. The best part was when I was midway through the project, I got so much interaction this page with followers, likes and most importantly ‘Super Star Project’. So tysm to all NOTE: Please click on the skip button if you did not understand the point of the project, do not vote without testing/knowing anything abt it. It may not look visually appealing to you but you must understand the sole purpose of the project. So please vote wisely ;)", "repo": "https://github.com/AhnafPro/ESSENTIALS-Shader", "demo": "https://modrinth.com/shader/essentials-shader"}]...
|
[{"post_id": 9875, "ts": "2026 [{"post_id": 9875, "ts": "2026-06-16T10:34:35Z", "hours": 7.0, "text": "Im really with skl stuffs these and did not have quite a lot of time to code like before. Since I have not posted a devlog in a long time, I’ll just briefly explain some simple changes/updates that were done. The shader was approved on Modrinth and CurseForge (). We also recieved decent amount of downloads combined. Check out below: https://modrinth.com/shader/essentials-shader/ https://www.curseforge.com/minecraft/shaders/essentials-shader A custom LICENSE file has been created to suit all the rules and regulations. And previous LICENSE based on GPL 3.0 was removed. Find it here: https://github.com/AhnafPro/ESSENTIALS-Shader/tree/main?tab=License-1-ov-file Gamma correction value has been altered. The day might look a little pale in color than before but it ensures that the night does not black out completely Reflection of moonlight on water is visible now (no performance cuts)"}, {"post_id": 6984, "ts": "2026-06-11T18:41:27Z", "hours": 4.0, "text": "Yoo, Im back after a long time, cuz I was really busy and tired with the school works, exams etc. Today I was bit free so I did lots of testing, debugging, editing etc. and then prepared the shader for a beta release on modrinth. I got nothing much to say cuz I’m really sleepy isw. And this ain’t the end, not the final version so please report bugs under any latest devlog here and i’ll look after it Project: https://modrinth.com/shader/essentials-shader Also I took some pics for gallery, pls enjoy…"}, {"post_id": 5048, "ts": "2026-06-08T18:25:13Z", "hours": 1.0, "text": "This project was marked as “Super Star Project”! and I would like to thank all of you who have interacted via following, commenting etc. cuz its an important milestone for our project. tysm once again… Some quite simple changes has been done in this log such as: Altered wavering effect to water to bare minimum value (unnoticeable tbh) so that when shadow falls on it, the shadow sort of move. Added a hover me button on the pack settings with some parts of README section (also read the note) Honestly the changes seems simple but the second change was kinda hard cuz it’s not that simple to make desc. of texts appear on buttons but credits to iris documentation, I made it into hovering style instead with the help of it. I’ll see if I can add more things to it … cya"}, {"post_id": 4162, "ts": "2026-06-07T11:34:19Z", "hours": 1.0, "text": "Feeling a bit lazy today cuz it’s sunday but I still made some updates, from the last log, I’ve fixed the water opacity issue (the water is now in 1 color across all y-angle) and now I’m mostly debugging and making small changes here and there, like updating the readme, seeing if certain blocks render properly etc. So far we are mostly done for a good optimized shader but I think there might be some things missing that I haven’t looked after- like today when I was working with the water shader files on overworld but then I remembered that I forgot to add the files for water to the end dimension (excluding nether here cuz water don’t work there yk).Which would have made water appear like normal vanilla ones. So there might lots of other stuffs im missing out. Once I make every major fix, I’ll upload the shader to modrinth so that you guys can review and give me feedback on it. Updates done: Fixed water opacity issue across the y axis from the crosshair horizontally."}, {"post_id": 3417, "ts": "2026-06-06T10:51:06Z", "hours": 3.0, "text": "Today I was working on improving the water, I did some noticeable improvements but it still has one issue, at different y angles the opacity of the blue color of water changes. So I will try to fix next time or keep it as it since its not a big visual issue. Also found another problem at End, when I hit the ender mobs they do not render the red effect. Therefore i’ve encountered 2 minor issues. Hope i’ll be able to patch it… bye"}, {"post_id": 2847, "ts": "2026-06-05T18:06:39Z", "hours": 4.0, "text": "I really felt dumb after spending over 4 hrs trying to fix the last 2 issues, ill tell you why. The issue with grainy effect on the sky can’t be fixed, some of my friends told it kinda looks good like a galaxy with millions of star and there isnt any point of working on it if Im not able to patch it. And here where it gets interesting. The first issue was where I spent most of the time, to then discover that the fix was sitting just on a different directory. I tottaly forgot that I’ve patched mob texture issues before with the help of gbuffer_textured f/v shader files, so I just copied them from overworld and pasted them on world1 file and everything got fixed. I was really dissapointed tbh. So the fixes were: Copying gbuffer_textured f/v shader files & gbuffer_terrain_lit f/v shader files to world1 Copying gbuffer_textured f/v shader files to world-1 So basically we got our shader made but we can’t be just releasing on modrinth like this. We need to test with older version, check various scenarios to see if things break, improve some current elements like water, maybe add reflection etc. Please let me know if you have suggestions…"}, {"post_id": 1477, "ts": "2026-06-03T14:59:40Z", "hours": 1.0, "text": "I’ve finally fixed the End dimension the shading works well and also added aurora effect in the sky (this genuinely required help from claude), and the good news is it does not effect fps much or even at all. Also there is an alternation in sky light between the cheese yellow and slight pink (u can see the variation in both images). But I ran into 2 different issues here: The ender mobs (enderman,mites, dragon) are not rendering their purple from their eyes aka no eyes. When moved to outer end island or when dragon is killed in main island, the sky seems to render the grainy effect (which looks a bit odd like its a whole milky way) So, I’ll try to patch it today night, cuz these are some common shader issues while making one, there are enough documentation from various sources like iris, shaderLABs etc. Wish me gl!"}, {"post_id": 976, "ts": "2026-06-02T19:12:03Z", "hours": 1.0, "text": "I’m really tired today after juggling school works and this project at the same time, as of now I made a pretty basic shader, the lighting work (as you can see the light from the torches) but the shadow is sorta broken, its not appearing and the whole world kinda look way too lit up (when Im far from the ender dragon’s main island). Imma peace out for today and will try to patch it tmrw."}, {"post_id": 861, "ts": "2026-06-02T15:58:30Z", "hours": 0.0, "text": "Just did a little work some code cleanup and also made the end files inspired by shaderLABS which were similar to nether files but certain things like change in color filter of sky for end is needed. I’ll try to add the end shader update on the next devlog. CYA… [wrong file image, sry it should have been world1 folder, imma edit it later]"}, {"post_id": 797, "ts": "2026-06-02T13:54:14Z", "hours": 1.0, "text": "I thought the nether was gonna work with the same shader files from the overworld but when I went through the portal, I saw a different story. Everything looked dark, dark as if it was nighttime during overworld but with no moon, also realised that the entities had a transparent body. So these 2 issues were fixed along with the nether shader base when I made it. Things that were done are: Fixed nether lighting Added shadows Removed fog codes from composite.fsh What I have noticed was that I got slight better fps in nether than overworld cuz lots of parts of nether consist of wasteland biome which has less structures and vegetation."}, {"post_id": 357, "ts": "2026-06-01T17:51:38Z", "hours": 0.0, "text": "I started making it way before Stardance cuz I was planning to submit it to Lumen but unfortunately Lumen ended (I was working towards getting a GPU) and I was not able to finish my shader by then. (I spent 10+ hrs of which 3hrs were logged, but not shown here since I logged them before Stardance) As of now its a very lightweight & basic shader, but honestly I think its sorta visually appealing (at least for those who got no ded. gpu). I myslef is use my father’s ancient PC from 2013 with no GPU (MC crashed over 20 times while debugging) and Ik the pain of others who runs their game at bare bones low settings, so I hope this project will come in a help for them as I’ll try to make the shader as optimized as possible. As of now the overworld is sorta complete with these features: Fake sun/moon rays V. weak Fog semi-realistic fresnel water (still in dev.) Shadows, Lighting etc. In my next devlog i’ll update the nether a little more to make it look standout. And I think my logs are not gonna have good amount of time logged in cuz im using Win7 and Hackatime does not work, so I’ll have to manually edit codespaces and local shader files while testing."}]...
|
Title: ESSENTIALS Shader by @ahnafiscool | Stardan Title: ESSENTIALS Shader by @ahnafiscool | Stardance
Devlogs:
I started making it way before Stardance cuz I was planning to submit it to Lumen but unfortunately Lumen ended (I was working towards getting a GPU) and I was not able to finish my shader by then. (I spent 10+ hrs of which 3hrs were logged, but not shown here since I logged them before Stardance) As of now its a very lightweight & basic shader, but honestly I think its sorta visually appealing (at least for those who got no ded. gpu). I myslef is use my father’s ancient PC from 2013 with no GPU (MC crashed over 20 times while debugging) and Ik the pain of others who runs their game at bare bones low settings, so I hope this project will come in a help for them as I’ll try to make the shader as optimized as possible. As of now the overworld is sorta complete with these features: Fake sun/moon rays V. weak Fog semi-realistic fresnel water (still in dev.) Shadows, Lighting etc. In my next devlog i’ll update the nether a little more to make it look standout. And I think my logs are not gonna have good amount of time logged in cuz im using Win7 and Hackatime does not work, so I’ll have to manually edit codespaces and local shader files while testing.
I thought the nether was gonna work with the same shader files from the overworld but when I went through the portal, I saw a different story. Everything looked dark, dark as if it was nighttime during overworld but with no moon, also realised that the entities had a transparent body. So these 2 issues were fixed along with the nether shader base when I made it. Things that were done are: Fixed nether lighting Added shadows Removed fog codes from composite.fsh What I have noticed was that I got slight better fps in nether than overworld cuz lots of parts of nether consist of wasteland biome which has less structures and vegetation.
Just did a little work some code cleanup and also made the end files inspired by shaderLABS which were similar to nether files but certain things like change in color filter of sky for end is needed. I’ll try to add the end shader update on the next devlog. CYA… [wrong file image, sry it should have been world1 folder, imma edit it later]
I’m really tired today after juggling school works and this project at the same time, as of now I made a pretty basic shader, the lighting work (as you can see the light from the torches) but the shadow is sorta broken, its not appearing and the whole world kinda look way too lit up (when Im far from the ender dragon’s main island). Imma peace out for today and will try to patch it tmrw.
I’ve finally fixed the End dimension the shading works well and also added aurora effect in the sky (this genuinely required help from claude), and the good news is it does not effect fps much or even at all. Also there is an alternation in sky light between the cheese yellow and slight pink (u can see the variation in both images). But I ran into 2 different issues here: The ender mobs (enderman,mites, dragon) are not rendering their purple from their eyes aka no eyes. When moved to outer end island or when dragon is killed in main island, the sky seems to render the grainy effect (which looks a bit odd like its a whole milky way) So, I’ll try to patch it today night, cuz these are some common shader issues while making one, there are enough documentation from various sources like iris, shaderLABs etc. Wish me gl!
I really felt dumb after spending over 4 hrs trying to fix the last 2 issues, ill tell you why. The issue with grainy effect on the sky can’t be fixed, some of my friends told it kinda looks good like a galaxy with millions of star and there isnt any point of working on it if Im not able to patch it. And here where it gets interesting. The first issue was where I spent most of the time, to then discover that the fix was sitting just on a different directory. I tottaly forgot that I’ve patched mob texture issues before with the help of gbuffer_textured f/v shader files, so I just copied them from overworld and pasted them on world1 file and everything got fixed. I was really dissapointed tbh. So the fixes were: Copying gbuffer_textured f/v shader files & gbuffer_terrain_lit f/v shader files to world1 Copying gbuffer_textured f/v shader files to world-1 So basically we got our shader made but we can’t be just releasing on modrinth like this. We need to test with older version, check various scenarios to see if things break, improve some current elements like water, maybe add reflection etc. Please let me know if you have suggestions…
Today I was working on improving the water, I did some noticeable improvements but it still has one issue, at different y angles the opacity of the blue color of water changes. So I will try to fix next time or keep it as it since its not a big visual issue. Also found another problem at End, when I hit the ender mobs they do not render the red effect. Therefore i’ve encountered 2 minor issues. Hope i’ll be able to patch it… bye
Feeling a bit lazy today cuz it’s sunday but I still made some updates, from the last log, I’ve fixed the water opacity issue (the water is now in 1 color across all y-angle) and now I’m mostly debugging and making small changes here and there, like updating the readme, seeing if certain blocks render properly etc. So far we are mostly done for a good optimized shader but I think there might be some things missing that I haven’t looked after- like today when I was working with the water shader files on overworld but then I remembered that I forgot to add the files for water to the end dimension (excluding nether here cuz water don’t work there yk).Which would have made water appear like normal vanilla ones. So there might lots of other stuffs im missing out. Once I make every major fix, I’ll upload the shader to modrinth so that you guys can review and give me feedback on it. Updates done: Fixed water opacity issue across the y axis from the crosshair horizontally.
This project was marked as “Super Star Project”! and I would like to thank all of you who have interacted via following, commenting etc. cuz its an important milestone for our project. tysm once again… Some quite simple changes has been done in this log such as: Altered wavering effect to water to bare minimum value (unnoticeable tbh) so that when shadow falls on it, the shadow sort of move. Added a hover me button on the pack settings with some parts of README section (also read the note) Honestly the changes seems simple but the second change was kinda hard cuz it’s not that simple to make desc. of texts appear on buttons but credits to iris documentation, I made it into hovering style instead with the help of it. I’ll see if I can add more things to it … cya
Yoo, Im back after a long time, cuz I was really busy and tired with the school works, exams etc. Today I was bit free so I did lots of testing, debugging, editing etc. and then prepared the shader for a beta release on modrinth. I got nothing much to say cuz I’m really sleepy isw. And this ain’t the end, not the final version so please report bugs under any latest devlog here and i’ll look after it Project: https://modrinth.com/shader/essentials-shader Also I took some pics for gallery, pls enjoy…
Im really with skl stuffs these and did not have quite a lot of time to code like before. Since I have not posted a devlog in a long time, I’ll just briefly explain some simple changes/updates that were done. The shader was approved on Modrinth and CurseForge (). We also recieved decent amount of downloads combined. Check out below: https://modrinth.com/shader/essentials-shader/ https://www.curseforge.com/minecraft/shaders/essentials-shader A custom LICENSE file has been created to suit all the rules and regulations. And previous LICENSE based on GPL 3.0 was removed. Find it here: https://github.com/AhnafPro/ESSENTIALS-Shader/tree/main?tab=License-1-ov-file Gamma correction value has been altered. The day might look a little pale in color than before but it ensures that the night does not black out completely Reflection of moonlight on water is visible now (no performance cuts)
Ships:
Hey, read this, I’ve typed it in a way so that u don’t get bored: It is finally done… ESSENTIALS Shader is live and working so that you with a terrible device (like me) will have a chance to behold the premium look of minecraft without breaking the bank to buy a GPU. Ofc, it will not be the best looking shader since it’s optimized, but what more can you ask for? I was motivated to make a shader of my own because of 2 things: Wanting a GPU and help people to play mc smoothly with iGPU. I was planning to submit this shader to Lumen so that I’ll be eligible to win a GPU (unfortunately it ended well before I finished). The hardest part was actually testing it, yeah really. I can’t even count how many times MC crashed when I turned on n off the shader everytime. And hackatime did not support on my Win7 so I had to both write codes in codespaces and locally to commit changes (2X work already here) and hours of work was not properly recorded. The best part was when I was midway through the project, I got so much interaction this page with followers, likes and most importantly ‘Super Star Project’. So tysm to all NOTE: Please click on the skip button if you did not understand the point of the project, do not vote without testing/knowing anything abt it. It may not look visually appealing to you but you must understand the sole purpose of the project. So please vote wisely ;)...
|
1792878792.1205635
|
1793742792.1205635
|
|
3637
|
Thanks for Mining That! by @StarCoder | Stardance
|
StarCoder
|
1
|
58.0
|
543
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-30T00:15:27Z", "hours": 58.0, "multiplier": 11.26, "payout": 543, "blessing": "neutral", "text": "I made a game called Thanks For Mining That. — SUMMARY — Thanks for Mining That is a 2d game where you are in space and have to mine resources, but you have no mining tools. So you lure the enemies to hit the asteroids so they mine resources and destroy themselves in the process. — LINKS — Itch.io page: https://starcoder.itch.io/thanks-for-mining-that Github: https://github.com/StarCoder369/Thanks-for-Mining-That- It is a web build, so no need to download anything. — CHALLENGES — Here are some challenges I faced. When I first started this game, it was completely different. It was about a spaceship with a wrecking ball, which you had to use to mine resources and destroy enemies. The idea had potential, but it was too difficult to implement it in a way that would be fun for the player, so I scrapped it and pivoted ideas. There were a lot of problems with optimization. I was able to make it better, even though it still isn’t completely smooth, it’s much better. I used object pooling for this, so instead of enemies and asteroids being spawned each time, they just enable and disable. I faced a lot of problems with the music, since I’m not a music guy. I’ve tried to make music before, but it never turns out good. This time, I think it turned out pretty well. I used JummBox (a different version of BeepBox). Another challenge I faced was knowing when to stop. I have a lot of ideas to add to this, but I realized that if I did all of it, it would be a waste of time. All the ideas I have for the game won’t help me learn anything. That’s why I have been doing so many other ysws events, which is also why there is such a big gap between my second-last and last devlog. That’s basically it. I had a lot of fun making the game, and hopefully it’s going to be accepted! Thank you!", "repo": "https://github.com/StarCoder369/Thanks-for-Mining-That-", "demo": "https://starcoder.itch.io/thanks-for-mining-that"}]...
|
[{"post_id": 37340, "ts": "202 [{"post_id": 37340, "ts": "2026-07-30T00:03:53Z", "hours": 4.155, "text": "Thanks For Mining That! Devlog 7 of my Unity Game I’m finally DONE! So I’ve mostly been working on other stuff, like #alchemize, #breadboard, and #jame-gam, but I was finally able to finish my game. You can try the game out here: Thanks for Mining That It’s a web build, so no download necessary. I didn’t really need to do much. I just did some small changes, some bug fixes, and I don’t really remember what else. So yeah, that’s it for this devlog. Hopefully it gets accepted since I want a 3d printer. But yeah, thanks!"}, {"post_id": 27840, "ts": "2026-07-13T18:41:17Z", "hours": 8.3661, "text": "Thanks for Mining That! Devlog 6 of my Unity Game It’s been more than a week since my last devlog. I’ve mostly been focused on fixing bugs, polishing, and some other stuff. For those who are new, I am making a very chaotic game where you have no weapons, but you need to mine resources, so you have to dodge enemies making them crash into asteroids, mining resources, and destroying themselves in the process. You can use tools to help you, but to craft tools, you need resources. I now have three Hackatime projects connected to this game. Before, I had two, one tracked my Unity time, and another tracked my coding time. Now, for some reason, after I built the game for the first time to test stuff out, a new project popped up that tracks my Unity time, and my old Hackatime project no longer tracks my Unity time. Doesn’t really make much sense. What I mainly worked on: Stats/End Screen Saving Sounds Black Hole Bug-fixing Other stuff Stats/End Screen I added an end screen to the game, where after you finish the game, it shows you all your stats, of the completed run, and all runs. You can click new run to create a new run, and play again. I’m pretty sure someone had suggested this in one of my older devlogs, and it sounded like a good idea. The hardest part of all of this was the saving. Saving This is my first game I implemented real saving to. I have made some games before where I had a small amount of saving, but this time I really tried. I created a whole another script called StatsManager which controls saving and the stats screen. It does not save your current game, and by that I mean if you were in the middle of playing, and leave, it does not resume where you left off. It just saves all your coins, tools, and other stats. Sounds I added some sound effects and also added the background music to my game. I still have to tweak some of the volumes since some sound effects are a bit too loud, but it’s good enough for now. Black Hole I don’t want to give away too much, but the black hole is the final tool, which you can only unlock after unlocking all other tools, and requires a lot of coins and takes a lot of resources to craft. It’s the tool before you finish the game. Bugs Quite a lot of bugs. I think I fixed most of them, but there are probably a few I didn’t notice. Other Stuff I finished making all the tool icons and their sprites in Aseprite. I added them to the game, but for some reason, they look much worse in the game than in Aseprite. Not blurry or anything like that, it just doesn’t feel right. But I don’t want to redo anything, so I just changed some stuff in the sprites and kept them how they were. I also finally added the radiation zone sprite, and the barrier now deals damage and pushes the player away. What I have to add Below are a list of things I have to add to the game ㅤ UI Polish (Sounds and animations) Tools polish (Effects, sounds) General Effects Overall Polish So that’s it for this devlog. Any feedback appreciated. The screenshot below shows all my tool icons and sprites I made. Thanks!"}, {"post_id": 23250, "ts": "2026-07-06T02:51:32Z", "hours": 6.5392, "text": "Thanks for Mining That! Devlog 5 of my Unity Game It’s been four days since my last devlog. Note: I had to redo the whole devlog because the site decided that if I post a devlog which is higher than the character count, it will get completely deleted! So my devlog may not be completely formatted very nicely. I have also lost 8 hours because I have two devlogs that are fourteen hours. I can atleast understand the second one since it was my fault I forgot to post a devlog, so I had to combine two devlogs. But the first devlog was before the announcement about the 10 hour limit. Anyways, back to the devlog ㅤ For those who are new, I am making a game where you have no weapons, but you need to mine resources, so you have to dodge enemies making them crash into asteroids, mining resources, and destroying themselves in the process. What I mainly worked on: Finishing tool functionality UI Title Pixel Art Bug-fixing Other stuff Tools I thought I had finished the functionality last devlog, but there were a few things to fix. The main one, was the Asteroid Forge, which took me like 3 hours to fix completely, and I had explained all the issues before my devlog got deleted, but I’m too tired to write it again a second time. UI I finished all my pixel art UI, and implemented it in game. It should look pretty good now. I had explained how I had created all of them, but it all got deleted. Title I made a title pixel art, look at screenshot to see part of it. I’m a bit of a perfectionist, so it took much longer than it needed to, and I’m still not satisfied with how it turned out. BUGS A LOT OF BUGS. Especially with the asteroid forge, and also some in inventory and other stuff. Other Stuff I decided to make my own music, which I’ve tried multiple times with no good results. I’m using JummBox, and it’s going not good. I also forgot to record it with Lapse, so lost an hour of my work, so nine hours total I’ve lost. I’ve also only finished 10 seconds of the background music, after an hour. I finished implementing the enemy type. Made four tool icons, three were pretty good, one wasn’t that good I also added some other stuff I can’t think of right now. What I have to add Below are a list of things I have to add to the game ㅤ Sounds & BG music UI Polish Tools art and polish Rest of the Tool Icons Effects Overall Polish So that’s it for this devlog. (Sorry about my repeated rants about the deletion, I’m just annoyed, especially with 8 hours not counting, and me forgetting to use Lapse to record me making music) Any feedback appreciated. Thanks!"}, {"post_id": 20104, "ts": "2026-07-01T16:58:40Z", "hours": 14.5667, "text": "Thanks for Mining That! Devlog 3 and 4 of my Unity Game It’s been more than two weeks since my last devlog. I was planning on posting devlog 3 a week back, but got sidetracked with my Frictionless mission project, and then forgot about it completely. So this is devlog 3 and 4 combined. ㅤ For those who are new, I am making a game where you have no weapons, but you need to mine resources, so you have to dodge enemies making them crash into asteroids, mining resources, and destroying themselves in the process. ㅤ The main things I worked on was the shop and the tools. Shop The shop is in the main menu, and you have to click a button called tools to make it show up. The game flow is the player plays the game, dies, uses coins to buy tools, and then plays the game again to try to survive longer. The shop took me a long time to figure out how I should actually do it. A lot of time I was just staring at the screen trying to figure out how I’m actually going to do it. Looking back, I probably should have planned it out on a piece of paper or something. Tools Currently I have 7 tools implemented. I still need to make all the art for them, but their functionality mostly works. Below is a list of my tools. Gravity Orb - An orb that creates a temporary gravity field pulling asteroids and enemies Pulse Wave - An orb that releases a wave in all directions pushing objects away. (I might scrap this tool, as it doesn’t look that good and is hard to use) Repulsion Orb - An orb that creates a temporary field that pushes asteroids and enemies away. Asteroid Lock - An orb that if hits an asteroid, will lock it in place temporarily. (This tool is not working for some reason, so I have to fix it) Grow Tool - An orb that when it hits an asteroid, will cause it to grow rapidly. (It can stack) Asteroid Forge - An orb that grows an asteroid Ship Decoy - An orb that shoots out a decoy that lures enemies away So currently, these are all the tools I have. I will probably not add any more, except for the final one. The final one will require all tools unlocked plus a large amount of coins. Coins I noticed that I hadn’t explained what coins really were in the past devlogs. Coins can be earned when enemies and asteroids are destroyed. Coins can be used to unlock tools in the shop after you die. UI I created some pixel art UI and was playing around with it. It’s still not done and doesn’t look very well, so after I make them a bit better I will add them to the game fully. Enemy Types I added another enemy type, and I also made some art for them. They’re really similar, and just have some difference with linear and turning speed. Environmental Hazards I decided not to add any environmental hazards because I just couldn’t figure out a way to make them not make the player mad. Black holes were too annoying, and planets were just asteroid without ores, so I didn’t add them. What I have to add Below are a list of things I have to add to the game ㅤ Sounds (No sound effects) UI (Making it look better) Tools (Polish, art, functionality, and the final one) Crafting (Works pretty well, some bugs) Finish Inventory (Just some bugs and polish) Main Menu shop (Bugs and polish) Tool Icons Effects: Explosions, damage effects, etc Radioactive Zone (Doesn’t do anything, but effects have been added) Overall Polish ㅤ So thats basically it for this combined devlog. There’s not too much I added because I was focusing on my Frictionless mission project which I recently shipped. The game should be done in less than a week (My initial goal when I started this game was June 15th) Thanks!"}, {"post_id": 10332, "ts": "2026-06-17T00:29:22Z", "hours": 6.9314, "text": "Thanks for Mining That! Devlog 2 for my Unity game So it’s been a few days since my last devlog, and I’ve been working on some of the art and also the inventory system. ㅤ For those who are new, I am making a game where you have no weapons, but you need to mine resources, so you use the groups of angry enemies that are chasing you to mine asteroids while also destroying themselves in the process. You can use tools to make it easier for enemies to help you mine. ㅤ I made the pixel art for the ores and the art for the player. Before, the player was more of a 2d triangular looking shape, but I changed it into a rocket. ㅤ The only ores I currently have are copper, iron and gold. Their art is not the best, but it works. I use Aseprite for the pixel art, and it takes quite some time for me to make each one because I rarely ever make pixel art games, so for me, the current state of the art is good enough. ㅤ I also made each asteroid show which ore it contains, so players can easily identify the asteroid that has the resource they need. I also made the asteroids deal a bit of damage to the player, calculated by the velocity and mass to make the game a bit more chaotic. ㅤ And yes, my game is meant to be chaotic, though I may make it a bit easier to prevent players from getting annoyed. I’ll probably lower the enemy move speed a bit, and keep the turn speed how it is. And now, let me talk about the Inventory/Crafting system. The system is still in progress, but I’ve gotten a basic framework for the inventory ready, so it’ll be easier to add crafting. I added a resources panel at the bottom, which shows total resources in the current run. The panel on the top right will be made invisible later, and is meant to give a message to the player that they got a specific resource. I also added a panel on the left, which will show the current tools, and how many the player has. ㅤ How Tools Will Work Tools can be used by the player to manipulate the environment, like a gravity orb, a repelling wave, etc. They are one-time consumables, though you can hold many of them. You need certain resources to craft them, so weaker tools will require copper, and better tools will require iron and gold. Usually multiple are crafted at a time, though some will be individual crafts. In the main menu, players can use coins(currency I have not implemented yet) to buy better tools, but they can only equip four at a time. What I have to add Below are a list of things I have to add to the game ㅤ Sounds (I currently have no sound effects at all) UI (The UI may be in pixel art, though I’m still unsure about that) Tools Crafting Finish Inventory Main Menu shop Coins Enemy types Enemy art Tool Icons Environmental Hazards: Black Holes, planets, etc. (Maybe?) Effects: Explosions, damage effects, etc Radioactive Zone art and functionality (The barrier surrounding the map) Overall Polish ㅤ So thats basically it for this devlog. I would really appreciate any feedback or suggestions, and below you can see a short video of me playing the game (and failing quite miserably)."}, {"post_id": 6584, "ts": "2026-06-11T01:59:40Z", "hours": 14.935, "text": "Thanks for Mining That! Devlog #1 (Technically #2, but the first one doesn’t really count.) (Game made in Unity) It’s been over a week since my last devlog, and I’ve made a lot of changes. I changed my original game idea where you had a wrecking ball in space, because it didn’t feel fun. My New Idea Still space mining, but you can’t actually mine anything. And to make it even better, hundreds of enemies are flying straight toward you, and all the resources you want are inside asteroids. Fortunately, these enemies have ‘ volunteered ’ to help. All you have to do is ‘ convince ’ enemies to crash into asteroids. Enemies destroy themselves, asteroids break apart, resources are released, and everyone except you is doing the work. You’ll collect the resources and use it to craft tools, to help manipulate the environment. Use coins you get to unlock more tools after you die. What I’ve Done So Far Here’s what I already have so far: Player Controller Enemy Controller Asteroids Main Menu & Death Screen Mini Map Enemy Spawner Asteroid Spawner Object Pooling System More detailed explanation below Player Controller The player can use either Keyboard or Mouse to move. The game detects which one you are using and automatically switches. Keyboard Controls A / D - Rotate left and right W / S - Move forward and backward Mouse Controls The ship rotates toward the mouse cursor with speed calculated using distance from cursor to player. Cursor close = slow Cursor far = fast (limited range) Enemy Controller The enemy behaviour uses: Max Speed Turn Speed Thrust Enemies rotate toward player using turning speed. Low-thrust enemies make wide turns, while high-thrust enemies make more accurate turns. Enemy velocity is capped with max speed. Asteroids Health scales with mass and ore. Mass also affects movement speed. Asteroids are assigned a direction when they spawn. Slowly corrects direction if pushed off course. Game Loop The current game loop: Main Menu Gameplay Death Screen Game Manager handles main logic. Mini Map Added after realizing asteroids are hard to find. Created using a secondary camera with a larger view. Camera follows the player and renders to a texture, displayed in UI. Asteroid Spawning Asteroids spawn from a list of spawn points spread across the map. Every ~25 seconds, chance to spawn at each point. Each asteroid has: A randomized size Random asteroid sprite Enemy Spawning Spawn points are attached to the player. Every ~5 seconds, a random spawn point is selected and an enemy bunch is spawned. Object Pooling Initially, every enemy and asteroid was created using Instantiate() , which caused lag. To solve this, I switched to object pooling. The object pool creates a collection of enemies and asteroids. When an object is needed, it is activated and moved into position. This improved overall performace. What’s Next? There’s still a lot left to make: Radiation Barrier Tools & Upgrades Ore Types More Spaceships Enemy Variants Pixel art Better UI Other stuff which I can’t think of This was a much larger devlog than usual, but since I have changed so much, I didn’t want to skip anything. Personally, I think the game is more fun than the earlier wrecking ball idea, and though the game is not finished, it still feels good to play. If you have any feedback or suggestions, I would really appreciate them. Thanks! (Note: Some parts might feel a bit weird since I had to shorten it to fit it in the character limit)"}, {"post_id": 1072, "ts": "2026-06-02T21:43:01Z", "hours": 2.2311, "text": "I am making a game where you can control a magnet which attracts a wrecking ball in space. There will be enemies and asteroids in the environment. You can destroy the asteroids to get certain ores, which you can use for upgrades later on. You have to try to survive as long as possible, and collect as many resources. I am currently not sure which path I should go: Make it so each time you play, there will be an xp bar, which fills up as you defeat enemies. Once it fills up, you can choose an upgrade which will help you survive. There is no xp bar, but instead, after you die, you can use the ores collected to choose permanent upgrades. I would really appreciate any suggestions or feedback."}]...
|
Title: Thanks for Mining That! by @StarCoder | Sta Title: Thanks for Mining That! by @StarCoder | Stardance
Devlogs:
I am making a game where you can control a magnet which attracts a wrecking ball in space. There will be enemies and asteroids in the environment. You can destroy the asteroids to get certain ores, which you can use for upgrades later on. You have to try to survive as long as possible, and collect as many resources. I am currently not sure which path I should go: Make it so each time you play, there will be an xp bar, which fills up as you defeat enemies. Once it fills up, you can choose an upgrade which will help you survive. There is no xp bar, but instead, after you die, you can use the ores collected to choose permanent upgrades. I would really appreciate any suggestions or feedback.
Thanks for Mining That! Devlog #1 (Technically #2, but the first one doesn’t really count.) (Game made in Unity) It’s been over a week since my last devlog, and I’ve made a lot of changes. I changed my original game idea where you had a wrecking ball in space, because it didn’t feel fun. My New Idea Still space mining, but you can’t actually mine anything. And to make it even better, hundreds of enemies are flying straight toward you, and all the resources you want are inside asteroids. Fortunately, these enemies have ‘ volunteered ’ to help. All you have to do is ‘ convince ’ enemies to crash into asteroids. Enemies destroy themselves, asteroids break apart, resources are released, and everyone except you is doing the work. You’ll collect the resources and use it to craft tools, to help manipulate the environment. Use coins you get to unlock more tools after you die. What I’ve Done So Far Here’s what I already have so far: Player Controller Enemy Controller Asteroids Main Menu & Death Screen Mini Map Enemy Spawner Asteroid Spawner Object Pooling System More detailed explanation below Player Controller The player can use either Keyboard or Mouse to move. The game detects which one you are using and automatically switches. Keyboard Controls A / D - Rotate left and right W / S - Move forward and backward Mouse Controls The ship rotates toward the mouse cursor with speed calculated using distance from cursor to player. Cursor close = slow Cursor far = fast (limited range) Enemy Controller The enemy behaviour uses: Max Speed Turn Speed Thrust Enemies rotate toward player using turning speed. Low-thrust enemies make wide turns, while high-thrust enemies make more accurate turns. Enemy velocity is capped with max speed. Asteroids Health scales with mass and ore. Mass also affects movement speed. Asteroids are assigned a direction when they spawn. Slowly corrects direction if pushed off course. Game Loop The current game loop: Main Menu Gameplay Death Screen Game Manager handles main logic. Mini Map Added after realizing asteroids are hard to find. Created using a secondary camera with a larger view. Camera follows the player and renders to a texture, displayed in UI. Asteroid Spawning Asteroids spawn from a list of spawn points spread across the map. Every ~25 seconds, chance to spawn at each point. Each asteroid has: A randomized size Random asteroid sprite Enemy Spawning Spawn points are attached to the player. Every ~5 seconds, a random spawn point is selected and an enemy bunch is spawned. Object Pooling Initially, every enemy and asteroid was created using Instantiate() , which caused lag. To solve this, I switched to object pooling. The object pool creates a collection of enemies and asteroids. When an object is needed, it is activated and moved into position. This improved overall performace. What’s Next? There’s still a lot left to make: Radiation Barrier Tools & Upgrades Ore Types More Spaceships Enemy Variants Pixel art Better UI Other stuff which I can’t think of This was a much larger devlog than usual, but since I have changed so much, I didn’t want to skip anything. Personally, I think the game is more fun than the earlier wrecking ball idea, and though the game is not finished, it still feels good to play. If you have any feedback or suggestions, I would really appreciate them. Thanks! (Note: Some parts might feel a bit weird since I had to shorten it to fit it in the character limit)
Thanks for Mining That! Devlog 2 for my Unity game So it’s been a few days since my last devlog, and I’ve been working on some of the art and also the inventory system. ㅤ For those who are new, I am making a game where you have no weapons, but you need to mine resources, so you use the groups of angry enemies that are chasing you to mine asteroids while also destroying themselves in the process. You can use tools to make it easier for enemies to help you mine. ㅤ I made the pixel art for the ores and the art for the player. Before, the player was more of a 2d triangular looking shape, but I changed it into a rocket. ㅤ The only ores I currently have are copper, iron and gold. Their art is not the best, but it works. I use Aseprite for the pixel art, and it takes quite some time for me to make each one because I rarely ever make pixel art games, so for me, the current state of the art is good enough. ㅤ I also made each asteroid show which ore it contains, so players can easily identify the asteroid that has the resource they need. I also made the asteroids deal a bit of damage to the player, calculated by the velocity and mass to make the game a bit more chaotic. ㅤ And yes, my game is meant to be chaotic, though I may make it a bit easier to prevent players from getting annoyed. I’ll probably lower the enemy move speed a bit, and keep the turn speed how it is. And now, let me talk about the Inventory/Crafting system. The system is still in progress, but I’ve gotten a basic framework for the inventory ready, so it’ll be easier to add crafting. I added a resources panel at the bottom, which shows total resources in the current run. The panel on the top right will be made invisible later, and is meant to give a message to the player that they got a specific resource. I also added a panel on the left, which will show the current tools, and how many the player has. ㅤ How Tools Will Work Tools can be used by the player to manipulate the environment, like a gravity orb, a repelling wave, etc. They are one-time consumables, though you can hold many of them. You need certain resources to craft them, so weaker tools will require copper, and better tools will require iron and gold. Usually multiple are crafted at a time, though some will be individual crafts. In the main menu, players can use coins(currency I have not implemented yet) to buy better tools, but they can only equip four at a time. What I have to add Below are a list of things I have to add to the game ㅤ Sounds (I currently have no sound effects at all) UI (The UI may be in pixel art, though I’m still unsure about that) Tools Crafting Finish Inventory Main Menu shop Coins Enemy types Enemy art Tool Icons Environmental Hazards: Black Holes, planets, etc. (Maybe?) Effects: Explosions, damage effects, etc Radioactive Zone art and functionality (The barrier surrounding the map) Overall Polish ㅤ So thats basically it for this devlog. I would really appreciate any feedback or suggestions, and below you can see a short video of me playing the game (and failing quite miserably).
Thanks for Mining That! Devlog 3 and 4 of my Unity Game It’s been more than two weeks since my last devlog. I was planning on posting devlog 3 a week back, but got sidetracked with my Frictionless mission project, and then forgot about it completely. So this is devlog 3 and 4 combined. ㅤ For those who are new, I am making a game where you have no weapons, but you need to mine resources, so you have to dodge enemies making them crash into asteroids, mining resources, and destroying themselves in the process. ㅤ The main things I worked on was the shop and the tools. Shop The shop is in the main menu, and you have to click a button called tools to make it show up. The game flow is the player plays the game, dies, uses coins to buy tools, and then plays the game again to try to survive longer. The shop took me a long time to figure out how I should actually do it. A lot of time I was just staring at the screen trying to figure out how I’m actually going to do it. Looking back, I probably should have planned it out on a piece of paper or something. Tools Currently I have 7 tools implemented. I still need to make all the art for them, but their functionality mostly works. Below is a list of my tools. Gravity Orb - An orb that creates a temporary gravity field pulling asteroids and enemies Pulse Wave - An orb that releases a wave in all directions pushing objects away. (I might scrap this tool, as it doesn’t look that good and is hard to use) Repulsion Orb - An orb that creates a temporary field that pushes asteroids and enemies away. Asteroid Lock - An orb that if hits an asteroid, will lock it in place temporarily. (This tool is not working for some reason, so I have to fix it) Grow Tool - An orb that when it hits an asteroid, will cause it to grow rapidly. (It can stack) Asteroid Forge - An orb that grows an asteroid Ship Decoy - An orb that shoots out a decoy that lures enemies away So currently, these are all the tools I have. I will probably not add any more, except for the final one. The final one will require all tools unlocked plus a large amount of coins. Coins I noticed that I hadn’t explained what coins really were in the past devlogs. Coins can be earned when enemies and asteroids are destroyed. Coins can be used to unlock tools in the shop after you die. UI I created some pixel art UI and was playing around with it. It’s still not done and doesn’t look very well, so after I make them a bit better I will add them to the game fully. Enemy Types I added another enemy type, and I also made some art for them. They’re really similar, and just have some difference with linear and turning speed. Environmental Hazards I decided not to add any environmental hazards because I just couldn’t figure out a way to make them not make the player mad. Black holes were too annoying, and planets were just asteroid without ores, so I didn’t add them. What I have to add Below are a list of things I have to add to the game ㅤ Sounds (No sound effects) UI (Making it look better) Tools (Polish, art, functionality, and the final one) Crafting (Works pretty well, some bugs) Finish Inventory (Just some bugs and polish) Main Menu shop (Bugs and polish) Tool Icons Effects: Explosions, damage effects, etc Radioactive Zone (Doesn’t do anything, but effects have been added) Overall Polish ㅤ So thats basically it for this combined devlog. There’s not too much I added because I was focusing on my Frictionless mission project which I recently shipped. The game should be done in less than a week (My initial goal when I started this game was June 15th) Thanks!
Thanks for Mining That! Devlog 5 of my Unity Game It’s been four days since my last devlog. Note: I had to redo the whole devlog because the site decided that if I post a devlog which is higher than the character count, it will get completely deleted! So my devlog may not be completely formatted very nicely. I have also lost 8 hours because I have two devlogs that are fourteen hours. I can atleast understand the second one since it was my fault I forgot to post a devlog, so I had to combine two devlogs. But the first devlog was before the announcement about the 10 hour limit. Anyways, back to the devlog ㅤ For those who are new, I am making a game where you have no weapons, but you need to mine resources, so you have to dodge enemies making them crash into asteroids, mining resources, and destroying themselves in the process. What I mainly worked on: Finishing tool functionality UI Title Pixel Art Bug-fixing Other stuff Tools I thought I had finished the functionality last devlog, but there were a few things to fix. The main one, was the Asteroid Forge, which took me like 3 hours to fix completely, and I had explained all the issues before my devlog got deleted, but I’m too tired to write it again a second time. UI I finished all my pixel art UI, and implemented it in game. It should look pretty good now. I had explained how I had created all of them, but it all got deleted. Title I made a title pixel art, look at screenshot to see part of it. I’m a bit of a perfectionist, so it took much longer than it needed to, and I’m still not satisfied with how it turned out. BUGS A LOT OF BUGS. Especially with the asteroid forge, and also some in inventory and other stuff. Other Stuff I decided to make my own music, which I’ve tried multiple times with no good results. I’m using JummBox, and it’s going not good. I also forgot to record it with Lapse, so lost an hour of my work, so nine hours total I’ve lost. I’ve also only finished 10 seconds of the background music, after an hour. I finished implementing the enemy type. Made four tool icons, three were pretty good, one wasn’t that good I also added some other stuff I can’t think of right now. What I have to add Below are a list of things I have to add to the game ㅤ Sounds & BG music UI Polish Tools art and polish Rest of the Tool Icons Effects Overall Polish So that’s it for this devlog. (Sorry about my repeated rants about the deletion, I’m just annoyed, especially with 8 hours not counting, and me forgetting to use Lapse to record me making music) Any feedback appreciated. Thanks!
Thanks for Mining That! Devlog 6 of my Unity Game It’s been more than a week since my last devlog. I’ve mostly been focused on fixing bugs, polishing, and some other stuff. For those who are new, I am making a very chaotic game where you have no weapons, but you need to mine resources, so you have to dodge enemies making them crash into asteroids, mining resources, and destroying themselves in the process. You can use tools to help you, but to craft tools, you need resources. I now have three Hackatime projects connected to this game. Before, I had two, one tracked my Unity time, and another tracked my coding time. Now, for some reason, after I built the game for the first time to test stuff out, a new project popped up that tracks my Unity time, and my old Hackatime project no longer tracks my Unity time. Doesn’t really make much sense. What I mainly worked on: Stats/End Screen Saving Sounds Black Hole Bug-fixing Other stuff Stats/End Screen I added an end screen to the game, where after you finish the game, it shows you all your stats, of the completed run, and all runs. You can click new run to create a new run, and play again. I’m pretty sure someone had suggested this in one of my older devlogs, and it sounded like a good idea. The hardest part of all of this was the saving. Saving This is my first game I implemented real saving to. I have made some games before where I had a small amount of saving, but this time I really tried. I created a whole another script called StatsManager which controls saving and the stats screen. It does not save your current game, and by that I mean if you were in the middle of playing, and leave, it does not resume where you left off. It just saves all your coins, tools, and other stats. Sounds I added some sound effects and also added the background music to my game. I still have to tweak some of the volumes since some sound effects are a bit too loud, but it’s good enough for now. Black Hole I don’t want to give away too much, but the black hole is the final tool, which you can only unlock after unlocking all other tools, and requires a lot of coins and takes a lot of resources to craft. It’s the tool before you finish the game. Bugs Quite a lot of bugs. I think I fixed most of them, but there are probably a few I didn’t notice. Other Stuff I finished making all the tool icons and their sprites in Aseprite. I added them to the game, but for some reason, they look much worse in the game than in Aseprite. Not blurry or anything like that, it just doesn’t feel right. But I don’t want to redo anything, so I just changed some stuff in the sprites and kept them how they were. I also finally added the radiation zone sprite, and the barrier now deals damage and pushes the player away. What I have to add Below are a list of things I have to add to the game ㅤ UI Polish (Sounds and animations) Tools polish (Effects, sounds) General Effects Overall Polish So that’s it for this devlog. Any feedback appreciated. The screenshot below shows all my tool icons and sprites I made. Thanks!
Thanks For Mining That! Devlog 7 of my Unity Game I’m finally DONE! So I’ve mostly been working on other stuff, like #alchemize, #breadboard, and #jame-gam, but I was finally able to finish my game. You can try the game out here: Thanks for Mining That It’s a web build, so no download necessary. I didn’t really need to do much. I just did some small changes, some bug fixes, and I don’t really remember what else. So yeah, that’s it for this devlog. Hopefully it gets accepted since I want a 3d printer. But yeah, thanks!
Ships:
I made a game called Thanks For Mining That. — SUMMARY — Thanks for Mining That is a 2d game where you are in space and have to mine resources, but you have no mining tools. So you lure the enemies to hit the asteroids so they mine resources and destroy themselves in the process. — LINKS — Itch.io page: https://starcoder.itch.io/thanks-for-mining-that Github: https://github.com/StarCoder369/Thanks-for-Mining-That- It is a web build, so no need to download anything. — CHALLENGES — Here are some challenges I faced. When I first started this game, it was completely different. It was about a spaceship with a wrecking ball, which you had to use to mine resources and destroy enemies. The idea had potential, but it was too difficult to implement it in a way that would be fun for the player, so I scrapped it and pivoted ideas. There were a lot of problems with optimization. I was able to make it better, even though it still isn’t completely smooth, it’s much better. I used object pooling for this, so instead of enemies and asteroids being spawned each time, they just enable and disable. I faced a lot of problems with the music, since I’m not a music guy. I’ve tried to make music before, but it never turns out good. This time, I think it turned out pretty well. I used JummBox (a different version of BeepBox). Another challenge I faced was knowing when to stop. I have a lot of ideas to add to this, but I realized that if I did all of it, it would be a waste of time. All the ideas I have for the game won’t help me learn anything. That’s why I have been doing so many other ysws events, which is also why there is such a big gap between my second-last and last devlog. That’s basically it. I had a lot of fun making the game, and hopefully it’s going to be accepted! Thank you!...
|
1793000957.497481
|
1793087357.497481
|
|
54817
|
tinyapper by @craisin | Stardance
|
craisin
|
2
|
32.0
|
541
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-26T07:19:18Z", "hours": 14.0, "multiplier": 16.51, "payout": 225, "blessing": "neutral", "text": "| Hi stardance! Please make sure to try both demos out at https://tinyapper.craisin.tech and https://yapperpedia.craisin.tech . Additionally, tinyapper can be kinda slow (no GPU in my server unfortunately) and dumb (it is severely undertrained), please be patient and understand that these are silly proof of concept models! Tinyapper 2.0.0 More Tinyapper, the LLM trained from scratch! This time the model is trained to be fully conversational with user, assistant, and eos tokens, along with a session attached KV cache. Tech Changes New conversational demo at tinyapper.craisin.tech Updated attention conditional for multiple infills for chat Updated KV cache so chats can be cached Reiterated how datasets are made Retrained model for yapperpedia so the model is slightly more coherent Future Development Standardizing datasets to use memmap for larger datasets Retrain conversational model Fine tune the model While this will probably be the last of me working on this project for Stardance, I’ll definitely work on this more in my own time. Keep an eye on the Github for updates if you are interested, stars and follows there are noticed and appreciated!", "repo": "https://github.com/craisined/tinyapper", "demo": "https://tinyapper.craisin.tech"}, {"ship_num": 2, "ts": "2026-09-04T02:19:11Z", "hours": 18.0, "multiplier": 17.57, "payout": 316, "blessing": "neutral", "text": "Tinyapper 1.0.0 The first release for Tinyapper, the tiny LLM built from scratch! It so far still only exists as a pretrained transformer, I hope to finetune v2 using a dataset for alpaca. A lot of time was spent cleaning up yapperpedia , the demo I created to generate incoherent Wikipedia articles. However, a lot of time was also spent making the code accessible and modular, as I want to further build on this project and encourage others to understand machine learning fundamentals as well. If you are interested, check out local.ipynb ! Tech 50M parameter pretrained transformer model trained on wikitext recreating transformer architecture similar to GPT-2 Flask backend with plain HTML, CSS, and JS website showing the abilities of Tinyapper Struggles KV caching and embedding: I tried for too long to create a looping cache, but that was both slow and impractical to do at the current state of this project Streaming: Getting the stream sent over without bugs and glitches was a giant headache! Future Development Tuning the language to be conversational Creating a context independent KV cache Increasing model size", "repo": "https://github.com/craisined/tinyapper", "demo": "https://tinyapper.craisin.tech"}]...
|
[{"post_id": 73871, "ts": "202 [{"post_id": 73871, "ts": "2026-09-26T07:08:29Z", "hours": 2.2133, "text": "Devlog 11: Cleaned this up a bit more, adding session attached KV caching and more polish for one last ship. School + apps is getting busy, so I think this will be my final devlog. TYSM stardancers, I had lots of fun creating tinyapper"}, {"post_id": 67900, "ts": "2026-09-14T06:24:14Z", "hours": 3.3714, "text": "Devlog 10 : Created the website for my chatbot! Other than retraining, I think the last steps for me look like implementing a session attached KV cache. 2.0 soon :D"}, {"post_id": 63883, "ts": "2026-09-07T21:45:56Z", "hours": 2.5372, "text": "Devlog 9 : An epoch of ultrachat finished faster than I thought it would… tinyapper really likes chocolate chip cocktails I guess 😭. Looping and other problems are getting really prevalent, I think I’m hitting the limit for a 50M model."}, {"post_id": 63653, "ts": "2026-09-07T16:01:37Z", "hours": 5.5247, "text": "Pre devlog thank you: You guys really did fund my cloud credit, 17.57x multiplier for my first ship on this is crazy! I read through the feedback, my plan now is to use Stardust for cloud credit (pending order) to properly pretrain the model and finetune it using Ultrachat (I hear yall :3). Thanks for all the support and suggestions here and on Slack, it really motivates me to keep coding <3 Ship 1.0.1 (Devlog 8) : Implemented variable learning rate: in theory lets the model hit slightly lower numbers and train longer Added a validation split and test: long overdue lol Added data processing and support for Ultrachat: allows me to circumvent processing data on the cloud Added L4 settings for cloud: yes I’m getting ready to train on the cloud Updating docker container to not include a model + other random stuff: volume mount on runtime to prevent pulling 2gb from ghcr every update Retrained model: WE BEAT OPENAI RAHHHH (from 7 years ago), we are now at 3.09 nats (for validation too, which is a better metric)! For reference, GPT 2 small gets a loss of 3.4 nats when evaluated without extra training on the same dataset (we don’t talk about the fine tuning results)"}, {"post_id": 61232, "ts": "2026-09-04T02:04:05Z", "hours": 1.2639, "text": "Devlog 7: I optimized streaming! Not only that, my mini PC has integrated graphics that apparently makes LLM go zoom, so I got a really large unanticipated speed boost :0. I got to increase the generated tokens all the way to near max, so y’all can get more gibberish faster! Going to ship this version :)"}, {"post_id": 61186, "ts": "2026-09-04T00:11:05Z", "hours": 4.3519, "text": "Devlog 6: After all this time… my frontend is the exact same! It’s a lot faster though! I spent a lot of time trying to optimize my model, from KV Caches to RoPE and quantization. Overall, KV caching and streaming text seems to give the best experience, so that’s what I went with. Seeing if I can deploy to nest or further optimize streaming…"}, {"post_id": 60078, "ts": "2026-09-02T06:33:28Z", "hours": 2.7022, "text": "Devlog 5 : Finally implemented a cache… now I just have to rewrite my attention module to work around it…"}, {"post_id": 58575, "ts": "2026-08-31T01:16:47Z", "hours": 1.6464, "text": "Devlog 4 : I tried to get away with not using a KV Cache and ship today… but CPU said no. Considering using cloud to host this until I implement a KV Cache, but I know I should just code one up. Why do LLMs need so much compute"}, {"post_id": 58524, "ts": "2026-08-30T23:19:21Z", "hours": 4.3989, "text": "Devlog #3 : The model is trained! I will fine tune and train it over next week, but I think I want to get a first ship and demo first. Yapperpedia coming soon!"}, {"post_id": 56929, "ts": "2026-08-28T23:10:50Z", "hours": 1.7664, "text": "Devlog 2 : Tinyapper (an llm from scratch) is done with its first train! After an epoch of training it averaged ~3.8 nats/token for training data, which is decently close to GPT 2s 3.62… I hope to turn this into a frivolous Wikipedia article generator this weekend for a first ship this weekend, so get ready for that!"}, {"post_id": 56429, "ts": "2026-08-28T06:08:01Z", "hours": 1.855, "text": "Devlog #1 : Nowadays, LLMs are such a popular technology with a lot of theory, but very few people seem to have implemented one. I wanted to create my own LLM to tinker with on my own, and so far cross entropy seems to be approaching human language! Wish me luck <3"}]...
|
Title: tinyapper by @craisin | Stardance
Devlogs: Title: tinyapper by @craisin | Stardance
Devlogs:
Devlog #1 : Nowadays, LLMs are such a popular technology with a lot of theory, but very few people seem to have implemented one. I wanted to create my own LLM to tinker with on my own, and so far cross entropy seems to be approaching human language! Wish me luck <3
Devlog 2 : Tinyapper (an llm from scratch) is done with its first train! After an epoch of training it averaged ~3.8 nats/token for training data, which is decently close to GPT 2s 3.62… I hope to turn this into a frivolous Wikipedia article generator this weekend for a first ship this weekend, so get ready for that!
Devlog #3 : The model is trained! I will fine tune and train it over next week, but I think I want to get a first ship and demo first. Yapperpedia coming soon!
Devlog 4 : I tried to get away with not using a KV Cache and ship today… but CPU said no. Considering using cloud to host this until I implement a KV Cache, but I know I should just code one up. Why do LLMs need so much compute
Devlog 5 : Finally implemented a cache… now I just have to rewrite my attention module to work around it…
Devlog 6: After all this time… my frontend is the exact same! It’s a lot faster though! I spent a lot of time trying to optimize my model, from KV Caches to RoPE and quantization. Overall, KV caching and streaming text seems to give the best experience, so that’s what I went with. Seeing if I can deploy to nest or further optimize streaming…
Devlog 7: I optimized streaming! Not only that, my mini PC has integrated graphics that apparently makes LLM go zoom, so I got a really large unanticipated speed boost :0. I got to increase the generated tokens all the way to near max, so y’all can get more gibberish faster! Going to ship this version :)
Pre devlog thank you: You guys really did fund my cloud credit, 17.57x multiplier for my first ship on this is crazy! I read through the feedback, my plan now is to use Stardust for cloud credit (pending order) to properly pretrain the model and finetune it using Ultrachat (I hear yall :3). Thanks for all the support and suggestions here and on Slack, it really motivates me to keep coding <3 Ship 1.0.1 (Devlog 8) : Implemented variable learning rate: in theory lets the model hit slightly lower numbers and train longer Added a validation split and test: long overdue lol Added data processing and support for Ultrachat: allows me to circumvent processing data on the cloud Added L4 settings for cloud: yes I’m getting ready to train on the cloud Updating docker container to not include a model + other random stuff: volume mount on runtime to prevent pulling 2gb from ghcr every update Retrained model: WE BEAT OPENAI RAHHHH (from 7 years ago), we are now at 3.09 nats (for validation too, which is a better metric)! For reference, GPT 2 small gets a loss of 3.4 nats when evaluated without extra training on the same dataset (we don’t talk about the fine tuning results)
Devlog 9 : An epoch of ultrachat finished faster than I thought it would… tinyapper really likes chocolate chip cocktails I guess 😭. Looping and other problems are getting really prevalent, I think I’m hitting the limit for a 50M model.
Devlog 10 : Created the website for my chatbot! Other than retraining, I think the last steps for me look like implementing a session attached KV cache. 2.0 soon :D
Devlog 11: Cleaned this up a bit more, adding session attached KV caching and more polish for one last ship. School + apps is getting busy, so I think this will be my final devlog. TYSM stardancers, I had lots of fun creating tinyapper
Ships:
Tinyapper 1.0.0 The first release for Tinyapper, the tiny LLM built from scratch! It so far still only exists as a pretrained transformer, I hope to finetune v2 using a dataset for alpaca. A lot of time was spent cleaning up yapperpedia , the demo I created to generate incoherent Wikipedia articles. However, a lot of time was also spent making the code accessible and modular, as I want to further build on this project and encourage others to understand machine learning fundamentals as well. If you are interested, check out local.ipynb ! Tech 50M parameter pretrained transformer model trained on wikitext recreating transformer architecture similar to GPT-2 Flask backend with plain HTML, CSS, and JS website showing the abilities of Tinyapper Struggles KV caching and embedding: I tried for too long to create a looping cache, but that was both slow and impractical to do at the current state of this project Streaming: Getting the stream sent over without bugs and glitches was a giant headache! Future Development Tuning the language to be conversational Creating a context independent KV cache Increasing model size
| Hi stardance! Please make sure to try both demos out at https://tinyapper.craisin.tech and https://yapperpedia.craisin.tech . Additionally, tinyapper can be kinda slow (no GPU in my server unfortunately) and dumb (it is severely undertrained), please be patient and understand that these are silly proof of concept models! Tinyapper 2.0.0 More Tinyapper, the LLM trained from scratch! This time the model is trained to be fully conversational with user, assistant, and eos tokens, along with a session attached KV cache. Tech Changes New conversational demo at tinyapper.craisin.tech Updated attention conditional for multiple infills for chat Updated KV cache so chats can be cached Reiterated how datasets are made Retrained model for yapperpedia so the model is slightly more coherent Future Development Standardizing datasets to use memmap for larger datasets Retrain conversational model Fine tune the model While this will probably be the last of me working on this project for Stardance, I’ll definitely work on this more in my own time. Keep an eye on the Github for updates if you are interested, stars and follows there are noticed and appreciated!...
|
1792979398.110631
|
1793065798.110631
|
|
16467
|
Brainf*ck IDE by @MarioS271 | Stardance
|
MarioS271
|
1
|
30.0
|
539
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T10:01:36Z", "hours": 30.0, "multiplier": 18.23, "payout": 539, "blessing": "neutral", "text": "Brainf * ck IDE Hello and welcome to my project: an IDE for the brainf * ck programming language! What is it Brainf * ck IDE is a text editor, interpreter and debugger for brainf * ck. It is a powerful tool for developing brain * ck applications (if you wanna do that for some reason) How to use it The editor has two modes, Normal and Debug . Normally, youre in normal mode, but you can switch between normal and debug by using the DEBUG button. The editor is divided into three panels and a menubar. The three panels are: Editor Panel (Top Left) Output Panel (Top Right) Tape Panel (Bottom) Known Issues Maximizing the window and resizing it larger than a specific size causes the contents to dissapear, to reverse just make the window smaller again Resizing the window smaller than the size of a popup causes a heap corruption I would recommend avoiding resizing the window unless absolutely necessary 😅 If you’re interested in the details, feel free to read the rest on the GitHub Repo . :)", "repo": "https://github.com/MarioS271/brainfuck_ide", "demo": "https://github.com/MarioS271/brainfuck_ide/releases/tag/v1.2.1"}]...
|
[{"post_id": 11570, "ts": "202 [{"post_id": 11570, "ts": "2026-06-18T21:09:08Z", "hours": 0.4989, "text": "Whoops Had a small bug in the left arrow key in normal editing mode and popups weren’t resizing and re-positioning correctly, fixed all that :) FINAL RELEASE BABYYYY (hopefully)"}, {"post_id": 11526, "ts": "2026-06-18T20:29:28Z", "hours": 5.8544, "text": "Finally, the debugger is working properly . If you’ve tried a beta version, especially v1.1.0, you might have noticed the debugger being broken and kinda weird. I noticed that too, so I decided to rewrite it! (technically, I rewrote it twice but oh well) Why it needed a rewrite Before, the debugger worked by executing the next step in-place and jumping in loops by moving the cursor to the matching bracket. The problem was: to jump backwards when looping, you had to keep a history which could pretty quickly get filled if you were debugging enough and overall the system was too overengineered for what it was supposed to do. The new architecture The new debugger does almost the same that the live tape preview already does. The live tape preview has one caveat that doesn’t allow it to be directly used for the debugger though: we cannot track loop iterations on the cursor position alone, as we always just compute until the cursor. If we’re before a loop’s end, we’re only computing the first iteration. If we move past the loop, the whole loop gets computed in one move.Instead of the cursor pos, the debugger uses an instruction counter. It basically counts how many brainf * ck instructions it should run, which solves all problems here. Why this works Take this program: ++++++++ [ > ++++ [ > ++ > +++ > +++ > + <<<< - ] > + > + > - >> + [ < ] < - ] >> . > ---.+++++++..+++. >> . < -. < .+++.------.--------. >> +. > ++. Say we wanna run 40 instructions. We first step over the initial ++++++++[>++++[>++>+++>+++>+<<<<- (33 instructions), and then we get to the first ] . When we do, the current cell is non-zero, meaning we jump back to the instruction after the highlighted bracket ( ++++++++[>++++ [ >++>+++>+++>+<<<<- ). The jump is one instruction. Then we run >++>++ and reach 40. Notice how we’re in the second iteration when it ends. If we now move the cursor forward by one, we tell the tape generator “execute 41 instructions”. The same as before happens now (execute first bit, jump back, continue executing - but one instruction more than before this time) but we land in the second iteration again."}, {"post_id": 10201, "ts": "2026-06-16T20:23:44Z", "hours": 4.6389, "text": "Popups are finished! (almost) After a little bit of work, a popup system (which I gotta say is written kinda well compared to all the other code) is in place! Currently, there are: Exit Confirmation Popup Save File Dialog Load File Dialog One last thing is still missing though: The please press a button popup for inputs ( , ). Technical Details The popup system works by using a sub-struct inside of the global state struct ( state.popup ). It contains data such as whether a popup is active, if it accepts text input and handlers for drawing and the confirm button. There’s a base func ( create_popup_base() ) that draws a new basic outline for the popup. After that, only the contents of the popup get refreshed via the custom handler set via setting a function pointer ( state.popup.refresh_handler ). The popup also “captures” input. There’s a seperate if for state.popup.active before the main input validation which processes inputs and then skips the normal input processing."}, {"post_id": 9244, "ts": "2026-06-15T15:03:22Z", "hours": 3.7889, "text": "The debugger works!! After hours of work (mainly debugging and patching up code), it finally works! :DD The power of the debugger You can use the debugger to step forward and backward in your brainf * ck program. While stepping, a live program counter display (labelled “PC”) shows the current program counter index, while the tape in the bottom panel shows the current state of each cell, which cell is currently selected by the data pointer and what the cell contains, in both decimal and ASCII format. The following is just for if you’re interested in the technical details ;) Why I wanted to wipe my drive several times while making this (Problem 1) The first main problem in writing the debugger was stepping backward. You’d think its just “do the instruction in reverse, like when you back-step a - , just do a + instead” but the problem arises when, for example, you read in something using , and the info got overwritten. How do you reverse to something that got destroyed? Well, you don’t. The Solution to the Back-Stepping problem I implemented backward stepping by just recomputing the entire tape from scratch on every backstep. Yes, it’s probably not the best way, but it works. Problem 2 Loops. Once. Again. The jumping around of loops in brainf * ck is not the simplest thing to correctly compute, especially when only partially executing a program. When you land on a [ or a ] , you also need to account for nested loops. You can probably imagine that that can definitely cause some headaches."}, {"post_id": 8947, "ts": "2026-06-14T21:29:52Z", "hours": 3.0733, "text": "Live tape preview is done! While writing or editing code or by literally just moving your cursor, you now get a live preview of the programs “tape” (basically it’s entire data it works with). There is one big problem with the current system however. If you’re interested, feel free to read the following. The big Issue Loops. You see, in brainf * ck, loops work by using [ to jump to the matching ] if the current cell is zero and by using ] to jump to the matching [ if the cell is non-zero. This behaviour is actually not that pleasant to simulate when you’re only executing to a specific point in the program, because the “simulator” (the thing that interprets the bit of brainf * ck code up until your cursor and then generates a tape from that) can’t see the matching closing ] as it comes after the cursor. This means the loop will never really execute. But, when you navigate past the entire loop block, the cells jump to a completely different state (as seen in the video at around 0:08 ). How am I going to solve it then? I’ve decided that I dont want to “solve” it by somehow making loops work in live preview. I’ve decided live preview should only be relatively basic. For serious loop-involved debugging, I wanna introduce a special “Debug Mode”. In this mode, you’ll be able to step through your code, have chars printed into the output panel live AND also have the cursor/program pointer correctly jump around."}, {"post_id": 8714, "ts": "2026-06-14T14:06:09Z", "hours": 0.9819, "text": "Menubar Navigation, Code Running and Output Display works!! 🎉 :) Today, the IDE ran its first program! (and yes, of course, it was a hello world program) What changed? As already mentioned in the last post, I’ve rewritten part of the menubar rendering and also implemented output field rendering. Also, I’ve refactored the run_brainfuck function to be compatible with the UI. Changes in the run_brainfuck(...) function Before, it just stubbornly printed to stdout and read from stdin which of course kinda conflicts with the UI. To solve this, I made it write into an output buffer and accept a function pointer for a function that needs to return an int of which char was read in. The actual reading in will be handled by the pointed to function, which will probably be a “Please press a button” popup. What’s next Looking forward to getting the tape reel and then popups (including file saving/loading, exit confirm and please press a button) to work!"}, {"post_id": 7738, "ts": "2026-06-12T22:24:42Z", "hours": 1.9525, "text": "Great News! The editor is now fully working! I’ve managed to implement everything from syntax highlighting to special keys such as delete, home and end. Nice! What now? I’m also working on getting the menubar to work, which’ll require rewriting a little part of the menubar rendering, as currently, the text entries get printed in one go with the spaces. If I somehow wanna highlight the text only, I gotta draw it all seperately."}, {"post_id": 7365, "ts": "2026-06-12T08:38:10Z", "hours": 1.3817, "text": "Typing works!! not Another Memory Violation :) Gonna debug that one too i guess On the flip side, I got syntax highlighting working!"}, {"post_id": 7314, "ts": "2026-06-12T05:59:01Z", "hours": 0.4856, "text": "This was literally me after opening my code today On a side note: I’ve cleaned up the codebase a little and split stuff into separate files for readability, like moving the editor draw function along with all its helpers into a separate file. I’m about to start working on finishing the editor panel now. :)"}, {"post_id": 7038, "ts": "2026-06-11T19:57:39Z", "hours": 1.5256, "text": "holy productivity spike I got the editor fully working!!! :) After wanting to throw my computer from a comically large height (multiple times), it finally runs: proper arrow-key navigation, a fully working cursor, soft wraps, line numbers, and so on. Vertical scrolling is now fully functional aswell. Even some comfort features like using the Home and End keys work! Fun stuff I found out in the process In the process of getting this to work I also discovered things like the fact that the pdcurses getch() macro implicitly refreshes the stdscr and then… doesnt… flush it 😐 Anything still borked? Some things also still don’t work fully, which kinda bothers me. The main example of this is navigating the cursor vertically into soft-wrapped lines; because of how I wrote the row up/down logic - which is to check in the editor buffer where the next or previous line feed is and then navigate based on that - I can’t just say “oh theres a soft line wrap lets just detect that instead of a \\n ” because the rendering (which does the soft line wrapping) and the I/O loop don’t communicate with each other Sure, I could fix it by adding a shared data structure which contains all line wrappings, but for now, I just wanna get the more important stuff running. Any plans now? Anyways, I’m planning to finish the editor fully by adding writing text (wild concept, i know!) and syntax highlighting next. Stay tuned to find out how much I continue to suffer! :’)"}, {"post_id": 6959, "ts": "2026-06-11T17:48:58Z", "hours": 0.7281, "text": "No more Access Violation! Also, I managed to get the editor drawing going! :) The interesting thing about the access violation fix is: I have no clue what caused it - it just kinda went away?? But oh well, the error is not happening anymore :D Whats working now? I so far mainly implemented colored line numbers and soft wrapping. The implementation for vertical scrolling however isn’t written yet, that’s the plan next. Also, I’ll probably implement cursor navigation with that in one go. I also made some small optimizations to the main loop plus a few fixes and adjustments here and there."}, {"post_id": 6930, "ts": "2026-06-11T16:40:49Z", "hours": 2.2344, "text": "I managed to prove why C is the most memory safe language that exists!! This gets triggered by literally just resizing the window and I have zero idea why :’) On a side note though, I’ve been working on the editor panel a little and it’s slowly coming together. Anyways, looking forward to debugging hell for that one overflow or nullpointer (or whatever the hell this is)!"}, {"post_id": 6777, "ts": "2026-06-11T10:56:05Z", "hours": 1.02, "text": "Panel borders are done and working! :D How annonying was it? The tricky part was getting the layout constants to line up correctly (it gets pretty annoying if you’re trying to find where you accidentally forgot to add one to a value) Got there in the end though. Anything else? Also cleaned up the repo. I also added a git submodule so that PDCurses actually gets cloned too if you pass the --recurse-submodules when cloning. Now the foundation is solid and I can actually start on the editor itself next session. :) I also included a lil preview of how it looks rn :)"}, {"post_id": 6754, "ts": "2026-06-11T09:43:15Z", "hours": 1.4886, "text": "Introducing: Brainf * ck IDE - a TUI-based IDE for writing and running brainf * ck, built in C using PDCurses. The IDE has a panelized layout: code editor on the left, output on the right, and a live tape viewer along the bottom so you can actually watch memory change in real time while writing code! The screenshot is mocked up manually for now, the code for drawing doesn’t exist yet 😅 Whats already started So far I’ve got the interpreter written and a few basic rendering steps working, including the top menubar. How it works The brainf * ck interpreter is actually really simple: you need a loop to iterate through a program buffer, then check for any “special” chars like < , + , … and then just increment/decrement values or do some simple logic depending on which char it is. Next, I’ll try to do the panel borders and some panel setup. Looking forward to how much stuff will break! :)"}]...
|
Title: Brainf*ck IDE by @MarioS271 | Stardance
De Title: Brainf*ck IDE by @MarioS271 | Stardance
Devlogs:
Introducing: Brainf * ck IDE - a TUI-based IDE for writing and running brainf * ck, built in C using PDCurses. The IDE has a panelized layout: code editor on the left, output on the right, and a live tape viewer along the bottom so you can actually watch memory change in real time while writing code! The screenshot is mocked up manually for now, the code for drawing doesn’t exist yet 😅 Whats already started So far I’ve got the interpreter written and a few basic rendering steps working, including the top menubar. How it works The brainf * ck interpreter is actually really simple: you need a loop to iterate through a program buffer, then check for any “special” chars like < , + , … and then just increment/decrement values or do some simple logic depending on which char it is. Next, I’ll try to do the panel borders and some panel setup. Looking forward to how much stuff will break! :)
Panel borders are done and working! :D How annonying was it? The tricky part was getting the layout constants to line up correctly (it gets pretty annoying if you’re trying to find where you accidentally forgot to add one to a value) Got there in the end though. Anything else? Also cleaned up the repo. I also added a git submodule so that PDCurses actually gets cloned too if you pass the --recurse-submodules when cloning. Now the foundation is solid and I can actually start on the editor itself next session. :) I also included a lil preview of how it looks rn :)
I managed to prove why C is the most memory safe language that exists!! This gets triggered by literally just resizing the window and I have zero idea why :’) On a side note though, I’ve been working on the editor panel a little and it’s slowly coming together. Anyways, looking forward to debugging hell for that one overflow or nullpointer (or whatever the hell this is)!
No more Access Violation! Also, I managed to get the editor drawing going! :) The interesting thing about the access violation fix is: I have no clue what caused it - it just kinda went away?? But oh well, the error is not happening anymore :D Whats working now? I so far mainly implemented colored line numbers and soft wrapping. The implementation for vertical scrolling however isn’t written yet, that’s the plan next. Also, I’ll probably implement cursor navigation with that in one go. I also made some small optimizations to the main loop plus a few fixes and adjustments here and there.
holy productivity spike I got the editor fully working!!! :) After wanting to throw my computer from a comically large height (multiple times), it finally runs: proper arrow-key navigation, a fully working cursor, soft wraps, line numbers, and so on. Vertical scrolling is now fully functional aswell. Even some comfort features like using the Home and End keys work! Fun stuff I found out in the process In the process of getting this to work I also discovered things like the fact that the pdcurses getch() macro implicitly refreshes the stdscr and then… doesnt… flush it 😐 Anything still borked? Some things also still don’t work fully, which kinda bothers me. The main example of this is navigating the cursor vertically into soft-wrapped lines; because of how I wrote the row up/down logic - which is to check in the editor buffer where the next or previous line feed is and then navigate based on that - I can’t just say “oh theres a soft line wrap lets just detect that instead of a \n ” because the rendering (which does the soft line wrapping) and the I/O loop don’t communicate with each other Sure, I could fix it by adding a shared data structure which contains all line wrappings, but for now, I just wanna get the more important stuff running. Any plans now? Anyways, I’m planning to finish the editor fully by adding writing text (wild concept, i know!) and syntax highlighting next. Stay tuned to find out how much I continue to suffer! :’)
This was literally me after opening my code today On a side note: I’ve cleaned up the codebase a little and split stuff into separate files for readability, like moving the editor draw function along with all its helpers into a separate file. I’m about to start working on finishing the editor panel now. :)
Typing works!! not Another Memory Violation :) Gonna debug that one too i guess On the flip side, I got syntax highlighting working!
Great News! The editor is now fully working! I’ve managed to implement everything from syntax highlighting to special keys such as delete, home and end. Nice! What now? I’m also working on getting the menubar to work, which’ll require rewriting a little part of the menubar rendering, as currently, the text entries get printed in one go with the spaces. If I somehow wanna highlight the text only, I gotta draw it all seperately.
Menubar Navigation, Code Running and Output Display works!! 🎉 :) Today, the IDE ran its first program! (and yes, of course, it was a hello world program) What changed? As already mentioned in the last post, I’ve rewritten part of the menubar rendering and also implemented output field rendering. Also, I’ve refactored the run_brainfuck function to be compatible with the UI. Changes in the run_brainfuck(...) function Before, it just stubbornly printed to stdout and read from stdin which of course kinda conflicts with the UI. To solve this, I made it write into an output buffer and accept a function pointer for a function that needs to return an int of which char was read in. The actual reading in will be handled by the pointed to function, which will probably be a “Please press a button” popup. What’s next Looking forward to getting the tape reel and then popups (including file saving/loading, exit confirm and please press a button) to work!
Live tape preview is done! While writing or editing code or by literally just moving your cursor, you now get a live preview of the programs “tape” (basically it’s entire data it works with). There is one big problem with the current system however. If you’re interested, feel free to read the following. The big Issue Loops. You see, in brainf * ck, loops work by using [ to jump to the matching ] if the current cell is zero and by using ] to jump to the matching [ if the cell is non-zero. This behaviour is actually not that pleasant to simulate when you’re only executing to a specific point in the program, because the “simulator” (the thing that interprets the bit of brainf * ck code up until your cursor and then generates a tape from that) can’t see the matching closing ] as it comes after the cursor. This means the loop will never really execute. But, when you navigate past the entire loop block, the cells jump to a completely different state (as seen in the video at around 0:08 ). How am I going to solve it then? I’ve decided that I dont want to “solve” it by somehow making loops work in live preview. I’ve decided live preview should only be relatively basic. For serious loop-involved debugging, I wanna introduce a special “Debug Mode”. In this mode, you’ll be able to step through your code, have chars printed into the output panel live AND also have the cursor/program pointer correctly jump around.
The debugger works!! After hours of work (mainly debugging and patching up code), it finally works! :DD The power of the debugger You can use the debugger to step forward and backward in your brainf * ck program. While stepping, a live program counter display (labelled “PC”) shows the current program counter index, while the tape in the bottom panel shows the current state of each cell, which cell is currently selected by the data pointer and what the cell contains, in both decimal and ASCII format. The following is just for if you’re interested in the technical details ;) Why I wanted to wipe my drive several times while making this (Problem 1) The first main problem in writing the debugger was stepping backward. You’d think its just “do the instruction in reverse, like when you back-step a - , just do a + instead” but the problem arises when, for example, you read in something using , and the info got overwritten. How do you reverse to something that got destroyed? Well, you don’t. The Solution to the Back-Stepping problem I implemented backward stepping by just recomputing the entire tape from scratch on every backstep. Yes, it’s probably not the best way, but it works. Problem 2 Loops. Once. Again. The jumping around of loops in brainf * ck is not the simplest thing to correctly compute, especially when only partially executing a program. When you land on a [ or a ] , you also need to account for nested loops. You can probably imagine that that can definitely cause some headaches.
Popups are finished! (almost) After a little bit of work, a popup system (which I gotta say is written kinda well compared to all the other code) is in place! Currently, there are: Exit Confirmation Popup Save File Dialog Load File Dialog One last thing is still missing though: The please press a button popup for inputs ( , ). Technical Details The popup system works by using a sub-struct inside of the global state struct ( state.popup ). It contains data such as whether a popup is active, if it accepts text input and handlers for drawing and the confirm button. There’s a base func ( create_popup_base() ) that draws a new basic outline for the popup. After that, only the contents of the popup get refreshed via the custom handler set via setting a function pointer ( state.popup.refresh_handler ). The popup also “captures” input. There’s a seperate if for state.popup.active before the main input validation which processes inputs and then skips the normal input processing.
Finally, the debugger is working properly . If you’ve tried a beta version, especially v1.1.0, you might have noticed the debugger being broken and kinda weird. I noticed that too, so I decided to rewrite it! (technically, I rewrote it twice but oh well) Why it needed a rewrite Before, the debugger worked by executing the next step in-place and jumping in loops by moving the cursor to the matching bracket. The problem was: to jump backwards when looping, you had to keep a history which could pretty quickly get filled if you were debugging enough and overall the system was too overengineered for what it was supposed to do. The new architecture The new debugger does almost the same that the live tape preview already does. The live tape preview has one caveat that doesn’t allow it to be directly used for the debugger though: we cannot track loop iterations on the cursor position alone, as we always just compute until the cursor. If we’re before a loop’s end, we’re only computing the first iteration. If we move past the loop, the whole loop gets computed in one move.Instead of the cursor pos, the debugger uses an instruction counter. It basically counts how many brainf * ck instructions it should run, which solves all problems here. Why this works Take this program: ++++++++ [ > ++++ [ > ++ > +++ > +++ > + <<<< - ] > + > + > - >> + [ < ] < - ] >> . > ---.+++++++..+++. >> . < -. < .+++.------.--------. >> +. > ++. Say we wanna run 40 instructions. We first step over the initial ++++++++[>++++[>++>+++>+++>+<<<<- (33 instructions), and then we get to the first ] . When we do, the current cell is non-zero, meaning we jump back to the instruction after the highlighted bracket ( ++++++++[>++++ [ >++>+++>+++>+<<<<- ). The jump is one instruction. Then we run >++>++ and reach 40. Notice how we’re in the second iteration when it ends. If we now move the cursor forward by one, we tell the tape generator “execute 41 instructions”. The same as before happens now (execute first bit, jump back, continue executing - but one instruction more than before this time) but we land in the second iteration again.
Whoops Had a small bug in the left arrow key in normal editing mode and popups weren’t resizing and re-positioning correctly, fixed all that :) FINAL RELEASE BABYYYY (hopefully)
Ships:
Brainf * ck IDE Hello and welcome to my project: an IDE for the brainf * ck programming language! What is it Brainf * ck IDE is a text editor, interpreter and debugger for brainf * ck. It is a powerful tool for developing brain * ck applications (if you wanna do that for some reason) How to use it The editor has two modes, Normal and Debug . Normally, youre in normal mode, but you can switch between normal and debug by using the DEBUG button. The editor is divided into three panels and a menubar. The three panels are: Editor Panel (Top Left) Output Panel (Top Right) Tape Panel (Bottom) Known Issues Maximizing the window and resizing it larger than a specific size causes the contents to dissapear, to reverse just make the window smaller again Resizing the window smaller than the size of a popup causes a heap corruption I would recommend avoiding resizing the window unless absolutely necessary 😅 If you’re interested in the details, feel free to read the rest on the GitHub Repo . :)...
|
1792986516.9356585
|
1793072916.9356585
|
|
29899
|
matu game engine by @immaturegoat | Stardance
|
immaturegoat
|
1
|
33.0
|
534
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-08T17:23:48Z", "hours": 33.0, "multiplier": 16.37, "payout": 534, "blessing": "neutral", "text": "IMPORTANT: documentation: https://github.com/immaturegoat/matu/blob/main/docs.md tutorial: https://github.com/immaturegoat/matu/blob/main/tutorial.md This is matu, a web game engine, designed to build and export 2D games. It features a node system with groups, objects, sprites, labels, audio, and scripts, asset uploading, viewport testing, saving and loading, and exporting into a web playable. It was inspired by editors like Unity and Godot, but I wanted to keep some simplicity similar to that of Scratch. It’s not that powerful, but it should be enough to make some simple games. The tutorial and documentation is linked above.", "repo": "https://github.com/immaturegoat/matu", "demo": "https://matueditor.vercel.app"}]...
|
[{"post_id": 43414, "ts": "202 [{"post_id": 43414, "ts": "2026-08-08T17:18:16Z", "hours": 6.2106, "text": "Devlog 10 Can’t believe my last devlog was two weeks ago… Anyway, here’s what I’ve been working on. Exporting and saving It works! Probably… I’m pretty sure it works. At least for my testing. If you guys find any bugs, be sure to tell me. a BUNCH of bug fixes Stop highlighting nodes when reordering Change matuapi rotation funcs from radians to degrees Clicking off node unselects it Favicon After game ends, if clones are still there, stop them from showing up Checkboxes on export menu Remove eval classUpdate documentation Sorry that this devlog is pretty short, for a 5 hour devlog. I’m just kinda tired of writing tbh and I can’t wait to ship this."}, {"post_id": 34226, "ts": "2026-07-24T19:06:26Z", "hours": 1.4836, "text": "Devlog 9 Probably my last devlog before working on saving and exporting T-T What I worked on Stops in scripting I can’t believe I didn’t add this earlier, but you can now end the game using matu.runtime.stop(); Label nodes You can now have text labels in your game! I also added scripting implementation, so you can change what the text says during a run. Fixed reordering Reordering nodes was a bit clunky, so I fixed it (turns out there were some bugs in the CSS and the dragging), but now it should be smoother!"}, {"post_id": 32368, "ts": "2026-07-21T14:32:09Z", "hours": 1.9083, "text": "Devlog 8 This is probably gonna be a shorter devlog, but basically I made scripting a lot easier in my game engine! Each script node now has a button in the top right of the inspector editor. I just reused the asset previews but with a textarea. This means you can have multiple popouts open at a time while scripting. It also gives you a much wider area to code in, as the inspector is kinda cramped. All updates in the popout update with the inspector textarea. The popouts are also resizable! QoL improvements Tab for indent Before, if you typed tab while scripting, it would just move focus to another button instead of indenting. However, now when you press tab, 4 spaces are added. You can select multiple lines to indent multiple lines, and press shift + tab to unindent lines. Auto-close pairs Now when you type a character like ( or [ automatically types its closing pair and places your cursor in between them. If you type the closing pair again, it will move your cursor to the outside. As well as that, deleting an empty pair will delete both characters. Auto-indent on enter Now when you go to another line, it will inherit the indentation of the line above it. :) What’s next? I really thought that with the introduction of scripting popouts, I would be getting close to finishing the project, but over the past few days, I’ve realized that there are still a lot of stuff I want to implement. First, I want to add a Label node, allowing users to display text easily. Next (and I can’t believe I haven’t implemented this yet), I want to add a way for the user to stop the game in the script, instead of clicking the stop button. I want to fix node reordering, as right now it is a bit clunky, and of course, the final thing for me to do is to add exporting, saving, and loading."}, {"post_id": 30915, "ts": "2026-07-18T21:59:18Z", "hours": 3.1242, "text": "Devlog 7 It’s been some time since I have posted a devlog on this project. I got a little sidetracked and spent a few days working with Rust. It’s probably gonna be my next project (flashcard app, I know, how original), but I’ve also spent some time working on scripting! So scripting was actually easier than I thought to implement. I have a const in my runtime.js file called matuAPI and it has every special function as well as what to do when that function is called. I’ll attach a screenshot of a section below. So now, on to what I have added! node lookup cloning spawning input rotation movement dimensions (width + height) changes opacity changes visibility asset changes playing and sotpping audio collision global variables changing bg color and timers! Wow, that was a lot! Unfortunately, as I was writing this devlog, I realized that I forgot to add a function that lets you change which sprite is being displayed in an object as well as changing the audio source asset. How does this always happen to me? Ok, I’ll be back in a bit. I need to add that real quick. Ok, I have returned! I have added them to the code and the documentation (which is just a markdown file), so we also have changing sprites and changing audio assets! Thanks for reading this devlog! Up next, I plan to add a pop out window for scripting (as the current one is too small) and of course, exporting, loading, and saving (I’m scared, save me)"}, {"post_id": 26015, "ts": "2026-07-10T16:21:46Z", "hours": 2.7669, "text": "Devlog 6 This is probably going to be my last devlog before I work on scripting. I’ve put it off for too long, and right now, scripting is pretty limited (it has a start, end, input detection, movement, and console log function). I plan to add a LOT more to scripting, like changing sprites, changing opacity, rotation, cloning, deleting, audio, preview, and more. I also plan to open up the script in a window similar to the preview windows, because coding in the inspector sidebar is a bit constricting. Now, on to what I have been working on! Audio preview I can’t believe I put this off for so long, but it finally works. You can play audio from the preview window. Though, it’s a bit ugly right now so I plan on changing that later. Value tags for opacity and volume Before this, the two sliders were just sliders, and you couldn’t bring it to a specific value. However, there are now inputs on the right side of the sliders, allowing you to see what number the slider is at and allowing you to input your own values. Unique names for nodes I actually created two systems for this. So my idea for the node naming system is that unique names are kept separate across node types. That means that I can have an object called Thing and a group called Thing. My first idea of implementing this was to create a Set() for each node type. So I created group_names = new Set() , object_names = new Set() , sprite_names = new Set() , and so forth for each node type. Then we reuse the renaming function from script.js for the assets, but change it to have a switch statement based on the type. However, this was kind of hard, implementing a switch statement everywhere a rename or deletion or any sort of change happened. I replaced it by simpling using the hierarchy_nodes Map, which contains the names and types of each node. With this, we can just pull the type from the map to make sure that names are kept separate across types. It removes the big switch statements that were everywhere and overall keeps the code much cleaner. Rearranging nodes Previously, you could technically reorder things because I previously added reparenting, allowing you to move nodes from one parent to another, but it doesn’t allow you to rearrange nodes within a parent. Now, you can, and although its a bit clunky, it does work and I think it looks good. Alright, thanks for coming to this TED talk. The next devlog will be about a lot of changes that I will make to scripting."}, {"post_id": 25285, "ts": "2026-07-09T13:56:23Z", "hours": 3.1989, "text": "Devlog 5 I was too lazy to add all the features other than basic functionality to scripting, so I decided to work on some small bugs and features instead. Also, today I learned that you can ATTACH MULTIPLE SCREENSHOTS. This is like a gamechanger lol I can’t believe I didn’t know this. Extra line at the end of the viewport grid For the grid in the center of the screen, the function I used to draw it didn’t close it off on the right side. I can’t believe it took until now to fix it :| Changed hierarchy node symbols I changed the symbols on the left side of each of the nodes from emojis to letters. I used emojis because I didn’t want to find assets (sorry), but recently I’ve been feeling like the emojis make it feel AI-generated, so I removed those. Also, a bonus of changing them to letters is having the ability to now have the same name be used across different node types, but when you call them in code, you have to do like G:Object or O:Object. Fixed opacity slider position You might’ve seen in my last devlog, something kind of crazy happened with the slider… Anyway, it’s fixed now, so that’s good! I also ended up customizing the slider. Width and height lock Before this, I didn’t have a way for users to lock dimensions. I’ve implemented two checkboxes into the inspector, dimension lock and proportion lock. Dimension lock takes the current dimensions and keeps that ratio, while proportion lock keeps the original dimension ratio of the original asset. Closing the correct inspector Basically, there used to be a bug where if you deleted one asset while another asset was open in the inspector, it would close the inspector. It wasn’t harmful or anything, but it was really annoying. This was a pretty simple fix. I just added a check where the name of the asset in the inspector is compared to the name of the asset being deleted. Changing console color I don’t know if I mentioned this in a previous devlog yet, but I added a console for errors from scripting to show! It also displays start and end times. However, it was the wrong color for so long and I didn’t notice. It was just because I put the wrong class name in the css… Refreshing asset options This was also a bug that was really annoying. When you created a sprite and opened it up in the inspector, when you uploaded a new asset, it wouldn’t show up in the inspector. This was also pretty easy to fix. I just created a helper function, which basically just remakes the asset select options, and then called it every time an asset is changed, like when one is renamed, uploaded, or deleted. Adding sprite selection in the inspector I can’t believe I didn’t add this yet, but I added a new option in the inspector. If you have multiple sprites attached to an object, you can now select which sprite to use."}, {"post_id": 24286, "ts": "2026-07-07T19:08:04Z", "hours": 0.3156, "text": "Devlog 4.5 what did i just do 😭"}, {"post_id": 24203, "ts": "2026-07-07T16:50:32Z", "hours": 2.5069, "text": "Devlog 4 Recently I’ve been working on getting the scripting working. I’m using normal javascript with some added functions with something I call matuAPI. But I’m not here to show that right now. Rather, I think I should show some of the code of how my project works! Today, I want to talk about how I get multiple preview windows! How it works Every time someone double clicks an asset in the asset panel (which we can check by adding an addEventListener('dblclick', () => {}); ), a function called openPreview is called. When we call that function, we check to see if a preview of that file is already opened. We have a Map() called preview_windows , which contains all the previews that are currently open. If a preview for that file is already opened, we can simply just bring the preview back to the center of the screen. Now, what happens if we don’t have a preview open? Then, we create a new div with the class name preview-window . Inside that div, we will have another div for the preview header (which contains the file name and the word “Preview”) and below that div, an img tag with the file image. If the file type is an image, then we set the src of the img to URL.createObjectURL(file) . I haven’t had the time to add audio previews yet though… What happens next? A function called centerWindow is called. It brings the preview div to a select random few points in the middle of the screen. This prevents all the previews from opening up in the same spot. Next, in order to make it draggable, we call a function called dragElement. It detects when the “handle” (the preview header from above) has a mousedown and mouseup event, using a document.addEventListener('mousemove', elementDrag); and document.addEventListener('mouseup', stopDrag); . In each of these functions, we change the position of the element that is being dragged when the mouse is down. We also call a bringToFront function, which just adds a predetermined number to the element’s z-index. When the user clicks the close button in the header of the preview, we call the closePreview function, which is pretty simple. It removes the name of the file from the preview_windows map, and just deletes the preview. There were some bugs while making this; renaming issues while a preview is open, the preview not closing when the asset is deleted, and some other elements that had to be added. But I’m pretty proud of the fact that it works and some QoL features that I added to it, like reopening the preview recentering it. Thanks for reading this all the way down :) Next devlog, I think I’m going to plan on describing how scripting works!"}, {"post_id": 23562, "ts": "2026-07-06T16:29:51Z", "hours": 4.1775, "text": "Devlog 3 Nodes now work! I mean, you can now create them. Peep the screenshot below! I had to create a new .js file because script.js was getting a little crowded. It was getting a little hard to find stuff I’m pretty proud of how it works, but I’m planning on improving it later. Types of nodes I’ve added 5 node types. Groups Groups are used to group other nodes together. Groups can hold other groups or objects directly under them, but no scripts, audios, or sprites. Objects Objects are like the main nodes you will use. They are you use audio, sprites, and scripts. They can stand alone or go under a group. As you can see, in the inspector, you can edit the x values, y values, width, height, etc. Audio, Scripts, and Sprites These 3 nodes require a parent object. They cannot hold anything. This is how you attach images, sounds, and code to your object! What’s next This devlog is a little short compared to my other ones, but I’m still proud of what I have made! This is probably gonna just end up as a prototype for the final node system. I’m planning on adding the option to lock width and height, letting users drag nodes around and locking them, and reordering nodes. Right now, you can just drag them around from group to group, but you can’t change their order. After finishing the hierarchy, I’m going to move on to getting the coding part of the game engine working. I’m planning on using Javascript or a modified version of Javascript as matu’s language. Maybe I’ll call it matuscript heh Next, the obvious choice is to work on simulating the game in the viewport. (I’m scared of this) Finally, I want to work on save files and exporting. I still don’t know how I’m going to accomplish this (I’m even more scared of this) Maybe I’ll distract myself by working on the looks of matu first."}, {"post_id": 22368, "ts": "2026-07-04T20:10:45Z", "hours": 6.3128, "text": "Devlog 2 stress testing is stress testing me Anyway, it’s been 2 days since I last posted a devlog. I’ve been focused on making the asset uploading as perfect as possible. You can see everything I’ve done in the screenshot attached below! I’m pretty proud of how it turned out, but it took 6 hours smh… (I’m scared for making the actual game engine part) Now for the things I did! Asset uploading! This one is pretty obvious. Anyway, I’m pretty proud of how it looks and the fact that it works. In the asset panel at the bottom of the screen, simply click the “+” button at the top right. You will be able to upload any file, though anything that isn’t an image will have an emoji in its place (audio files will have a music emoji and other files will just have the document emoji). It’s totally not because I’m too lazy to actually create a placeholder… Inspector The inspector panel on the right only has one function right now, and that’s to rename assets, but I plan on expanding functionality later on! For example, when we actually get the game engine working, I want users to be able to change the x and y of objects in the game manually, change size, etc. Still, I’m pretty proud of how it looks right now and the fact that it works :) Preview windows This one is probably the thing that took the longest. I never want to deal with draggable windows again. Anyway, when you double click on an asset, it opens it up in a preview window. You can drag it around, and that’s pretty much it. But it’s cool and also it took the longest to make (excluding debugging, which probably took like half of the 6 hours). What’s next? Up next, I’m going to work on the actual game engine functionality. First things first, I want the user to create objects in the hierarchy and for things to start showing up in the viewport. I don’t think this should be too hard, but I’m probably gonna regret saying that. Then, I’m gonna get the coding part of the game engine working. I still haven’t decided if I want to create my own language again or just use javascript. I also have to get the game working in the viewport so users can test out their game. Finally, I want to work on being able to export games into html and js. thanks for coming to my ted talk"}, {"post_id": 21005, "ts": "2026-07-02T19:10:01Z", "hours": 0.6314, "text": "Devlog 1 I’m building a game engine that I’m calling matu! After around 30 minutes, I’ve finished the basic layout. Right now, it looks a little like Godot, so I’m considering changing it. The Layout You can see what it currently looks like in the screenshot attached. There are 5 sections. The Hierarchy This is where the nodes (sorry for using Godot language, I don’t know what to call them) are going to be held. Stuff like objects, cameras, backgrounds, etc. Assets This is where the user can upload assets and stuff. I’m probably gonna implement this feature first. Inspector This is where the user can change aspects of each object, like coordinates, size, etc. Viewport So this isn’t actually labelled, but it is the central grid. This is where the user will place objects and where the game will be shown. Toolbar This isn’t labelled either, but it’s the panel at the top of the screen. I’m planning on adding run and stop buttons (pretty obvious), save, load, and export features. Some things that I’m still in the planning phase are where to place scripts and how to add save files. For scripts, I think I’m gonna have one script for each object, but I don’t know where to open them on the screen. For saving, that’s a problem for another day TuT. I have a pretty good idea on how I’m gonna implement Assets and a moderate idea of the Inspector and Hierarchy. Thanks for reading this all the way :)"}]...
|
Title: matu game engine by @immaturegoat | Stardan Title: matu game engine by @immaturegoat | Stardance
Devlogs:
Devlog 1 I’m building a game engine that I’m calling matu! After around 30 minutes, I’ve finished the basic layout. Right now, it looks a little like Godot, so I’m considering changing it. The Layout You can see what it currently looks like in the screenshot attached. There are 5 sections. The Hierarchy This is where the nodes (sorry for using Godot language, I don’t know what to call them) are going to be held. Stuff like objects, cameras, backgrounds, etc. Assets This is where the user can upload assets and stuff. I’m probably gonna implement this feature first. Inspector This is where the user can change aspects of each object, like coordinates, size, etc. Viewport So this isn’t actually labelled, but it is the central grid. This is where the user will place objects and where the game will be shown. Toolbar This isn’t labelled either, but it’s the panel at the top of the screen. I’m planning on adding run and stop buttons (pretty obvious), save, load, and export features. Some things that I’m still in the planning phase are where to place scripts and how to add save files. For scripts, I think I’m gonna have one script for each object, but I don’t know where to open them on the screen. For saving, that’s a problem for another day TuT. I have a pretty good idea on how I’m gonna implement Assets and a moderate idea of the Inspector and Hierarchy. Thanks for reading this all the way :)
Devlog 2 stress testing is stress testing me Anyway, it’s been 2 days since I last posted a devlog. I’ve been focused on making the asset uploading as perfect as possible. You can see everything I’ve done in the screenshot attached below! I’m pretty proud of how it turned out, but it took 6 hours smh… (I’m scared for making the actual game engine part) Now for the things I did! Asset uploading! This one is pretty obvious. Anyway, I’m pretty proud of how it looks and the fact that it works. In the asset panel at the bottom of the screen, simply click the “+” button at the top right. You will be able to upload any file, though anything that isn’t an image will have an emoji in its place (audio files will have a music emoji and other files will just have the document emoji). It’s totally not because I’m too lazy to actually create a placeholder… Inspector The inspector panel on the right only has one function right now, and that’s to rename assets, but I plan on expanding functionality later on! For example, when we actually get the game engine working, I want users to be able to change the x and y of objects in the game manually, change size, etc. Still, I’m pretty proud of how it looks right now and the fact that it works :) Preview windows This one is probably the thing that took the longest. I never want to deal with draggable windows again. Anyway, when you double click on an asset, it opens it up in a preview window. You can drag it around, and that’s pretty much it. But it’s cool and also it took the longest to make (excluding debugging, which probably took like half of the 6 hours). What’s next? Up next, I’m going to work on the actual game engine functionality. First things first, I want the user to create objects in the hierarchy and for things to start showing up in the viewport. I don’t think this should be too hard, but I’m probably gonna regret saying that. Then, I’m gonna get the coding part of the game engine working. I still haven’t decided if I want to create my own language again or just use javascript. I also have to get the game working in the viewport so users can test out their game. Finally, I want to work on being able to export games into html and js. thanks for coming to my ted talk
Devlog 3 Nodes now work! I mean, you can now create them. Peep the screenshot below! I had to create a new .js file because script.js was getting a little crowded. It was getting a little hard to find stuff I’m pretty proud of how it works, but I’m planning on improving it later. Types of nodes I’ve added 5 node types. Groups Groups are used to group other nodes together. Groups can hold other groups or objects directly under them, but no scripts, audios, or sprites. Objects Objects are like the main nodes you will use. They are you use audio, sprites, and scripts. They can stand alone or go under a group. As you can see, in the inspector, you can edit the x values, y values, width, height, etc. Audio, Scripts, and Sprites These 3 nodes require a parent object. They cannot hold anything. This is how you attach images, sounds, and code to your object! What’s next This devlog is a little short compared to my other ones, but I’m still proud of what I have made! This is probably gonna just end up as a prototype for the final node system. I’m planning on adding the option to lock width and height, letting users drag nodes around and locking them, and reordering nodes. Right now, you can just drag them around from group to group, but you can’t change their order. After finishing the hierarchy, I’m going to move on to getting the coding part of the game engine working. I’m planning on using Javascript or a modified version of Javascript as matu’s language. Maybe I’ll call it matuscript heh Next, the obvious choice is to work on simulating the game in the viewport. (I’m scared of this) Finally, I want to work on save files and exporting. I still don’t know how I’m going to accomplish this (I’m even more scared of this) Maybe I’ll distract myself by working on the looks of matu first.
Devlog 4 Recently I’ve been working on getting the scripting working. I’m using normal javascript with some added functions with something I call matuAPI. But I’m not here to show that right now. Rather, I think I should show some of the code of how my project works! Today, I want to talk about how I get multiple preview windows! How it works Every time someone double clicks an asset in the asset panel (which we can check by adding an addEventListener('dblclick', () => {}); ), a function called openPreview is called. When we call that function, we check to see if a preview of that file is already opened. We have a Map() called preview_windows , which contains all the previews that are currently open. If a preview for that file is already opened, we can simply just bring the preview back to the center of the screen. Now, what happens if we don’t have a preview open? Then, we create a new div with the class name preview-window . Inside that div, we will have another div for the preview header (which contains the file name and the word “Preview”) and below that div, an img tag with the file image. If the file type is an image, then we set the src of the img to URL.createObjectURL(file) . I haven’t had the time to add audio previews yet though… What happens next? A function called centerWindow is called. It brings the preview div to a select random few points in the middle of the screen. This prevents all the previews from opening up in the same spot. Next, in order to make it draggable, we call a function called dragElement. It detects when the “handle” (the preview header from above) has a mousedown and mouseup event, using a document.addEventListener('mousemove', elementDrag); and document.addEventListener('mouseup', stopDrag); . In each of these functions, we change the position of the element that is being dragged when the mouse is down. We also call a bringToFront function, which just adds a predetermined number to the element’s z-index. When the user clicks the close button in the header of the preview, we call the closePreview function, which is pretty simple. It removes the name of the file from the preview_windows map, and just deletes the preview. There were some bugs while making this; renaming issues while a preview is open, the preview not closing when the asset is deleted, and some other elements that had to be added. But I’m pretty proud of the fact that it works and some QoL features that I added to it, like reopening the preview recentering it. Thanks for reading this all the way down :) Next devlog, I think I’m going to plan on describing how scripting works!
Devlog 4.5 what did i just do 😭
Devlog 5 I was too lazy to add all the features other than basic functionality to scripting, so I decided to work on some small bugs and features instead. Also, today I learned that you can ATTACH MULTIPLE SCREENSHOTS. This is like a gamechanger lol I can’t believe I didn’t know this. Extra line at the end of the viewport grid For the grid in the center of the screen, the function I used to draw it didn’t close it off on the right side. I can’t believe it took until now to fix it :| Changed hierarchy node symbols I changed the symbols on the left side of each of the nodes from emojis to letters. I used emojis because I didn’t want to find assets (sorry), but recently I’ve been feeling like the emojis make it feel AI-generated, so I removed those. Also, a bonus of changing them to letters is having the ability to now have the same name be used across different node types, but when you call them in code, you have to do like G:Object or O:Object. Fixed opacity slider position You might’ve seen in my last devlog, something kind of crazy happened with the slider… Anyway, it’s fixed now, so that’s good! I also ended up customizing the slider. Width and height lock Before this, I didn’t have a way for users to lock dimensions. I’ve implemented two checkboxes into the inspector, dimension lock and proportion lock. Dimension lock takes the current dimensions and keeps that ratio, while proportion lock keeps the original dimension ratio of the original asset. Closing the correct inspector Basically, there used to be a bug where if you deleted one asset while another asset was open in the inspector, it would close the inspector. It wasn’t harmful or anything, but it was really annoying. This was a pretty simple fix. I just added a check where the name of the asset in the inspector is compared to the name of the asset being deleted. Changing console color I don’t know if I mentioned this in a previous devlog yet, but I added a console for errors from scripting to show! It also displays start and end times. However, it was the wrong color for so long and I didn’t notice. It was just because I put the wrong class name in the css… Refreshing asset options This was also a bug that was really annoying. When you created a sprite and opened it up in the inspector, when you uploaded a new asset, it wouldn’t show up in the inspector. This was also pretty easy to fix. I just created a helper function, which basically just remakes the asset select options, and then called it every time an asset is changed, like when one is renamed, uploaded, or deleted. Adding sprite selection in the inspector I can’t believe I didn’t add this yet, but I added a new option in the inspector. If you have multiple sprites attached to an object, you can now select which sprite to use.
Devlog 6 This is probably going to be my last devlog before I work on scripting. I’ve put it off for too long, and right now, scripting is pretty limited (it has a start, end, input detection, movement, and console log function). I plan to add a LOT more to scripting, like changing sprites, changing opacity, rotation, cloning, deleting, audio, preview, and more. I also plan to open up the script in a window similar to the preview windows, because coding in the inspector sidebar is a bit constricting. Now, on to what I have been working on! Audio preview I can’t believe I put this off for so long, but it finally works. You can play audio from the preview window. Though, it’s a bit ugly right now so I plan on changing that later. Value tags for opacity and volume Before this, the two sliders were just sliders, and you couldn’t bring it to a specific value. However, there are now inputs on the right side of the sliders, allowing you to see what number the slider is at and allowing you to input your own values. Unique names for nodes I actually created two systems for this. So my idea for the node naming system is that unique names are kept separate across node types. That means that I can have an object called Thing and a group called Thing. My first idea of implementing this was to create a Set() for each node type. So I created group_names = new Set() , object_names = new Set() , sprite_names = new Set() , and so forth for each node type. Then we reuse the renaming function from script.js for the assets, but change it to have a switch statement based on the type. However, this was kind of hard, implementing a switch statement everywhere a rename or deletion or any sort of change happened. I replaced it by simpling using the hierarchy_nodes Map, which contains the names and types of each node. With this, we can just pull the type from the map to make sure that names are kept separate across types. It removes the big switch statements that were everywhere and overall keeps the code much cleaner. Rearranging nodes Previously, you could technically reorder things because I previously added reparenting, allowing you to move nodes from one parent to another, but it doesn’t allow you to rearrange nodes within a parent. Now, you can, and although its a bit clunky, it does work and I think it looks good. Alright, thanks for coming to this TED talk. The next devlog will be about a lot of changes that I will make to scripting.
Devlog 7 It’s been some time since I have posted a devlog on this project. I got a little sidetracked and spent a few days working with Rust. It’s probably gonna be my next project (flashcard app, I know, how original), but I’ve also spent some time working on scripting! So scripting was actually easier than I thought to implement. I have a const in my runtime.js file called matuAPI and it has every special function as well as what to do when that function is called. I’ll attach a screenshot of a section below. So now, on to what I have added! node lookup cloning spawning input rotation movement dimensions (width + height) changes opacity changes visibility asset changes playing and sotpping audio collision global variables changing bg color and timers! Wow, that was a lot! Unfortunately, as I was writing this devlog, I realized that I forgot to add a function that lets you change which sprite is being displayed in an object as well as changing the audio source asset. How does this always happen to me? Ok, I’ll be back in a bit. I need to add that real quick. Ok, I have returned! I have added them to the code and the documentation (which is just a markdown file), so we also have changing sprites and changing audio assets! Thanks for reading this devlog! Up next, I plan to add a pop out window for scripting (as the current one is too small) and of course, exporting, loading, and saving (I’m scared, save me)
Devlog 8 This is probably gonna be a shorter devlog, but basically I made scripting a lot easier in my game engine! Each script node now has a button in the top right of the inspector editor. I just reused the asset previews but with a textarea. This means you can have multiple popouts open at a time while scripting. It also gives you a much wider area to code in, as the inspector is kinda cramped. All updates in the popout update with the inspector textarea. The popouts are also resizable! QoL improvements Tab for indent Before, if you typed tab while scripting, it would just move focus to another button instead of indenting. However, now when you press tab, 4 spaces are added. You can select multiple lines to indent multiple lines, and press shift + tab to unindent lines. Auto-close pairs Now when you type a character like ( or [ automatically types its closing pair and places your cursor in between them. If you type the closing pair again, it will move your cursor to the outside. As well as that, deleting an empty pair will delete both characters. Auto-indent on enter Now when you go to another line, it will inherit the indentation of the line above it. :) What’s next? I really thought that with the introduction of scripting popouts, I would be getting close to finishing the project, but over the past few days, I’ve realized that there are still a lot of stuff I want to implement. First, I want to add a Label node, allowing users to display text easily. Next (and I can’t believe I haven’t implemented this yet), I want to add a way for the user to stop the game in the script, instead of clicking the stop button. I want to fix node reordering, as right now it is a bit clunky, and of course, the final thing for me to do is to add exporting, saving, and loading.
Devlog 9 Probably my last devlog before working on saving and exporting T-T What I worked on Stops in scripting I can’t believe I didn’t add this earlier, but you can now end the game using matu.runtime.stop(); Label nodes You can now have text labels in your game! I also added scripting implementation, so you can change what the text says during a run. Fixed reordering Reordering nodes was a bit clunky, so I fixed it (turns out there were some bugs in the CSS and the dragging), but now it should be smoother!
Devlog 10 Can’t believe my last devlog was two weeks ago… Anyway, here’s what I’ve been working on. Exporting and saving It works! Probably… I’m pretty sure it works. At least for my testing. If you guys find any bugs, be sure to tell me. a BUNCH of bug fixes Stop highlighting nodes when reordering Change matuapi rotation funcs from radians to degrees Clicking off node unselects it Favicon After game ends, if clones are still there, stop them from showing up Checkboxes on export menu Remove eval classUpdate documentation Sorry that this devlog is pretty short, for a 5 hour devlog. I’m just kinda tired of writing tbh and I can’t wait to ship this.
Ships:
IMPORTANT: documentation: https://github.com/immaturegoat/matu/blob/main/docs.md tutorial: https://github.com/immaturegoat/matu/blob/main/tutorial.md This is matu, a web game engine, designed to build and export 2D games. It features a node system with groups, objects, sprites, labels, audio, and scripts, asset uploading, viewport testing, saving and loading, and exporting into a web playable. It was inspired by editors like Unity and Godot, but I wanted to keep some simplicity similar to that of Scratch. It’s not that powerful, but it should be enough to make some simple games. The tutorial and documentation is linked above....
|
1792983122.5177615
|
1793069522.5177615
|
|
30987
|
Dewen by @jaxonpenka127 | Stardance
|
jaxonpenka127
|
4
|
55.0
|
532
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T21:07:25Z", "hours": 14.0, "multiplier": 9.65, "payout": 133, "blessing": "neutral", "text": "Last major ship for Dewen: agents with a Bring Your Own Key structure a desktop app for macOS multilingual support and a new logo (credit to @Jcleo2 for the logo geometry) Feel free to try out the new stuff if you’d like. https://dewen.netlify.app", "repo": "https://github.com/JaxTheDevG008/Dewen", "demo": "https://dewen.netlify.app"}, {"ship_num": 2, "ts": "2026-09-12T21:44:40Z", "hours": 21.0, "multiplier": 12.55, "payout": 262, "blessing": "neutral", "text": "Features Added IndexedDB integration Avatars and more customization options More command bar commands SEO improvements so Dewen can appear in Google search results Two new mini analytics: Upcoming Tasks and Stale Tasks Better responsiveness across devices What was challenging? Probably the IndexedDB integration. It meant moving from a simple storage method to a full database. I had to learn how to create object stores, save data to them, and load that data when the app starts. What am I proud of? The IndexedDB integration and the increased customization. Adding IndexedDB makes Dewen feel much more like a real application than just a project, while features like avatars and theme presets make it much easier for users to personalize their experience. What’s next? Now that the Stardance Challenge is about to wrap up, I’m going to pivot some of my time toward other things, including the Congressional App Challenge and my other projects: AuditionLM, LIAB, and Pocket Lab, while also continue development on Dewen. Thank you for supporting me throughout this challenge and following along as Dewen grew.", "repo": "https://github.com/JaxTheDevG008/Dewen", "demo": "https://dewen.netlify.app"}, {"ship_num": 3, "ts": "2026-07-31T16:18:38Z", "hours": 20.0, "multiplier": 4.19, "payout": 132, "blessing": "neutral", "text": "New Dewen version! Includes: removed topbar and updated sidebar accent color customization animation for collapsing and expanding mini analytics made what to focus on an analytic necessary bug fixes There will be more to come. Thanks for supporting me on this journey!", "repo": "https://github.com/JaxTheDevG008/Dewen", "demo": "https://dewen.netlify.app"}, {"ship_num": 4, "ts": "2026-07-05T13:56:28Z", "hours": 0.0, "multiplier": 3.16, "payout": 5, "blessing": "neutral", "text": "This is my task and project management web app called Dewen, which is meant to be completely subscription-free, AI-optional, and local-first while delivering useful productivity tools. What was definitely challenging was the search and command bar, where I had to rely on AI tools to help me build it. What I’m proud of is how the tools sync with each other. When you add a task, it renders on the calendar, and when you start a focus session, the activity panel logs the action. Finally, users should know that it takes barely any steps to get started, since there are no accounts.", "repo": "https://github.com/JaxTheDevG008/Dewen", "demo": "https://dewen.netlify.app"}]...
|
[{"post_id": 81641, "ts": "202 [{"post_id": 81641, "ts": "2026-10-21T21:04:51Z", "hours": 3.1267, "text": "Last devlog: I decided to add multilingual support to make Dewen more accessible to people around the world. It supports languages like Spanish, French, German, Chinese, Japanese, Korean, and more. Feel free to try it out if you’d like 🙂"}, {"post_id": 74981, "ts": "2026-09-28T19:28:56Z", "hours": 1.0144, "text": "This isn’t really a devlog, but I thought I might just post about it. My app, after not having an identity for so long, finally has its own logo. I feel extremely glad about the logo being over and done with and the colors in the logo as well. I want to give credit to @Jcleo2 for creating the geometry for the logo, which I then refined and added my own colors. So thank you @Jcleo2 . Thanks for reading, and have a great day!"}, {"post_id": 72853, "ts": "2026-09-23T21:26:55Z", "hours": 2.2408, "text": "Now that Stardance is happening for another month, I’m able to do more devlogs, so kudos to everyone for making it happen. Another big milestone for Dewen: It officially has a desktop application now! Now you don’t have to use the website often and instead you can use the desktop application. It uses Tauri to help with wrapping the app in a desktop layer to help make it a legitimate desktop app. A quick heads up for macOS users: because this is an independent, open-source application bundle, macOS may display a warning stating the app is “damaged” on your first launch. You can learn how to do it correctly in the README on the GitHub repo page. Dewen is currently available for macOS, but I hope to expand it to Windows and Linux as well. Thanks for reading, and I hope you have a great day!"}, {"post_id": 70832, "ts": "2026-09-19T20:49:14Z", "hours": 1.7767, "text": "I have added a second agent: the Researcher Agent! To make it work, you need to have a Tavily API key and insert it into the settings. Then you can type what you want and it creates a quick note containing what it researched. Alongside that, I also added agent selection where you can choose which agent you want to use. This prevents weird things from happening if you instruct the wrong agent. I hope you have a great rest of your day! Try out the Researcher Agent now! (if you want to 😁)"}, {"post_id": 70616, "ts": "2026-09-19T13:47:33Z", "hours": 5.6486, "text": "I know I’m contradicting what I said before, that I was done with Stardance, but I thought this was something cool to talk about. Well, I have agents in Dewen now! Integrating AI into Dewen has been one of my top goals since the start. Now it’s actually a reality, and I feel absolute pride in accomplishing this. How it works is you toggle AI in the settings if you want it on or off, then it uses Bring Your Own Key (BYOK) meaning you can insert your API key into the app. Then there’s a button in the sidebar with shapes. Click on that, type in your prompt, and Dewen will do the rest. This is powered by my Python backend, hosted on Render and UptimeRobot opens it every five minutes to prevent it from taking 50 seconds to load the AI. I hope you enjoy using AI in Dewen, and have a great rest of your day!"}, {"post_id": 66915, "ts": "2026-09-12T21:34:55Z", "hours": 4.5225, "text": "Well, this is probably going to be my last devlog for the Stardance Challenge, so let’s make it count. First off, I finally managed to convert Dewen to IndexedDB, one of my long-term goals for the app. LocalStorage was starting to become limiting, and I wanted something more scalable while still keeping Dewen local-first. That’s why I went with IndexedDB. I set up DewenDB in storage.ts, added helper functions in main.ts to save tasks, notes, and activities, and made sure everything loads when the app starts. Now, I want to take a moment to look at how far we’ve come. Dewen started back in December 2025 as a simple to-do list. From there, it evolved into a productivity hub, then a productivity workspace, and now an actual application. The task list, focus timer, quick notes, calendar, activity panel, command bar, and everything else have come a long way from that original task list. Building Dewen, and participating in the Stardance Challenge, has taught me much more than just how to code. It has taught me how to take an idea and turn it into a real application that people can actually use. Now that the Stardance Challenge is wrapping up, I’m going to be shifting some of my time toward other projects while continuing to work on Dewen. First, Dewen is my submission for the 2026 Congressional App Challenge, representing Pennsylvania’s 15th District, so that’s something I’m excited to focus on. I also have several other projects I want to work on alongside Dewen: AuditionLM, an AI benchmark ranking and evaluation app; Local In A Box, or LIAB, a CLI tool for integrating and managing local-first architecture in applications; and Pocket Lab, a portable experimentation device for conducting experiments and exploring science. Stardance may be coming to an end, but Dewen never will. Thank you for following along, supporting the project, and watching it grow."}, {"post_id": 53471, "ts": "2026-08-24T01:15:39Z", "hours": 1.5208, "text": "To improve the customization of Dewen, I thought it would be nice to add theme presets to make choosing a theme faster and more approachable. Themes include default, ocean, forest, sunset, rose, midnight, terminal, and slate. Another thing I added was localStoraging the focus timer state. For example, the focus timer reads 21:57, and you accidentally reload the site. It’ll still have 21:57 and continue going from there! I hope these new features improve the user experience of Dewen, and I want to continue improving them and the core experience of the app. Thanks for reading, and have a great day!"}, {"post_id": 53244, "ts": "2026-08-23T18:05:59Z", "hours": 8.0639, "text": "This week I continued to update Dewen with more polish and power to make it easier for people to use my app. These updates focus on overall experience, faster workflows, and turning Dewen into a more complete workspace. Features include: better responsiveness: To make the experience better for mobile and tablet users, I decided to improve the responsiveness of the app to transition to different layouts easily. more commands: To help keyboard users control their workflow more efficiently, I added new commands like editing tasks and notes, controlling the timer, prioritizing tasks, and more. To learn more about them, type :h in the command bar. new mini analytics: I changed two of the empty cards to contain Upcoming Tasks that are getting close to their due date, and Stale Tasks that haven’t been touched in a while. I hope that these new changes improve the user experience for Dewen, as this is turning into much more than a simple task list. Thank you for reading, and have a great day!"}, {"post_id": 44541, "ts": "2026-08-10T11:36:24Z", "hours": 0.9275, "text": "I wanted to make it so that Dewen could be more discoverable rather than just requiring people to “click a direct link”, so I utilized the Netlify Sitemap plugin and Google Search Console to make that happen! This is a pretty cool milestone for Dewen, as it shows that it isn’t just another website project. Now I want to continue improving its SEO and discoverability so that eventaully, you can type in “dewen app” and it’ll show up. Thank you for reading!"}, {"post_id": 42991, "ts": "2026-08-08T00:31:00Z", "hours": 2.5153, "text": "Before this devlog, the search/command bar used to only do :a <task description> . To make it easier to use Dewen with the keyboard without navigating the app so much, I decided to add more commands to the command bar. New commands include: :n <note content> | creates a note :c <task> | completes a task :d <task> | deletes a task :f <duration> <task> | starts a focus session (e.g. :f 25, take out the trash ) I hope these types of commands make it easier to use my app, especially for keyboard-native users. I’m also planning to implement more command bar commands as I continue improving the app. Thank you!"}, {"post_id": 39635, "ts": "2026-08-02T19:13:55Z", "hours": 3.3336, "text": "Added avatars and profile picture customization. Add your own image to serve as your avatar, look at presets for avatars based on hobbies and careers, and toggle if you want the accent on it on or off! 😁"}, {"post_id": 38276, "ts": "2026-07-31T16:16:14Z", "hours": 1.8494, "text": "Removed two mini analytics and added an animation for expanding and collapsing them"}, {"post_id": 37355, "ts": "2026-07-30T00:36:01Z", "hours": 3.1358, "text": "Added another customization option where you can customize the accent color 😁 (also updated mini analytics a little)"}, {"post_id": 36786, "ts": "2026-07-29T01:54:50Z", "hours": 3.9203, "text": "Added offline support to my website, so no matter where you are, you’re able to access my web app! 😁"}, {"post_id": 35534, "ts": "2026-07-27T01:06:01Z", "hours": 2.7853, "text": "Man, after using a single Vanilla JS file to develop Dewen, I realized I needed a better structure to help scale the project further. But I really underestimated how challenging it was going to be, especially since I don’t know React, meaning I have to learn it. So wish me luck, I guess."}, {"post_id": 34866, "ts": "2026-07-25T22:37:06Z", "hours": 2.5794, "text": "I have officially converted from main.js to main.ts, meaning everything is in TypeScript. Now to make everything modular…🤞"}, {"post_id": 34384, "ts": "2026-07-25T01:51:35Z", "hours": 2.8206, "text": "Currently trying to convert from Vanilla JS to TypeScript and eventually a framework like React. Fingers crossed! 🤞"}, {"post_id": 30471, "ts": "2026-07-18T02:05:51Z", "hours": 2.4369, "text": "Part 1 of redesigning mini analytics: making a risk report featuring overdue tasks, tasks due today, and blocked tasks"}, {"post_id": 29247, "ts": "2026-07-16T01:10:25Z", "hours": 0.0, "text": "New UI changes so far (removed topbar and updated sidebar a little)"}, {"post_id": 26315, "ts": "2026-07-11T01:24:46Z", "hours": 0.0, "text": "This isn’t really a devlog, but rather a heads up about something: Hackatime and Stardance are saying that I’ve worked on this for a few hours. That’s incorrect. I’ve been working on this project since December and January. I’ve used AI to help me with some of the project, but this is in no way a “vibe coded” app. I’ve included a screenshot of my oldest Git commit history for the project to set the record straight. Thanks for the feedback, and I will continue working on improving this web app!"}, {"post_id": 23543, "ts": "2026-07-06T15:56:44Z", "hours": 0.0, "text": "Have any feature ideas for Dewen? Would be happy to help develop them!"}, {"post_id": 22976, "ts": "2026-07-05T17:37:45Z", "hours": 0.0, "text": "Currently working on leveling up the mini analytics (the cards you see under the “Good morning” message) to display useful information. Stay tuned!"}, {"post_id": 22874, "ts": "2026-07-05T14:32:54Z", "hours": 0.0, "text": "Fixed a calendar and decrastinator bug"}, {"post_id": 22831, "ts": "2026-07-05T13:06:36Z", "hours": 0.0, "text": "Energy Gauge"}]...
|
Title: Dewen by @jaxonpenka127 | Stardance
Devlog Title: Dewen by @jaxonpenka127 | Stardance
Devlogs:
Energy Gauge
Fixed a calendar and decrastinator bug
Currently working on leveling up the mini analytics (the cards you see under the “Good morning” message) to display useful information. Stay tuned!
Have any feature ideas for Dewen? Would be happy to help develop them!
This isn’t really a devlog, but rather a heads up about something: Hackatime and Stardance are saying that I’ve worked on this for a few hours. That’s incorrect. I’ve been working on this project since December and January. I’ve used AI to help me with some of the project, but this is in no way a “vibe coded” app. I’ve included a screenshot of my oldest Git commit history for the project to set the record straight. Thanks for the feedback, and I will continue working on improving this web app!
New UI changes so far (removed topbar and updated sidebar a little)
Part 1 of redesigning mini analytics: making a risk report featuring overdue tasks, tasks due today, and blocked tasks
Currently trying to convert from Vanilla JS to TypeScript and eventually a framework like React. Fingers crossed! 🤞
I have officially converted from main.js to main.ts, meaning everything is in TypeScript. Now to make everything modular…🤞
Man, after using a single Vanilla JS file to develop Dewen, I realized I needed a better structure to help scale the project further. But I really underestimated how challenging it was going to be, especially since I don’t know React, meaning I have to learn it. So wish me luck, I guess.
Added offline support to my website, so no matter where you are, you’re able to access my web app! 😁
Added another customization option where you can customize the accent color 😁 (also updated mini analytics a little)
Removed two mini analytics and added an animation for expanding and collapsing them
Added avatars and profile picture customization. Add your own image to serve as your avatar, look at presets for avatars based on hobbies and careers, and toggle if you want the accent on it on or off! 😁
Before this devlog, the search/command bar used to only do :a <task description> . To make it easier to use Dewen with the keyboard without navigating the app so much, I decided to add more commands to the command bar. New commands include: :n <note content> | creates a note :c <task> | completes a task :d <task> | deletes a task :f <duration> <task> | starts a focus session (e.g. :f 25, take out the trash ) I hope these types of commands make it easier to use my app, especially for keyboard-native users. I’m also planning to implement more command bar commands as I continue improving the app. Thank you!
I wanted to make it so that Dewen could be more discoverable rather than just requiring people to “click a direct link”, so I utilized the Netlify Sitemap plugin and Google Search Console to make that happen! This is a pretty cool milestone for Dewen, as it shows that it isn’t just another website project. Now I want to continue improving its SEO and discoverability so that eventaully, you can type in “dewen app” and it’ll show up. Thank you for reading!
This week I continued to update Dewen with more polish and power to make it easier for people to use my app. These updates focus on overall experience, faster workflows, and turning Dewen into a more complete workspace. Features include: better responsiveness: To make the experience better for mobile and tablet users, I decided to improve the responsiveness of the app to transition to different layouts easily. more commands: To help keyboard users control their workflow more efficiently, I added new commands like editing tasks and notes, controlling the timer, prioritizing tasks, and more. To learn more about them, type :h in the command bar. new mini analytics: I changed two of the empty cards to contain Upcoming Tasks that are getting close to their due date, and Stale Tasks that haven’t been touched in a while. I hope that these new changes improve the user experience for Dewen, as this is turning into much more than a simple task list. Thank you for reading, and have a great day!
To improve the customization of Dewen, I thought it would be nice to add theme presets to make choosing a theme faster and more approachable. Themes include default, ocean, forest, sunset, rose, midnight, terminal, and slate. Another thing I added was localStoraging the focus timer state. For example, the focus timer reads 21:57, and you accidentally reload the site. It’ll still have 21:57 and continue going from there! I hope these new features improve the user experience of Dewen, and I want to continue improving them and the core experience of the app. Thanks for reading, and have a great day!
Well, this is probably going to be my last devlog for the Stardance Challenge, so let’s make it count. First off, I finally managed to convert Dewen to IndexedDB, one of my long-term goals for the app. LocalStorage was starting to become limiting, and I wanted something more scalable while still keeping Dewen local-first. That’s why I went with IndexedDB. I set up DewenDB in storage.ts, added helper functions in main.ts to save tasks, notes, and activities, and made sure everything loads when the app starts. Now, I want to take a moment to look at how far we’ve come. Dewen started back in December 2025 as a simple to-do list. From there, it evolved into a productivity hub, then a productivity workspace, and now an actual application. The task list, focus timer, quick notes, calendar, activity panel, command bar, and everything else have come a long way from that original task list. Building Dewen, and participating in the Stardance Challenge, has taught me much more than just how to code. It has taught me how to take an idea and turn it into a real application that people can actually use. Now that the Stardance Challenge is wrapping up, I’m going to be shifting some of my time toward other projects while continuing to work on Dewen. First, Dewen is my submission for the 2026 Congressional App Challenge, representing Pennsylvania’s 15th District, so that’s something I’m excited to focus on. I also have several other projects I want to work on alongside Dewen: AuditionLM, an AI benchmark ranking and evaluation app; Local In A Box, or LIAB, a CLI tool for integrating and managing local-first architecture in applications; and Pocket Lab, a portable experimentation device for conducting experiments and exploring science. Stardance may be coming to an end, but Dewen never will. Thank you for following along, supporting the project, and watching it grow.
I know I’m contradicting what I said before, that I was done with Stardance, but I thought this was something cool to talk about. Well, I have agents in Dewen now! Integrating AI into Dewen has been one of my top goals since the start. Now it’s actually a reality, and I feel absolute pride in accomplishing this. How it works is you toggle AI in the settings if you want it on or off, then it uses Bring Your Own Key (BYOK) meaning you can insert your API key into the app. Then there’s a button in the sidebar with shapes. Click on that, type in your prompt, and Dewen will do the rest. This is powered by my Python backend, hosted on Render and UptimeRobot opens it every five minutes to prevent it from taking 50 seconds to load the AI. I hope you enjoy using AI in Dewen, and have a great rest of your day!
I have added a second agent: the Researcher Agent! To make it work, you need to have a Tavily API key and insert it into the settings. Then you can type what you want and it creates a quick note containing what it researched. Alongside that, I also added agent selection where you can choose which agent you want to use. This prevents weird things from happening if you instruct the wrong agent. I hope you have a great rest of your day! Try out the Researcher Agent now! (if you want to 😁)
Now that Stardance is happening for another month, I’m able to do more devlogs, so kudos to everyone for making it happen. Another big milestone for Dewen: It officially has a desktop application now! Now you don’t have to use the website often and instead you can use the desktop application. It uses Tauri to help with wrapping the app in a desktop layer to help make it a legitimate desktop app. A quick heads up for macOS users: because this is an independent, open-source application bundle, macOS may display a warning stating the app is “damaged” on your first launch. You can learn how to do it correctly in the README on the GitHub repo page. Dewen is currently available for macOS, but I hope to expand it to Windows and Linux as well. Thanks for reading, and I hope you have a great day!
This isn’t really a devlog, but I thought I might just post about it. My app, after not having an identity for so long, finally has its own logo. I feel extremely glad about the logo being over and done with and the colors in the logo as well. I want to give credit to @Jcleo2 for creating the geometry for the logo, which I then refined and added my own colors. So thank you @Jcleo2 . Thanks for reading, and have a great day!
Last devlog: I decided to add multilingual support to make Dewen more accessible to people around the world. It supports languages like Spanish, French, German, Chinese, Japanese, Korean, and more. Feel free to try it out if you’d like 🙂
Ships:
This is my task and project management web app called Dewen, which is meant to be completely subscription-free, AI-optional, and local-first while delivering useful productivity tools. What was definitely challenging was the search and command bar, where I had to rely on AI tools to help me build it. What I’m proud of is how the tools sync with each other. When you add a task, it renders on the calendar, and when you start a focus session, the activity panel logs the action. Finally, users should know that it takes barely any steps to get started, since there are no accounts.
New Dewen version! Includes: removed topbar and updated sidebar accent color customization animation for collapsing and expanding mini analytics made what to focus on an analytic necessary bug fixes There will be more to come. Thanks for supporting me on this journey!
Features Added IndexedDB integration Avatars and more customization options More command bar commands SEO improvements so Dewen can appear in Google search results Two new mini analytics: Upcoming Tasks and Stale Tasks Better responsiveness across devices What was challenging? Probably the IndexedDB integration. It meant moving from a simple storage method to a full database. I had to learn how to create object stores, save data to them, and load that data when the app starts. What am I proud of? The IndexedDB integration and the increased customization. Adding IndexedDB makes Dewen feel much more like a real application than just a project, while features like avatars and theme presets make it much easier for users to personalize their experience. What’s next? Now that the Stardance Challenge is about to wrap up, I’m going to pivot some of my time toward other things, including the Congressional App Challenge and my other projects: AuditionLM, LIAB, and Pocket Lab, while also continue development on Dewen. Thank you for supporting me throughout this challenge and following along as Dewen grew.
Last major ship for Dewen: agents with a Bring Your Own Key structure a desktop app for macOS multilingual support and a new logo (credit to @Jcleo2 for the logo geometry) Feel free to try out the new stuff if you’d like. https://dewen.netlify.app...
|
1792972509.0481958
|
1793058909.0481958
|
|
33304
|
InterviewPrep AI by @Nikhilsahu | Stardance
|
Nikhilsahu
|
2
|
43.0
|
532
|
[{"ship_num": 1, "hours": 12.0, [{"ship_num": 1, "hours": 12.0, "multiplier": 14.84, "payout": 178, "blessing": "neutral", "text": "I worked on the first three phases of InterviewPrep AI. You can set up a mock interview, answer AI-generated questions, get feedback, and check your previous interviews from the dashboard. The hardest part was making the interview flow feel smooth and connecting all the pages together. I also spent time improving the UI and handling loading and error states. I'm happy that the project now feels like a real app instead of just a demo. Everything works together and the overall experience is much better now. Just open the website and start using it. No signup is needed. You can start a new interview, complete it, and check the feedback and history right away.", "repo": "https://github.com/Nikhil20222/interviewprep-ai/", "demo": "https://interviewprep-aii-eight.vercel.app/", "ts": "2026-07-17T03:15:14Z"}, {"ship_num": 2, "hours": 31.0, "multiplier": 11.51, "payout": 354, "blessing": "neutral", "text": "I developed my first AI-based tool called InterviewPrep AI, which helps users optimize their resumes prior to applying for internships or jobs through the use of artificial intelligence. As of right now, the application can load a user's resume, create an ATS score, perform different kinds of analysis on various sections of the resume and provide suggestions for improvement. By far, the hardest part of this project was to connect all the backend services into a cohesive process and ensure that everything works as intended. Besides that, I also put some effort into testing various formats of resumes and fixing minor bugs related to parsing and analysis of the document. I think I am the most proud of having the whole resume analysis pipeline up and running. It's no longer an AI-based wrapper, but rather something that can form a solid foundation for future projects. In case anyone would like to test the project, please, try uploading various formats of the resume (PDF, DOCX or TXT) and check how well the parser, ATS analysis and suggestions work. This is just Phase 1, while Phase 2 is already being implemented.", "repo": "https://github.com/Nikhil20222/interviewprep-ai/", "demo": "https://interviewprep-aii-eight.vercel.app/", "ts": "2026-07-10T21:37:03Z"}]...
|
[{"post_id": 25753, "ts": "202 [{"post_id": 25753, "ts": "2026-07-10T06:12:09Z", "hours": 5.0, "text": "Started working on InterviewPrep AI yesterday. I spent most of the time building the frontend for the first phase and setting up the overall structure of the project. The goal was to keep the interface simple, clean and easy to use instead of adding unnecessary design elements. Most of the core pages are now ready, so the next step is connecting everything to the backend and implementing the resume processing features."}, {"post_id": 25793, "ts": "2026-07-10T07:58:31Z", "hours": 1.0, "text": "Made some good progress on the backend today. I worked on the core services which process uploaded resumes including the file extraction pipeline, AI integration and the ATS checker. I spent some time testing out different resume formats and fixing a few things to make the flow more reliable. We now have the basic foundation of the resume analysis pipeline. Now, the next step is to connect everything to the frontend and improve the results of the analysis."}, {"post_id": 25981, "ts": "2026-07-10T15:03:53Z", "hours": 3.0, "text": "Made a lot of progress on InterviewPrep AI over the last few sessions. I finished writing the core logic for all the planned Phase 1 features, including resume upload, parsing, resume analysis, ATS scoring, and AI-powered improvement suggestions. Most of the work went into building the backend services and making sure each feature works correctly on its own. At this point, the remaining work for Phase 1 is integrating everything through the main application, testing the complete flow from upload to analysis, and deploying the project. Once the first version is stable and fully working, I’ll move on to Phase 2, which will focus on job description support, resume-to-JD matching, keyword analysis, and AI-powered resume optimization tailored to specific job roles."}, {"post_id": 26211, "ts": "2026-07-10T21:33:35Z", "hours": 1.0, "text": "Finished the first major milestone of InterviewPrep AI today! Phase 1 is now complete and the core resume analysis workflow is working end-to-end. I spent most of the time integrating the backend services, testing different resume formats, fixing edge cases, and making sure the overall flow felt smooth and reliable. What was completed in Phase 1: Resume upload (PDF/DOCX/TXT) 2.Resume parsing 3.Resume preview with extracted details 4.Resume analysis 5.ATS score generation AI-powered resume improvement suggestions The project now has a solid foundation, and I’m happy with how the first version has turned out. There are still plenty of improvements to make, but the core functionality is finally in place. Next up (Phase 2): Job description upload and parsing Resume vs Job Description match score 3.Missing skills and keyword analysis AI-powered resume optimization for specific job roles Better match reports and actionable recommendations Excited to start Phase 2 and make the project even more useful for internship and placement preparation."}, {"post_id": 27554, "ts": "2026-07-13T07:25:16Z", "hours": 5.0, "text": "Started redesigning the frontend After getting some feedback on the project, I decided to take some time to improve the overall frontend before diving into new features. The previous layout was functional, but it was too dash-boardy, with cards everywhere. Today I was mostly doing frontend restructuring before any feature changes. Things I did: I have begun redesigning the general layout Cleaned up html structure CSS brief Removed some unneeded UI elements Planned a section-by-section layout, rather than showing everything at once There were no changes in backend today. The idea is to simplify the project and make it easier to use before we move onto the resume analysis features."}, {"post_id": 27696, "ts": "2026-07-13T14:08:17Z", "hours": 5.0, "text": "Today I connected the redesigned frontend with JavaScript. Most of the work was handling user interactions and making sure different sections behave properly. Things I worked on: 1.Accordion behaviour 2.Dark mode toggle 3.Upload interactions 4.Better loading states 5.Small UI fixes while testing 6.JD Matching Still have to reconnect everything with the backend, but the frontend is now behaving the way I wanted"}, {"post_id": 27910, "ts": "2026-07-13T20:41:56Z", "hours": 0.0, "text": "I worked on some of the utility functions that handle uploaded resumes. These files aren’t very visible from the frontend, but they’re important because almost every upload passes through them. I improved the validation logic so unsupported files are caught earlier instead of failing later during parsing. I also cleaned up the temporary file handling because a few test uploads weren’t being removed properly after processing. Not the most exciting part of the project, but it’ll make the rest of the resume analysis pipeline much more reliable."}, {"post_id": 28119, "ts": "2026-07-14T06:12:26Z", "hours": 1.0, "text": "Working on resume parsing Today I focused on extracting information from uploaded resumes. I quickly realised that resumes are far less consistent than I expected. Some PDFs parsed perfectly, while others had missing spaces, broken formatting or section titles that weren’t detected correctly. Most of my time actually went into handling these edge cases instead of writing the parser itself. After a lot of testing, the extraction feels much more reliable now. Next I’ll use this parsed information for the ATS checker and resume analysis."}, {"post_id": 28155, "ts": "2026-07-14T08:39:51Z", "hours": 2.0, "text": "Today I worked on improving the ATS checker and AI suggestions. Earlier ATS score was just giving one percentage, so it didn’t feel very useful. I changed the logic so now it also tells why score increased or decreased instead of only showing a number. I also improved the keyword matching because sometimes it was matching unrelated words and giving wrong score. This part took some time because after fixing one issue another one was coming, so I had to test with different resumes to make the results more consistent. After that I worked on AI suggestions. Before, the AI was giving one big response which was hard to read. So I separated the suggestions into different sections based on resume parts. I also changed the prompts a little because sometimes AI was repeating the same advice in different words. It took a few prompt changes before I got output that looked clean and useful. Overall no big feature today, but I spent most of the time improving the quality of existing features. The ATS results and AI suggestions now feel much better than before."}, {"post_id": 28359, "ts": "2026-07-14T15:51:31Z", "hours": 4.0, "text": "Today I completed Phase 2 of the project. The main goal was to compare the uploaded resume with the job description instead of analysing both separately. At first I thought simple keyword matching would be enough, but I quickly realized it was giving wrong results. Sometimes important skills were missed because the wording was different, and sometimes repeated keywords were increasing the score even when the resume wasn’t actually relevant. I spent a lot of time improving the comparison logic and testing it with different resumes and job descriptions. The biggest challenge was finding a balance between being too strict and too lenient. After making multiple changes, the matching feels much more accurate and meaningful now. Finally, Phase 2 is complete and working well. There are still small things I can improve later, but the core resume-to-job matching system is done. From tomorrow I’ll start working on Phase 3."}, {"post_id": 28562, "ts": "2026-07-14T21:46:11Z", "hours": 3.0, "text": "Started working on the interview section After finishing the resume analysis and job description matching, I started building the interview part of the project. Today was mostly frontend work. I created the pages that will handle the complete interview flow instead of trying to fit everything onto one page. Things I worked on: Created the interview dashboard 2.Built the interview setup page Added the interview session layout Created the results page Added a navigation link so the new section is accessible from anywhere in the website Nothing is functional yet, but having the pages ready will make the backend integration much easier over the next few sessions."}, {"post_id": 28749, "ts": "2026-07-15T06:38:45Z", "hours": 1.0, "text": "Building the interview interface Spent most of time working on the styling for the interview pages. I wanted the new section to match the rest of the application instead of feeling like a completely different website. Today’s work included: Question cards Progress indicator Forms Review layout Results section Small responsive fixes I kept the styling pretty simple without adding unnecessary animations because readability is more important during an interview."}, {"post_id": 28855, "ts": "2026-07-15T12:25:04Z", "hours": 4.0, "text": "worked on JavaScript I connected the different interview pages together so the whole flow feels continuous instead of loading unrelated screens. I also spent quite a bit of time fixing small issues like: Question navigation Progress updates Form validation Button states Results rendering There wasn’t one huge bug today, but lots of smaller ones that together took longer than expected. The frontend is now smoother"}, {"post_id": 28870, "ts": "2026-07-15T13:10:38Z", "hours": 0.0, "text": "Phase 3 Complete – Mock Interview Finished Phase 3 of InterviewPrep AI today. The project started with resume analysis, then I added resume vs job description matching, and now it can also generate a complete AI mock interview based on both. What’s working now: Mock interview dashboard Interview setup page AI-generated interview questions Resume + Job Description based question generation Interview session flow AI feedback after submitting answers Final results page with overall review I also spent quite a bit of time testing the AI responses. Different models don’t always return data in the same format, so I had to handle a few inconsistent responses before everything started working properly. One thing I wanted to make sure was that the older features didn’t break while adding all this. I tested the resume analysis and JD matching flow again after integrating the interview section and both are still working fine. There are still a lot of ideas I want to add later like voice interviews, downloadable reports and interview history, but for now I’m happy with how Phase 3 turned out. The project finally feels like a complete interview preparation tool instead of just a resume analyzer."}]...
|
Title: InterviewPrep AI by @Nikhilsahu | Stardance Title: InterviewPrep AI by @Nikhilsahu | Stardance
Devlogs:
Phase 3 Complete – Mock Interview Finished Phase 3 of InterviewPrep AI today. The project started with resume analysis, then I added resume vs job description matching, and now it can also generate a complete AI mock interview based on both. What’s working now: Mock interview dashboard Interview setup page AI-generated interview questions Resume + Job Description based question generation Interview session flow AI feedback after submitting answers Final results page with overall review I also spent quite a bit of time testing the AI responses. Different models don’t always return data in the same format, so I had to handle a few inconsistent responses before everything started working properly. One thing I wanted to make sure was that the older features didn’t break while adding all this. I tested the resume analysis and JD matching flow again after integrating the interview section and both are still working fine. There are still a lot of ideas I want to add later like voice interviews, downloadable reports and interview history, but for now I’m happy with how Phase 3 turned out. The project finally feels like a complete interview preparation tool instead of just a resume analyzer.
worked on JavaScript I connected the different interview pages together so the whole flow feels continuous instead of loading unrelated screens. I also spent quite a bit of time fixing small issues like: Question navigation Progress updates Form validation Button states Results rendering There wasn’t one huge bug today, but lots of smaller ones that together took longer than expected. The frontend is now smoother
Building the interview interface Spent most of time working on the styling for the interview pages. I wanted the new section to match the rest of the application instead of feeling like a completely different website. Today’s work included: Question cards Progress indicator Forms Review layout Results section Small responsive fixes I kept the styling pretty simple without adding unnecessary animations because readability is more important during an interview.
Started working on the interview section After finishing the resume analysis and job description matching, I started building the interview part of the project. Today was mostly frontend work. I created the pages that will handle the complete interview flow instead of trying to fit everything onto one page. Things I worked on: Created the interview dashboard 2.Built the interview setup page Added the interview session layout Created the results page Added a navigation link so the new section is accessible from anywhere in the website Nothing is functional yet, but having the pages ready will make the backend integration much easier over the next few sessions.
Today I completed Phase 2 of the project. The main goal was to compare the uploaded resume with the job description instead of analysing both separately. At first I thought simple keyword matching would be enough, but I quickly realized it was giving wrong results. Sometimes important skills were missed because the wording was different, and sometimes repeated keywords were increasing the score even when the resume wasn’t actually relevant. I spent a lot of time improving the comparison logic and testing it with different resumes and job descriptions. The biggest challenge was finding a balance between being too strict and too lenient. After making multiple changes, the matching feels much more accurate and meaningful now. Finally, Phase 2 is complete and working well. There are still small things I can improve later, but the core resume-to-job matching system is done. From tomorrow I’ll start working on Phase 3.
Today I worked on improving the ATS checker and AI suggestions. Earlier ATS score was just giving one percentage, so it didn’t feel very useful. I changed the logic so now it also tells why score increased or decreased instead of only showing a number. I also improved the keyword matching because sometimes it was matching unrelated words and giving wrong score. This part took some time because after fixing one issue another one was coming, so I had to test with different resumes to make the results more consistent. After that I worked on AI suggestions. Before, the AI was giving one big response which was hard to read. So I separated the suggestions into different sections based on resume parts. I also changed the prompts a little because sometimes AI was repeating the same advice in different words. It took a few prompt changes before I got output that looked clean and useful. Overall no big feature today, but I spent most of the time improving the quality of existing features. The ATS results and AI suggestions now feel much better than before.
Working on resume parsing Today I focused on extracting information from uploaded resumes. I quickly realised that resumes are far less consistent than I expected. Some PDFs parsed perfectly, while others had missing spaces, broken formatting or section titles that weren’t detected correctly. Most of my time actually went into handling these edge cases instead of writing the parser itself. After a lot of testing, the extraction feels much more reliable now. Next I’ll use this parsed information for the ATS checker and resume analysis.
I worked on some of the utility functions that handle uploaded resumes. These files aren’t very visible from the frontend, but they’re important because almost every upload passes through them. I improved the validation logic so unsupported files are caught earlier instead of failing later during parsing. I also cleaned up the temporary file handling because a few test uploads weren’t being removed properly after processing. Not the most exciting part of the project, but it’ll make the rest of the resume analysis pipeline much more reliable.
Today I connected the redesigned frontend with JavaScript. Most of the work was handling user interactions and making sure different sections behave properly. Things I worked on: 1.Accordion behaviour 2.Dark mode toggle 3.Upload interactions 4.Better loading states 5.Small UI fixes while testing 6.JD Matching Still have to reconnect everything with the backend, but the frontend is now behaving the way I wanted
Started redesigning the frontend After getting some feedback on the project, I decided to take some time to improve the overall frontend before diving into new features. The previous layout was functional, but it was too dash-boardy, with cards everywhere. Today I was mostly doing frontend restructuring before any feature changes. Things I did: I have begun redesigning the general layout Cleaned up html structure CSS brief Removed some unneeded UI elements Planned a section-by-section layout, rather than showing everything at once There were no changes in backend today. The idea is to simplify the project and make it easier to use before we move onto the resume analysis features.
Finished the first major milestone of InterviewPrep AI today! Phase 1 is now complete and the core resume analysis workflow is working end-to-end. I spent most of the time integrating the backend services, testing different resume formats, fixing edge cases, and making sure the overall flow felt smooth and reliable. What was completed in Phase 1: Resume upload (PDF/DOCX/TXT) 2.Resume parsing 3.Resume preview with extracted details 4.Resume analysis 5.ATS score generation AI-powered resume improvement suggestions The project now has a solid foundation, and I’m happy with how the first version has turned out. There are still plenty of improvements to make, but the core functionality is finally in place. Next up (Phase 2): Job description upload and parsing Resume vs Job Description match score 3.Missing skills and keyword analysis AI-powered resume optimization for specific job roles Better match reports and actionable recommendations Excited to start Phase 2 and make the project even more useful for internship and placement preparation.
Made a lot of progress on InterviewPrep AI over the last few sessions. I finished writing the core logic for all the planned Phase 1 features, including resume upload, parsing, resume analysis, ATS scoring, and AI-powered improvement suggestions. Most of the work went into building the backend services and making sure each feature works correctly on its own. At this point, the remaining work for Phase 1 is integrating everything through the main application, testing the complete flow from upload to analysis, and deploying the project. Once the first version is stable and fully working, I’ll move on to Phase 2, which will focus on job description support, resume-to-JD matching, keyword analysis, and AI-powered resume optimization tailored to specific job roles.
Made some good progress on the backend today. I worked on the core services which process uploaded resumes including the file extraction pipeline, AI integration and the ATS checker. I spent some time testing out different resume formats and fixing a few things to make the flow more reliable. We now have the basic foundation of the resume analysis pipeline. Now, the next step is to connect everything to the frontend and improve the results of the analysis.
Started working on InterviewPrep AI yesterday. I spent most of the time building the frontend for the first phase and setting up the overall structure of the project. The goal was to keep the interface simple, clean and easy to use instead of adding unnecessary design elements. Most of the core pages are now ready, so the next step is connecting everything to the backend and implementing the resume processing features.
Ships:
I developed my first AI-based tool called InterviewPrep AI, which helps users optimize their resumes prior to applying for internships or jobs through the use of artificial intelligence. As of right now, the application can load a user's resume, create an ATS score, perform different kinds of analysis on various sections of the resume and provide suggestions for improvement. By far, the hardest part of this project was to connect all the backend services into a cohesive process and ensure that everything works as intended. Besides that, I also put some effort into testing various formats of resumes and fixing minor bugs related to parsing and analysis of the document. I think I am the most proud of having the whole resume analysis pipeline up and running. It's no longer an AI-based wrapper, but rather something that can form a solid foundation for future projects. In case anyone would like to test the project, please, try uploading various formats of the resume (PDF, DOCX or TXT) and check how well the parser, ATS analysis and suggestions work. This is just Phase 1, while Phase 2 is already being implemented.
I worked on the first three phases of InterviewPrep AI. You can set up a mock interview, answer AI-generated questions, get feedback, and check your previous interviews from the dashboard. The hardest part was making the interview flow feel smooth and connecting all the pages together. I also spent time improving the UI and handling loading and error states. I'm happy that the project now feels like a real app instead of just a demo. Everything works together and the overall experience is much better now. Just open the website and start using it. No signup is needed. You can start a new interview, complete it, and check the feedback and history right away....
|
1792878817.057684
|
1793742817.057684
|
|
754
|
better clouds by @orangishcat | Stardance
|
orangishcat
|
1
|
44.83
|
531
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T04:49:17Z", "hours": 32.0, "multiplier": 18.69, "payout": 531, "blessing": "neutral", "text": "it’s been roughly 3 months since i’ve taken over the project, and it’s been going great! again, huge thanks to qendolin for letting me maintain his minecraft mod!", "repo": "https://github.com/Qendolin/better-clouds", "demo": "https://modrinth.com/mod/better-clouds"}]...
|
[{"post_id": 67713, "ts": "202 [{"post_id": 67713, "ts": "2026-09-13T22:17:41Z", "hours": 12.8278, "text": "I made a few bug fixes and am preparing for 26.3 migration. I also need to make sure the Blaze3D renderer gets feature parity soon. I’m using old reference images like this one to see what the old OpenGL renderer used to be like"}, {"post_id": 18980, "ts": "2026-06-30T04:43:00Z", "hours": 0.3833, "text": "i’ve done what i’ve wanted to do for this project for now! i’ve polished up my devlogs, and gonna ship the project now. here’s a screenshot where i tried to make the clouds look realistic (they’re not supposed to look realistic, so this is very cursed)"}, {"post_id": 18414, "ts": "2026-06-29T15:41:30Z", "hours": 2.8464, "text": "Published 1.14.0 release! I renamed “Tint” -> “Top Color”, “Bottom Tint” -> “Bottom Color”, “Bottom Transition Range” -> “Color Transition End” also renamed the options keys too, with a migration thing that migrates the old options keys to the new ones ok ima take a break from this project for now! next up, probably a config system rewrite? i want to implement like discord roles thing, where: you start with a base config given a certain condition (e.g. dimension = minecraft:overworld), certain properties of the config are modified and repeat until you get dynamic clouds with your own defined conditions! or i might not do that idk it sounds kinda complicated"}, {"post_id": 15563, "ts": "2026-06-25T09:35:53Z", "hours": 6.9383, "text": "added a bottom tint option that basically lets you create a gradient on your clouds i’m getting quite familiar with shaders and graphics code! this is one of my main goals for the project, and i’m glad it’s working out well! also fixed a bunch of bugs basic description of the bottom tint algorithm: vertex shader: tint interpolation progress = (y level of the cloud vertex) / (transition range percentage * cloud height range) fragment shader: color = lerp(bottomColor, topColor, tintInterpProgress) by default, the effect is much more subtle than this, but it is still there"}, {"post_id": 12390, "ts": "2026-06-20T06:59:27Z", "hours": 1.5831, "text": "made the celestial body halo much bigger and more visible. i also added separate options for the sun and moon halo, and scaled the moon halo’s size based on the moon phase! also the way I change the halo size is kinda cursed. i’m using qendolin’s superellipse formula, and i only kinda understand how it works. // i still have no idea how this formula works but it seems to work fine float superellipse = ( ( 1.0 + ( 1.0 / 3.0 ) * ( pow ( cos ( 2.0 * projAngle ), 2.0 ))) * haloSize * ( 1.0 - abs ( superellipseFalloff )) - 1.0 ) * sign (- superellipseFalloff ); then i fit an exponential curve based on what halo size i wanted for which moon phase 💀 // larger value = smaller halo size float haloSize = dayTime () < config . shaderPreset (). sunsetEndTime ? 2.05f - config . sunHaloSizeMultiplier : ( float ) ( 5 * Math . pow ( 0.06217 , config . moonHaloSizeMultiplier * DimensionType . MOON_BRIGHTNESS_PER_PHASE [ moonPhase . index ()])); // curve fit for ideal moon halo size based on phase"}, {"post_id": 10514, "ts": "2026-06-17T08:17:49Z", "hours": 4.5678, "text": "updated to 26.2, and the blaze3d renderer I made works great on vulkan! the renderer was mostly done for weeks now, i just added neoforge back and that was mostly it. Iris was giving me problems as it hasn’t implemented reverse z yet. but i was able to fix that really easily because i kinda know what i’m doing now when touching graphics code! this woulda taken me forever if it were the first time i had to do this. also added longview support to 26.1.2 then declared it end of life"}, {"post_id": 3311, "ts": "2026-06-06T05:33:35Z", "hours": 1.7572, "text": "Added option in config screen to choose the renderer, Also added back frustum culling (where clouds don’t render behind the camera) Qendolin’s original algorithm for frustum culling was: compute the bounding box of a section of clouds (clouds are generated in sections with a chunk-like system). if the frustum of the camera (basically an object describing what part of the world the camera can see given a camera angle, position, and fov) can see the clouds, expand the bounding box with the next section of clouds else, render all the sections of clouds we can see, and skip this section if we can’t see it in other words: (original comment from the code) // This algorithm loops over chunks, which are in a line-by-line order. // When a visible chunk is found it's marked as a run start. The run continues until // the next non-visible chunk is found. At the end of a run the entire run is rendered as once. // This is possible due to the memory layout of the instance buffers."}, {"post_id": 2456, "ts": "2026-06-04T23:08:15Z", "hours": 2.0006, "text": "I’m preparing for 26.2 release! I updated the mod to 26.2 pre-4, as well as YACL 3.9.4 which also just came out earlier today. NeoForge is also out but I’m too lazy to setup their custom repo for prerelease builds so I will fix NF support when 26.2 releases. I fixed a really annoying bug that was making the cloud ripple effect way larger in magnitude than it was supposed to be (I sampled WorldPosition instead of WorldPosition - originOffset ) I added a hardcoded minimum brightness in the shader so that clouds will be just barely visible at nighttime. Also GLSL operations are element-wise which is pretty cool! Like you can do max(color.rgb, vec3(0.15)) and each element of the color vector will be element-wise compared with 0.15, and the bigger one will be chosen. Really elegant solution for my minimum brightness operation."}, {"post_id": 639, "ts": "2026-06-02T04:56:28Z", "hours": 2.9128, "text": "the renderer looks good again! i added back the light gradient sampling, so the clouds actually turn orange during sunset and go dark at night time like they used to. btw, I spent like 3 hours reading through https://open.gl/ . it’s a great tutorial, and i applied pretty much all of the graphics concepts i learned to this project! i’m using blaze3d instead of opengl this time, but the concepts still apply. how the algorithm works based on the time of day, it samples a color from this texture , where the white part of the texture produces the bright fluffy daytime clouds, the dark part produces the dark nighttime clouds, and the remaining orange and light blue produce the amazing cloud colors shown in the image during sunset and sunrise! i can’t explain the formula too much in detail, cuz i kinda just copied the math from the old code…"}, {"post_id": 183, "ts": "2026-06-01T06:23:52Z", "hours": 9.4714, "text": "spent like 12h getting the blaze3d renderer to work. long story short, the opengl renderer is a mess and I’m doing pretty much a full rewrite to get it to work on blaze3d. it’s taking extremely long but i’m happy because i’m learning a lot about graphics. the core functionality kinda works but there are all sorts of bugs, and a bunch of features are missing. some of them i probably just won’t be adding back. the old opengl renderer used a three shader setup: a coverage shader (establishes positions and colors of each cloud cube) a shading shader (recolors each cloud cube based on saturation, sunlight, and other properties) a depth shader (changes the transparency for each pixel based on how many cubes are overlapping) …wait what, why do you need all that? i assume order-independent transparency? whatever, i’m not doing allat, hopefully a simple cube drawing will work and blaze3d can handle the transparency stuff right now i have just one fragment shader and one vertex shader, basically the rendering setup possible. hopefully i don’t need anything else, considering i’m literally drawing just cubes… p.s. vulkan renderer so cool! performance is a lot better than opengl on my mac p.p.s cool formula: gl_Position = ProjMat * ViewMat * vec4(pos, 1) (ball knowledge required)"}]...
|
Title: better clouds by @orangishcat | Stardance
Title: better clouds by @orangishcat | Stardance
Devlogs:
spent like 12h getting the blaze3d renderer to work. long story short, the opengl renderer is a mess and I’m doing pretty much a full rewrite to get it to work on blaze3d. it’s taking extremely long but i’m happy because i’m learning a lot about graphics. the core functionality kinda works but there are all sorts of bugs, and a bunch of features are missing. some of them i probably just won’t be adding back. the old opengl renderer used a three shader setup: a coverage shader (establishes positions and colors of each cloud cube) a shading shader (recolors each cloud cube based on saturation, sunlight, and other properties) a depth shader (changes the transparency for each pixel based on how many cubes are overlapping) …wait what, why do you need all that? i assume order-independent transparency? whatever, i’m not doing allat, hopefully a simple cube drawing will work and blaze3d can handle the transparency stuff right now i have just one fragment shader and one vertex shader, basically the rendering setup possible. hopefully i don’t need anything else, considering i’m literally drawing just cubes… p.s. vulkan renderer so cool! performance is a lot better than opengl on my mac p.p.s cool formula: gl_Position = ProjMat * ViewMat * vec4(pos, 1) (ball knowledge required)
the renderer looks good again! i added back the light gradient sampling, so the clouds actually turn orange during sunset and go dark at night time like they used to. btw, I spent like 3 hours reading through https://open.gl/ . it’s a great tutorial, and i applied pretty much all of the graphics concepts i learned to this project! i’m using blaze3d instead of opengl this time, but the concepts still apply. how the algorithm works based on the time of day, it samples a color from this texture , where the white part of the texture produces the bright fluffy daytime clouds, the dark part produces the dark nighttime clouds, and the remaining orange and light blue produce the amazing cloud colors shown in the image during sunset and sunrise! i can’t explain the formula too much in detail, cuz i kinda just copied the math from the old code…
I’m preparing for 26.2 release! I updated the mod to 26.2 pre-4, as well as YACL 3.9.4 which also just came out earlier today. NeoForge is also out but I’m too lazy to setup their custom repo for prerelease builds so I will fix NF support when 26.2 releases. I fixed a really annoying bug that was making the cloud ripple effect way larger in magnitude than it was supposed to be (I sampled WorldPosition instead of WorldPosition - originOffset ) I added a hardcoded minimum brightness in the shader so that clouds will be just barely visible at nighttime. Also GLSL operations are element-wise which is pretty cool! Like you can do max(color.rgb, vec3(0.15)) and each element of the color vector will be element-wise compared with 0.15, and the bigger one will be chosen. Really elegant solution for my minimum brightness operation.
Added option in config screen to choose the renderer, Also added back frustum culling (where clouds don’t render behind the camera) Qendolin’s original algorithm for frustum culling was: compute the bounding box of a section of clouds (clouds are generated in sections with a chunk-like system). if the frustum of the camera (basically an object describing what part of the world the camera can see given a camera angle, position, and fov) can see the clouds, expand the bounding box with the next section of clouds else, render all the sections of clouds we can see, and skip this section if we can’t see it in other words: (original comment from the code) // This algorithm loops over chunks, which are in a line-by-line order. // When a visible chunk is found it's marked as a run start. The run continues until // the next non-visible chunk is found. At the end of a run the entire run is rendered as once. // This is possible due to the memory layout of the instance buffers.
updated to 26.2, and the blaze3d renderer I made works great on vulkan! the renderer was mostly done for weeks now, i just added neoforge back and that was mostly it. Iris was giving me problems as it hasn’t implemented reverse z yet. but i was able to fix that really easily because i kinda know what i’m doing now when touching graphics code! this woulda taken me forever if it were the first time i had to do this. also added longview support to 26.1.2 then declared it end of life
made the celestial body halo much bigger and more visible. i also added separate options for the sun and moon halo, and scaled the moon halo’s size based on the moon phase! also the way I change the halo size is kinda cursed. i’m using qendolin’s superellipse formula, and i only kinda understand how it works. // i still have no idea how this formula works but it seems to work fine float superellipse = ( ( 1.0 + ( 1.0 / 3.0 ) * ( pow ( cos ( 2.0 * projAngle ), 2.0 ))) * haloSize * ( 1.0 - abs ( superellipseFalloff )) - 1.0 ) * sign (- superellipseFalloff ); then i fit an exponential curve based on what halo size i wanted for which moon phase 💀 // larger value = smaller halo size float haloSize = dayTime () < config . shaderPreset (). sunsetEndTime ? 2.05f - config . sunHaloSizeMultiplier : ( float ) ( 5 * Math . pow ( 0.06217 , config . moonHaloSizeMultiplier * DimensionType . MOON_BRIGHTNESS_PER_PHASE [ moonPhase . index ()])); // curve fit for ideal moon halo size based on phase
added a bottom tint option that basically lets you create a gradient on your clouds i’m getting quite familiar with shaders and graphics code! this is one of my main goals for the project, and i’m glad it’s working out well! also fixed a bunch of bugs basic description of the bottom tint algorithm: vertex shader: tint interpolation progress = (y level of the cloud vertex) / (transition range percentage * cloud height range) fragment shader: color = lerp(bottomColor, topColor, tintInterpProgress) by default, the effect is much more subtle than this, but it is still there
Published 1.14.0 release! I renamed “Tint” -> “Top Color”, “Bottom Tint” -> “Bottom Color”, “Bottom Transition Range” -> “Color Transition End” also renamed the options keys too, with a migration thing that migrates the old options keys to the new ones ok ima take a break from this project for now! next up, probably a config system rewrite? i want to implement like discord roles thing, where: you start with a base config given a certain condition (e.g. dimension = minecraft:overworld), certain properties of the config are modified and repeat until you get dynamic clouds with your own defined conditions! or i might not do that idk it sounds kinda complicated
i’ve done what i’ve wanted to do for this project for now! i’ve polished up my devlogs, and gonna ship the project now. here’s a screenshot where i tried to make the clouds look realistic (they’re not supposed to look realistic, so this is very cursed)
I made a few bug fixes and am preparing for 26.3 migration. I also need to make sure the Blaze3D renderer gets feature parity soon. I’m using old reference images like this one to see what the old OpenGL renderer used to be like
Ships:
it’s been roughly 3 months since i’ve taken over the project, and it’s been going great! again, huge thanks to qendolin for letting me maintain his minecraft mod!...
|
1792979574.4771922
|
1793065974.4771922
|
|
17293
|
Slayie by @arfa_mariyam | Stardance
|
arfa_mariyam
|
3
|
38.0
|
531
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T07:48:06Z", "hours": 9.0, "multiplier": 16.78, "payout": 147, "blessing": "neutral", "text": "I released Phase 5 of Slayie, my terminal-based ASCII Dungeon Crawler RPG written in C++. After receiving feedback that people on Linux and Mac also wanted to try the game, I expanded the project to include full cross-platform support. Along with the 10x10 dungeon map, WASD controls, obstacle walls (#), gold coins ($), health potions (H), Goblin combat encounters (E), and persistent save/load features, the game now provides native ready-to-run binaries for Windows, Linux, and macOS. What was challenging: Building standalone binaries for platforms I don’t physically own ;) I didn’t have a Mac or Linux machine, so I learned how to configure GitHub Actions workflows to compile native Linux and macOS binaries in the cloud using cloud runners. I also had to make sure file execution permissions (chmod +x) and terminal instructions were clearly documented so non-Windows users wouldn’t encounter permission errors. What I am proud of: I’m really proud of taking community feedback seriously and turning a Windows-only CLI project into a true cross-platform game. Seeing the exact same C++ codebase build cleanly and run across Windows, Ubuntu, and macOS terminal environments feels like a huge accomplishment. How to test it: Go to the latest GitHub release (v5.0.0): https://github.com/ArfaMariyam/Slayie/releases Windows: Download and double-click SLAYIE.exe. Linux / Mac: Download slayie-linux or slayie-macos. In your terminal, run chmod +x slayie-linux (or macOS), then ./slayie-linux. Choose 1 to start a new game or 2 to load your previous save file. Use W, A, S, D (followed by Enter) to move, press K anytime to save your game state, defeat enemies (E), and reach the exit door (D)! Hope you enjoy testing it on whichever platform you use :)", "repo": "https://github.com/ArfaMariyam/Slayie", "demo": "https://github.com/ArfaMariyam/Slayie/releases"}, {"ship_num": 2, "ts": "2026-09-05T10:50:11Z", "hours": 9.0, "multiplier": 18.16, "payout": 197, "blessing": "neutral", "text": "What I made: I completed the final phase of Slayie, my terminal-based ASCII Dungeon Crawler RPG written in native C++. On top of exploring the 10x10 grid map, dodging solid walls (#), collecting gold coins ($), and drinking potions (H), I added enemy Goblin encounters (E) with combat damage, a game-over screen if your health drops to 0, and a full file save/load system so you can save your progress and resume anytime from local storage. What was challenging: Implementing file handling with to save and load the game state. I had to figure out how to save not just the player stats (playerX, playerY, playerHealth, goldCount), but also loop through the entire 2D dungeon array (dungeon[10][10]) row by row into slayie_save.txt. Making sure that picked-up items and defeated enemies didn’t respawn after reloading a save took quite a bit of debugging. What I am proud of: I’m really proud of finishing all 4 milestones of the roadmap from a blank file to a fully complete RPG. Having working grid movement, collision barriers, real-time stat tracking, combat encounters, and persistent text-file saving all compiled into a single executable file that anyone can play feels amazing :) How to test it: Download the compiled SLAYIE.exe from my GitHub repository’s latest release (v4.0.0). Double-click SLAYIE.exe to run it directly in your terminal. Select 1 to start a new run or 2 to load your previous save file. Use W, A, S, D (followed by Enter) to move your character, press K anytime to save your progress, defeat enemies (E), and reach the exit door (D)! Hope you enjoy it :)", "repo": "https://github.com/ArfaMariyam/Slayie", "demo": "https://github.com/ArfaMariyam/Slayie/releases"}, {"ship_num": 3, "ts": "2026-08-25T11:45:32Z", "hours": 20.0, "multiplier": 9.0, "payout": 187, "blessing": "neutral", "text": "What I made: I built Slayie, a terminal based ASCII Dungeon Crawler RPG written in native C++. It renders an interactive 10x10 dungeon grid where you control a character (@) using WASD keys, navigate around solid boundary and obstacle walls (#), collect gold coins ($), drink health potions (H) to restore health, and try to reach the exit door (D). What was challenging: As a beginner learning C++, working with 2D array coordinates (dungeon[10][10]) was the trickiest part. I initially mixed up rows (Y-axis) and columns (X-axis), which caused movement keys to move in reverse and item pickups to wipe the wrong map tiles. Writing predictive collision checks so the player stops before hitting a wall took a lot of trial, error, and debugging. What I am proud of: I’m really proud of turning basic programming fundamentals (nested loops, 2D arrays, and conditional branches) into an actual interactive game with real-time stats. Building a complete game loop from scratch and compiling a working .exe file that runs with one click feels awesome :) How to test it: Download the compiled index.exe from my GitHub repository’s latest release. Double-click index.exe to run it directly in your terminal. Use W, A, S, D (followed by Enter) to move your character around the map, collect items, and find the D door. Hope you enjoy it :)", "repo": "https://github.com/ArfaMariyam/Slayie", "demo": "https://github.com/ArfaMariyam/Slayie/releases"}]...
|
[{"post_id": 65248, "ts": "202 [{"post_id": 65248, "ts": "2026-09-10T07:39:30Z", "hours": 8.7703, "text": "Phase 5 of Slayie is live •⩊• After going through peer review feedback on Stardance, I saw that players using Linux and Mac also wanted to test the game. I added a 5th phase to provide cross-platform support by compiling native standalone binaries (slayie-linux and slayie-macos) and attaching them to the GitHub release alongside SLAYIE.exe. I also added terminal execution permissions (chmod +x) and quick source build commands in the README so anyone can run Slayie regardless of their OS"}, {"post_id": 62094, "ts": "2026-09-05T10:44:09Z", "hours": 9.0578, "text": "Phase 4 of Slayie is officially complete! I Added enemy encounters (E) that trigger combat and deal 25 damage to the player, along with a full game-over screen if your health drops to 0. Also built a file save and load system using so pressing K writes all stats and the current map grid into slayie_save.txt, letting you restore your exact progress from the main menu."}, {"post_id": 54388, "ts": "2026-08-25T11:37:41Z", "hours": 12.7342, "text": "Phase 3 of Slayie is complete! Added collectible Gold coins ($) and Health Potions (H) across the dungeon floor. Stepping on a gold tile grants +10 coins, while potions heal +20 HP up to the 100 HP max limit. After picking up an item, the tile is cleared to floor (.) so items can’t be looted twice."}, {"post_id": 41177, "ts": "2026-08-05T06:59:56Z", "hours": 5.5186, "text": "Just completed Phase 2 of Slayie! Converted the map into a full 2D array matrix (dungeon[10][10]) to store real wall layouts and obstacle data. Added solid boundary walls (#), interior obstacles, and built collision detection so the player @ can’t walk through walls. Also added an exit door (D) at (8, 8) to clear the dungeon, and fixed a movement math bug where pressing S was moving the player in reverse!"}, {"post_id": 35765, "ts": "2026-07-27T12:24:47Z", "hours": 1.93, "text": "Slayie’s Phase 1 Complete: 10x10 ASCII Grid & WASD Movement Framework! Today I kicked off my new project, Slayie (a terminal-based ASCII Dungeon Crawler RPG in C++), and finished Phase 1! What I built: Rendered a 10x10 grid map on the terminal using nested loops, with the player represented by the @ icon. Implemented live coordinate tracking for (playerX, playerY). Built WASD keyboard controls (W Up, S Down, A Left, D Right) and a Q key to exit. Added boundary checks so the player can’t move off the map edges. Added a live stats dashboard showing Health (HP) and Gold coins."}]...
|
Title: Slayie by @arfa_mariyam | Stardance
Devlog Title: Slayie by @arfa_mariyam | Stardance
Devlogs:
Slayie’s Phase 1 Complete: 10x10 ASCII Grid & WASD Movement Framework! Today I kicked off my new project, Slayie (a terminal-based ASCII Dungeon Crawler RPG in C++), and finished Phase 1! What I built: Rendered a 10x10 grid map on the terminal using nested loops, with the player represented by the @ icon. Implemented live coordinate tracking for (playerX, playerY). Built WASD keyboard controls (W Up, S Down, A Left, D Right) and a Q key to exit. Added boundary checks so the player can’t move off the map edges. Added a live stats dashboard showing Health (HP) and Gold coins.
Just completed Phase 2 of Slayie! Converted the map into a full 2D array matrix (dungeon[10][10]) to store real wall layouts and obstacle data. Added solid boundary walls (#), interior obstacles, and built collision detection so the player @ can’t walk through walls. Also added an exit door (D) at (8, 8) to clear the dungeon, and fixed a movement math bug where pressing S was moving the player in reverse!
Phase 3 of Slayie is complete! Added collectible Gold coins ($) and Health Potions (H) across the dungeon floor. Stepping on a gold tile grants +10 coins, while potions heal +20 HP up to the 100 HP max limit. After picking up an item, the tile is cleared to floor (.) so items can’t be looted twice.
Phase 4 of Slayie is officially complete! I Added enemy encounters (E) that trigger combat and deal 25 damage to the player, along with a full game-over screen if your health drops to 0. Also built a file save and load system using so pressing K writes all stats and the current map grid into slayie_save.txt, letting you restore your exact progress from the main menu.
Phase 5 of Slayie is live •⩊• After going through peer review feedback on Stardance, I saw that players using Linux and Mac also wanted to test the game. I added a 5th phase to provide cross-platform support by compiling native standalone binaries (slayie-linux and slayie-macos) and attaching them to the GitHub release alongside SLAYIE.exe. I also added terminal execution permissions (chmod +x) and quick source build commands in the README so anyone can run Slayie regardless of their OS
Ships:
What I made: I built Slayie, a terminal based ASCII Dungeon Crawler RPG written in native C++. It renders an interactive 10x10 dungeon grid where you control a character (@) using WASD keys, navigate around solid boundary and obstacle walls (#), collect gold coins ($), drink health potions (H) to restore health, and try to reach the exit door (D). What was challenging: As a beginner learning C++, working with 2D array coordinates (dungeon[10][10]) was the trickiest part. I initially mixed up rows (Y-axis) and columns (X-axis), which caused movement keys to move in reverse and item pickups to wipe the wrong map tiles. Writing predictive collision checks so the player stops before hitting a wall took a lot of trial, error, and debugging. What I am proud of: I’m really proud of turning basic programming fundamentals (nested loops, 2D arrays, and conditional branches) into an actual interactive game with real-time stats. Building a complete game loop from scratch and compiling a working .exe file that runs with one click feels awesome :) How to test it: Download the compiled index.exe from my GitHub repository’s latest release. Double-click index.exe to run it directly in your terminal. Use W, A, S, D (followed by Enter) to move your character around the map, collect items, and find the D door. Hope you enjoy it :)
What I made: I completed the final phase of Slayie, my terminal-based ASCII Dungeon Crawler RPG written in native C++. On top of exploring the 10x10 grid map, dodging solid walls (#), collecting gold coins ($), and drinking potions (H), I added enemy Goblin encounters (E) with combat damage, a game-over screen if your health drops to 0, and a full file save/load system so you can save your progress and resume anytime from local storage. What was challenging: Implementing file handling with to save and load the game state. I had to figure out how to save not just the player stats (playerX, playerY, playerHealth, goldCount), but also loop through the entire 2D dungeon array (dungeon[10][10]) row by row into slayie_save.txt. Making sure that picked-up items and defeated enemies didn’t respawn after reloading a save took quite a bit of debugging. What I am proud of: I’m really proud of finishing all 4 milestones of the roadmap from a blank file to a fully complete RPG. Having working grid movement, collision barriers, real-time stat tracking, combat encounters, and persistent text-file saving all compiled into a single executable file that anyone can play feels amazing :) How to test it: Download the compiled SLAYIE.exe from my GitHub repository’s latest release (v4.0.0). Double-click SLAYIE.exe to run it directly in your terminal. Select 1 to start a new run or 2 to load your previous save file. Use W, A, S, D (followed by Enter) to move your character, press K anytime to save your progress, defeat enemies (E), and reach the exit door (D)! Hope you enjoy it :)
I released Phase 5 of Slayie, my terminal-based ASCII Dungeon Crawler RPG written in C++. After receiving feedback that people on Linux and Mac also wanted to try the game, I expanded the project to include full cross-platform support. Along with the 10x10 dungeon map, WASD controls, obstacle walls (#), gold coins ($), health potions (H), Goblin combat encounters (E), and persistent save/load features, the game now provides native ready-to-run binaries for Windows, Linux, and macOS. What was challenging: Building standalone binaries for platforms I don’t physically own ;) I didn’t have a Mac or Linux machine, so I learned how to configure GitHub Actions workflows to compile native Linux and macOS binaries in the cloud using cloud runners. I also had to make sure file execution permissions (chmod +x) and terminal instructions were clearly documented so non-Windows users wouldn’t encounter permission errors. What I am proud of: I’m really proud of taking community feedback seriously and turning a Windows-only CLI project into a true cross-platform game. Seeing the exact same C++ codebase build cleanly and run across Windows, Ubuntu, and macOS terminal environments feels like a huge accomplishment. How to test it: Go to the latest GitHub release (v5.0.0): https://github.com/ArfaMariyam/Slayie/releases Windows: Download and double-click SLAYIE.exe. Linux / Mac: Download slayie-linux or slayie-macos. In your terminal, run chmod +x slayie-linux (or macOS), then ./slayie-linux. Choose 1 to start a new game or 2 to load your previous save file. Use W, A, S, D (followed by Enter) to move, press K anytime to save your game state, defeat enemies (E), and reach the exit door (D)! Hope you enjoy testing it on whichever platform you use :)...
|
1792878583.2367184
|
1793742583.2367184
|
|
44314
|
Cami by @barfpile | Stardance
|
barfpile
|
2
|
35.49
|
530
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-22T22:22:29Z", "hours": 23.0, "multiplier": 17.33, "payout": 392, "blessing": "neutral", "text": "Welcome to Cami! It’s been a difficult 30 hour journey and I’m tryna get me Factorio to wrap up this awesome summer. :P Warning: The client is AI-Generated, it is not the project, simply a tool so you guys don’t have to make raw http requests with python. None of the rest of the project is AI-Generated.", "repo": "https://github.com/fries-git/Cami", "demo": "https://fries.hackclub.app/demo"}, {"ship_num": 2, "ts": "2026-08-11T05:46:34Z", "hours": 10.0, "multiplier": 14.13, "payout": 138, "blessing": "neutral", "text": "Cami is a full authentication backend. I made this for use in my own projects, and as a way to learn web stuff with flask. It was challenging just getting it all working. Combining Flask and TinyDB (things I’m not too familiar with) to make this come together. To use, register an account on the homepage, then click around and see what you can do! THE CLIENT USED IS AI: I do not know how to do frontend html work, and that is not the project. The project is the backend python.", "repo": "https://github.com/fries-git/Cami", "demo": "https://fries.hackclub.app/demo"}]...
|
[{"post_id": 76876, "ts": "202 [{"post_id": 76876, "ts": "2026-10-04T22:06:07Z", "hours": 1.0306, "text": "Fixes/Tweaks Might as well just get some time out here, I’ve literally been working on livechatting and misc fixes. I’ve been so stressed and tired and distracted I don’t remember working on this at all. I’ve moved primarily to working on Phantom, tryna get me a blahaj and balatroooooooo also its been 12 days please ship me my items 😭 Live Chatting Decentralized? Check Ability to change servername dynamically? Check Editing/Deleting messages? Check we’re so goated :)"}, {"post_id": 75357, "ts": "2026-09-29T20:49:47Z", "hours": 1.46, "text": "Well it was fun! (Its going for another week after i blow all my stardust.) Hello stardancers. Its 9-29-26. I’m not going to be able to make another ship and get it rated. Thank you everyone so much for the support on this project, and thanks for running Stardance! Mainly just working on live chatting, a decentralizable chatting service similar to discord, which will be picked up on phantom.hackclub.com. For anyone wondering what I got out of Stardance: 1 domain Outpost Badge (will make a project with that too!) Factorio Pico-8"}, {"post_id": 72426, "ts": "2026-09-22T22:21:17Z", "hours": 0.2506, "text": "AI generated a client so people can actually use it. Once again, I truthfully, have not used AI in this project for anything but front end, which I do not know how to do. Over the course of testing I have mainly used raw HTTP requests."}, {"post_id": 72420, "ts": "2026-09-22T22:02:45Z", "hours": 2.6606, "text": "A lot… I JUST BROKE 30 HOURS ON THIS PROJECT SERVER-SIDE CODING OMG!!! :D Well Cami has been rolling along reallllllllly quickly. Things I’ve added/worked on: Playlists/More Music Stuff Fixing up the post search api Remake of ws chat server Fries have been implemented Fries transfer is working Fries daily claiming is working So many fixes (many things didnt quite properly handle errors and so they have been fixed) Changes to your user info are being locked behind fries. (PFP Decor is locked but pfp, bio, and more will be locked, basically everything but password changes) Image/Music uploading will likely be locked behind fries, or you will have to pay fries to upgrade the amount of stuff you can store. More PFP Decor has been added to my personal instance but that doesnt affect here. Server logs are prettier. More info attached to the user queries. Thanks for reading and sticking with this shitshow of a project."}, {"post_id": 71293, "ts": "2026-09-20T16:11:07Z", "hours": 1.9511, "text": "Music Server/New Chat Server Hello! I’ve lately been working on a music server. Users can upload any sort of audio file, mp3, ogg, it should support mp4 but i haven’t tested, and it converts it to an ogg file. The ogg file has a roughly 75% file size to the original MP3 while keeping the same quality. I’ve also been working on things like metadata storage, playlists, and more. On top of music, I’ve started a full rework of the live chatting system. It’s been going well so far, but I’m changing up how it works a little. It’s going to be closer to IRC + DMs, there will be no locked channels, no way to create custom channels anymore. Hopefully I can also drag some more people in, and make it much simpler to use, and on top of this make it super easy to link to Discord and such. So yeah! It’s been going well, I’m still alive, I’m running out of time to ship… and uh yeah! Have fun coding!"}, {"post_id": 69922, "ts": "2026-09-18T02:21:37Z", "hours": 1.1539, "text": "Fixes, Simultaneous DB Editing, and JSONifying. Quick one since its like 11pm, I’ve been working on a lot of fixes. I, since the start of this project, haven’t closed DBs. Think about that. I am an intelligent human being. I’ve also been working on getting searching working (image) for the social api, and making sure everything works with that. On top of this, everything is still getting organized, and made to have very similar responses, so as a dev less work has to be done for you to support it. I also kinda started on a python library, but eh, we’ll see how it goes I suppose. Also have been working on some security, nothing commited, to try to make it harder to hack ig. Gn stardance! (im sick)"}, {"post_id": 68332, "ts": "2026-09-14T23:16:24Z", "hours": 0.4742, "text": "Multiplayer Im in the midst of making an extendable WS based multiplayer server, and figured I’d test it with a cool game somebody I know made! It’s a W.I.P. but works pretty well and everything server side is done lol."}, {"post_id": 66929, "ts": "2026-09-12T22:02:14Z", "hours": 0.4564, "text": "Im back Been working on the project a bit. Mainly just working on docs and helping people understand the API in a more sort of private environment. Should push a ship eventually, and its gonna be super awesome for everyone! :D Also maybe I did a devlog but i added timestamps to posts and stuff and made the total requests needed to do everything muuuuuuuch smaller, and made a smaller cache of data needed."}, {"post_id": 62232, "ts": "2026-09-05T14:31:16Z", "hours": 0.9633, "text": "LATEST UPDATES Auth Securely, Auth Silly <3 Normalizing Returns I’ve been doing a lot of work on simply normalizing some returns. Some of them were just slightly different like “The token is invalid” vs. “Invalid Token”, so those were condensed into “invalid token”, on top of this whenever i return a message i wrap it like: {\"cmd\":\"success\",\"message\":\"<original message>\" . On top of this I also went through and changed some of the codes. DB Fixes Next thing I need to fix is any DB access needs to be routed through the helper funcs and properly closed. If you change your name, half the project still thinks only the original exists, while the other half, the correct half, only sees the new name. The reason is I have broken the project up into like 5 python files, 2 of which are both trying to simultaneously access the DB. Which, in-case you were wondering, is not good. Less Requests Something else I’ve been working on to prevent clients having to make like 3 requests for one thing, and to prevent the server from having to handle those, is to whenever a message is saved to the DB say from the social endpoint, when I send it back down, I attach the username and display name to it. This takes >2 http requests, get the messages then the usernames and user info, down to just 1. (Until you grab user pfps, which should be just grabbed once and cached.) Because this is really all I did I like… don’t have pictures? So… Enjoy the little 88x31 I made Also this is probably the longest devlog I’ve ever made, but I’m bored, and since I just got 6 months of Spotify premium as a gift, I’m letting the weird AI DJ thing just play whatever it feels like. It does, however, keep going back to the dark ages of 2024. Let me forget that year of music listening…"}, {"post_id": 60382, "ts": "2026-09-02T17:53:50Z", "hours": 1.9931, "text": "Fixes and Usage Well hey! It’s been a hot minute right? Lately I have been working on a lot more fixes, mainly on things like the social endpoint, and the image endpoint. Not terribly visible portions right now, but majorly important! I also got a used RPI5 which is now hosting it. That means, no more Nest downtime issues resetting my code! Yay! Notable Changes: The social posting endpoint returns the whole message object instead of just the ID. Files have been reorganized to be much cleaner Tons of little crashes and issues have been cleaned up, there are still more. I’ve started in on beautifying the logs!"}, {"post_id": 55320, "ts": "2026-08-27T02:04:33Z", "hours": 0.3108, "text": "Quick Devlog for the reroll Started just adding more pfp decor, had some people make me some. Yippee! Quick update: that’s not mine and I didnt get permission to use it, its the one i had for testing first because I got it from somewhere else real easily. It has since been removed, in favor for other ones I do have permission to use."}, {"post_id": 54861, "ts": "2026-08-26T01:43:17Z", "hours": 0.7211, "text": "Fixes and Continuity So basically this was just fixing a lot of weird things. For example, this being the main thing, the pfps stored whenever a user uploads them, get stored as 128x128. But the empty pfp, was 256x256. On top of this in some websocket things i was using \"msg\":\"content\" or \"message\":\"content\" interchangeably, but this has since been normalized. In all its just been a productive time, I’ve added a bunch, started working on a python library, and just gotten ready for ship 2!"}, {"post_id": 53675, "ts": "2026-08-24T10:50:24Z", "hours": 0.9739, "text": "Fixes and new paint Pretty much everything I have worked on this devlog simply involves fixes. “Oh, I’m not handling invalid json on a route, oops!” Or: “Oh usernames can be >32 chars because i messed up my if statement.” (I learned this one when someone with the entire bee movie script as their name appeared on my users route.) While it was all fixes I worked on, on top of this, due to wanting to commit roughly once every hour to keep people updated, I rewrote the empty path so it looks better. Link still points to the github repo. Auth Securely, Auth Silly."}, {"post_id": 53089, "ts": "2026-08-23T14:50:20Z", "hours": 1.5633, "text": "PFP Decor / Display Names ALSO I HIT 20 HOURS These have been wip and were quite simple to implement, display name is just another value in the TINYDB database for users, and so is the profile decor. I got it from another app so I can’t really commit it because its not mine, however it works! There’s no way to set it yourself I just hand edited the DB. Also, users can now edit their username! I know that was a massive complaint in the first ship. Past that really all I changed was paths. Before i had paths like /getuser?user=fries which was dumb. I figured out how to, with flask, make it /user/fries and it gives the same information. Much cleaner."}, {"post_id": 50019, "ts": "2026-08-19T01:27:36Z", "hours": 2.4608, "text": "More Livechat and Currency Livechat: So I’ve done a lot more on livechat, you can create channels now (properly,) delete messages, almost have it so you can edit them, and typing indicators are almost done. Currency: I’ve started figuring out how users should get currency, and what it should go towards. Right now, the main idea is get it daily by posting/using livechat, then spend it on customization like user color, or upgrading max bio length."}, {"post_id": 49218, "ts": "2026-08-17T21:28:23Z", "hours": 0.6536, "text": "More public channels and locking!"}, {"post_id": 48867, "ts": "2026-08-17T13:00:31Z", "hours": 2.4442, "text": "Live Chat Fixed! I fully fixed and implemented the livechat. It supports the creation of channels with passwords, message history, joining channels, sending to channels you’ve joined. If all users leave the channel, unless its a keep-alive channel, mostly predefined channels with no passwords like general and off-topic, the database for message history gets wiped, and the channel is up for grabs again! I dont have any pictures really, I did it last night on a different PC, so enjoy an 88x31!"}, {"post_id": 48487, "ts": "2026-08-16T21:10:31Z", "hours": 0.4981, "text": "Live Chat Live chat is working in its most basic form! I did censor the usernames, solely because they used their real name lol. Color coding different users, the same person is censored with the same color across pics."}, {"post_id": 47555, "ts": "2026-08-15T15:07:11Z", "hours": 1.2475, "text": "GIFS Gifs have been added to the image api. (I can finally new line again!) Images you go: https://images.barfpile.dev/getimage/filename gifs you go: https://images.barfpile.dev/getgif/filename.gif (you can remove the .gif at the end and it will work fine everywhere but discord. You can also use getimage on a gif, but again, will work anywhere but discord.) (Attached gif was added by someone, idk who, while I was testing gifs lol. I am going to add basically metadata so you can get https://images.barfpile.dev/getmeta/filename and retrieve things like timestamp uploaded, filename, and who uploaded it.)"}, {"post_id": 47174, "ts": "2026-08-14T21:26:35Z", "hours": 1.8294, "text": "Images and livechat - I made an image api! You can upload infinite files, compressed to be 1/3 of their size ofc. Also started implementing live ws chatting with infinite channels that can be password locked. https://server/getimage?filename=testimage"}, {"post_id": 45027, "ts": "2026-08-11T05:44:27Z", "hours": 0.6342, "text": "Ship Time! I just added an AI test client, I am not disclosing this as AI usage in the project, as this really isnt the project, and is only meant so users (like me) with virtually 0 front end design knowledge, can just use this, now, in the web. THE CLIENT YOU SEE IS AI PLEASE DO NOT JUDGE AGAINST THIS AS NONE OF THE SERVER CODE (the true project) IS AI"}, {"post_id": 44750, "ts": "2026-08-10T18:39:05Z", "hours": 0.6975, "text": "PFPS Got a little sidetracked ya know just casually implemented pfps. no big deal. https://fries.hackclub.app/userpfp?user=fries"}, {"post_id": 44453, "ts": "2026-08-10T06:37:50Z", "hours": 0.6025, "text": "#SSE Approach - This took so long, its not done, and quite frankly I’m so tired. Why did I chose sse? Compatibility with old hardware and, like most of my projects, learning and goofing around. This has the added benefit of making this all exclusively http, and being able to get integrated into my system of endpoints i already have."}, {"post_id": 44433, "ts": "2026-08-10T05:52:03Z", "hours": 0.8692, "text": "Rewrites and Backtracking Really nothing has been done. I spent a decent chunk of time trying to work with WS and just toughing it out, but I couldn’t get done what I wanted to get done. So I’ve made the bold, stupid, late-night decision, to switch to using SSE for the live chat. Partially so it can be more integrated into my already made systems, however, mainly just because I wanna learn something new. Enjoy this picture of timestamps from me trying to learn Flask’s SSE."}, {"post_id": 44373, "ts": "2026-08-10T02:48:38Z", "hours": 0.325, "text": "quick one, added some more info to the live chat object, namely cmd and channel, this is in preparation for the channels system."}, {"post_id": 44359, "ts": "2026-08-10T02:05:52Z", "hours": 1.9847, "text": "Live Chat and More Worked on quite a bit this devlog. I finished up all the endpoints I would need, cleaned up the server code, made an init file to run it, and started on a live chatting system using websockets. It’s going to support an infinite amount of channels each able to be locked behind a password. However, except for maybe one general chat, no chat history is likely to be stored at this time, simply because infinite chats with no restrictions being stored, is going to eat through storage like mad. However for now it works. I was originally debating that each channel would basically have its own encryption, and then i realized… that’s dumb. I don’t need to do that, and here we are."}, {"post_id": 42866, "ts": "2026-08-07T20:28:48Z", "hours": 0.3258, "text": "Social I worked on the social endpoint, and the reason it says it only took 17 minutes, is I switched to Zed, realized it doesn’t have Hackatime support, and switched back when already basically done lol. I made a little slop coded tool before I actually attempt to make something, even though any sort of interface to use it isn’t part of the project really. Basically, its just a simple endpoint you can post to and get to post and read messages in a sort of twitter-esque environment."}, {"post_id": 42291, "ts": "2026-08-06T22:36:37Z", "hours": 0.345, "text": "Added a little thing telling you what port it was on, and then started it up! https://fries.hackclub.app/"}, {"post_id": 41943, "ts": "2026-08-06T14:02:19Z", "hours": 1.3444, "text": "It works! (Also I learned you can do markdown here) https://fries.hackclub.app/ Yesterday I did a good bit of work on actually making it work lol. I did a lot of work out and about just on GitHub’s website, so when I came back there was a lot needed to get everything working. Mainly when I refactored some of the code into functions in a different file, I completely broke the login. But a little more in-depth about Cami. When you post {\"username\":\"<str>\",\"password\":\"<str>\"} to either register or login, you get back a token. This token is based off your user-id and gets refreshed every time you login (also supposed to be after a day just unimplemented right now.) You then use this to authenticate with (the only commands that need it right now) /changepass or /updatebio. You can also, as shown in the image below, run /GET on /user?user=(username or user id). That’s pretty much the full run down honestly. Passwords are currently hashed with SHA256, although I need to find a better option as I was able to brute force reverse my 8 letter password on the web in <1 minute. :("}, {"post_id": 41495, "ts": "2026-08-05T18:53:11Z", "hours": 2.6375, "text": "Cami - Cami is a silly goofy authentication program for use in my other projects. It currently supports: POST/register - Registering an Account POST/login - Logging in to get a token POST/updatebio - Updating your bio GET/getuser - Getting user information from name or ID (returns fries [currency] bio and account #) I am currently working on: POST/changepass - Changing password Implementing this into a chat system that’s websocket based Adding little games and things This was all done with primarily Flask (for the server), hashlib (for hashing passwords), and tinydb (for storage). It is meant to be lightweight, easy to integrate into other systems, and a fun project in general!"}]...
|
Title: Cami by @barfpile | Stardance
Devlogs:
Cam Title: Cami by @barfpile | Stardance
Devlogs:
Cami - Cami is a silly goofy authentication program for use in my other projects. It currently supports: POST/register - Registering an Account POST/login - Logging in to get a token POST/updatebio - Updating your bio GET/getuser - Getting user information from name or ID (returns fries [currency] bio and account #) I am currently working on: POST/changepass - Changing password Implementing this into a chat system that’s websocket based Adding little games and things This was all done with primarily Flask (for the server), hashlib (for hashing passwords), and tinydb (for storage). It is meant to be lightweight, easy to integrate into other systems, and a fun project in general!
It works! (Also I learned you can do markdown here) https://fries.hackclub.app/ Yesterday I did a good bit of work on actually making it work lol. I did a lot of work out and about just on GitHub’s website, so when I came back there was a lot needed to get everything working. Mainly when I refactored some of the code into functions in a different file, I completely broke the login. But a little more in-depth about Cami. When you post {"username":"<str>","password":"<str>"} to either register or login, you get back a token. This token is based off your user-id and gets refreshed every time you login (also supposed to be after a day just unimplemented right now.) You then use this to authenticate with (the only commands that need it right now) /changepass or /updatebio. You can also, as shown in the image below, run /GET on /user?user=(username or user id). That’s pretty much the full run down honestly. Passwords are currently hashed with SHA256, although I need to find a better option as I was able to brute force reverse my 8 letter password on the web in <1 minute. :(
Added a little thing telling you what port it was on, and then started it up! https://fries.hackclub.app/
Social I worked on the social endpoint, and the reason it says it only took 17 minutes, is I switched to Zed, realized it doesn’t have Hackatime support, and switched back when already basically done lol. I made a little slop coded tool before I actually attempt to make something, even though any sort of interface to use it isn’t part of the project really. Basically, its just a simple endpoint you can post to and get to post and read messages in a sort of twitter-esque environment.
Live Chat and More Worked on quite a bit this devlog. I finished up all the endpoints I would need, cleaned up the server code, made an init file to run it, and started on a live chatting system using websockets. It’s going to support an infinite amount of channels each able to be locked behind a password. However, except for maybe one general chat, no chat history is likely to be stored at this time, simply because infinite chats with no restrictions being stored, is going to eat through storage like mad. However for now it works. I was originally debating that each channel would basically have its own encryption, and then i realized… that’s dumb. I don’t need to do that, and here we are.
quick one, added some more info to the live chat object, namely cmd and channel, this is in preparation for the channels system.
Rewrites and Backtracking Really nothing has been done. I spent a decent chunk of time trying to work with WS and just toughing it out, but I couldn’t get done what I wanted to get done. So I’ve made the bold, stupid, late-night decision, to switch to using SSE for the live chat. Partially so it can be more integrated into my already made systems, however, mainly just because I wanna learn something new. Enjoy this picture of timestamps from me trying to learn Flask’s SSE.
#SSE Approach - This took so long, its not done, and quite frankly I’m so tired. Why did I chose sse? Compatibility with old hardware and, like most of my projects, learning and goofing around. This has the added benefit of making this all exclusively http, and being able to get integrated into my system of endpoints i already have.
PFPS Got a little sidetracked ya know just casually implemented pfps. no big deal. https://fries.hackclub.app/userpfp?user=fries
Ship Time! I just added an AI test client, I am not disclosing this as AI usage in the project, as this really isnt the project, and is only meant so users (like me) with virtually 0 front end design knowledge, can just use this, now, in the web. THE CLIENT YOU SEE IS AI PLEASE DO NOT JUDGE AGAINST THIS AS NONE OF THE SERVER CODE (the true project) IS AI
Images and livechat - I made an image api! You can upload infinite files, compressed to be 1/3 of their size ofc. Also started implementing live ws chatting with infinite channels that can be password locked. https://server/getimage?filename=testimage
GIFS Gifs have been added to the image api. (I can finally new line again!) Images you go: https://images.barfpile.dev/getimage/filename gifs you go: https://images.barfpile.dev/getgif/filename.gif (you can remove the .gif at the end and it will work fine everywhere but discord. You can also use getimage on a gif, but again, will work anywhere but discord.) (Attached gif was added by someone, idk who, while I was testing gifs lol. I am going to add basically metadata so you can get https://images.barfpile.dev/getmeta/filename and retrieve things like timestamp uploaded, filename, and who uploaded it.)
Live Chat Live chat is working in its most basic form! I did censor the usernames, solely because they used their real name lol. Color coding different users, the same person is censored with the same color across pics.
Live Chat Fixed! I fully fixed and implemented the livechat. It supports the creation of channels with passwords, message history, joining channels, sending to channels you’ve joined. If all users leave the channel, unless its a keep-alive channel, mostly predefined channels with no passwords like general and off-topic, the database for message history gets wiped, and the channel is up for grabs again! I dont have any pictures really, I did it last night on a different PC, so enjoy an 88x31!
More public channels and locking!
More Livechat and Currency Livechat: So I’ve done a lot more on livechat, you can create channels now (properly,) delete messages, almost have it so you can edit them, and typing indicators are almost done. Currency: I’ve started figuring out how users should get currency, and what it should go towards. Right now, the main idea is get it daily by posting/using livechat, then spend it on customization like user color, or upgrading max bio length.
PFP Decor / Display Names ALSO I HIT 20 HOURS These have been wip and were quite simple to implement, display name is just another value in the TINYDB database for users, and so is the profile decor. I got it from another app so I can’t really commit it because its not mine, however it works! There’s no way to set it yourself I just hand edited the DB. Also, users can now edit their username! I know that was a massive complaint in the first ship. Past that really all I changed was paths. Before i had paths like /getuser?user=fries which was dumb. I figured out how to, with flask, make it /user/fries and it gives the same information. Much cleaner.
Fixes and new paint Pretty much everything I have worked on this devlog simply involves fixes. “Oh, I’m not handling invalid json on a route, oops!” Or: “Oh usernames can be >32 chars because i messed up my if statement.” (I learned this one when someone with the entire bee movie script as their name appeared on my users route.) While it was all fixes I worked on, on top of this, due to wanting to commit roughly once every hour to keep people updated, I rewrote the empty path so it looks better. Link still points to the github repo. Auth Securely, Auth Silly.
Fixes and Continuity So basically this was just fixing a lot of weird things. For example, this being the main thing, the pfps stored whenever a user uploads them, get stored as 128x128. But the empty pfp, was 256x256. On top of this in some websocket things i was using "msg":"content" or "message":"content" interchangeably, but this has since been normalized. In all its just been a productive time, I’ve added a bunch, started working on a python library, and just gotten ready for ship 2!
Quick Devlog for the reroll Started just adding more pfp decor, had some people make me some. Yippee! Quick update: that’s not mine and I didnt get permission to use it, its the one i had for testing first because I got it from somewhere else real easily. It has since been removed, in favor for other ones I do have permission to use.
Fixes and Usage Well hey! It’s been a hot minute right? Lately I have been working on a lot more fixes, mainly on things like the social endpoint, and the image endpoint. Not terribly visible portions right now, but majorly important! I also got a used RPI5 which is now hosting it. That means, no more Nest downtime issues resetting my code! Yay! Notable Changes: The social posting endpoint returns the whole message object instead of just the ID. Files have been reorganized to be much cleaner Tons of little crashes and issues have been cleaned up, there are still more. I’ve started in on beautifying the logs!
LATEST UPDATES Auth Securely, Auth Silly <3 Normalizing Returns I’ve been doing a lot of work on simply normalizing some returns. Some of them were just slightly different like “The token is invalid” vs. “Invalid Token”, so those were condensed into “invalid token”, on top of this whenever i return a message i wrap it like: {"cmd":"success","message":"<original message>" . On top of this I also went through and changed some of the codes. DB Fixes Next thing I need to fix is any DB access needs to be routed through the helper funcs and properly closed. If you change your name, half the project still thinks only the original exists, while the other half, the correct half, only sees the new name. The reason is I have broken the project up into like 5 python files, 2 of which are both trying to simultaneously access the DB. Which, in-case you were wondering, is not good. Less Requests Something else I’ve been working on to prevent clients having to make like 3 requests for one thing, and to prevent the server from having to handle those, is to whenever a message is saved to the DB say from the social endpoint, when I send it back down, I attach the username and display name to it. This takes >2 http requests, get the messages then the usernames and user info, down to just 1. (Until you grab user pfps, which should be just grabbed once and cached.) Because this is really all I did I like… don’t have pictures? So… Enjoy the little 88x31 I made Also this is probably the longest devlog I’ve ever made, but I’m bored, and since I just got 6 months of Spotify premium as a gift, I’m letting the weird AI DJ thing just play whatever it feels like. It does, however, keep going back to the dark ages of 2024. Let me forget that year of music listening…
Im back Been working on the project a bit. Mainly just working on docs and helping people understand the API in a more sort of private environment. Should push a ship eventually, and its gonna be super awesome for everyone! :D Also maybe I did a devlog but i added timestamps to posts and stuff and made the total requests needed to do everything muuuuuuuch smaller, and made a smaller cache of data needed.
Multiplayer Im in the midst of making an extendable WS based multiplayer server, and figured I’d test it with a cool game somebody I know made! It’s a W.I.P. but works pretty well and everything server side is done lol.
Fixes, Simultaneous DB Editing, and JSONifying. Quick one since its like 11pm, I’ve been working on a lot of fixes. I, since the start of this project, haven’t closed DBs. Think about that. I am an intelligent human being. I’ve also been working on getting searching working (image) for the social api, and making sure everything works with that. On top of this, everything is still getting organized, and made to have very similar responses, so as a dev less work has to be done for you to support it. I also kinda started on a python library, but eh, we’ll see how it goes I suppose. Also have been working on some security, nothing commited, to try to make it harder to hack ig. Gn stardance! (im sick)
Music Server/New Chat Server Hello! I’ve lately been working on a music server. Users can upload any sort of audio file, mp3, ogg, it should support mp4 but i haven’t tested, and it converts it to an ogg file. The ogg file has a roughly 75% file size to the original MP3 while keeping the same quality. I’ve also been working on things like metadata storage, playlists, and more. On top of music, I’ve started a full rework of the live chatting system. It’s been going well so far, but I’m changing up how it works a little. It’s going to be closer to IRC + DMs, there will be no locked channels, no way to create custom channels anymore. Hopefully I can also drag some more people in, and make it much simpler to use, and on top of this make it super easy to link to Discord and such. So yeah! It’s been going well, I’m still alive, I’m running out of time to ship… and uh yeah! Have fun coding!
A lot… I JUST BROKE 30 HOURS ON THIS PROJECT SERVER-SIDE CODING OMG!!! :D Well Cami has been rolling along reallllllllly quickly. Things I’ve added/worked on: Playlists/More Music Stuff Fixing up the post search api Remake of ws chat server Fries have been implemented Fries transfer is working Fries daily claiming is working So many fixes (many things didnt quite properly handle errors and so they have been fixed) Changes to your user info are being locked behind fries. (PFP Decor is locked but pfp, bio, and more will be locked, basically everything but password changes) Image/Music uploading will likely be locked behind fries, or you will have to pay fries to upgrade the amount of stuff you can store. More PFP Decor has been added to my personal instance but that doesnt affect here. Server logs are prettier. More info attached to the user queries. Thanks for reading and sticking with this shitshow of a project.
AI generated a client so people can actually use it. Once again, I truthfully, have not used AI in this project for anything but front end, which I do not know how to do. Over the course of testing I have mainly used raw HTTP requests.
Well it was fun! (Its going for another week after i blow all my stardust.) Hello stardancers. Its 9-29-26. I’m not going to be able to make another ship and get it rated. Thank you everyone so much for the support on this project, and thanks for running Stardance! Mainly just working on live chatting, a decentralizable chatting service similar to discord, which will be picked up on phantom.hackclub.com. For anyone wondering what I got out of Stardance: 1 domain Outpost Badge (will make a project with that too!) Factorio Pico-8
Fixes/Tweaks Might as well just get some time out here, I’ve literally been working on livechatting and misc fixes. I’ve been so stressed and tired and distracted I don’t remember working on this at all. I’ve moved primarily to working on Phantom, tryna get me a blahaj and balatroooooooo also its been 12 days please ship me my items 😭 Live Chatting Decentralized? Check Ability to change servername dynamically? Check Editing/Deleting messages? Check we’re so goated :)
Ships:
Cami is a full authentication backend. I made this for use in my own projects, and as a way to learn web stuff with flask. It was challenging just getting it all working. Combining Flask and TinyDB (things I’m not too familiar with) to make this come together. To use, register an account on the homepage, then click around and see what you can do! THE CLIENT USED IS AI: I do not know how to do frontend html work, and that is not the project. The project is the backend python.
Welcome to Cami! It’s been a difficult 30 hour journey and I’m tryna get me Factorio to wrap up this awesome summer. :P Warning: The client is AI-Generated, it is not the project, simply a tool so you guys don’t have to make raw http requests with python. None of the rest of the project is AI-Generated....
|
1793000867.682174
|
1793087267.682174
|
|
46456
|
Tanjiro themed personal website by @Tanjiro | Star Tanjiro themed personal website by @Tanjiro | Stardance...
|
Tanjiro
|
1
|
37.17
|
528
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-05T13:07:45Z", "hours": 32.0, "multiplier": 16.62, "payout": 528, "blessing": "neutral", "text": "A Tanjiro-Themed Personal Portfolio that uses Vanilla HTML, CSS and JS with a bit of GSAP! Challenges and Difficulties :- Figuring out the responsive layout for website - I did not start with a responsive layout, which caused a lot of trouble just making section 1 responsive was so difficult that it lot more than 6 hours IG Understanding and Writing code for scroll-animation canvas - This was a lot tuff than I thought like every frame must be numbered and counted and what not. Honestly, it was a great learning journey! Making that scroll-animation Canvas Responsive - From the start I knew that this will be a lot tuff, but I did not expect this much like it made my js code’s line count from 100 to near 200 lines! Entire Section 4 - This section was really Precious to me cause it had every interest I had and liked, every hour I spent into building this section was WORTH IT. Learnings :- Understood why to start and maintain responsiveness. How scroll-animation canvas is made and how apple makes them Flexbox and Gridboxes Much more in JS A lot of CSS", "repo": "https://github.com/YOBO-DANCE/Tanjiro-Themed-Personal-Website", "demo": "https://tanjiro-themed-personal-website.vercel.app/"}]...
|
[{"post_id": 67893, "ts": "202 [{"post_id": 67893, "ts": "2026-09-14T06:12:26Z", "hours": 1.4844, "text": "Okay, now every AI imagery is removed and the project is ready to be shipped!"}, {"post_id": 66725, "ts": "2026-09-12T16:50:27Z", "hours": 1.6397, "text": "Devlog 24 - I removed the section where the Ai generated imagery is located aka the scroll-driven animation and added a much lovely and nice section design for the section"}, {"post_id": 64938, "ts": "2026-09-09T17:42:53Z", "hours": 1.0211, "text": "Devlog 21 - So I Again got some recommendation and changes requested so I will do them, but today I did half of the work. Tmr I will do the next half"}, {"post_id": 63994, "ts": "2026-09-08T03:01:52Z", "hours": 0.25, "text": "Devlog 20 - So I got so many recomdations and I made the changes! Note for shipwrights - I first made the README with AI because I didn’t knew what to write, but after it I completely rewrote the README as per my requirements and then only shipped the project. So, it might feel like AI, but it really isn’t."}, {"post_id": 62758, "ts": "2026-09-06T08:47:33Z", "hours": 0.7736, "text": "Devlog 19 - Okay so I did some changes to the code and README. The layout is still same tho!"}, {"post_id": 62163, "ts": "2026-09-05T12:52:41Z", "hours": 3.7817, "text": "My Project is ready to be shipped!!!!!"}, {"post_id": 61619, "ts": "2026-09-04T16:37:48Z", "hours": 0.35, "text": "Devlog 18 - Tried to deploy but my internet gave up"}, {"post_id": 60861, "ts": "2026-09-03T14:21:49Z", "hours": 4.4564, "text": "Devlog 18 - Completed Section 4 and added a custom trail custom which mimics fire"}, {"post_id": 60271, "ts": "2026-09-02T15:22:51Z", "hours": 0.5767, "text": "Devlog 17 - Section 4 is such a Headache and I cannot understand it"}, {"post_id": 60250, "ts": "2026-09-02T14:40:48Z", "hours": 0.5303, "text": "Devlog 16 - Starting Section 4 i.e. My Goals! Wish me Luck!"}, {"post_id": 59543, "ts": "2026-09-01T12:57:56Z", "hours": 1.4031, "text": "Devlog 15 - Milestone: Completed Section 3/bio section What changes did I made? I added a grid structure Added another carousel, so the main text is wrapped around the carousel Added a Glass Box around the paragraph for aesthetics! Made it responsive!!! Good Bye"}, {"post_id": 58075, "ts": "2026-08-30T12:47:53Z", "hours": 0.4658, "text": "Devlog 14 - Working on the paragraph"}, {"post_id": 57518, "ts": "2026-08-29T18:01:38Z", "hours": 1.6658, "text": "Devlog 13 - Today I did some tweaking around and this is the result. Also now I added a dropshadow type effect to the scroll animation."}, {"post_id": 53019, "ts": "2026-08-23T12:23:06Z", "hours": 1.6194, "text": "Devlog 12 - Did some learning and working today! Nothing else!"}, {"post_id": 52466, "ts": "2026-08-22T16:19:40Z", "hours": 0.3833, "text": "Devlog 11 - why the F#ck does AI mess up so much!!!!! So I tried to generate the scroll-driven animation video using google flow, but it has caused so much problems because it just keeps making tanjiro’s hand being on the sheath rather than being on the sword handle like it should. Will try again, see ya later!"}, {"post_id": 52169, "ts": "2026-08-22T08:09:10Z", "hours": 1.0378, "text": "Devlog 10 - Today I am completely annoyed because a f#cking font won’t load or is even trying. It feels like programming has been an AI, forgetting as the context becomes larger. I can’t even load those fonts. Also I learned some CSS grid today!"}, {"post_id": 51923, "ts": "2026-08-21T20:51:10Z", "hours": 4.1367, "text": "Devlog 9 - So I completed a portrait mode of scroll-driven animation and it was a mess because the ai video generation kept messin’ up and it took 4 tries just to get correct angle. Now I just need to start with next section of the website. Hope to see ya!"}, {"post_id": 51575, "ts": "2026-08-21T10:55:58Z", "hours": 3.6494, "text": "Devlog 8 - So I worked on nav menu trying to make it like a proper liquid glass only to fail :( and then I started to work on second page whose start will be a scrollable animation like freaking Apple’s websites. IG, this will be a big project, and with that my whole morning, afternoon and evening is gone! 🥲"}, {"post_id": 51088, "ts": "2026-08-20T16:09:59Z", "hours": 0.3383, "text": "Devlog 7 - So I finished responsive work on first page, now onto making second page"}, {"post_id": 51052, "ts": "2026-08-20T15:12:53Z", "hours": 0.7858, "text": "Devlog 6 - Got a new problem, So I just added some Responsive CSS and now the Nav links are at extremely left. This is caused by the changes in the html structure and now I think I am losing my mind!!!!!??"}, {"post_id": 47969, "ts": "2026-08-16T07:42:53Z", "hours": 0.9731, "text": "Devlog 5 - Learning some CSS flexbox! Can’t wait to use it >.<"}, {"post_id": 47592, "ts": "2026-08-15T16:06:43Z", "hours": 1.2222, "text": "Devlog 4 - Learned Media queries, Css variables, positioning, Clamp property, etc."}, {"post_id": 47495, "ts": "2026-08-15T13:20:42Z", "hours": 2.7556, "text": "Devlog 3 - Some Major Changes! I Added a background video playing some demon slayer, and took inspiration from liquid GL”ASS”"}, {"post_id": 44834, "ts": "2026-08-10T21:09:39Z", "hours": 0.4383, "text": "Devlog 2 - SO I detached the navbar from the website and added some inner box shadow, according to me it looks great!"}, {"post_id": 44803, "ts": "2026-08-10T20:29:59Z", "hours": 1.1994, "text": "Devlog 1 - Today I added a basic Navbar with a little CSS to it!"}]...
|
Title: Tanjiro themed personal website by @Tanjiro Title: Tanjiro themed personal website by @Tanjiro | Stardance
Devlogs:
Devlog 1 - Today I added a basic Navbar with a little CSS to it!
Devlog 2 - SO I detached the navbar from the website and added some inner box shadow, according to me it looks great!
Devlog 3 - Some Major Changes! I Added a background video playing some demon slayer, and took inspiration from liquid GL”ASS”
Devlog 4 - Learned Media queries, Css variables, positioning, Clamp property, etc.
Devlog 5 - Learning some CSS flexbox! Can’t wait to use it >.<
Devlog 6 - Got a new problem, So I just added some Responsive CSS and now the Nav links are at extremely left. This is caused by the changes in the html structure and now I think I am losing my mind!!!!!??
Devlog 7 - So I finished responsive work on first page, now onto making second page
Devlog 8 - So I worked on nav menu trying to make it like a proper liquid glass only to fail :( and then I started to work on second page whose start will be a scrollable animation like freaking Apple’s websites. IG, this will be a big project, and with that my whole morning, afternoon and evening is gone! 🥲
Devlog 9 - So I completed a portrait mode of scroll-driven animation and it was a mess because the ai video generation kept messin’ up and it took 4 tries just to get correct angle. Now I just need to start with next section of the website. Hope to see ya!
Devlog 10 - Today I am completely annoyed because a f#cking font won’t load or is even trying. It feels like programming has been an AI, forgetting as the context becomes larger. I can’t even load those fonts. Also I learned some CSS grid today!
Devlog 11 - why the F#ck does AI mess up so much!!!!! So I tried to generate the scroll-driven animation video using google flow, but it has caused so much problems because it just keeps making tanjiro’s hand being on the sheath rather than being on the sword handle like it should. Will try again, see ya later!
Devlog 12 - Did some learning and working today! Nothing else!
Devlog 13 - Today I did some tweaking around and this is the result. Also now I added a dropshadow type effect to the scroll animation.
Devlog 14 - Working on the paragraph
Devlog 15 - Milestone: Completed Section 3/bio section What changes did I made? I added a grid structure Added another carousel, so the main text is wrapped around the carousel Added a Glass Box around the paragraph for aesthetics! Made it responsive!!! Good Bye
Devlog 16 - Starting Section 4 i.e. My Goals! Wish me Luck!
Devlog 17 - Section 4 is such a Headache and I cannot understand it
Devlog 18 - Completed Section 4 and added a custom trail custom which mimics fire
Devlog 18 - Tried to deploy but my internet gave up
My Project is ready to be shipped!!!!!
Devlog 19 - Okay so I did some changes to the code and README. The layout is still same tho!
Devlog 20 - So I got so many recomdations and I made the changes! Note for shipwrights - I first made the README with AI because I didn’t knew what to write, but after it I completely rewrote the README as per my requirements and then only shipped the project. So, it might feel like AI, but it really isn’t.
Devlog 21 - So I Again got some recommendation and changes requested so I will do them, but today I did half of the work. Tmr I will do the next half
Devlog 24 - I removed the section where the Ai generated imagery is located aka the scroll-driven animation and added a much lovely and nice section design for the section
Okay, now every AI imagery is removed and the project is ready to be shipped!
Ships:
A Tanjiro-Themed Personal Portfolio that uses Vanilla HTML, CSS and JS with a bit of GSAP! Challenges and Difficulties :- Figuring out the responsive layout for website - I did not start with a responsive layout, which caused a lot of trouble just making section 1 responsive was so difficult that it lot more than 6 hours IG Understanding and Writing code for scroll-animation canvas - This was a lot tuff than I thought like every frame must be numbered and counted and what not. Honestly, it was a great learning journey! Making that scroll-animation Canvas Responsive - From the start I knew that this will be a lot tuff, but I did not expect this much like it made my js code’s line count from 100 to near 200 lines! Entire Section 4 - This section was really Precious to me cause it had every interest I had and liked, every hour I spent into building this section was WORTH IT. Learnings :- Understood why to start and maintain responsiveness. How scroll-animation canvas is made and how apple makes them Flexbox and Gridboxes Much more in JS A lot of CSS...
|
1792993865.748864
|
1793080265.748864
|
|
54314
|
Aporia by @Eclipse | Stardance
|
Eclipse
|
1
|
32.62
|
528
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-16T16:28:28Z", "hours": 30.0, "multiplier": 14.58, "payout": 528, "blessing": "neutral", "text": "What did I make? I made Aporia: Hear Chaos, a double pendulum simulation that lets you see and hear chaos. Two almost identical pendulums, one tiny difference, and eventually two very different futures… Just physics being dramatic again, lol… What was challenging? Tbh, making the project itself was the biggest challenge for me, as I was a total Cpp beginner before starting it out, perhaps that’s why it took me so long to make this project? But anyways, it started as one small C++ file and somehow became a collection of about 17 files and several opportunities to question my life choices. Even in that ig, the hardest part was the Sonification, as Sound and waves are lwk my weakest parts of physics ;-; And also the fact that I’m not used to making huge projects like these (yes, for me it’s huge 🗿), as the project grew bigger and bigger, I encountered another problem, that is I’d sometimes randomly forget what function did what and why and stuff like that… which led to me finally learning the hard way why Comments are necessary in programming 🫠 I’m just proud that I was able to finish this project at all,, which looked like a mountain by the time I started,, but step by step, I was able to tame it.. :) If you encounter an error like “damaged file” or smth while running Aporia, do read the Readme on it’s github repo where I’ve written down the steps to solve it.. And that’s it I believe? It was fun 🍀 Thank you for reading all the way till here..!! and Have an amazing dayy!!", "repo": "https://github.com/Alchemic-Eclipse/aporia", "demo": "https://github.com/Alchemic-Eclipse/aporia/releases/tag/v1.0"}]...
|
[{"post_id": 81831, "ts": "202 [{"post_id": 81831, "ts": "2026-10-22T17:39:03Z", "hours": 2.6228, "text": "The Ultimate Return After a month, that is one hell of a title. But guess what, I’m back again!! After a long enough break, I think I’m ready to get in the quiet grind mode 🗿 . The biggest complaints with Aporia till now was the fact that it’s only for Mac and not windows…. but that shall change soon, ie. I’m working on a Windows build of Aporia, which is somewhat ready, in a way. So within the next few days, it’ll be available for both operating systems (if ur not sure why I added the cat emoji, trust me, even I’m not sure 😭) . But keeping that aside, I have made some progress today, that is, The simulation is wayy more realistic now. This is because in the shipped version of Aporia, the size of pendulum I used was 80 meters, instead of 80 centimeters,,, which is a little huge, incase you live under a rock 🗿 So after some tries n fixes here and there, I finally got it down to 0.8 meters (aka 80 cm), making the simulation even more realistic than before. I’ve adjusted the time step to be approximately the same as the real life time step of our world (1 sec per sec). Previously it used to be a little faster… making the simulation appear faster than it actually is… even tho time step was still editable, but why not just make the default one sane? . And now, even in Aporia, every 60 sec, a minute passes,,,, but together we can change that!!!! (ifukuk 🥀) . Anyways with that, let’s end today’s devlog, I have many other extra features planned as I make Aporia better everydayy lol!! . And as always Have a beautiful morning..!! 🍀 P.S. Reduce ur device volume before playing the video attached,, thank me later 💔"}, {"post_id": 69207, "ts": "2026-09-16T16:26:47Z", "hours": 1.6406, "text": "Final of the final devlog yep, turns out the build file had quite a few errors and things I should’ve fixed earlier but somehow never crossed my mind,, . along with the fact that I don’t have Apple verification or whatever it’s called 😭 . Anyways, fixed all the issues I could see, and as far as Ik, none of them are left anymore (hopefully)… And now I can finally ship Aporia after some additional testing on other devices . Thank you once againn…!! . (Also as I don’t have any specific attachments, I’ll just add the home-page of aporia as the attachment this time…)"}, {"post_id": 68755, "ts": "2026-09-15T17:55:47Z", "hours": 3.6928, "text": "Final Devlog Functions I added today: Mute / Unmute Navigation Controls menu And finally completed the Readme, that took the most time out of all… . And now I can ship the project 🙃 I’ll keep it short as I’m in a bit of rush right now… but yeah… . It has been an incredible journey..!! Thank you for being a part of it..!! 🦋"}, {"post_id": 68516, "ts": "2026-09-15T07:43:21Z", "hours": 4.8181, "text": "UI Improvements The UI speaks for itself 🗿 (ifykyk, chess)"}, {"post_id": 67522, "ts": "2026-09-13T17:16:45Z", "hours": 1.5411, "text": "Sonification yes….! now you can hear your life chaos through the positions and the angular speeds of the double pendulums… . Specifically, the angular position determines the pitch and the angular speed determines the volume of the sound. . With that, all the core features of Aporia are completely in working condition. That is, now the only things left are: Making the design/typography better. Making the sonification pleasant 🗿 Because, even though you can hear the pendulums diverge through the difference in pitch, the sound it creates is a bit…… uhh…… mathematical? 😭 . Let me clarify, the sounds it generate are derived from a Sine wave… but two simultaneous sine waves can become unpleasant surprisingly quickly, because apparently even mathematics needs a volume limit 🗿🤷🏻♂️ . So it sounds just like two aliens attempting to negotiate a treaty through a malfunctioning fax machine 💔… Which can lead to a headache pretty quickly if not cautious… so that is another thing I need to work on… . And that’s it for today? There’s no attachment as the Mac screen recorder doesn’t support system audio… so it’d be redundant to attach it without audio anyways…. (let me just attach a meme lol) . Anyways.. thank you for reading this through…!! and as always, Good morning 🍀❤️🩹"}, {"post_id": 66438, "ts": "2026-09-12T08:34:57Z", "hours": 4.1358, "text": "Interactive Screen As the title suggests I added: A home page An experiment page Made the exp. page interactive Even though Ik the UI looks awful, but that wasn’t my priority atm, it was to make it interactive, to make sure the changes we do in the values reflect in the simulation…. . Given the fact you know how much of a design freak I am, only I know how much I controlled myself from spending the entire night trying to fix the design… because apparently, projects like these have an instinctive desire to consume their creators…🗿 . But anyways, the next step would be to add proper sonification to Aporia, and then fix the design… . I took me an awful lot to do all that yesterday,,, Have you ever faced the thing, where you project becomes so huge, that you, yourself start getting confused about what things did what and why and stuff like that? 😭 Because now it has started happening to me, so from now on, I’ve decided to add comments to my code, for the sake of my future self 🤷🏻♂️. . And yeah, that’s it for today, I believe? Guten Morgen anyways..!! 🥱👋🏻"}, {"post_id": 65849, "ts": "2026-09-11T08:20:38Z", "hours": 1.9225, "text": "Atomic Difference Ladies and gentlemen, Both the pendulums started out only an “atom” apart. I don’t think I need to provide any more context 🐱 . They should always follow the same path, right? RIGHT? 😶🌫️ Let’s see…. . . . Saw the video? yep, they started only an “atom” apart, yet couldn’t even last a minute together….💔🥀 lol . Shows us how extremely small differences compound overtime in chaotic systems (like weather prediction systems, double pendulums, etc) . But anyways, the changes I made are too visible to list down, so I’ll let it be for now…. 🗿 . Good Evening 🦋🤷🏻♂️"}, {"post_id": 63766, "ts": "2026-09-07T18:43:54Z", "hours": 2.5447, "text": "Small updates Hello there,, quite tired today, so I don’t think I’ll be able to write much in today’s devlog… let me just start by writing down the things I added in Aporia today: Max Energy Error (helpful in comparing different integrators for a fixed amount of time) Pause/ Play / Reset using keys Increment the simulation by 1 step when paused by pressing N I believe I shall complete this project this week if things go according to the plan, even though, I can also do the same in next 3 days, but I genuinely don’t love the idea of me working day in and day out like a caffeinated squirrel whose rent is due the next day… So I’m trying to be a ‘bit’ reasonable here 😭 . And, that’s it for the day, I believe..? Happy Tuesday ig 🤷🏻♂️ & Good Morning 🥀 . P.S. btw sorry if I sound a bit tired, many reasons, but a bad day doesn’t imply a bad life, so I’ll just keep moving 🙃 If you genuinely take time out to read my entire devlogs, then you’re the best lol (for me, at least) ❤️🩹 Thank you ❤️🩹"}, {"post_id": 61662, "ts": "2026-09-04T18:13:00Z", "hours": 1.9792, "text": "Adding RK4 to the simulation And guess what? The Energy error dropped from roughly 10^(-1)% to 10^(-6)% orders of magnitude 💀 (Literally FIVE orders of magnitude lower 🫎) . When I first tried running the program after writing the code for RK4, the best I expected was like 10^(-2) ngl 🥀 . Tho the problem is, I’m running both the versions for an arbitrary amount of time, and then trying to compare the error, which lwk reminds me of atomic bomb vs coughing baby 😭💔 . So my next goal shall be to script a comparer or some sort, which may output things like : maximum energy error final energy error average energy error number of steps simulated time etc Should be fun lol,, . . Also also, I tried one more thing, that is, I changed dt to 1 sec 💀 and guess what was the error % of RK4? 60% 💀 (literally 10^(-6) to 60% 💔) which is basically the numerical equivalent of telling the laws of physics, “I have a better idea” 🗿✌🏻 . But nevertheless, learned a lotttt today..!! Holy productivity~~~ 🦋🥹 . But anyways, that’s it for today, Good Morning~!! P.S. I think this project is lwk going in the right direction, the experimentation, the research, the learnings, new future features, all these things mean way more to me than making a random copy-paste project saying “I made a double pendulum go brrr” 😭 lol"}, {"post_id": 61016, "ts": "2026-09-03T18:31:08Z", "hours": 2.3808, "text": "Rendering the Euler Hypothesis of Aporia yeah, fancy title innit? 🥀 (sorry 😭💔) . but as the title suggests, I finally was able to render a basic simulation of Aporia with a single, double pendulum, that renders using the Euler Integration method (for now). . This is the first major step of the simulator… which shall become clear as we move towards the future with the speed of 1 sec per second (🗿) . Alr, keeping that aside, if you pay some attention to the stuff printing out in the console (in the video), that,,, is the energy difference oscillating (and the Energy Error), which ideally should be 0 (as energy is conserved in a closed system). . Which shows us that Euler integrator doesn’t just inject extra energy into the system, but also lets some of it bleed out (which shall become important later on as we compare different integrators). . And, that’s it for the day ig? . Thank you for reading it through..!! Have a nice dayyy…!! 🌙"}, {"post_id": 60466, "ts": "2026-09-02T20:04:18Z", "hours": 2.7894, "text": "Completed CLI / Math Engine Ladies and gentlemen, guess who finally completed the complete transfer of code structures and added Energy engine in Aporia? 😭 . ngl, the experience was lwk tedious, rewriting old, long equations in new format just so they could cooperate with me as I make Aporia bigger instead of playing like a 2nd grader trying to solve a 12th grade question, and acting like everything is fine…🤷🏻♂️ . I also divided the program in multiple files for the same reason, I really don’t love the idea of one source file having 800+ lines of code and some prayers where I’m trying to fix a bug on line 265, which turns out to be blank 🗿 . With that, tomorrow I shall be starting the work on GUI and Rendering… so that it finally looks like a simulation… ❤️🩹 . btw, Good Morning~~ 🥱"}, {"post_id": 58864, "ts": "2026-08-31T13:19:12Z", "hours": 2.6917, "text": "Restarting Aporia After abandoning the project due to some technical glitches on Stardance’s website, guess who’s back once the glitch got fixed? 🗿✌🏻 . This devlog shall mark the beginning of a new start. . I had already completed the Physics Engine long ago, ie. From today I’ll be focusing on finally completing the project along with GUI and Rendering… . P.S. Ik this one sounds a bit rushed, it’s because I’m running low on time and have many deadlines this month, so can’t spend too much time writing devlogs or else I’m cooked 🥹🐈 (tho I’ll try my best to properly write the ones that come after this fs)"}]...
|
Title: Aporia by @Eclipse | Stardance
Devlogs:
Re Title: Aporia by @Eclipse | Stardance
Devlogs:
Restarting Aporia After abandoning the project due to some technical glitches on Stardance’s website, guess who’s back once the glitch got fixed? 🗿✌🏻 . This devlog shall mark the beginning of a new start. . I had already completed the Physics Engine long ago, ie. From today I’ll be focusing on finally completing the project along with GUI and Rendering… . P.S. Ik this one sounds a bit rushed, it’s because I’m running low on time and have many deadlines this month, so can’t spend too much time writing devlogs or else I’m cooked 🥹🐈 (tho I’ll try my best to properly write the ones that come after this fs)
Completed CLI / Math Engine Ladies and gentlemen, guess who finally completed the complete transfer of code structures and added Energy engine in Aporia? 😭 . ngl, the experience was lwk tedious, rewriting old, long equations in new format just so they could cooperate with me as I make Aporia bigger instead of playing like a 2nd grader trying to solve a 12th grade question, and acting like everything is fine…🤷🏻♂️ . I also divided the program in multiple files for the same reason, I really don’t love the idea of one source file having 800+ lines of code and some prayers where I’m trying to fix a bug on line 265, which turns out to be blank 🗿 . With that, tomorrow I shall be starting the work on GUI and Rendering… so that it finally looks like a simulation… ❤️🩹 . btw, Good Morning~~ 🥱
Rendering the Euler Hypothesis of Aporia yeah, fancy title innit? 🥀 (sorry 😭💔) . but as the title suggests, I finally was able to render a basic simulation of Aporia with a single, double pendulum, that renders using the Euler Integration method (for now). . This is the first major step of the simulator… which shall become clear as we move towards the future with the speed of 1 sec per second (🗿) . Alr, keeping that aside, if you pay some attention to the stuff printing out in the console (in the video), that,,, is the energy difference oscillating (and the Energy Error), which ideally should be 0 (as energy is conserved in a closed system). . Which shows us that Euler integrator doesn’t just inject extra energy into the system, but also lets some of it bleed out (which shall become important later on as we compare different integrators). . And, that’s it for the day ig? . Thank you for reading it through..!! Have a nice dayyy…!! 🌙
Adding RK4 to the simulation And guess what? The Energy error dropped from roughly 10^(-1)% to 10^(-6)% orders of magnitude 💀 (Literally FIVE orders of magnitude lower 🫎) . When I first tried running the program after writing the code for RK4, the best I expected was like 10^(-2) ngl 🥀 . Tho the problem is, I’m running both the versions for an arbitrary amount of time, and then trying to compare the error, which lwk reminds me of atomic bomb vs coughing baby 😭💔 . So my next goal shall be to script a comparer or some sort, which may output things like : maximum energy error final energy error average energy error number of steps simulated time etc Should be fun lol,, . . Also also, I tried one more thing, that is, I changed dt to 1 sec 💀 and guess what was the error % of RK4? 60% 💀 (literally 10^(-6) to 60% 💔) which is basically the numerical equivalent of telling the laws of physics, “I have a better idea” 🗿✌🏻 . But nevertheless, learned a lotttt today..!! Holy productivity~~~ 🦋🥹 . But anyways, that’s it for today, Good Morning~!! P.S. I think this project is lwk going in the right direction, the experimentation, the research, the learnings, new future features, all these things mean way more to me than making a random copy-paste project saying “I made a double pendulum go brrr” 😭 lol
Small updates Hello there,, quite tired today, so I don’t think I’ll be able to write much in today’s devlog… let me just start by writing down the things I added in Aporia today: Max Energy Error (helpful in comparing different integrators for a fixed amount of time) Pause/ Play / Reset using keys Increment the simulation by 1 step when paused by pressing N I believe I shall complete this project this week if things go according to the plan, even though, I can also do the same in next 3 days, but I genuinely don’t love the idea of me working day in and day out like a caffeinated squirrel whose rent is due the next day… So I’m trying to be a ‘bit’ reasonable here 😭 . And, that’s it for the day, I believe..? Happy Tuesday ig 🤷🏻♂️ & Good Morning 🥀 . P.S. btw sorry if I sound a bit tired, many reasons, but a bad day doesn’t imply a bad life, so I’ll just keep moving 🙃 If you genuinely take time out to read my entire devlogs, then you’re the best lol (for me, at least) ❤️🩹 Thank you ❤️🩹
Atomic Difference Ladies and gentlemen, Both the pendulums started out only an “atom” apart. I don’t think I need to provide any more context 🐱 . They should always follow the same path, right? RIGHT? 😶🌫️ Let’s see…. . . . Saw the video? yep, they started only an “atom” apart, yet couldn’t even last a minute together….💔🥀 lol . Shows us how extremely small differences compound overtime in chaotic systems (like weather prediction systems, double pendulums, etc) . But anyways, the changes I made are too visible to list down, so I’ll let it be for now…. 🗿 . Good Evening 🦋🤷🏻♂️
Interactive Screen As the title suggests I added: A home page An experiment page Made the exp. page interactive Even though Ik the UI looks awful, but that wasn’t my priority atm, it was to make it interactive, to make sure the changes we do in the values reflect in the simulation…. . Given the fact you know how much of a design freak I am, only I know how much I controlled myself from spending the entire night trying to fix the design… because apparently, projects like these have an instinctive desire to consume their creators…🗿 . But anyways, the next step would be to add proper sonification to Aporia, and then fix the design… . I took me an awful lot to do all that yesterday,,, Have you ever faced the thing, where you project becomes so huge, that you, yourself start getting confused about what things did what and why and stuff like that? 😭 Because now it has started happening to me, so from now on, I’ve decided to add comments to my code, for the sake of my future self 🤷🏻♂️. . And yeah, that’s it for today, I believe? Guten Morgen anyways..!! 🥱👋🏻
Sonification yes….! now you can hear your life chaos through the positions and the angular speeds of the double pendulums… . Specifically, the angular position determines the pitch and the angular speed determines the volume of the sound. . With that, all the core features of Aporia are completely in working condition. That is, now the only things left are: Making the design/typography better. Making the sonification pleasant 🗿 Because, even though you can hear the pendulums diverge through the difference in pitch, the sound it creates is a bit…… uhh…… mathematical? 😭 . Let me clarify, the sounds it generate are derived from a Sine wave… but two simultaneous sine waves can become unpleasant surprisingly quickly, because apparently even mathematics needs a volume limit 🗿🤷🏻♂️ . So it sounds just like two aliens attempting to negotiate a treaty through a malfunctioning fax machine 💔… Which can lead to a headache pretty quickly if not cautious… so that is another thing I need to work on… . And that’s it for today? There’s no attachment as the Mac screen recorder doesn’t support system audio… so it’d be redundant to attach it without audio anyways…. (let me just attach a meme lol) . Anyways.. thank you for reading this through…!! and as always, Good morning 🍀❤️🩹
UI Improvements The UI speaks for itself 🗿 (ifykyk, chess)
Final Devlog Functions I added today: Mute / Unmute Navigation Controls menu And finally completed the Readme, that took the most time out of all… . And now I can ship the project 🙃 I’ll keep it short as I’m in a bit of rush right now… but yeah… . It has been an incredible journey..!! Thank you for being a part of it..!! 🦋
Final of the final devlog yep, turns out the build file had quite a few errors and things I should’ve fixed earlier but somehow never crossed my mind,, . along with the fact that I don’t have Apple verification or whatever it’s called 😭 . Anyways, fixed all the issues I could see, and as far as Ik, none of them are left anymore (hopefully)… And now I can finally ship Aporia after some additional testing on other devices . Thank you once againn…!! . (Also as I don’t have any specific attachments, I’ll just add the home-page of aporia as the attachment this time…)
The Ultimate Return After a month, that is one hell of a title. But guess what, I’m back again!! After a long enough break, I think I’m ready to get in the quiet grind mode 🗿 . The biggest complaints with Aporia till now was the fact that it’s only for Mac and not windows…. but that shall change soon, ie. I’m working on a Windows build of Aporia, which is somewhat ready, in a way. So within the next few days, it’ll be available for both operating systems (if ur not sure why I added the cat emoji, trust me, even I’m not sure 😭) . But keeping that aside, I have made some progress today, that is, The simulation is wayy more realistic now. This is because in the shipped version of Aporia, the size of pendulum I used was 80 meters, instead of 80 centimeters,,, which is a little huge, incase you live under a rock 🗿 So after some tries n fixes here and there, I finally got it down to 0.8 meters (aka 80 cm), making the simulation even more realistic than before. I’ve adjusted the time step to be approximately the same as the real life time step of our world (1 sec per sec). Previously it used to be a little faster… making the simulation appear faster than it actually is… even tho time step was still editable, but why not just make the default one sane? . And now, even in Aporia, every 60 sec, a minute passes,,,, but together we can change that!!!! (ifukuk 🥀) . Anyways with that, let’s end today’s devlog, I have many other extra features planned as I make Aporia better everydayy lol!! . And as always Have a beautiful morning..!! 🍀 P.S. Reduce ur device volume before playing the video attached,, thank me later 💔
Ships:
What did I make? I made Aporia: Hear Chaos, a double pendulum simulation that lets you see and hear chaos. Two almost identical pendulums, one tiny difference, and eventually two very different futures… Just physics being dramatic again, lol… What was challenging? Tbh, making the project itself was the biggest challenge for me, as I was a total Cpp beginner before starting it out, perhaps that’s why it took me so long to make this project? But anyways, it started as one small C++ file and somehow became a collection of about 17 files and several opportunities to question my life choices. Even in that ig, the hardest part was the Sonification, as Sound and waves are lwk my weakest parts of physics ;-; And also the fact that I’m not used to making huge projects like these (yes, for me it’s huge 🗿), as the project grew bigger and bigger, I encountered another problem, that is I’d sometimes randomly forget what function did what and why and stuff like that… which led to me finally learning the hard way why Comments are necessary in programming 🫠 I’m just proud that I was able to finish this project at all,, which looked like a mountain by the time I started,, but step by step, I was able to tame it.. :) If you encounter an error like “damaged file” or smth while running Aporia, do read the Readme on it’s github repo where I’ve written down the steps to solve it.. And that’s it I believe? It was fun 🍀 Thank you for reading all the way till here..!! and Have an amazing dayy!!...
|
1793008175.9253016
|
1793094575.9253016
|
|
1170
|
Azimuthal by @M8000 | Stardance
|
M8000
|
2
|
36.0
|
527
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-12T10:59:29Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Azimuthal - A satellite tracking webapp Trying to make this into my first professional website. The most difficult part was optimization and getting down loading/buffering times, followed by updating data automatically through API.", "repo": "https://github.com/abhijato-c/Azimuthal", "demo": "https://azimuthal.vercel.app/"}, {"ship_num": 2, "ts": "2026-07-13T12:15:27Z", "hours": 32.0, "multiplier": 16.56, "payout": 527, "blessing": "neutral", "text": "A satellite tracking website with features to filter, see location details, and see motion in real time. The most difficult part of the project was removing the lag, since tracking 18,000 satellites in real time is very computationally expensive", "repo": "https://github.com/abhijato-c/Azimuthal", "demo": "https://azimuthal.vercel.app/"}]...
|
[{"post_id": 79013, "ts": "202 [{"post_id": 79013, "ts": "2026-10-12T10:55:48Z", "hours": 0.34, "text": "Changes Fixed CRON job on vercel Added SEO optimizations through sitemaps, meta tags etc"}, {"post_id": 42559, "ts": "2026-08-07T11:42:50Z", "hours": 0.5564, "text": "Changes Limited max fast forward speed to 10x Limited max date range to 1 day back and forth from current time (TLE’s expire) Bugfix on interpolation not updating when timeline was scrubbed to a previous date. Next Update Try to reduce lag Faster updates"}, {"post_id": 41865, "ts": "2026-08-06T10:41:53Z", "hours": 0.6972, "text": "Changes Removed caching Space-Track cookie Added a GitHub repo badge Replaced .png Info and Menu icons with .svg files"}, {"post_id": 41260, "ts": "2026-08-05T11:19:45Z", "hours": 1.0658, "text": "Changes Added vercel speed analytics Fixed and muted some errors and warnings regarding npm packages Added a list of full launch site names, displayed instead of the code. Future Updates Add a github link/watermark (idk what it’s called) somewhere Fix issue where camera/satellites glitch when time is sped up (limit timeline, speed) Reduce loading times and lag"}, {"post_id": 40758, "ts": "2026-08-04T14:28:45Z", "hours": 1.0467, "text": "Changes Moved the countries list and country to launch site mapping from blob store to json file Added vercel analytics Details sidebar now shows full country name Next Updates Add json file of site names Show full site name in sidebar and search"}, {"post_id": 27637, "ts": "2026-07-13T12:13:07Z", "hours": 6.5639, "text": "Changes Fixed orbital calculations not auto updating Added interpolation Add location and position details in right sidebar Cleanup changes and minor refactor with the webworker."}, {"post_id": 16055, "ts": "2026-06-26T02:47:30Z", "hours": 1.7853, "text": "Fixes Cleaned up dead/burnt up satellites from db Minor fix in behavior of select all buttons Documented code, ts was seriously getting too complicated Major update - WebWorkers Managed to kinda deal with the lag by using WebWorkers. This means panning around the globe will be smoother, but in exchange, the satellite motions look framier as they are throttled."}, {"post_id": 15970, "ts": "2026-06-25T22:50:31Z", "hours": 1.7603, "text": "Changes Added satellite images for groups of satellites! There are now options to select and deselect all in the countries and sites menu. Searching by name now works. (literally forgot to implement this while working on filters) Images It’s impossible to individually get images for all 18,000 satellites, especially since most of them don’t have images or are classified. So here, I just used generic images for as many classes of satellites as possible. For example, all Starlink satellites have the same image, and all Russian COSMOS (military) satellites have a general depiction of the cosmos satellites. I tried to get the most accurate images for each group, but many are still artistic representations. All satellites not in any group fall back to a generic image Next step GET RID OF THE LAG! This has been pending for a long time, finally will work on it now."}, {"post_id": 15433, "ts": "2026-06-25T02:35:43Z", "hours": 2.73, "text": "Changes Changed map to MapTiler from Open Map Added tracking when you select a satellite. Camera automatically follows the satellite Tracking also shows the orbital trajectory in red Fixed a stupid bug where I added throttling to improve the performance, but that only reduce fps :/ Next Steps Add satellite images (idk how to do that for 18,000 satellites) Classify satellites and filter by category Color according to category"}, {"post_id": 14792, "ts": "2026-06-24T01:02:14Z", "hours": 1.3008, "text": "Created the right sidebar for details!"}, {"post_id": 12965, "ts": "2026-06-21T06:53:44Z", "hours": 1.2669, "text": "Made the list of satellites!"}, {"post_id": 9791, "ts": "2026-06-16T07:08:02Z", "hours": 2.1844, "text": "Updates Major CSS & color overhaul! Added the preview of the list of satellites returned by search, now need to make it dynamically added by js CSS and color designing is difficult, this update took quite a while… Next Make the list functional and clickable Show satellite details on click Trajectory tracking Try out the preview at nadir-space.vercel.app !"}, {"post_id": 8783, "ts": "2026-06-14T16:21:20Z", "hours": 1.7972, "text": "Finished the code to retrieve search results from the backend! Also filled in more sections of the sidebar. Next - show the search results in the scroll region, and handle search page flips."}, {"post_id": 8066, "ts": "2026-06-13T13:59:26Z", "hours": 1.0686, "text": "Added filters for launch site. Launch sites are populated automatically based on whichever countries are selected. Suggestions and improvements on GUI design are welcome! Next steps - Get the filtered satellites from the backend, and display them below the search filter on the sidebar as item boxes. Will also need to add trajectory tracking later."}, {"post_id": 7484, "ts": "2026-06-12T14:20:13Z", "hours": 1.6753, "text": "Working on some backend code for filtering satellite entries… This feature may take some time"}, {"post_id": 6905, "ts": "2026-06-11T16:06:27Z", "hours": 1.5061, "text": "Started work on the filter sidebar (suggestions on design improvements pls!!) Working with CSS is horrible, it takes me way too long to make a simple element fit properly.."}, {"post_id": 6242, "ts": "2026-06-10T14:21:04Z", "hours": 1.2944, "text": "Added the layouts for the search and info sidebar Next - populate the sidebars, first with the search function"}, {"post_id": 5612, "ts": "2026-06-09T14:03:39Z", "hours": 1.0925, "text": "Successfully rendered the satellites as moving dots! Now working on the GUI, including trajectory tracking, filtering, and loading screens."}, {"post_id": 4923, "ts": "2026-06-08T14:57:06Z", "hours": 1.115, "text": "Managed to write an API endpoint to retrieve satellite ID’s based on filters, will be used later in the frontend Next step - render the satellites as dots."}, {"post_id": 4079, "ts": "2026-06-07T08:35:10Z", "hours": 2.1633, "text": "Completed code to retrieve catalog of satellites, and store it in NeonDB! I might get banned from spacetrack bcz of the unholy number of API requests I fired for debugging…"}, {"post_id": 2757, "ts": "2026-06-05T15:12:05Z", "hours": 1.6494, "text": "It took me embarrassingly long to implement such a simple helper function! Finally though, I managed to be able to sign in to spacetrack, and store the session cookie provided in vercel blob storage. Most of my time went in debugging errors with blob storage, but now that I’ve learnt that, progress should be faster!"}, {"post_id": 303, "ts": "2026-06-01T15:43:25Z", "hours": 1.0647, "text": "Deployed the app on vercel, with a cesium js renderer!"}]...
|
Title: Azimuthal by @M8000 | Stardance
Devlogs:
D Title: Azimuthal by @M8000 | Stardance
Devlogs:
Deployed the app on vercel, with a cesium js renderer!
It took me embarrassingly long to implement such a simple helper function! Finally though, I managed to be able to sign in to spacetrack, and store the session cookie provided in vercel blob storage. Most of my time went in debugging errors with blob storage, but now that I’ve learnt that, progress should be faster!
Completed code to retrieve catalog of satellites, and store it in NeonDB! I might get banned from spacetrack bcz of the unholy number of API requests I fired for debugging…
Managed to write an API endpoint to retrieve satellite ID’s based on filters, will be used later in the frontend Next step - render the satellites as dots.
Successfully rendered the satellites as moving dots! Now working on the GUI, including trajectory tracking, filtering, and loading screens.
Added the layouts for the search and info sidebar Next - populate the sidebars, first with the search function
Started work on the filter sidebar (suggestions on design improvements pls!!) Working with CSS is horrible, it takes me way too long to make a simple element fit properly..
Working on some backend code for filtering satellite entries… This feature may take some time
Added filters for launch site. Launch sites are populated automatically based on whichever countries are selected. Suggestions and improvements on GUI design are welcome! Next steps - Get the filtered satellites from the backend, and display them below the search filter on the sidebar as item boxes. Will also need to add trajectory tracking later.
Finished the code to retrieve search results from the backend! Also filled in more sections of the sidebar. Next - show the search results in the scroll region, and handle search page flips.
Updates Major CSS & color overhaul! Added the preview of the list of satellites returned by search, now need to make it dynamically added by js CSS and color designing is difficult, this update took quite a while… Next Make the list functional and clickable Show satellite details on click Trajectory tracking Try out the preview at nadir-space.vercel.app !
Made the list of satellites!
Created the right sidebar for details!
Changes Changed map to MapTiler from Open Map Added tracking when you select a satellite. Camera automatically follows the satellite Tracking also shows the orbital trajectory in red Fixed a stupid bug where I added throttling to improve the performance, but that only reduce fps :/ Next Steps Add satellite images (idk how to do that for 18,000 satellites) Classify satellites and filter by category Color according to category
Changes Added satellite images for groups of satellites! There are now options to select and deselect all in the countries and sites menu. Searching by name now works. (literally forgot to implement this while working on filters) Images It’s impossible to individually get images for all 18,000 satellites, especially since most of them don’t have images or are classified. So here, I just used generic images for as many classes of satellites as possible. For example, all Starlink satellites have the same image, and all Russian COSMOS (military) satellites have a general depiction of the cosmos satellites. I tried to get the most accurate images for each group, but many are still artistic representations. All satellites not in any group fall back to a generic image Next step GET RID OF THE LAG! This has been pending for a long time, finally will work on it now.
Fixes Cleaned up dead/burnt up satellites from db Minor fix in behavior of select all buttons Documented code, ts was seriously getting too complicated Major update - WebWorkers Managed to kinda deal with the lag by using WebWorkers. This means panning around the globe will be smoother, but in exchange, the satellite motions look framier as they are throttled.
Changes Fixed orbital calculations not auto updating Added interpolation Add location and position details in right sidebar Cleanup changes and minor refactor with the webworker.
Changes Moved the countries list and country to launch site mapping from blob store to json file Added vercel analytics Details sidebar now shows full country name Next Updates Add json file of site names Show full site name in sidebar and search
Changes Added vercel speed analytics Fixed and muted some errors and warnings regarding npm packages Added a list of full launch site names, displayed instead of the code. Future Updates Add a github link/watermark (idk what it’s called) somewhere Fix issue where camera/satellites glitch when time is sped up (limit timeline, speed) Reduce loading times and lag
Changes Removed caching Space-Track cookie Added a GitHub repo badge Replaced .png Info and Menu icons with .svg files
Changes Limited max fast forward speed to 10x Limited max date range to 1 day back and forth from current time (TLE’s expire) Bugfix on interpolation not updating when timeline was scrubbed to a previous date. Next Update Try to reduce lag Faster updates
Changes Fixed CRON job on vercel Added SEO optimizations through sitemaps, meta tags etc
Ships:
A satellite tracking website with features to filter, see location details, and see motion in real time. The most difficult part of the project was removing the lag, since tracking 18,000 satellites in real time is very computationally expensive
Azimuthal - A satellite tracking webapp Trying to make this into my first professional website. The most difficult part was optimization and getting down loading/buffering times, followed by updating data automatically through API....
|
1792976110.8446984
|
1793062510.8446984
|
|
24566
|
Gamble This Website! by @forkosssa | Stardance
|
forkosssa
|
1
|
31.0
|
526
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-19T15:32:19Z", "hours": 31.0, "multiplier": 17.02, "payout": 526, "blessing": "neutral", "text": "A site where you gamble it’s budget and if you lose too much money it will impact the websites look and feel!", "repo": "https://github.com/Fork0n/gamble-this-site", "demo": "https://gamble-this-website.vercel.app/"}]...
|
[{"post_id": 31270, "ts": "202 [{"post_id": 31270, "ts": "2026-07-19T15:25:40Z", "hours": 4.92, "text": "so i’ve decided to finally end this project.it was fun but i think it’s already production ready, i’ve been working hard lately and i think it’s finished. i’ve finished the core mechanic of the site getting shittier and i’m really proud of my work. surely there are some bugs and other things that i’d love to change/fix but i’mma ship it as is.anyways, have fun playing!"}, {"post_id": 26127, "ts": "2026-07-10T18:55:01Z", "hours": 2.5892, "text": "So I’ve decided to finally address the elephant in the room and draw the sprites; apparently I’ve bitten off more than I can chew, and the sprites came out… shitty (who could’ve guessed). Even though it recorded only like 2 hrs, it was more like 2 hrs + 10+ hrs in Krita. Drawing sprites is apparently extremely hard sooooo idk if I will finish all the sprites before shipping. Anyways, I’ve done sprites for “normal” and “poor” statuses, and I guess I have to do the rich as well, since bankrupt will have no CSS anyways, and I’ll invent something for the filthy rich."}, {"post_id": 22958, "ts": "2026-07-05T17:10:47Z", "hours": 6.4067, "text": "soooo it was quite a long time from the last update (about 5 days)all this time i was working mostly on aesthetics and implementing the core feature of the variable design, anyway i added SFX (mostly so that i can remove them on bankruptcy…). Also i added 3 new modals ready to be implemented! ServiceShutoffNoticeCSS.vue, ServiceShutoffNoticeSound.vue and GameFinishedNotice.vue! also it’s pretty misc and minor but now i added a bunch of typewriter fonts to use!"}, {"post_id": 19197, "ts": "2026-06-30T13:44:48Z", "hours": 2.7144, "text": "HUUUUUUUUUGE README.md updata and minor changes1) added clickable links for the hotline2) revisioned some code3) addedd personal infoa and portfolio4) finally made a half as decent README.md"}, {"post_id": 18346, "ts": "2026-06-29T13:47:20Z", "hours": 2.9567, "text": "I took the weekend half off and now i’ve practically finished the projectI updated some stuff, refined some designs like the heads/tails oneAlso besides that I added the stuff that i’ve been trying to add sine i finished the coinflip: now we see a spinning roulette sprite! Yay I just have to draw a few sprites and i guess it’s ready to be shipped!(ah, yes, don’t mind the placeholder that i used, i needed to check if it would spin the way i need, i’ll make a sprite for it some day) also i’ll probably ship the project before jul 2, the last thing i want is codding on my birthday, or maybe i will, who knows, anyways there’s not that much codding left to do, only sprites"}, {"post_id": 16411, "ts": "2026-06-26T18:13:55Z", "hours": 1.6192, "text": "added not that much1) revisioned the tilting kickflip and kickflip, added neo versions that are… maybe not linearly improved but are a kind of evolution2) added warning when restarting or closing (except when the budget is 1000; it helps when developing and is generally redundant since $1000 is the initial budget)3) added a disclaimer to the coinflip modal (a bug when the coin side image updates with a delay)4) added a general disclaimer as well as a gambling addiction disclaimer with auto country and hotline fetching5) brainstormed adding “past due” warnings when budget is low"}, {"post_id": 15780, "ts": "2026-06-25T17:31:29Z", "hours": 3.2533, "text": "added another shit ton of stuff1) modals for: coinflip animation; coinflip side selector; roulette animation; also added arrows and stuff2) made sprites for normal coin head & tail3) added the ability to select a coin side before betting (yeah, forgot about it last time)4) made so that on coinflip (when you press the flip button) it plays the animation in a modal, the animation actually corresponds to your bet and the status (won/lost) and ypur bet amount!5) finally addressing the elephant in the room:you can now kickflip the logo! yes… also that brought a rework of the tilting script + now we have tilting-kickflip.ts because it wasn’t working good enough with both stacked and kickflip.ts in case you don’t need tilting at all"}, {"post_id": 15304, "ts": "2026-06-24T21:10:31Z", "hours": 4.0117, "text": "added a shit ton of stuff1) modals for betting, selecting roulette number and a template for the game modal but i’ll add that later (maybe)2) uhm i made gambling working? yes, now you can bet and only guess if it’s working fine or if it has a severe bug3) refined the layout (probably)4) added /sandbox to test and develop stuff5) that’s it ig, fine for 3-4hrs? maybe"}, {"post_id": 15011, "ts": "2026-06-24T12:02:47Z", "hours": 1.0928, "text": "added tilting to the title, and buttonsadded a working budget counterthe placeholder now serves the purpose of debug: bet adds $100 to the budget and roll subs $100next update should add at least some working mechanics on gambling, and then i will leave the aesthetics and the core mechanic of the design getting better or worse to the end ( i still have to draw the sprites…)"}, {"post_id": 14502, "ts": "2026-06-23T17:21:01Z", "hours": 1.3697, "text": "as of now it’s not more than a demo of the design and layout, i haven’t even decided on what the third came should be, i guess for an hour it’s quite good"}]...
|
Title: Gamble This Website! by @forkosssa | Starda Title: Gamble This Website! by @forkosssa | Stardance
Devlogs:
as of now it’s not more than a demo of the design and layout, i haven’t even decided on what the third came should be, i guess for an hour it’s quite good
added tilting to the title, and buttonsadded a working budget counterthe placeholder now serves the purpose of debug: bet adds $100 to the budget and roll subs $100next update should add at least some working mechanics on gambling, and then i will leave the aesthetics and the core mechanic of the design getting better or worse to the end ( i still have to draw the sprites…)
added a shit ton of stuff1) modals for betting, selecting roulette number and a template for the game modal but i’ll add that later (maybe)2) uhm i made gambling working? yes, now you can bet and only guess if it’s working fine or if it has a severe bug3) refined the layout (probably)4) added /sandbox to test and develop stuff5) that’s it ig, fine for 3-4hrs? maybe
added another shit ton of stuff1) modals for: coinflip animation; coinflip side selector; roulette animation; also added arrows and stuff2) made sprites for normal coin head & tail3) added the ability to select a coin side before betting (yeah, forgot about it last time)4) made so that on coinflip (when you press the flip button) it plays the animation in a modal, the animation actually corresponds to your bet and the status (won/lost) and ypur bet amount!5) finally addressing the elephant in the room:you can now kickflip the logo! yes… also that brought a rework of the tilting script + now we have tilting-kickflip.ts because it wasn’t working good enough with both stacked and kickflip.ts in case you don’t need tilting at all
added not that much1) revisioned the tilting kickflip and kickflip, added neo versions that are… maybe not linearly improved but are a kind of evolution2) added warning when restarting or closing (except when the budget is 1000; it helps when developing and is generally redundant since $1000 is the initial budget)3) added a disclaimer to the coinflip modal (a bug when the coin side image updates with a delay)4) added a general disclaimer as well as a gambling addiction disclaimer with auto country and hotline fetching5) brainstormed adding “past due” warnings when budget is low
I took the weekend half off and now i’ve practically finished the projectI updated some stuff, refined some designs like the heads/tails oneAlso besides that I added the stuff that i’ve been trying to add sine i finished the coinflip: now we see a spinning roulette sprite! Yay I just have to draw a few sprites and i guess it’s ready to be shipped!(ah, yes, don’t mind the placeholder that i used, i needed to check if it would spin the way i need, i’ll make a sprite for it some day) also i’ll probably ship the project before jul 2, the last thing i want is codding on my birthday, or maybe i will, who knows, anyways there’s not that much codding left to do, only sprites
HUUUUUUUUUGE README.md updata and minor changes1) added clickable links for the hotline2) revisioned some code3) addedd personal infoa and portfolio4) finally made a half as decent README.md
soooo it was quite a long time from the last update (about 5 days)all this time i was working mostly on aesthetics and implementing the core feature of the variable design, anyway i added SFX (mostly so that i can remove them on bankruptcy…). Also i added 3 new modals ready to be implemented! ServiceShutoffNoticeCSS.vue, ServiceShutoffNoticeSound.vue and GameFinishedNotice.vue! also it’s pretty misc and minor but now i added a bunch of typewriter fonts to use!
So I’ve decided to finally address the elephant in the room and draw the sprites; apparently I’ve bitten off more than I can chew, and the sprites came out… shitty (who could’ve guessed). Even though it recorded only like 2 hrs, it was more like 2 hrs + 10+ hrs in Krita. Drawing sprites is apparently extremely hard sooooo idk if I will finish all the sprites before shipping. Anyways, I’ve done sprites for “normal” and “poor” statuses, and I guess I have to do the rich as well, since bankrupt will have no CSS anyways, and I’ll invent something for the filthy rich.
so i’ve decided to finally end this project.it was fun but i think it’s already production ready, i’ve been working hard lately and i think it’s finished. i’ve finished the core mechanic of the site getting shittier and i’m really proud of my work. surely there are some bugs and other things that i’d love to change/fix but i’mma ship it as is.anyways, have fun playing!
Ships:
A site where you gamble it’s budget and if you lose too much money it will impact the websites look and feel!...
|
1792986785.177186
|
1793073185.177186
|
|
33072
|
Hundred Acre Wood OS by @stratustraipsing | Starda Hundred Acre Wood OS by @stratustraipsing | Stardance...
|
stratustraipsing
|
1
|
48.0
|
524
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-08T00:28:04Z", "hours": 48.0, "multiplier": 11.26, "payout": 524, "blessing": "neutral", "text": "Hundred Acre Wood OS is live! Thanks to everyone for all the encouragement I received on this very fast-track project that ended up taking just under 50 hours. The likes and comments were always very nice and were so fun to read in between my working on the project. I am happy to say that I have renewed my frontend development skills (the meta-goal) and gone even further past that into completely unfamiliar territory . This could not come at a better time as I prepare for college courses and would love to make programming a more frequent habit of mine as another method of studying and displaying what I learn. The best way to get better at something is to have a project in mind to work towards and I have proved my own advice here again by giving myself this task. Enjoy my project and share it with anybody that happens to be a fan of Winnie-the-Pooh! It was made with lots of love and care <3.", "repo": "https://github.com/stratustraipsing/myOS", "demo": "https://hawos.netlify.app"}]...
|
[{"post_id": 42658, "ts": "202 [{"post_id": 42658, "ts": "2026-08-07T14:32:53Z", "hours": 10.2908, "text": "Hundred Acre Wood OS is (99%) DONE. Three consecutive work days have passed of me working on the 8-step interactive walkthrough. The first hour after writing out the full plan on paper was extremely discouraging. I had built the welcome sign pendulum previously and so I thought it would be simply to make the click and ensuing animation by just adding another img on top and making their animations identical. Not so. Even when I finally got the keyframes of both correct without random jumping or awkward swings and visiting cubicbezier.com in search of a gravity-accurate acceleration, the two image just would not align. So I did the most obvious thing and made a new image of the two together in google slides. Once that was done, I was able to halve the css dedicated to the animation and move on with the walkthrough. From there, it was really just a lot of positioning elements correctly and setting timeouts perfectly. I was pleasantly surprised by how many elements I had that could be reused (if you explore my page, you may find all two appearances of my TV animation). The walkthrough is designed to get the user familiar with most every feature existing there while being more entertaining and thus less skippable. One of the biggest issues I found with my desire to keep adding apps was that I knew that very few people would even discover each piece of my page. Because my OS is obviously not in competition with Windows and Mac, I wanted it to at least be entertaining. Over the next few days I hope to share this project with friends and family in order to crush any bugs or inconsistencies that may remain. I expect this process to be very little actual coding, likely less than half an hour in total. I believe however, like when writing, it is important to walk away from things you have worked on and come back with fresh eyes for increasing periods of time. There’s always a typo you just don’t see yet until someone else points it out for you."}, {"post_id": 41661, "ts": "2026-08-06T00:55:57Z", "hours": 2.3281, "text": "Forgot to attach this vid on the last devlog."}, {"post_id": 40517, "ts": "2026-08-04T03:15:47Z", "hours": 10.8686, "text": "I accidentally went an entire hour over the devlog 10 able to be logged :( …but I made so much progress! I firstly built the html for my timer and terminal, which were the last two apps I wanted. A long time was spent after that before finishing them when I suddenly remembered I had not committed any changes to github for two weeks and had yet to put my site on netlify for a public url. The timer is not super good looking to be honest, especially compared to how much work was put into the design of everything else, if you have any suggestions for that please let me know, if nobody does that’s how it’s going to stay for the unforeseeable future. For a while as I was building the timer, I was actually thinking of scrapping the entire terminal-app idea since I had no idea how much work I wanted to continue putting into this project before I found a stopping point for when I leave for college in under two weeks. I am so happy I went for it though because I can now offer the remaining odds-and-ends features I wasn’t sure how to incorporate otherwise. All that finished within a day. I also learned a little more about terminals as a whole, which was the meta-goal. Critically, the app also ties into my final and most creative step forwards: the environmental puzzle."}, {"post_id": 35968, "ts": "2026-07-27T19:15:27Z", "hours": 6.7631, "text": "HAW OS biggest updates: 2 new apps. The apps I promised you all are now here! Rabbit’s goal tracker and Piglet’s mood support are fully functioning and I think together they add a bit of originality to the OS in accordance with the theme. The mood support app (sunshine icon) as well as the library/notes app contain speech from their respective characters, owl and piglet. In my search for simple animations, I’ve become a heavy user of GIFs directly from GIPHY. Because transparent GIFs are quite rare/difficult to create, almost all of the moving elements on my page are from under the ‘stickers’ tab of that site. I even got an opportunity to practice with grid display while organizing the emotion faces.This all took a while but what was really time-consuming was debugging the JS while adding lines for details like offsetting and adding z-index to opened windows and getting distracted by the fragments of easter eggs that I had planted throughout without having connected them all yet. My typos are terrible when I rush and any issue with the difference between id or the function I’m calling just causes the whole page to get messed up. Because the OS is a little fuller now, I’ve also begun to find test subjects for it (my family and friends) who may not have advice or critiques but are great at coming up with compliments. If anybody has any ideas they’d like to see implemented here, write a comment and I’ll respond as fast as I can get to it. I suspect I will be done within a few days at my current work pace."}, {"post_id": 33315, "ts": "2026-07-23T03:43:24Z", "hours": 9.9719, "text": "Each devlog I make logs more and more time. It felt wrong to make an entire video recording of my OS before there were some real differences. Weather widget, battery widget, music player, and design clean-up are all off the checklist now. The majority of my time according to the hackatime report was my css file, surprisingly. First of all, the weather app is the most technically advanced appearing widget here. It is how I have come to learn what an API is. And it’s amazing! All the weather data comes to me live and all I have to do is get my functions straight in JS, though I did end up needed two (one for city-> coordinates, another for coordinates-> weather). I did additionally watch several youtube tutorials in order to understand how these kinds of API-features usually work out, but very few actually included a search result dropdown. There are some issues with this addition (every search leads to 5 results, some of which may be duplicates) but I’m not really interested in wading through that mess for a long time. More important than that, however, is that I spent over an hour building the code for my battery widget only to discover that the two browsers I use -Firefox and Safari- do not support its API due to data issues. Which is understandable, but I wish I had known that before I bothered. Furthermore, my first-choice font doesn’t even show on Safari? Anyway, you can view my full OS as it should be in this recording below (taken in VSCode)."}, {"post_id": 31828, "ts": "2026-07-20T14:58:42Z", "hours": 4.0339, "text": "I would post a much longer devlog here but my last was deleted because of the size of my video. So here is what I have done. The owl’s library app has been set up after much pondering on whether I should have a notes app at all considering how many other notes apps exist that are much better overall. However, I am very happy with the end result. ‘Owl’s Library’ essentially encourages you to create a curated collection of your personal tastes. Through building this, I also found the best way for me to build these apps moving forward is to create a rough draft html, move on to CSS, and only lastly to JS. Any bouncing around between those ends up too confusing for me and I lose track of what’s going on. I think I will have to make a few detours to freeCodeCamp for DOM JS practice in between working on HAW. Here are my next tentative app ideas: music with pooh, weather widget, battery widget with an eeyore that appears when below 20%, terminal with storybook commands, rate your mood app with piglet’s supportive comments for wherever you are, and an app with rabbit for you to write one goal in the format of “after I finish (…) I will continue by (…)” (ex: finish biology homework –> watch an interesting yt video on genetics) as a way for you to reward yourself without sacrificing intrinsic motivation."}, {"post_id": 30499, "ts": "2026-07-18T03:52:19Z", "hours": 2.5853, "text": "HAW OS is looking great: I downloaded a custom font by winnie the pooh himself (piglet’s was a little too messy for my purposes), introduced a welcome sign with a pendulum-like swing, and I have written in my html comments the vision as of this moment. This OS will make you learn how to navigate it by following an environmental puzzle. I have the first few steps in mind but I’m trying my best to keep it a secret because I want people viewing the page to have no spoilers beforehand. It’s going to be difficult. Both for me to set-up and you to solve. I spent a very long time just trying to cut down my css hover area size since I had used remove.bg on an image and the invisible area around it was just too big to let slide. Eventually I just went back in my files and cropped the image but I had already wasted a lot of time by then trying to figure out if there was an ‘easier’ way. I’ve also been experimenting with vibecoding since my JS is rusty but built-in chat is honestly not very good for a beginner that insists on understanding everything it writes for me and I fall back on youtube tutorials 9 times out of 10. It’s just not worth it in my case except for when I can ask it questions for debugging quickly, and here it does an exceptional job of helping me move on without getting too frustrated."}, {"post_id": 29244, "ts": "2026-07-16T01:01:40Z", "hours": 0.8956, "text": "My Hundred Acre Woods OS is finally up after over an hour of trying to understand how VS code works (like where the run button is) and about 15 minutes of actually writing code so that my background image from Pinterest even shows up. So much time setting things up. I can’t wait to see what I can do with this, but it’s truly difficult for me to even get my priorities together at this point. I haven’t built a website in years. One of the first things I looked up for my html file was how to write a comment because I couldn’t be sure of myself and I still ended up getting something wrong by putting it above the head tag . Looking forward to actually making changes to this OS. At least the picture I found is really nice :)"}]...
|
Title: Hundred Acre Wood OS by @stratustraipsing | Title: Hundred Acre Wood OS by @stratustraipsing | Stardance
Devlogs:
My Hundred Acre Woods OS is finally up after over an hour of trying to understand how VS code works (like where the run button is) and about 15 minutes of actually writing code so that my background image from Pinterest even shows up. So much time setting things up. I can’t wait to see what I can do with this, but it’s truly difficult for me to even get my priorities together at this point. I haven’t built a website in years. One of the first things I looked up for my html file was how to write a comment because I couldn’t be sure of myself and I still ended up getting something wrong by putting it above the head tag . Looking forward to actually making changes to this OS. At least the picture I found is really nice :)
HAW OS is looking great: I downloaded a custom font by winnie the pooh himself (piglet’s was a little too messy for my purposes), introduced a welcome sign with a pendulum-like swing, and I have written in my html comments the vision as of this moment. This OS will make you learn how to navigate it by following an environmental puzzle. I have the first few steps in mind but I’m trying my best to keep it a secret because I want people viewing the page to have no spoilers beforehand. It’s going to be difficult. Both for me to set-up and you to solve. I spent a very long time just trying to cut down my css hover area size since I had used remove.bg on an image and the invisible area around it was just too big to let slide. Eventually I just went back in my files and cropped the image but I had already wasted a lot of time by then trying to figure out if there was an ‘easier’ way. I’ve also been experimenting with vibecoding since my JS is rusty but built-in chat is honestly not very good for a beginner that insists on understanding everything it writes for me and I fall back on youtube tutorials 9 times out of 10. It’s just not worth it in my case except for when I can ask it questions for debugging quickly, and here it does an exceptional job of helping me move on without getting too frustrated.
I would post a much longer devlog here but my last was deleted because of the size of my video. So here is what I have done. The owl’s library app has been set up after much pondering on whether I should have a notes app at all considering how many other notes apps exist that are much better overall. However, I am very happy with the end result. ‘Owl’s Library’ essentially encourages you to create a curated collection of your personal tastes. Through building this, I also found the best way for me to build these apps moving forward is to create a rough draft html, move on to CSS, and only lastly to JS. Any bouncing around between those ends up too confusing for me and I lose track of what’s going on. I think I will have to make a few detours to freeCodeCamp for DOM JS practice in between working on HAW. Here are my next tentative app ideas: music with pooh, weather widget, battery widget with an eeyore that appears when below 20%, terminal with storybook commands, rate your mood app with piglet’s supportive comments for wherever you are, and an app with rabbit for you to write one goal in the format of “after I finish (…) I will continue by (…)” (ex: finish biology homework –> watch an interesting yt video on genetics) as a way for you to reward yourself without sacrificing intrinsic motivation.
Each devlog I make logs more and more time. It felt wrong to make an entire video recording of my OS before there were some real differences. Weather widget, battery widget, music player, and design clean-up are all off the checklist now. The majority of my time according to the hackatime report was my css file, surprisingly. First of all, the weather app is the most technically advanced appearing widget here. It is how I have come to learn what an API is. And it’s amazing! All the weather data comes to me live and all I have to do is get my functions straight in JS, though I did end up needed two (one for city-> coordinates, another for coordinates-> weather). I did additionally watch several youtube tutorials in order to understand how these kinds of API-features usually work out, but very few actually included a search result dropdown. There are some issues with this addition (every search leads to 5 results, some of which may be duplicates) but I’m not really interested in wading through that mess for a long time. More important than that, however, is that I spent over an hour building the code for my battery widget only to discover that the two browsers I use -Firefox and Safari- do not support its API due to data issues. Which is understandable, but I wish I had known that before I bothered. Furthermore, my first-choice font doesn’t even show on Safari? Anyway, you can view my full OS as it should be in this recording below (taken in VSCode).
HAW OS biggest updates: 2 new apps. The apps I promised you all are now here! Rabbit’s goal tracker and Piglet’s mood support are fully functioning and I think together they add a bit of originality to the OS in accordance with the theme. The mood support app (sunshine icon) as well as the library/notes app contain speech from their respective characters, owl and piglet. In my search for simple animations, I’ve become a heavy user of GIFs directly from GIPHY. Because transparent GIFs are quite rare/difficult to create, almost all of the moving elements on my page are from under the ‘stickers’ tab of that site. I even got an opportunity to practice with grid display while organizing the emotion faces.This all took a while but what was really time-consuming was debugging the JS while adding lines for details like offsetting and adding z-index to opened windows and getting distracted by the fragments of easter eggs that I had planted throughout without having connected them all yet. My typos are terrible when I rush and any issue with the difference between id or the function I’m calling just causes the whole page to get messed up. Because the OS is a little fuller now, I’ve also begun to find test subjects for it (my family and friends) who may not have advice or critiques but are great at coming up with compliments. If anybody has any ideas they’d like to see implemented here, write a comment and I’ll respond as fast as I can get to it. I suspect I will be done within a few days at my current work pace.
I accidentally went an entire hour over the devlog 10 able to be logged :( …but I made so much progress! I firstly built the html for my timer and terminal, which were the last two apps I wanted. A long time was spent after that before finishing them when I suddenly remembered I had not committed any changes to github for two weeks and had yet to put my site on netlify for a public url. The timer is not super good looking to be honest, especially compared to how much work was put into the design of everything else, if you have any suggestions for that please let me know, if nobody does that’s how it’s going to stay for the unforeseeable future. For a while as I was building the timer, I was actually thinking of scrapping the entire terminal-app idea since I had no idea how much work I wanted to continue putting into this project before I found a stopping point for when I leave for college in under two weeks. I am so happy I went for it though because I can now offer the remaining odds-and-ends features I wasn’t sure how to incorporate otherwise. All that finished within a day. I also learned a little more about terminals as a whole, which was the meta-goal. Critically, the app also ties into my final and most creative step forwards: the environmental puzzle.
Forgot to attach this vid on the last devlog.
Hundred Acre Wood OS is (99%) DONE. Three consecutive work days have passed of me working on the 8-step interactive walkthrough. The first hour after writing out the full plan on paper was extremely discouraging. I had built the welcome sign pendulum previously and so I thought it would be simply to make the click and ensuing animation by just adding another img on top and making their animations identical. Not so. Even when I finally got the keyframes of both correct without random jumping or awkward swings and visiting cubicbezier.com in search of a gravity-accurate acceleration, the two image just would not align. So I did the most obvious thing and made a new image of the two together in google slides. Once that was done, I was able to halve the css dedicated to the animation and move on with the walkthrough. From there, it was really just a lot of positioning elements correctly and setting timeouts perfectly. I was pleasantly surprised by how many elements I had that could be reused (if you explore my page, you may find all two appearances of my TV animation). The walkthrough is designed to get the user familiar with most every feature existing there while being more entertaining and thus less skippable. One of the biggest issues I found with my desire to keep adding apps was that I knew that very few people would even discover each piece of my page. Because my OS is obviously not in competition with Windows and Mac, I wanted it to at least be entertaining. Over the next few days I hope to share this project with friends and family in order to crush any bugs or inconsistencies that may remain. I expect this process to be very little actual coding, likely less than half an hour in total. I believe however, like when writing, it is important to walk away from things you have worked on and come back with fresh eyes for increasing periods of time. There’s always a typo you just don’t see yet until someone else points it out for you.
Ships:
Hundred Acre Wood OS is live! Thanks to everyone for all the encouragement I received on this very fast-track project that ended up taking just under 50 hours. The likes and comments were always very nice and were so fun to read in between my working on the project. I am happy to say that I have renewed my frontend development skills (the meta-goal) and gone even further past that into completely unfamiliar territory . This could not come at a better time as I prepare for college courses and would love to make programming a more frequent habit of mine as another method of studying and displaying what I learn. The best way to get better at something is to have a project in mind to work towards and I have proved my own advice here again by giving myself this task. Enjoy my project and share it with anybody that happens to be a fan of Winnie-the-Pooh! It was made with lots of love and care <3....
|
1792994164.6769834
|
1793080564.6769834
|
|
16711
|
vibe-check by @subhansh | Stardance
|
|
1
|
60.0
|
521
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T12:11:56Z", "hours": 60.0, "multiplier": 17.37, "payout": 521, "blessing": "neutral", "text": "Vibe Check is a web app that makes working with AI easier by improving prompts before you send them. It focuses on three simple quality-of-life improvements: automatic AI prompt engineering to produce clearer and more effective prompts, a Token Saver mode that converts prompts into Chinese to significantly reduce token usage on many AI models, and built-in prompt scoring with personalized feedback so you can understand and improve your prompting skills over time. The goal is simple: better prompts, lower costs, and better AI responses with almost no extra effort, and the question that “cant I just ask gpt/claude do the same?” u can.. but that means using the ai just to prepare another prompt. vibe check skips that extra step. It optimizes, scores, and compresses your prompt before it reaches the model, saving both time and tokens. go try it out :3 :- https://vibe-check-vert-theta.vercel.app", "repo": "https://github.com/subhansh-dev/vibe-check", "demo": "https://vibe-check-vert-theta.vercel.app"}]...
|
[{"post_id": 17551, "ts": "202 [{"post_id": 17551, "ts": "2026-06-28T11:41:54Z", "hours": 21.9344, "text": "Vibe Check — Devlog 🍓 well… there was a pretty big plot twist. the original plan was to ship Vibe Check as a Chrome extension. everything was already built around that idea. popup UI. chrome APIs. extension architecture. the whole thing. then i found out Google wants a $5 one-time fee just to publish an extension. and honestly… i was NOT about to pay $5 just so my little prompt tool could exist on the Chrome Web Store 😭 so… i scrapped the entire extension idea. which meant i had to redesign… basically everything. the whole app was originally designed around a tiny popup window. now it had to become a full webpage. different layout. different navigation. different spacing. different interactions. pretty much every screen got rewritten from scratch. the funny part is that none of the actual features changed. they just had to be rebuilt in a way that actually made sense on a full website. while rebuilding everything i also decided to add a feature i honestly wish more AI tools had. Token Saver :3 after Vibe Check analyzes and improves your prompt… it can now convert the final prompt into Chinese. before anyone asks… no, this isn’t some weird translation gimmick 😭 the reason is actually pretty simple. Chinese is far more information-dense than English, so the same instructions usually require significantly fewer input tokens. that means: lower API costs fewer prompt tokens more room inside the context window without changing what the prompt is actually asking. the AI still understands exactly the same instructions. if you want the response in English, you can literally just add: “Respond in English, even though my prompt is written in Chinese.” and it’ll work exactly the same. so now Vibe Check doesn’t just make prompts better… it also tries to make them cheaper to run. which i thought was a pretty neat addition :3 meow"}, {"post_id": 14247, "ts": "2026-06-23T08:25:48Z", "hours": 26.3192, "text": "Vibe Check — Devlog said last devlog i’d be tackling the UI redesign next. did that. also did about four other things i didn’t plan on. classic me. two days, and somehow: bug fixes, the redesign, AI integration, a whole landing page, and deployment setup. CSS changes enough to make me question my existence 💔 bugs that were silently ruining everything found out half the buttons in the app weren’t even styled because the css class they used literally didn’t exist 😭 also discovered template search wasn’t searching anything because the input id was missing. the search bar looked functional. it was not. meow. fixed a bunch of cursed unicode issues too because apparently some checkmarks had transformed into ancient artifacts from another dimension. the redesign arc 🥀 this one was planned, but it still spiraled way harder than expected. changed one thing. then another. then suddenly popup.css was over 700 lines. goodbye neon cyberpunk. hello warm golds, soft reds, glass panels, crystal backgrounds, rounded corners and way too many blur effects. the whole thing feels a lot calmer now. less “rgb gaming keyboard” more “expensive thing i can’t afford” :3 ai brain upgrade probably the biggest change, and definitely not planned. vibe check can now use Cerebras gpt-oss-120b for prompt enhancement. ended up building support for: local development chrome extension mode production deployment all using the same enhancement pipeline. if ai dies the app automatically falls back to local enhancement so users don’t get hit with a giant error message. because nobody likes giant error messages. built a whole landing page because apparently i enjoy suffering didn’t even plan this one. but now there’s: animated hero section glassmorphism everywhere feature cards demo section platform showcase responsive layout and enough floating visual effects to make my gpu slightly concerned. production stuff nobody will notice added deployment configs. serverless functions. environment variables. request validation. api key protection. cors handling. all the boring stuff that becomes very exciting when it’s missing. stats files modified: basically yes popup.css: 730 lines popup.js: 1300+ lines new files: landing page serverless ai endpoint deployment config :3"}, {"post_id": 12406, "ts": "2026-06-20T07:35:36Z", "hours": 11.5258, "text": "VibeCheck Devlog #1 🥀 so… for the last few days i’ve been building something called VibeCheck . the idea is pretty simple: you paste a prompt. VibeCheck tears it apart. then tells you how to make it better. that’s it. but somehow that “simple” idea ended up turning into an entire app 💔 the original problem i kept seeing the same thing over and over. people would ask an ai for something. the result would be bad. then they’d blame the model. when half the time the real problem was the prompt. so i thought… what if there was a tool that could actually analyze prompts and explain what’s wrong with them? not just give a score. actually tell you: what’s missing what’s unclear what’s limiting the output how to improve it and that’s basically where VibeCheck started. browser compatibility was a disaster one thing i realized pretty quickly… the whole app depended on chrome extension APIs. which means outside a chrome extension… everything exploded 💔 so i built a chrome api polyfill layer. now VibeCheck can run inside an extension and directly in a browser without completely falling apart. storage works. runtime messaging works. browser preview works. and the app stops screaming at me every time i open it. template collection got out of control this one got a little ridiculous. templates went from: 15 → 38 there’s now stuff for: ui components full applications backend systems debugging ai prompts api development and probably more coming later because apparently i don’t know how to stop adding things. random suffering also spent way too long fixing bugs that should not have existed. you know the type: 40 minutes of debugging. 3 line fix. questioning life choices afterwards. those. what’s next? right now i’m focusing on making the scoring system smarter and improving the actual prompt analysis. the ui is pretty trash so id be working on that too the architecture isn’t actively trying to kill me anymore and VibeCheck is slowly becoming the tool i originally wanted to build we’ll see how long that lasts before i break everything again 🥀"}]...
|
Title: vibe-check by @subhansh | Stardance
Devlog Title: vibe-check by @subhansh | Stardance
Devlogs:
VibeCheck Devlog #1 🥀 so… for the last few days i’ve been building something called VibeCheck . the idea is pretty simple: you paste a prompt. VibeCheck tears it apart. then tells you how to make it better. that’s it. but somehow that “simple” idea ended up turning into an entire app 💔 the original problem i kept seeing the same thing over and over. people would ask an ai for something. the result would be bad. then they’d blame the model. when half the time the real problem was the prompt. so i thought… what if there was a tool that could actually analyze prompts and explain what’s wrong with them? not just give a score. actually tell you: what’s missing what’s unclear what’s limiting the output how to improve it and that’s basically where VibeCheck started. browser compatibility was a disaster one thing i realized pretty quickly… the whole app depended on chrome extension APIs. which means outside a chrome extension… everything exploded 💔 so i built a chrome api polyfill layer. now VibeCheck can run inside an extension and directly in a browser without completely falling apart. storage works. runtime messaging works. browser preview works. and the app stops screaming at me every time i open it. template collection got out of control this one got a little ridiculous. templates went from: 15 → 38 there’s now stuff for: ui components full applications backend systems debugging ai prompts api development and probably more coming later because apparently i don’t know how to stop adding things. random suffering also spent way too long fixing bugs that should not have existed. you know the type: 40 minutes of debugging. 3 line fix. questioning life choices afterwards. those. what’s next? right now i’m focusing on making the scoring system smarter and improving the actual prompt analysis. the ui is pretty trash so id be working on that too the architecture isn’t actively trying to kill me anymore and VibeCheck is slowly becoming the tool i originally wanted to build we’ll see how long that lasts before i break everything again 🥀
Vibe Check — Devlog said last devlog i’d be tackling the UI redesign next. did that. also did about four other things i didn’t plan on. classic me. two days, and somehow: bug fixes, the redesign, AI integration, a whole landing page, and deployment setup. CSS changes enough to make me question my existence 💔 bugs that were silently ruining everything found out half the buttons in the app weren’t even styled because the css class they used literally didn’t exist 😭 also discovered template search wasn’t searching anything because the input id was missing. the search bar looked functional. it was not. meow. fixed a bunch of cursed unicode issues too because apparently some checkmarks had transformed into ancient artifacts from another dimension. the redesign arc 🥀 this one was planned, but it still spiraled way harder than expected. changed one thing. then another. then suddenly popup.css was over 700 lines. goodbye neon cyberpunk. hello warm golds, soft reds, glass panels, crystal backgrounds, rounded corners and way too many blur effects. the whole thing feels a lot calmer now. less “rgb gaming keyboard” more “expensive thing i can’t afford” :3 ai brain upgrade probably the biggest change, and definitely not planned. vibe check can now use Cerebras gpt-oss-120b for prompt enhancement. ended up building support for: local development chrome extension mode production deployment all using the same enhancement pipeline. if ai dies the app automatically falls back to local enhancement so users don’t get hit with a giant error message. because nobody likes giant error messages. built a whole landing page because apparently i enjoy suffering didn’t even plan this one. but now there’s: animated hero section glassmorphism everywhere feature cards demo section platform showcase responsive layout and enough floating visual effects to make my gpu slightly concerned. production stuff nobody will notice added deployment configs. serverless functions. environment variables. request validation. api key protection. cors handling. all the boring stuff that becomes very exciting when it’s missing. stats files modified: basically yes popup.css: 730 lines popup.js: 1300+ lines new files: landing page serverless ai endpoint deployment config :3
Vibe Check — Devlog 🍓 well… there was a pretty big plot twist. the original plan was to ship Vibe Check as a Chrome extension. everything was already built around that idea. popup UI. chrome APIs. extension architecture. the whole thing. then i found out Google wants a $5 one-time fee just to publish an extension. and honestly… i was NOT about to pay $5 just so my little prompt tool could exist on the Chrome Web Store 😭 so… i scrapped the entire extension idea. which meant i had to redesign… basically everything. the whole app was originally designed around a tiny popup window. now it had to become a full webpage. different layout. different navigation. different spacing. different interactions. pretty much every screen got rewritten from scratch. the funny part is that none of the actual features changed. they just had to be rebuilt in a way that actually made sense on a full website. while rebuilding everything i also decided to add a feature i honestly wish more AI tools had. Token Saver :3 after Vibe Check analyzes and improves your prompt… it can now convert the final prompt into Chinese. before anyone asks… no, this isn’t some weird translation gimmick 😭 the reason is actually pretty simple. Chinese is far more information-dense than English, so the same instructions usually require significantly fewer input tokens. that means: lower API costs fewer prompt tokens more room inside the context window without changing what the prompt is actually asking. the AI still understands exactly the same instructions. if you want the response in English, you can literally just add: “Respond in English, even though my prompt is written in Chinese.” and it’ll work exactly the same. so now Vibe Check doesn’t just make prompts better… it also tries to make them cheaper to run. which i thought was a pretty neat addition :3 meow
Ships:
Vibe Check is a web app that makes working with AI easier by improving prompts before you send them. It focuses on three simple quality-of-life improvements: automatic AI prompt engineering to produce clearer and more effective prompts, a Token Saver mode that converts prompts into Chinese to significantly reduce token usage on many AI models, and built-in prompt scoring with personalized feedback so you can understand and improve your prompting skills over time. The goal is simple: better prompts, lower costs, and better AI responses with almost no extra effort, and the question that “cant I just ask gpt/claude do the same?” u can.. but that means using the ai just to prepare another prompt. vibe check skips that extra step. It optimizes, scores, and compresses your prompt before it reaches the model, saving both time and tokens. go try it out :3 :- https://vibe-check-vert-theta.vercel.app...
|
1792993953.4911926
|
1793080353.4911926
|
|
3831
|
ethan's wierd ikea sim by @appleroll | Stardan ethan's wierd ikea sim by @appleroll | Stardance...
|
appleroll
|
1
|
29.0
|
519
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-07T06:39:34Z", "hours": 29.0, "multiplier": 18.39, "payout": 519, "blessing": "neutral", "text": "I made a custom non-euclidean game engine, built from scratch with Vite and WebGPU. In this demo, you can explore a highly simplified and abstract IKEA simulation, largely inspired by my experiences shopping at IKEA (the endless rows of… boxes and furniture), as well as SCP-3008 (I only found that out while making this project). . The most challenging part were the endless bugs encountered while adding seamless Non-Euclidean geometry, which I had decided to solve by mixing Euclidean geometry with portals, which is how most games simulate Non-Euclideanness. I could’ve opted for a pure mathematically non-euclidean game engine, but that would’ve made making IKEA itself much harder as I would have to wrap my head around non-euclidean geometry. . I had numerous Non-euclidean things planned, such as a tunnel that was longer/shorter on the inside. However, it was hard to integrate them into the actual IKEA due to its non-euclidean shell (meaning it has varying amounts of rooms inside what looks like a building with only 4 rooms). . In the end, I’m very proud of my project as a whole and how I went from a total graphics noob to someone who could make a graphics engine and something IKEA-resembling, entirely from scratch. I certainly enjoyed the moments I spent coding (and debugging) this project, and I hope you enjoy it too!", "repo": "https://github.com/appleroll/wierdikea", "demo": "https://appleroll.github.io/wierdikea"}]...
|
[{"post_id": 23966, "ts": "202 [{"post_id": 23966, "ts": "2026-07-07T06:19:33Z", "hours": 0.3639, "text": "Prepared for ship! Wrote some more in the README, including references used in my IKEA (I’m not trying to copy IKEA, but it can’t be completely different). Hopefully you all enjoy the product I’ve made, because I certainly did enjoy making it!"}, {"post_id": 23929, "ts": "2026-07-07T04:12:17Z", "hours": 0.8083, "text": "Still a few bugs, but they’re getting better and I’ve added the pallet things now. I think it should be close to shipping :)"}, {"post_id": 23387, "ts": "2026-07-06T09:52:56Z", "hours": 0.6189, "text": "Added these little pallette things and first blahajs, but they’re lacking textures and the pallette looks a bit off, will fix first thing tmrw"}, {"post_id": 22763, "ts": "2026-07-05T10:44:59Z", "hours": 0.3756, "text": "Fine-tuned some values, especially in movement. I decided it would be better to just hide the near threshold portal bug as a whole and compromise by having this wierd outline surrounding the portal. Maybe I’ll drop some insane IKEA lore explaining how it was a feature and not a bug"}, {"post_id": 22093, "ts": "2026-07-04T11:01:53Z", "hours": 0.84, "text": "heheh funny bug, set the near plane threshold to 0 (EPILEPSY WARNING)"}, {"post_id": 21382, "ts": "2026-07-03T09:02:32Z", "hours": 0.5333, "text": "Placed some more shelves"}, {"post_id": 20620, "ts": "2026-07-02T08:19:02Z", "hours": 0.6378, "text": "Cleaned up the code, not much ig. Honestly, I don’t even know if I want to, and should, build the whole IKEA. I’ve been considering turning this into a noneuclidean IKEA storage simulation. . The benefits of this is that it’s much easier to make while still keeping the potential for glTF objects for Blahaj and friends, and also makes it so my project is more narrowly focused, but the downsides is that it probably has less variance, and has not much room for future upgrades. . I might implement the solution where it is a storage simulator for now, ship it, and later I can add code to turn it into a more “detailed” IKEA simulator if I decide graphic computing is for me."}, {"post_id": 19887, "ts": "2026-07-01T09:51:12Z", "hours": 2.5925, "text": "I. Solved. The. Bug Turns out, after spending 3 days on the bug, asking the Stardance Slack multiple times, having discussions with multiple chatbots, and also loosing maybe 10-15 strands of hair, I’ve finally done it. Turns out, the solution was to change a decimal place, from 0.1 to around 0.01. . Not gonna lie, before this I had completely lost faith in this project. Like seriously. Maybe I’ll keep working on it now that this bug is solved. . “Now Ethan, what exactly is the bug??” you may ask? Well, if you didn’t read my previous devlogs (or maybe i didnt write abt it, idk lol i kinda just.. forget most of my devlogs), I had an issue where there would be a frame of blue in between portal transitions. It completely ruined the “magic trick” of the noneuclidean IKEA. . I can now sleep tonight in peace :)"}, {"post_id": 19023, "ts": "2026-06-30T05:59:45Z", "hours": 1.7836, "text": "Changed the soundtrack, and updated the home page! Not really much to say, same bugs as usual, same features to add, I haven’t been procrasting a lot not gonna lie these bugs are kinda hard to solve. It’s hard to blend when I should add based on IKEA and what to sacrifice based on what I can do."}, {"post_id": 18709, "ts": "2026-06-29T21:52:18Z", "hours": 1.3064, "text": "Bit.. lacking… for a homepage, but uhh it’ll do for now"}, {"post_id": 17981, "ts": "2026-06-28T22:51:32Z", "hours": 1.4881, "text": "Just fixed a bug where the portal would have this weird wireframe surrounding it making it very obvious theres a portal here. However, I’ve been trying to fix the issue where for 1 frame something appears on the screen when u enter a portal. My guess on why this is is because since the portal is a very thin cube, the inside of the cube still exists, hence the blue part. This would require modifying my cube engine into a multi-object engine (pretty hard), but I will give it a try."}, {"post_id": 17383, "ts": "2026-06-28T04:34:37Z", "hours": 2.0033, "text": "Worked on the shelving for the self-service area. Once I was finished with this, I realised that IKEA stores go counterclockwise , while mine is designed to go clockwise (in the clip I went clockwise bc the storage stuff are always at the end). Well… its a feature now . After all, this project isn’t really designed to be that realistic. If it was super realistic, it wouldn’t be a single floor and it definitely won’t have buggy portals everywhere."}, {"post_id": 16829, "ts": "2026-06-27T10:15:54Z", "hours": 0.3594, "text": "It is my pleasure to announce that we have undergone a name change. “Super Noneuclidean” just didn’t describe my project enough, so using my last 3 braincells left today I decided I should rename it to “wierd ikea simulator”. . I know, I know, you might be thinking, “but why Ethan? This name sounds actually horrible”. Well, there’s a pretty good reason for this name, let me explain. . A year ago, I was obsessed with state-of-the-art AI. And making money. Mainly the latter. But anyways, entrepeneurship is like 5% coding and 50% arguing to others about why your product is good, and another 45% fixing bugs and later headaches. I don’t exactly hate my experiences with AI, but I definitely need a break from corporate marketing and actually do something dumb for once. During the name change, I decided “super noneuclidean” didn’t have any “IKEA” in it, and I thought I could make it even more dumb, so using reverse psychology the dumbest name is the one that sounds the most plain, direct, and, well… dumb, hence my name. . So far, this project has really saved my mentality, pretty cool indeed. . (and yes I wrote on my last 2 braincells at 9pm while sleepy af. thanks for reading tho)"}, {"post_id": 16814, "ts": "2026-06-27T09:32:39Z", "hours": 1.6997, "text": "I. Fixed. The. Bug It wasn’t a bug, it was just me forgetting to add a feature. In other words, I thought my code was broken when in reality I didn’t even code a recursive rendering system in the first place, so portals were always blue. So… IKEA is going pretty well. The noneuclidean shell is basically complete. It’s time to work on some interior deco, but first I might have a bit of a look on the code and clean up some AI slop. (Oh. yeah, and idk if IKEA has the yellow door thing world-wide. It does in my local IKEA, so I added it) but now… its BLAHAJ TIME"}, {"post_id": 16638, "ts": "2026-06-27T01:58:54Z", "hours": 1.0125, "text": "Noneuclidean IKEA shell coming together nicely! Got the colours pretty right too. Only issue is that theres this wierd blue thing covering portals rendered behind portals, but that should be solved in another day"}, {"post_id": 16581, "ts": "2026-06-26T23:31:38Z", "hours": 0.6994, "text": "After numerous experiments, I have screwed up. I should’ve created the IKEA design before I started working on the Noneuclidean files, because now I have to delete all of them. Well there goes my 8 hours (I don’t know what image to attach here)"}, {"post_id": 14931, "ts": "2026-06-24T07:55:13Z", "hours": 2.3319, "text": "Aight. It’s been a couple of weeks and i found a job (hooray), so unfortunately i havent been able to do much coding, except maybe plan the idea. The idea “Instead of building JUST a noneuclidean thing (bc everyone’s been doing that for years now), i make it an IKEA simulator” bc we ALL know that IKEA rooms are secretly noneuclidean mazes that trap us into buying 347 chairs (speaking from experience trust) The plan I currently have 2 things made: a noneuclidean tunnel, and a noneuclidean room where it looks like a 4-roomed house, but it actually has 6 rooms ( note: still broken ), so I think I can get started with the first floor and the market-hall for now. A quick search of “ikea layout” shows a redditor’s very useful intentionally-confusing floor plan, so I will be using that with a few adjustments to fit in with my idea The problems we got some few problems idk how to get obj models into my custom from-scratch engine i still need to fix a ton of bugs, and i need to adapt my hard-coded code to the new ikea idea nevertheless, im quite excited about this project, i will continue working on it. my blueprint is attatched here"}, {"post_id": 5964, "ts": "2026-06-09T23:55:06Z", "hours": 1.0092, "text": "I’ve had some exams recently, so I didn’t really do much. I added another room where the inside is longer than the outside which is cool, but it has a bug where the block looks really close to the portal? I don’t now how to describe it lol. Anyways, I’ll just leave it for now, once I finish my exams I’ll continue working on it."}, {"post_id": 3362, "ts": "2026-06-06T07:48:33Z", "hours": 1.3211, "text": "After like 5 hours of working. THE. BUG. FINALLY. FIXEDDDD. I can’t believe it. It literally took 3 lines of code changing. But well, it was a good experience. Now, everything shown in the other portal looks proportionate. Also, if you didn’t notice, i changed some files, like adding the noneuclidean code to the noneuclideans/ folder."}, {"post_id": 1986, "ts": "2026-06-04T07:51:04Z", "hours": 3.2575, "text": "Okay. I’ve just spent the past 3 hours of my day fixing a bug. And it still hasn’t been fixed. Apparently since the portal makes the tunnel look shorter, it also makes the other side of the tunnel look further away. I’ve made some… adjustments ( ahem hardcodes values).. into the portal side detection script and it seems to be working, but i have to find a way to change the portals and stuff without doing a complete refresh, something i need to find a way to do. . In the attatched screen recording, you can see how the rectangular prism looks zoomed in at the start, and on the other side, a rectangular prism with the same distance looks further away. . Oh well, I’ll probably fix it tommorrow."}, {"post_id": 1328, "ts": "2026-06-03T08:26:24Z", "hours": 0.2683, "text": "Split my code into modular pieces. Not a big change, but definitely makes my project look less confusing."}, {"post_id": 1303, "ts": "2026-06-03T06:34:58Z", "hours": 2.3286, "text": "So… I decided to completely redo my project. yeah apparently i got the definition of hyperbolic space wrong??? idk i watched a yt video and i decided to make one of those shorter-on-the-inside corridors. So what I did is that I salvaged the portal thing, and I placed one that led from one side of the corridor to the other, so its shorter. It has a few bugs, but it think its working right."}, {"post_id": 732, "ts": "2026-06-02T10:44:29Z", "hours": 1.0644, "text": "I got my handy AI to add the famous round ball (hyperbolic space), as well as a portal (i think it worked????)… and it ran out of credits (that’s fine though, I think my brain still has some credits left) It kinda broke the Ames room thing, but I’m still learning the theory so that’s fine I’ll fix it first thing tmrw"}, {"post_id": 669, "ts": "2026-06-02T06:48:17Z", "hours": 0.4014, "text": "Just started! I got the bare, bare bones working. Still working out how to do things, but it’s a start!"}]...
|
Title: ethan's wierd ikea sim by @appleroll | Title: ethan's wierd ikea sim by @appleroll | Stardance
Devlogs:
Just started! I got the bare, bare bones working. Still working out how to do things, but it’s a start!
I got my handy AI to add the famous round ball (hyperbolic space), as well as a portal (i think it worked????)… and it ran out of credits (that’s fine though, I think my brain still has some credits left) It kinda broke the Ames room thing, but I’m still learning the theory so that’s fine I’ll fix it first thing tmrw
So… I decided to completely redo my project. yeah apparently i got the definition of hyperbolic space wrong??? idk i watched a yt video and i decided to make one of those shorter-on-the-inside corridors. So what I did is that I salvaged the portal thing, and I placed one that led from one side of the corridor to the other, so its shorter. It has a few bugs, but it think its working right.
Split my code into modular pieces. Not a big change, but definitely makes my project look less confusing.
Okay. I’ve just spent the past 3 hours of my day fixing a bug. And it still hasn’t been fixed. Apparently since the portal makes the tunnel look shorter, it also makes the other side of the tunnel look further away. I’ve made some… adjustments ( ahem hardcodes values).. into the portal side detection script and it seems to be working, but i have to find a way to change the portals and stuff without doing a complete refresh, something i need to find a way to do. . In the attatched screen recording, you can see how the rectangular prism looks zoomed in at the start, and on the other side, a rectangular prism with the same distance looks further away. . Oh well, I’ll probably fix it tommorrow.
After like 5 hours of working. THE. BUG. FINALLY. FIXEDDDD. I can’t believe it. It literally took 3 lines of code changing. But well, it was a good experience. Now, everything shown in the other portal looks proportionate. Also, if you didn’t notice, i changed some files, like adding the noneuclidean code to the noneuclideans/ folder.
I’ve had some exams recently, so I didn’t really do much. I added another room where the inside is longer than the outside which is cool, but it has a bug where the block looks really close to the portal? I don’t now how to describe it lol. Anyways, I’ll just leave it for now, once I finish my exams I’ll continue working on it.
Aight. It’s been a couple of weeks and i found a job (hooray), so unfortunately i havent been able to do much coding, except maybe plan the idea. The idea “Instead of building JUST a noneuclidean thing (bc everyone’s been doing that for years now), i make it an IKEA simulator” bc we ALL know that IKEA rooms are secretly noneuclidean mazes that trap us into buying 347 chairs (speaking from experience trust) The plan I currently have 2 things made: a noneuclidean tunnel, and a noneuclidean room where it looks like a 4-roomed house, but it actually has 6 rooms ( note: still broken ), so I think I can get started with the first floor and the market-hall for now. A quick search of “ikea layout” shows a redditor’s very useful intentionally-confusing floor plan, so I will be using that with a few adjustments to fit in with my idea The problems we got some few problems idk how to get obj models into my custom from-scratch engine i still need to fix a ton of bugs, and i need to adapt my hard-coded code to the new ikea idea nevertheless, im quite excited about this project, i will continue working on it. my blueprint is attatched here
After numerous experiments, I have screwed up. I should’ve created the IKEA design before I started working on the Noneuclidean files, because now I have to delete all of them. Well there goes my 8 hours (I don’t know what image to attach here)
Noneuclidean IKEA shell coming together nicely! Got the colours pretty right too. Only issue is that theres this wierd blue thing covering portals rendered behind portals, but that should be solved in another day
I. Fixed. The. Bug It wasn’t a bug, it was just me forgetting to add a feature. In other words, I thought my code was broken when in reality I didn’t even code a recursive rendering system in the first place, so portals were always blue. So… IKEA is going pretty well. The noneuclidean shell is basically complete. It’s time to work on some interior deco, but first I might have a bit of a look on the code and clean up some AI slop. (Oh. yeah, and idk if IKEA has the yellow door thing world-wide. It does in my local IKEA, so I added it) but now… its BLAHAJ TIME
It is my pleasure to announce that we have undergone a name change. “Super Noneuclidean” just didn’t describe my project enough, so using my last 3 braincells left today I decided I should rename it to “wierd ikea simulator”. . I know, I know, you might be thinking, “but why Ethan? This name sounds actually horrible”. Well, there’s a pretty good reason for this name, let me explain. . A year ago, I was obsessed with state-of-the-art AI. And making money. Mainly the latter. But anyways, entrepeneurship is like 5% coding and 50% arguing to others about why your product is good, and another 45% fixing bugs and later headaches. I don’t exactly hate my experiences with AI, but I definitely need a break from corporate marketing and actually do something dumb for once. During the name change, I decided “super noneuclidean” didn’t have any “IKEA” in it, and I thought I could make it even more dumb, so using reverse psychology the dumbest name is the one that sounds the most plain, direct, and, well… dumb, hence my name. . So far, this project has really saved my mentality, pretty cool indeed. . (and yes I wrote on my last 2 braincells at 9pm while sleepy af. thanks for reading tho)
Worked on the shelving for the self-service area. Once I was finished with this, I realised that IKEA stores go counterclockwise , while mine is designed to go clockwise (in the clip I went clockwise bc the storage stuff are always at the end). Well… its a feature now . After all, this project isn’t really designed to be that realistic. If it was super realistic, it wouldn’t be a single floor and it definitely won’t have buggy portals everywhere.
Just fixed a bug where the portal would have this weird wireframe surrounding it making it very obvious theres a portal here. However, I’ve been trying to fix the issue where for 1 frame something appears on the screen when u enter a portal. My guess on why this is is because since the portal is a very thin cube, the inside of the cube still exists, hence the blue part. This would require modifying my cube engine into a multi-object engine (pretty hard), but I will give it a try.
Bit.. lacking… for a homepage, but uhh it’ll do for now
Changed the soundtrack, and updated the home page! Not really much to say, same bugs as usual, same features to add, I haven’t been procrasting a lot not gonna lie these bugs are kinda hard to solve. It’s hard to blend when I should add based on IKEA and what to sacrifice based on what I can do.
I. Solved. The. Bug Turns out, after spending 3 days on the bug, asking the Stardance Slack multiple times, having discussions with multiple chatbots, and also loosing maybe 10-15 strands of hair, I’ve finally done it. Turns out, the solution was to change a decimal place, from 0.1 to around 0.01. . Not gonna lie, before this I had completely lost faith in this project. Like seriously. Maybe I’ll keep working on it now that this bug is solved. . “Now Ethan, what exactly is the bug??” you may ask? Well, if you didn’t read my previous devlogs (or maybe i didnt write abt it, idk lol i kinda just.. forget most of my devlogs), I had an issue where there would be a frame of blue in between portal transitions. It completely ruined the “magic trick” of the noneuclidean IKEA. . I can now sleep tonight in peace :)
Cleaned up the code, not much ig. Honestly, I don’t even know if I want to, and should, build the whole IKEA. I’ve been considering turning this into a noneuclidean IKEA storage simulation. . The benefits of this is that it’s much easier to make while still keeping the potential for glTF objects for Blahaj and friends, and also makes it so my project is more narrowly focused, but the downsides is that it probably has less variance, and has not much room for future upgrades. . I might implement the solution where it is a storage simulator for now, ship it, and later I can add code to turn it into a more “detailed” IKEA simulator if I decide graphic computing is for me.
Placed some more shelves
heheh funny bug, set the near plane threshold to 0 (EPILEPSY WARNING)
Fine-tuned some values, especially in movement. I decided it would be better to just hide the near threshold portal bug as a whole and compromise by having this wierd outline surrounding the portal. Maybe I’ll drop some insane IKEA lore explaining how it was a feature and not a bug
Added these little pallette things and first blahajs, but they’re lacking textures and the pallette looks a bit off, will fix first thing tmrw
Still a few bugs, but they’re getting better and I’ve added the pallet things now. I think it should be close to shipping :)
Prepared for ship! Wrote some more in the README, including references used in my IKEA (I’m not trying to copy IKEA, but it can’t be completely different). Hopefully you all enjoy the product I’ve made, because I certainly did enjoy making it!
Ships:
I made a custom non-euclidean game engine, built from scratch with Vite and WebGPU. In this demo, you can explore a highly simplified and abstract IKEA simulation, largely inspired by my experiences shopping at IKEA (the endless rows of… boxes and furniture), as well as SCP-3008 (I only found that out while making this project). . The most challenging part were the endless bugs encountered while adding seamless Non-Euclidean geometry, which I had decided to solve by mixing Euclidean geometry with portals, which is how most games simulate Non-Euclideanness. I could’ve opted for a pure mathematically non-euclidean game engine, but that would’ve made making IKEA itself much harder as I would have to wrap my head around non-euclidean geometry. . I had numerous Non-euclidean things planned, such as a tunnel that was longer/shorter on the inside. However, it was hard to integrate them into the actual IKEA due to its non-euclidean shell (meaning it has varying amounts of rooms inside what looks like a building with only 4 rooms). . In the end, I’m very proud of my project as a whole and how I went from a total graphics noob to someone who could make a graphics engine and something IKEA-resembling, entirely from scratch. I certainly enjoyed the moments I spent coding (and debugging) this project, and I hope you enjoy it too!...
|
1792961389.6369224
|
1793047789.6369224
|
|
33660
|
PartSourcer by @yaasshh | Stardance
|
yaasshh
|
1
|
47.23
|
515
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-20T14:26:23Z", "hours": 37.0, "multiplier": 18.84, "payout": 515, "blessing": "neutral", "text": "PartSourcer Find the cheapest in-stock part for your PCB in one search. Live at “part-sourcer.vercel.app” Search any electronic component and get its stock, price, footprint and datasheet in one place. Every number is stamped with the moment it was read, so you always know how new it is. The useful bit: for a part you searched, it looks for one cheaper drop-in that is actually in stock, and tells you why it counts as a match. Same package, matching specs, real stock, and both prices re-read the same way before any saving gets claimed. If it cannot find a genuine match, it elaborates so. Right now that works for resistors and capacitors. Everything else gets an “no match found”. (Perhaps later implementation) Rules it sticks to: No made-up stock or prices. If the data is stale, you get an error, not a number pretending to be fresh. A part with no published price says “no price”, never $0.00. A zero would read as free and win every comparison. Missing fields are left out rather than filled with a placeholder. Built with FastAPI and React, both on Vercel, with Postgres behind the price history. Part data comes from Mouser in real time, plus an open snapshot of the LCSC catalogue that refreshes about once a day. There is a DigiKey adapter too, and it switches on once credentials are set. Free, open source, no login, no paywall. MIT licensed.", "repo": "https://github.com/yaasshh09/PartSourcer", "demo": "https://part-sourcer.vercel.app"}]...
|
[{"post_id": 82642, "ts": "202 [{"post_id": 82642, "ts": "2026-10-25T14:22:03Z", "hours": 4.1617, "text": "Devlog 6 Since the last devlog I’ve been working through my list of 60 ideas. Part pages got a lot more useful. Each one now has a price history chart, a hint about when a sold-out part might come back, and whether the part is still being made or is on its way out. Sometimes it also suggests a part with better specs for the same money, and now it can show up to three cheaper swaps instead of just one. Search results also get small badges when a price or stock level changes. I added a currency picker, a watchlist for parts you care about, and RSS feeds that tell you when a part’s price or stock moves. For BOMs, you can now see whether buying everything from one store beats splitting the order between stores. I also made tools for people who don’t want to use the website. There’s a developer page for the API, a command line tool that prices a BOM, a GitHub Action that posts your BOM cost on pull requests, and a KiCad plugin. I tested the plugin on real KiCad boards and found it was missing some part number fields, so I fixed that. Other fixes: the BOM page works better on phones, the colors are easier to read, dark mode looks right, and downloaded BOMs can’t carry sneaky spreadsheet formulas anymore. The free data source I use still has broken search, so I’ve started applying for the official LCSC API. Fingers crossed it gets approved!"}, {"post_id": 79259, "ts": "2026-10-13T07:30:24Z", "hours": 6.0697, "text": "#Devlog 5 After the security pass, I mostly worked on new features. I added a Browse section, so you can look through six part categories without knowing a part number. Then I built a compare tray. You pin up to four parts from anywhere on the site and see them side by side. I moved the site to Vercel with a database in Singapore. A small job now runs every night and records prices, so later I can show how a part’s price changes over time. Search had some problems. The free data source I use started returning broken results, so I wrote up what was going wrong and reported it to the people who run it. I also stopped showing results that had nothing to do with what you searched, and I made the “part not found” message more clear. Now it says when a distributor just didn’t answer, instead of saying the part doesn’t exist. You can also sort results by price now. The biggest new thing is BOM check. You paste in your whole parts list, or load a spreadsheet, and it prices every line at the quantity you need. It tells you which lines it skipped and why, and you can share the checked list as a link. Part pages now show each distributor’s bulk pricing. There’s also a quantity box, so you see what you’d actually pay for 250 parts and not just one. If you click a part from your BOM, that box already has your quantity in it. Next, I made a list of 60 more ideas and started building them."}, {"post_id": 51003, "ts": "2026-08-20T14:21:47Z", "hours": 1.0139, "text": "Dev log #5?? Ran a 20-item polish checklist over the site. Ten things were already fine: links all work, buttons all do something, the 404 page is real, errors show up properly. Six items from the checklist were missing, so I built them. Fixed the page titles. Every page was showing the same title because nothing reloads in a single-page app. Now a part page names the part, a search names what you searched. Put a year in the footer, read live so it never goes stale. Dropped the “404 demo” link, that was a leftover dev thing sitting next to real links. Then two actual bugs I only found by measuring in a browser at phone size. The home page really was scrolling sideways: a card grid was asking for 400px inside a 319px space. About had the same thing at 340px. Fixed both. The header was the other one. It needed 390px of room for the logo and five links on a 375px phone. It had been wrapping onto three rows and leaving Contact stranded alone. Now the links tuck behind a menu button below 640px. Header went from 281px tall to 69px. Last thing: the pages were too narrow and floated in empty space. Widened them a lot, 1600px for the main shell and 1400px for the text pages. Width alone would’ve just made long ugly lines, so the card grids reshaped too. FAQ goes two across, the three how-it-works steps share a row, the four-card grids go four across and step down cleanly. Plus a few more minor changes, The project is built enough to be shipped!"}, {"post_id": 50904, "ts": "2026-08-20T11:35:02Z", "hours": 7.1633, "text": "Dev log #3 or #4?? After the site went multi-distributor, I kept going. I added a contact page with my email, Instagram and GitHub, dropped GitHub out of the header, gave the footer real columns with links that work, moved the data source note over to the About page and wrote more there. The front page got more to read too, and the About cards now sit in a clean 2x2 grid. Then I did a proper security pass. I added a middleware that stamps security headers on every API response, including CSP, frame options and HSTS. Wrote a rate limiter that reads the client IP from headers the platform actually writes, never the one a caller can fake, and capped its key table so the limiter itself cannot be turned into the attack. Added input caps: query at 200 characters, page at 50, part key at 128, all refused early so nobody can burn my distributor quota. Added a body size ceiling and tightened CORS. The static site got its own CSP through vercel.json, checked against the real built bundle. I also wrote guard tests: they fail if a stray .env gets committed, if a credential literal shows up in source, if SQL starts joining values instead of using placeholders, or if a Set-Cookie ever appears. Then I documented the whole posture in the backend README, including what I deliberately left out and why."}, {"post_id": 48452, "ts": "2026-08-16T20:03:22Z", "hours": 13.2792, "text": "PartSourcer devlog #2 Started with a simple annoyance: finding a part that is actually in stock means opening six distributor tabs per line of a BOM. Wrote a throwaway script to poke at the free jlcsearch API and see what the data really looked like. Turned out it has no brand and no datasheet. Decided early to show that as blank rather than show wrong results. Also built the backend. FastAPI, a swappable data source so the real LCSC API can drop in later. Also tweaked the frontend a bit. React, inline styles, a loud yellow-and-black look. Then deploy configs, and the site went live on Render. Implemented a price history recorder, so the data is there later even if nothing reads it yet. The big addition. The site finally became multi-distributor: Mouser and DigiKey alongside LCSC. Every part now carries a list of offers, one per distributor, and a per-source status so a partial failure shows as a partial answer rather than an error."}, {"post_id": 27780, "ts": "2026-07-13T17:10:53Z", "hours": 15.7958, "text": "I’ve been working on a personal project called PartSourcer. Essentially, it’s a database, a bit beautified, but a database nevertheless, that scours the internet for major electronic component distributors in bulk, such as Mouser, DigiKey, JLCPCB, and LCSC. It goes through all of these major component databases, fetching real-time data from API keys I generated myself, and outputs the components and their prices. So far, I have the frontend and most of the backend done. The next step is to actually implement the Mouser and DigiKey API keys. I have the Mouser one ready; DigiKey is a bit more confusing to get, but I will get it. I already have the LCSC and JLCPCB integration working for each component, showing real-time stock and unit prices per item. I’m going to keep a very early version of the project open source under the MIT license. Later on, I plan to remove the MIT license and host it on the internet for free, but it won’t remain open source. Only that very early version will stay under the MIT license. Moving forward, my roadmap for the project includes: Completing the actual API implementations. Implementing a side-by-side comparison tool. Adding a large-scale, bulk BOM (bill of materials) upload feature. Creating a price history chart. Implementing a “browse by category” feature. Adding a “biggest savings this week” section to show people where the best deals are and what they can save money on."}]...
|
Title: PartSourcer by @yaasshh | Stardance
Devlog Title: PartSourcer by @yaasshh | Stardance
Devlogs:
I’ve been working on a personal project called PartSourcer. Essentially, it’s a database, a bit beautified, but a database nevertheless, that scours the internet for major electronic component distributors in bulk, such as Mouser, DigiKey, JLCPCB, and LCSC. It goes through all of these major component databases, fetching real-time data from API keys I generated myself, and outputs the components and their prices. So far, I have the frontend and most of the backend done. The next step is to actually implement the Mouser and DigiKey API keys. I have the Mouser one ready; DigiKey is a bit more confusing to get, but I will get it. I already have the LCSC and JLCPCB integration working for each component, showing real-time stock and unit prices per item. I’m going to keep a very early version of the project open source under the MIT license. Later on, I plan to remove the MIT license and host it on the internet for free, but it won’t remain open source. Only that very early version will stay under the MIT license. Moving forward, my roadmap for the project includes: Completing the actual API implementations. Implementing a side-by-side comparison tool. Adding a large-scale, bulk BOM (bill of materials) upload feature. Creating a price history chart. Implementing a “browse by category” feature. Adding a “biggest savings this week” section to show people where the best deals are and what they can save money on.
PartSourcer devlog #2 Started with a simple annoyance: finding a part that is actually in stock means opening six distributor tabs per line of a BOM. Wrote a throwaway script to poke at the free jlcsearch API and see what the data really looked like. Turned out it has no brand and no datasheet. Decided early to show that as blank rather than show wrong results. Also built the backend. FastAPI, a swappable data source so the real LCSC API can drop in later. Also tweaked the frontend a bit. React, inline styles, a loud yellow-and-black look. Then deploy configs, and the site went live on Render. Implemented a price history recorder, so the data is there later even if nothing reads it yet. The big addition. The site finally became multi-distributor: Mouser and DigiKey alongside LCSC. Every part now carries a list of offers, one per distributor, and a per-source status so a partial failure shows as a partial answer rather than an error.
Dev log #3 or #4?? After the site went multi-distributor, I kept going. I added a contact page with my email, Instagram and GitHub, dropped GitHub out of the header, gave the footer real columns with links that work, moved the data source note over to the About page and wrote more there. The front page got more to read too, and the About cards now sit in a clean 2x2 grid. Then I did a proper security pass. I added a middleware that stamps security headers on every API response, including CSP, frame options and HSTS. Wrote a rate limiter that reads the client IP from headers the platform actually writes, never the one a caller can fake, and capped its key table so the limiter itself cannot be turned into the attack. Added input caps: query at 200 characters, page at 50, part key at 128, all refused early so nobody can burn my distributor quota. Added a body size ceiling and tightened CORS. The static site got its own CSP through vercel.json, checked against the real built bundle. I also wrote guard tests: they fail if a stray .env gets committed, if a credential literal shows up in source, if SQL starts joining values instead of using placeholders, or if a Set-Cookie ever appears. Then I documented the whole posture in the backend README, including what I deliberately left out and why.
Dev log #5?? Ran a 20-item polish checklist over the site. Ten things were already fine: links all work, buttons all do something, the 404 page is real, errors show up properly. Six items from the checklist were missing, so I built them. Fixed the page titles. Every page was showing the same title because nothing reloads in a single-page app. Now a part page names the part, a search names what you searched. Put a year in the footer, read live so it never goes stale. Dropped the “404 demo” link, that was a leftover dev thing sitting next to real links. Then two actual bugs I only found by measuring in a browser at phone size. The home page really was scrolling sideways: a card grid was asking for 400px inside a 319px space. About had the same thing at 340px. Fixed both. The header was the other one. It needed 390px of room for the logo and five links on a 375px phone. It had been wrapping onto three rows and leaving Contact stranded alone. Now the links tuck behind a menu button below 640px. Header went from 281px tall to 69px. Last thing: the pages were too narrow and floated in empty space. Widened them a lot, 1600px for the main shell and 1400px for the text pages. Width alone would’ve just made long ugly lines, so the card grids reshaped too. FAQ goes two across, the three how-it-works steps share a row, the four-card grids go four across and step down cleanly. Plus a few more minor changes, The project is built enough to be shipped!
#Devlog 5 After the security pass, I mostly worked on new features. I added a Browse section, so you can look through six part categories without knowing a part number. Then I built a compare tray. You pin up to four parts from anywhere on the site and see them side by side. I moved the site to Vercel with a database in Singapore. A small job now runs every night and records prices, so later I can show how a part’s price changes over time. Search had some problems. The free data source I use started returning broken results, so I wrote up what was going wrong and reported it to the people who run it. I also stopped showing results that had nothing to do with what you searched, and I made the “part not found” message more clear. Now it says when a distributor just didn’t answer, instead of saying the part doesn’t exist. You can also sort results by price now. The biggest new thing is BOM check. You paste in your whole parts list, or load a spreadsheet, and it prices every line at the quantity you need. It tells you which lines it skipped and why, and you can share the checked list as a link. Part pages now show each distributor’s bulk pricing. There’s also a quantity box, so you see what you’d actually pay for 250 parts and not just one. If you click a part from your BOM, that box already has your quantity in it. Next, I made a list of 60 more ideas and started building them.
Devlog 6 Since the last devlog I’ve been working through my list of 60 ideas. Part pages got a lot more useful. Each one now has a price history chart, a hint about when a sold-out part might come back, and whether the part is still being made or is on its way out. Sometimes it also suggests a part with better specs for the same money, and now it can show up to three cheaper swaps instead of just one. Search results also get small badges when a price or stock level changes. I added a currency picker, a watchlist for parts you care about, and RSS feeds that tell you when a part’s price or stock moves. For BOMs, you can now see whether buying everything from one store beats splitting the order between stores. I also made tools for people who don’t want to use the website. There’s a developer page for the API, a command line tool that prices a BOM, a GitHub Action that posts your BOM cost on pull requests, and a KiCad plugin. I tested the plugin on real KiCad boards and found it was missing some part number fields, so I fixed that. Other fixes: the BOM page works better on phones, the colors are easier to read, dark mode looks right, and downloaded BOMs can’t carry sneaky spreadsheet formulas anymore. The free data source I use still has broken search, so I’ve started applying for the official LCSC API. Fingers crossed it gets approved!
Ships:
PartSourcer Find the cheapest in-stock part for your PCB in one search. Live at “part-sourcer.vercel.app” Search any electronic component and get its stock, price, footprint and datasheet in one place. Every number is stamped with the moment it was read, so you always know how new it is. The useful bit: for a part you searched, it looks for one cheaper drop-in that is actually in stock, and tells you why it counts as a match. Same package, matching specs, real stock, and both prices re-read the same way before any saving gets claimed. If it cannot find a genuine match, it elaborates so. Right now that works for resistors and capacitors. Everything else gets an “no match found”. (Perhaps later implementation) Rules it sticks to: No made-up stock or prices. If the data is stale, you get an error, not a number pretending to be fresh. A part with no published price says “no price”, never $0.00. A zero would read as free and win every comparison. Missing fields are left out rather than filled with a placeholder. Built with FastAPI and React, both on Vercel, with Postgres behind the price history. Part data comes from Mouser in real time, plus an open snapshot of the LCSC catalogue that refreshes about once a day. There is a DigiKey adapter too, and it switches on once credentials are set. Free, open source, no login, no paywall. MIT licensed....
|
1792997802.160689
|
1793084202.160689
|
|
38756
|
Dragonfly Control Software by @dr_aerospace | Star Dragonfly Control Software by @dr_aerospace | Stardance...
|
dr_aerospace
|
1
|
35.0
|
515
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-24T15:04:18Z", "hours": 35.0, "multiplier": 12.24, "payout": 515, "blessing": "neutral", "text": "I made a program, written in the KerboScript language, to autonomously control a replica of NASA’s Dragonfly mission (or any kind of rotorcraft) in Kerbal Space Program. Aside of selecting your target altitude or waypoint, the script is designed to be completely independent of human interaction. To use this program, you will need a ship with rotors that can maneuver in any direction and a kOS-enabled probe core. The script also integrates with the SCANsat mod to show the user telemetry and ETA data in the terminal (you can still use the script if you don’t have the SCANsat mod). The program’s flight profile divides into four main stages Liftoff , Cruise , Approach , and Landing . Each one of these has its own variables, loops, conditionals, and triggers. The script’s flow is designed to move on with each stage in an orderly manner. Each stage also has controls for altitude, pitch, and throttle depending on which stage is the code running. Besides the main control functions, the script also has two safety function to prevent crashes or rolling down slopes. The first one of this functions is Landing Abort . This function activates the exact second the drone lands and checks for five seconds if its pitch or roll exceed dangerous angles. If so happens, the script will take off rapidly, fly in a straight line for 30 seconds, and attempt to land again. If the drone lands in stable ground, it simply understands that it landed in safe ground and that landing abort is not needed. The other safety function is called the Safe Altitude Maintenance . This function executes with every refresh of the Cruise loop, and checks if the drone is within its target altitude margin and the distance to the ground goes below 500 meters. If that occurs, the drone accelerates to climb and maintain a 500 meter distance to the ground. When the drone returns to its target altitude margin and the distance to the ground becomes greater than 500, it returns to its normal Cruise mode. This is especially useful when flying at low altitude and near mountainous regions. After the drone lands and confirms it is safely leveled, it activates the Scientific Analysis Sequence . This sequence is composed by PRINT, action group, and WAIT commands. The main idea of this function is that it is completely customizable; this way, the user can select which instruments activate at what time. Also, there is another function that, in a fraction of a second, activates only one action group just after the Cruise loop’s conditionals are fulfilled and before the Approach loop activates. The objective is to place either telemetry or barometric scans while the drone is airborne. The objective of this script is to make powered flight in KSP rather an autonomous, stress-free experience. Any KSP player, from newbie to experienced can use the script to automate planet exploration.", "repo": "https://github.com/JuanD0409/Dragonfly-Control-Software", "demo": "https://youtu.be/TBGFOX5xo8Q"}]...
|
[{"post_id": 72805, "ts": "202 [{"post_id": 72805, "ts": "2026-09-23T19:27:24Z", "hours": 2.4856, "text": "Devlog 8 (and final) of the Dragonfly Control Software I’m pleased to announce that the Dragonfly Control Software is ready to ship for review! Aside from final touches and adjustments, the last thing I made for the program is a function that triggers an action group set to activate telemetry scans from SCANsat-related parts. The idea for this is to place activation command for these scans in a determined action group triggered by the code itself. This function is called from the Cruise function right after its loop is complete and before the Approach function is called. This way, the telemetry scans are done at Dragonfly’s target altitude. You can see the function in action in the video I left below. Speaking about videos, I should get to editing the Demo video I have to upload. I’m very proud of myself and I hope many KSP players get to use this script since drones are very hard to design and fly in KSP."}, {"post_id": 72072, "ts": "2026-09-22T03:27:39Z", "hours": 3.5306, "text": "Devlog 7 of the Dragonfly Control Software Safety First! This devlog is all about the safety features of Dragonfly’s script. This script has two safety functions that work at certain times of Dragonfly’s flight procedure and for the same idea: NOT CRASHING . The first one is the Landing Abort set of functions (that I have talked about but never shown until today). The main idea of this function is to prevent rolling down a hill or mountain. It works by checking if Dragonfly’s pitch exceeds 45 degrees or if its roll exceeds 30 degrees (each to either side). If so happens, Dragonfly panics, takes off, locks its heading, flies straight for 30 seconds, and attempts to land. Once Dragonfly lands, it re-checks if its pitch or roll exceed the limiters, and takes off again if needed until it finds an adequate landing spot. The second function is a safe altitude maintenance function (something very much like the PULL UP PULL UP or CAUTION, TERRAIN alerts and crash avoidance systems on airplanes). This function constantly executes with every refreshing of the Cruise main UNTIL loop and evaluates the following conditions: if Dragonfly’s altitude over sea level is within a 10-meter margin of error around the target altitude, and if Dragonfly’s altitude over ground level goes below 500 meters. Both conditionals are joined by an AND gate and if both are true, Dragonfly initiates an altitude maintenance mode. It is supposed to maintain a 500 meter distance from the ground until its altitude over ground level is within a 10-meter margin around 500 meters and its altitude over sea level is around the same 10-meter margin around its target altitude. When both conditions are true, Dragonfly understands that it is once again at its target altitude and at a safe distance from the ground, and returns to its normal cruise. This mode is quite useful when flying low to avoid mountains or hills, especially steep ones like the ones in the video. Although this script is very smart are cautious, DO NOT FLY DRAGONFLY TO A MOUNTAIN! During my testing, I have had multiple crashes and errors while attempting to land at the sides or top of mountains. Also, if you fly Dragonfly to a mountain, the landing abort function will go crazy and keep you there for half an hour (or more) trying to land on the mountain. I have given my advice to thee, you shall see if you follow it or reject it."}, {"post_id": 69945, "ts": "2026-09-18T03:29:28Z", "hours": 8.3464, "text": "Devlog 6 of the Dragonfly Control Software I have worked than what should be considered overtime in the project and my effort is giving its fruits! With some help of AI doing a lot of math and calculus, I managed to make an actual approach function. First, Dragonfly calculates the distance to to the target Waypoint as a triangle. This means, in easy words, that the distance to the ground is one side of the triangle, the distance from the current point on the ground that Dragonfly is flying over to the Waypoint is the other side of the triangle, and the distance from the actual craft to the Waypoint is the hypotenuse of the triangle. Therefore, the idea is that Dragonfly follows that hypotenuse (shown in the video) all the way to the waypoint. Then, it levels its nose, activates the landing function, reduces its horizontal velocity to almost 0 by raising its nose (new characteristic), and softly lands. Also, I already wrote the landing abort function I talked about on the last Devlog, however, I had to re-write it since the SCANsat data for slope is apparently not valid or recognized, so, it did not work. What I made instead was a function that evaluates current pitch and roll right at landing, and, if either value crosses a limit, calls another function to make the drone take off, fly in a straight line, and call the landing function to try to land again. If the limit is not crossed, the drone simply activates the scientific analysis sequence. To summarize, this activates a land, check, and abort-or-stay loop of functions. This loop is executed until Dragonfly lands and its limits are not crossed. I will upload a video of it in the next devlog since I need to focus on fine-tuning the main functions first."}, {"post_id": 67002, "ts": "2026-09-13T01:12:05Z", "hours": 5.0267, "text": "Devlog 5 of the Dragonfly Control Software I’m proud to announce that Dragonfly has successfully completed its first trans-oceanic flight! I had previously tested Dragonfly’s cruise altitude range around 5-6 kilometers over sea level, but this time, I decided to go even higher to 10 kilometers. I noticed that, at this altitude, Dragonfly could fly much faster but needed more power to maintain its altitude; just like airplanes do here on Earth. The video below shows Dragonfly exiting one continent and entering another on Tekto. Also, I found out how to make the SCANsat integration work. If you watch the terminal closefully, you can see Dragonfly’s current coordinates changing as it flies, and other telemetry data like current biome, slope, and elevation. Turns out, I had accidentally targeted the side of a mountain as the landing area and Dragonfly almost starts rolling down it, so, that gave me an idea: landing abort. I think the best option to make this work is to use the SCANsat data for slope and, if it is beyond a certain amount, make the drone fly to another area until the slope becomes safe enough to land. I could either make it fly straight until slope decreases to a safe amount, or make the user select an alternative waypoint (preferably flat) to safely land in case Dragonfly cannot. I thought another way to make this work was by detecting if the user presses the abort button on KSP’s UI, but that would ruin the whole point of Dragonfly being completely autonomous. In real space missions there is no abort button (neither is a “revert to assembly” button like in KSP) that works faster than the speed of light, so that is not a viable option. Anyways, I feel this project is getting better and more realistic with every change I make."}, {"post_id": 63974, "ts": "2026-09-08T02:10:41Z", "hours": 4.8742, "text": "Devlog 4 of the Dragonfly Control Software Progress has been made! I have made multiple improvements to the code and its functioning in general. First, I added a telemetry integration function using the SCANsat mod (because what is a drone without telemetry, right?). Second, I wrote the scientific sequence function, but I have not yet integrated it into the drone. I have to assign its scientific devices to the action groups and calibrate their operating times. Third, I upgraded the Approach function and it now makes this butter-smooth leveling maneuver (seen on the video below) while also smoothly controlling its throttle, effectively maintaining its altitude within a 3 meter range. This script still has many improvements to be made, and I will definitely keep working on it."}, {"post_id": 54043, "ts": "2026-08-24T20:05:13Z", "hours": 3.6028, "text": "Devlog 3 of the Dragonfly Control Software After having a break because of medical things, I returned to continue improving my project. I updated the Approach function and now it works better. However, Dragonfly is falling short of its target waypoint so I’ll be fixing that problem. Also, I will leave a video showing the Landing function in action, enjoy it."}, {"post_id": 34974, "ts": "2026-07-26T03:24:59Z", "hours": 4.5442, "text": "Devlog 2 of the Dragonfly Control Software. After a complete code rewrite from scratch , I finally figured out how to make Dragonfly maneuver correctly. However, I need to calibrate a PID controller that makes the drone’s nose wobble up and down, but that is a minor problem now. I will continue to perfect the code to make it behave without any mayor issue. Anyways, here is a video of the drone taking off and cruising to its ideal altitude."}, {"post_id": 33840, "ts": "2026-07-24T02:38:20Z", "hours": 2.6011, "text": "Devlog 1 of the Dragonfly Control Software. I started this new project inspired by NASA’s Dragonfly mission since I wanted a harder challenge than the rover autopilot. However, I was then surprised by how difficult it was to make kOS control a drone’s angles (pitch, yaw, and roll) alongside with throttle, height control, speed, and who knows what more. So, I came up with PID functions that were built into kOS’s libraries that auto-correct the drone’s control variables mentiones before. After 2+ hours of troubleshooting in Kerbal Space Program (that sadly are not registered in Hackatime) I made the drone fly. Now, I need to debug the script even more to make it correct its pitch, and add altitude controls for adequate ascending, descending, and landing. I have the Outer Planets mod installed (quick context: KSP does not have Saturn, Uranus, and Neptune; this planet pack mod adds them and some moons into the game), so I sent Dragonfly to Tekto (recreation of Titan, the target moon for the real mission) where gravity is low and atmospheric pressure is higher than Kerbin (Earth in KSP). This moon is an absolute paradise for rotorcrafts like this. I’ll leave a video of the craft successfully performing its first takeoff below. Also, I totally did NOT almost crash it after assuming control."}]...
|
Title: Dragonfly Control Software by @dr_aerospace Title: Dragonfly Control Software by @dr_aerospace | Stardance
Devlogs:
Devlog 1 of the Dragonfly Control Software. I started this new project inspired by NASA’s Dragonfly mission since I wanted a harder challenge than the rover autopilot. However, I was then surprised by how difficult it was to make kOS control a drone’s angles (pitch, yaw, and roll) alongside with throttle, height control, speed, and who knows what more. So, I came up with PID functions that were built into kOS’s libraries that auto-correct the drone’s control variables mentiones before. After 2+ hours of troubleshooting in Kerbal Space Program (that sadly are not registered in Hackatime) I made the drone fly. Now, I need to debug the script even more to make it correct its pitch, and add altitude controls for adequate ascending, descending, and landing. I have the Outer Planets mod installed (quick context: KSP does not have Saturn, Uranus, and Neptune; this planet pack mod adds them and some moons into the game), so I sent Dragonfly to Tekto (recreation of Titan, the target moon for the real mission) where gravity is low and atmospheric pressure is higher than Kerbin (Earth in KSP). This moon is an absolute paradise for rotorcrafts like this. I’ll leave a video of the craft successfully performing its first takeoff below. Also, I totally did NOT almost crash it after assuming control.
Devlog 2 of the Dragonfly Control Software. After a complete code rewrite from scratch , I finally figured out how to make Dragonfly maneuver correctly. However, I need to calibrate a PID controller that makes the drone’s nose wobble up and down, but that is a minor problem now. I will continue to perfect the code to make it behave without any mayor issue. Anyways, here is a video of the drone taking off and cruising to its ideal altitude.
Devlog 3 of the Dragonfly Control Software After having a break because of medical things, I returned to continue improving my project. I updated the Approach function and now it works better. However, Dragonfly is falling short of its target waypoint so I’ll be fixing that problem. Also, I will leave a video showing the Landing function in action, enjoy it.
Devlog 4 of the Dragonfly Control Software Progress has been made! I have made multiple improvements to the code and its functioning in general. First, I added a telemetry integration function using the SCANsat mod (because what is a drone without telemetry, right?). Second, I wrote the scientific sequence function, but I have not yet integrated it into the drone. I have to assign its scientific devices to the action groups and calibrate their operating times. Third, I upgraded the Approach function and it now makes this butter-smooth leveling maneuver (seen on the video below) while also smoothly controlling its throttle, effectively maintaining its altitude within a 3 meter range. This script still has many improvements to be made, and I will definitely keep working on it.
Devlog 5 of the Dragonfly Control Software I’m proud to announce that Dragonfly has successfully completed its first trans-oceanic flight! I had previously tested Dragonfly’s cruise altitude range around 5-6 kilometers over sea level, but this time, I decided to go even higher to 10 kilometers. I noticed that, at this altitude, Dragonfly could fly much faster but needed more power to maintain its altitude; just like airplanes do here on Earth. The video below shows Dragonfly exiting one continent and entering another on Tekto. Also, I found out how to make the SCANsat integration work. If you watch the terminal closefully, you can see Dragonfly’s current coordinates changing as it flies, and other telemetry data like current biome, slope, and elevation. Turns out, I had accidentally targeted the side of a mountain as the landing area and Dragonfly almost starts rolling down it, so, that gave me an idea: landing abort. I think the best option to make this work is to use the SCANsat data for slope and, if it is beyond a certain amount, make the drone fly to another area until the slope becomes safe enough to land. I could either make it fly straight until slope decreases to a safe amount, or make the user select an alternative waypoint (preferably flat) to safely land in case Dragonfly cannot. I thought another way to make this work was by detecting if the user presses the abort button on KSP’s UI, but that would ruin the whole point of Dragonfly being completely autonomous. In real space missions there is no abort button (neither is a “revert to assembly” button like in KSP) that works faster than the speed of light, so that is not a viable option. Anyways, I feel this project is getting better and more realistic with every change I make.
Devlog 6 of the Dragonfly Control Software I have worked than what should be considered overtime in the project and my effort is giving its fruits! With some help of AI doing a lot of math and calculus, I managed to make an actual approach function. First, Dragonfly calculates the distance to to the target Waypoint as a triangle. This means, in easy words, that the distance to the ground is one side of the triangle, the distance from the current point on the ground that Dragonfly is flying over to the Waypoint is the other side of the triangle, and the distance from the actual craft to the Waypoint is the hypotenuse of the triangle. Therefore, the idea is that Dragonfly follows that hypotenuse (shown in the video) all the way to the waypoint. Then, it levels its nose, activates the landing function, reduces its horizontal velocity to almost 0 by raising its nose (new characteristic), and softly lands. Also, I already wrote the landing abort function I talked about on the last Devlog, however, I had to re-write it since the SCANsat data for slope is apparently not valid or recognized, so, it did not work. What I made instead was a function that evaluates current pitch and roll right at landing, and, if either value crosses a limit, calls another function to make the drone take off, fly in a straight line, and call the landing function to try to land again. If the limit is not crossed, the drone simply activates the scientific analysis sequence. To summarize, this activates a land, check, and abort-or-stay loop of functions. This loop is executed until Dragonfly lands and its limits are not crossed. I will upload a video of it in the next devlog since I need to focus on fine-tuning the main functions first.
Devlog 7 of the Dragonfly Control Software Safety First! This devlog is all about the safety features of Dragonfly’s script. This script has two safety functions that work at certain times of Dragonfly’s flight procedure and for the same idea: NOT CRASHING . The first one is the Landing Abort set of functions (that I have talked about but never shown until today). The main idea of this function is to prevent rolling down a hill or mountain. It works by checking if Dragonfly’s pitch exceeds 45 degrees or if its roll exceeds 30 degrees (each to either side). If so happens, Dragonfly panics, takes off, locks its heading, flies straight for 30 seconds, and attempts to land. Once Dragonfly lands, it re-checks if its pitch or roll exceed the limiters, and takes off again if needed until it finds an adequate landing spot. The second function is a safe altitude maintenance function (something very much like the PULL UP PULL UP or CAUTION, TERRAIN alerts and crash avoidance systems on airplanes). This function constantly executes with every refreshing of the Cruise main UNTIL loop and evaluates the following conditions: if Dragonfly’s altitude over sea level is within a 10-meter margin of error around the target altitude, and if Dragonfly’s altitude over ground level goes below 500 meters. Both conditionals are joined by an AND gate and if both are true, Dragonfly initiates an altitude maintenance mode. It is supposed to maintain a 500 meter distance from the ground until its altitude over ground level is within a 10-meter margin around 500 meters and its altitude over sea level is around the same 10-meter margin around its target altitude. When both conditions are true, Dragonfly understands that it is once again at its target altitude and at a safe distance from the ground, and returns to its normal cruise. This mode is quite useful when flying low to avoid mountains or hills, especially steep ones like the ones in the video. Although this script is very smart are cautious, DO NOT FLY DRAGONFLY TO A MOUNTAIN! During my testing, I have had multiple crashes and errors while attempting to land at the sides or top of mountains. Also, if you fly Dragonfly to a mountain, the landing abort function will go crazy and keep you there for half an hour (or more) trying to land on the mountain. I have given my advice to thee, you shall see if you follow it or reject it.
Devlog 8 (and final) of the Dragonfly Control Software I’m pleased to announce that the Dragonfly Control Software is ready to ship for review! Aside from final touches and adjustments, the last thing I made for the program is a function that triggers an action group set to activate telemetry scans from SCANsat-related parts. The idea for this is to place activation command for these scans in a determined action group triggered by the code itself. This function is called from the Cruise function right after its loop is complete and before the Approach function is called. This way, the telemetry scans are done at Dragonfly’s target altitude. You can see the function in action in the video I left below. Speaking about videos, I should get to editing the Demo video I have to upload. I’m very proud of myself and I hope many KSP players get to use this script since drones are very hard to design and fly in KSP.
Ships:
I made a program, written in the KerboScript language, to autonomously control a replica of NASA’s Dragonfly mission (or any kind of rotorcraft) in Kerbal Space Program. Aside of selecting your target altitude or waypoint, the script is designed to be completely independent of human interaction. To use this program, you will need a ship with rotors that can maneuver in any direction and a kOS-enabled probe core. The script also integrates with the SCANsat mod to show the user telemetry and ETA data in the terminal (you can still use the script if you don’t have the SCANsat mod). The program’s flight profile divides into four main stages Liftoff , Cruise , Approach , and Landing . Each one of these has its own variables, loops, conditionals, and triggers. The script’s flow is designed to move on with each stage in an orderly manner. Each stage also has controls for altitude, pitch, and throttle depending on which stage is the code running. Besides the main control functions, the script also has two safety function to prevent crashes or rolling down slopes. The first one of this functions is Landing Abort . This function activates the exact second the drone lands and checks for five seconds if its pitch or roll exceed dangerous angles. If so happens, the script will take off rapidly, fly in a straight line for 30 seconds, and attempt to land again. If the drone lands in stable ground, it simply understands that it landed in safe ground and that landing abort is not needed. The other safety function is called the Safe Altitude Maintenance . This function executes with every refresh of the Cruise loop, and checks if the drone is within its target altitude margin and the distance to the ground goes below 500 meters. If that occurs, the drone accelerates to climb and maintain a 500 meter distance to the ground. When the drone returns to its target altitude margin and the distance to the ground becomes greater than 500, it returns to its normal Cruise mode. This is especially useful when flying at low altitude and near mountainous regions. After the drone lands and confirms it is safely leveled, it activates the Scientific Analysis Sequence . This sequence is composed by PRINT, action group, and WAIT commands. The main idea of this function is that it is completely customizable; this way, the user can select which instruments activate at what time. Also, there is another function that, in a fraction of a second, activates only one action group just after the Cruise loop’s conditionals are fulfilled and before the Approach loop activates. The objective is to place either telemetry or barometric scans while the drone is airborne. The objective of this script is to make powered flight in KSP rather an autonomous, stress-free experience. Any KSP player, from newbie to experienced can use the script to automate planet exploration....
|
1793004470.6282687
|
1793090870.6282687
|
|
44374
|
Clipboard++ by @Eel | Stardance
|
Eel
|
3
|
59.0
|
513
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-23T22:57:31Z", "hours": 24.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Shipped Clipboard++ v1.5.1! This update introduces a cleaner Windows-style interface, a flatter clipboard list, improved Quick Paste readability, real product screenshots, and documented search benchmarks.", "repo": "https://github.com/Caleb-Guyer/ClipboardPlusPlus", "demo": "https://github.com/Caleb-Guyer/ClipboardPlusPlus/releases"}, {"ship_num": 2, "ts": "2026-08-13T15:12:07Z", "hours": 27.0, "multiplier": 15.19, "payout": 406, "blessing": "neutral", "text": "Since the last ship, Clipboard++ has gone through a pretty massive expansion, with the focus shifting from a simple clipboard manager into a much more complete productivity tool. The biggest changes started with the workflow system. I added reusable workflows with multiple transformation steps, keyboard shortcuts, additional paste formats, and import/export support. This was followed by a rules engine that can automatically organize clips based on things like source application, content type, language, URL domains, and regex matches. Rules can perform actions such as pinning clips, adding tags or collections, and triggering workflows. I then expanded temporary clipboard functionality with expiration timers, burn-after-paste, bulk controls, and smart-rule automation. The backup system has also grown alongside these features, with each database migration preserving more of the application’s data. The paste workflow received another major upgrade with the native Quick Paste overlay and a keyboard-first Paste Queue. Quick Paste supports filtering by recent, pinned, temporary, and source application clips, while the Paste Queue allows clips to be reordered, pasted individually with automatic advancement, or pasted as a complete queue. Named paste stacks and configurable separators make it especially useful for repetitive tasks. Search has also been completely reworked. Clipboard++ now uses SQLite FTS5 for much faster full-text searching, including phrases, exclusions, structured operators, suggestions, filter chips, and match highlighting. Searches can be saved locally as Smart Views and included in backups. Performance testing reached roughly 0.90 ms for 10,000 entries and 1.05 ms for 50,000 entries. Most recently, I focused on making clipboard data safer and more recoverable. Clipboard entries can now be edited directly with syntax preview, and every edit can be tracked through revision history with line-by-line diffs. Deleted clips go into a Recycle Bin where they can be restored, permanently deleted, or undone. Clips that expire or use burn-after-reading can also be recovered. Backups now preserve revisions and deleted items as well. Across these releases, the SQLite schema has progressed from v5 through v11 as the application gained more functionality. I’ve repeatedly tested migrations, backups, large clipboard histories, both Windows 11 themes, and native installers to make sure the growing feature set remains reliable. Clipboard++ has gone from a basic clipboard history application to a much more complete system for searching, transforming, organizing, automating, and recovering clipboard content. Thank you all so much for the support!!!", "repo": "https://github.com/Caleb-Guyer/ClipboardPlusPlus", "demo": "https://github.com/Caleb-Guyer/ClipboardPlusPlus/releases"}, {"ship_num": 3, "ts": "2026-08-06T16:59:12Z", "hours": 8.0, "multiplier": 12.58, "payout": 107, "blessing": "neutral", "text": "I built Clipboard++, a desktop clipboard manager designed to make copying and pasting much faster for programmers, students, and anyone who frequently reuses text or images. Windows’ built-in clipboard history is fairly limited, so I wanted to create something that makes organizing and finding previous clipboard items effortless. Along the way I added searchable clipboard history, favorites, image clipboard support with local OCR, automatic local clip naming, collections and tags, privacy controls, a command palette, bulk organization tools, customizable themes, and portable backup/restore. The biggest challenge was making all of the features work together while keeping the application responsive and reliable. I also spent a lot of time testing edge cases, preserving existing user data during updates, and making sure privacy-sensitive content could be excluded from history. I’m most proud that Clipboard++ has grown into something I would genuinely use every day. It has gone through multiple public releases, each adding meaningful quality-of-life improvements rather than just cosmetic changes. To test the project, download the Windows installer from the GitHub Releases page (or build it from source), launch Clipboard++, copy text or images as you normally would, and try searching, pinning, tagging, renaming, organizing, and restoring clipboard items. The project is completely local, so no account or internet connection is required after installation.", "repo": "https://github.com/Caleb-Guyer/ClipboardPlusPlus", "demo": "https://github.com/Caleb-Guyer/ClipboardPlusPlus/releases"}]...
|
[{"post_id": 53404, "ts": "202 [{"post_id": 53404, "ts": "2026-08-23T22:56:29Z", "hours": 3.23, "text": "Clipboard++ v1.5.1 is focused on making the app feel calmer and more at home on Windows. I replaced the card-heavy clipboard history with a flatter list, reduced the purple styling, improved typography and metadata readability, and gave Quick Paste the same cleaner visual treatment. Keyboard controls and existing workflows remain unchanged. I also rewrote the README around the actual product, added real screenshots, and documented the Power Search benchmark with its hardware, query, and testing method. Before publishing, I tested compact window sizes, ran all 66 active Rust tests, built both Windows installers, and verified the release through GitHub Actions."}, {"post_id": 47268, "ts": "2026-08-15T02:39:06Z", "hours": 11.4333, "text": "v1.5.0 is finally complete and published! This was a pretty major update for Clipboard++, adding a full editor for modifying captured images while keeping the original clips untouched. The biggest part of this update was adding a bunch of editing tools, including permanent redaction, blur, pixelation, highlighting, shapes, arrows, pen drawing, and text. I also added undo/redo and made the editor responsive for different Windows 11 layouts. You can now copy or export your edited result, or save it as an entirely new clip. I also added OCR for edited regions, including secure handling of the metadata needed for redactions. A big focus of this release was making sure the native rendering stays bounded for both performance and safety. Most importantly, the original image is never modified when making edits. I also spent a lot of time validating the release instead of just assuming everything worked. TypeScript and production builds passed, all 66 Rust tests passed, and both MSI and NSIS installers built successfully. I also went through desktop and compact visual QA and checked for console errors. The GitHub CI and release workflows were tested as well, and everything is now published."}, {"post_id": 46681, "ts": "2026-08-14T03:44:34Z", "hours": 8.8433, "text": "Clipboard++ v1.4.0 is now live. This release adds a full-resolution Image Workspace with non-destructive cropping, along with editable and searchable OCR with support for selecting installed Windows languages. Images can now be exported as PNG, JPEG, or WebP, and the workspace also provides image metadata, transparency information, and an option to reveal the file in File Explorer. I also added schema v13 and backup support for OCR metadata. Before releasing, I ran the full native test suite with all 63 tests passing, verified the production build, completed visual QA, and confirmed that the GitHub CI and release workflows passed. The main worktree is clean and v1.4.0 is tagged."}, {"post_id": 46060, "ts": "2026-08-13T00:19:49Z", "hours": 4.1522, "text": "Clipboard++ v1.3.0 is now complete and published! This update focused on making clipboard history much more powerful and recoverable. I added a full clipboard editor with syntax preview, along with revision history that shows line-by-line differences between versions. Clipboard entries can now also be sent to a Recycle Bin, where they can be restored, permanently deleted, or undone exactly. I also added a duplicate-and-edit workflow and made expired and burn-after-reading clips recoverable. The backup format was updated as well so revisions and deleted items are preserved during backups and restores. During visual QA, I found and fixed a stale-row transition issue that could cause the clipboard list to display outdated information after changes."}, {"post_id": 45457, "ts": "2026-08-11T22:42:54Z", "hours": 4.3333, "text": "Worked for this session on a major upgrade to Clipboard++’s search experience. v1.2.0 is now live with a much more powerful way to find clips across large histories. I added SQLite FTS5 Power Search, supporting phrases, exclusions, and structured search operators, along with search suggestions, removable filter chips, and match highlighting. I also added Smart Views, allowing useful searches to be saved and reused locally. Under the hood, this release includes the schema v11 migration plus backup and restore support for Smart Views. I also made additional responsive and light/dark Windows 11 UI improvements. One of the biggest things I wanted to verify was that the new search system would remain fast with large clipboard histories. Testing showed approximately 0.90 ms searches with 10,000 entries and 1.05 ms with 50,000 entries. Validation passed across CI and the release workflow, and v1.2.0 is now publicly released."}, {"post_id": 44969, "ts": "2026-08-11T02:31:15Z", "hours": 4.7819, "text": "Spent this session finishing and publishing Clipboard++ v1.1.0. The main focus was making the paste workflow much faster for users who prefer keyboard-driven interaction. I added a new Paste Queue that can be opened with Ctrl+Q, allowing clipboard entries to be reordered with Alt+↑ and Alt+↓, pasted individually with automatic advancement, or pasted as an entire queue. Separators can also be customized depending on how the queued content should be combined. I also added reusable named paste stacks, along with improvements to the favorite workflow and plain-text actions in Quick Paste. These features make Clipboard++ more useful for repetitive workflows where the same groups of clipboard items need to be pasted repeatedly. Under the hood, I updated the SQLite database to schema v10 and expanded the backup support to account for the new data. I also ran the full validation suite, including 53 Rust tests, TypeScript checks, production builds, visual QA, CI, and the GitHub release workflow."}, {"post_id": 44363, "ts": "2026-08-10T02:21:16Z", "hours": 6.205, "text": "This release adds one of the biggest features yet: a native Quick Paste overlay designed around keyboard-first searching and pasting. You can now quickly find clipboard entries without leaving what you’re doing, with filters for Recent, Pinned, Temporary, and source applications. I also added active-monitor positioning and full-library window restoration, so the UI behaves much more naturally across multiple monitors. Onboarding and accessibility got attention too, with a first-run guide and several accessibility improvements. Under the hood, Clipboard++ moved to SQLite schema v9, including integrity checks and recovery snapshots. I also tested the application with 5,000-entry clipboard histories to make sure the larger datasets remain manageable. Before publishing, I ran the full validation stack: 51 Rust tests, TypeScript checks, formatting, production frontend builds, visual QA, MSI packaging, and NSIS packaging."}, {"post_id": 42859, "ts": "2026-08-07T20:10:41Z", "hours": 1.4283, "text": "v0.9.0 is complete and published. This update was a pretty substantial one for Clipboard++. I added temporary clips with expiration timers, burn-after-paste, bulk controls, smart-rule automation, and backup support. I also updated the SQLite database to schema v8 to support the new functionality. A big part of this release was making sure everything actually held together after all the changes. All 46 Rust tests pass, TypeScript checks pass, and I visually verified both themes. I also built and tested both the MSI and NSIS installers."}, {"post_id": 42342, "ts": "2026-08-07T00:48:01Z", "hours": 1.4117, "text": "Clipboard++ v0.8.0 is finished and officially live! This update adds a much smarter rules system for automatically organizing clipboard content. Clipboard++ can now track the source application and apply priority-ordered rules with AND conditions. Rules can match clips by application, content type, language, URL domain, or regex. I also added automatic actions based on those rules, including pinning clips, adding them to collections, applying tags, and triggering workflows. The new Rule Manager lets you reorder rules, test them inline, and export/import portable rule presets. Rules are also included in local backups, and the SQLite database has been upgraded to schema v7. Before releasing, I ran 44 Rust tests, TypeScript checks, production builds, browser UI testing, and the full GitHub CI/release workflows. Both MSI and NSIS installers were successfully built and published."}, {"post_id": 42287, "ts": "2026-08-06T22:27:08Z", "hours": 0.7889, "text": "Clipboard++ v0.7.0 is now complete! This update focused on making repetitive clipboard tasks much faster with reusable workflow pipelines. I added support for favorite workflows with up to 12 transformation steps, bounded regex find/replace, keyboard shortcuts (Ctrl+Alt+1 through Ctrl+Alt+9) for instantly launching workflows and templates, new paste formats including plain text, Markdown quotes, and JSON strings, plus workflow import/export for sharing or backing up custom setups. I also upgraded the database to schema v6 so workflows are included in backups, and polished the workflow editor and quick-action integration to make everything feel more seamless. Before releasing, I verified the project with TypeScript checks, a production frontend build, 39 Rust tests, interactive UI testing in both light and dark themes, and native MSI/NSIS builds."}, {"post_id": 42225, "ts": "2026-08-06T20:51:45Z", "hours": 3.5886, "text": "Clipboard++ v0.6.0 is complete! This update focused on making the app much more powerful for everyday productivity. I added 14 built-in text and code transformations, reusable snippet templates with variables, and a new Ctrl+. shortcut that lets you instantly transform and paste clipboard content without leaving your workflow. I also updated the backup system to support templates, migrated the database to schema v5, and polished the Windows 11 dialogs in both dark and light mode for a more consistent experience."}, {"post_id": 42065, "ts": "2026-08-06T16:57:22Z", "hours": 0.9564, "text": "Clipboard++ v0.5.0 is now available! This update adds several productivity features, including a Ctrl+K command palette, direct paste with Ctrl+Enter, multi-select for organizing multiple clips at once, and portable JSON backup and restore. I also introduced sensitive-content detection with customizable privacy terms, updated the documentation, and spent time testing, polishing, and preparing the latest public release."}, {"post_id": 41758, "ts": "2026-08-06T04:46:53Z", "hours": 1.0292, "text": "Clipboard++ v0.4.0 is released! This update focuses on making clipboard history much easier to organize by adding automatic local clip naming, editable custom names, color-coded collections, reusable tags, and powerful search across names, tags, clipboard content, and OCR text. I also added repeated-clip management, ensured existing clipboard history is preserved during upgrades, and finished another round of testing, bug fixes, and packaging for the latest public release."}, {"post_id": 41723, "ts": "2026-08-06T03:41:14Z", "hours": 1.2422, "text": "Clipboard++ v0.3.0 is now live! This update adds image clipboard support with thumbnails, local Windows OCR for searchable text inside images, and one-click image copy-back. I also added image storage controls, pinned image protection, filtering, usage statistics, and more settings while polishing both the dark and light themes. I finished by testing everything, fixing bugs, and packaging a new public Windows release."}, {"post_id": 41692, "ts": "2026-08-06T02:15:55Z", "hours": 1.5281, "text": "Made a huge update to Clipboard++ today. I added a full Settings & Privacy page with configurable history limits, pause/resume clipboard capture, launch at startup, customizable global shortcuts, and password manager exclusions so sensitive data isn’t saved. I also added dark, light, and system themes, update checking, and improved reliability with SQLite migrations, automated tests, and CI. After testing the app at multiple window sizes, I fixed a light theme contrast issue and packaged everything into a proper Windows installer for the v0.2.0 release."}, {"post_id": 41648, "ts": "2026-08-06T00:31:49Z", "hours": 3.72, "text": "I finished the first working version of Clipboard++ today. The application can now save clipboard history, search through copied items, pin important snippets, and quickly copy them back when needed. I also spent time polishing the interface to make it feel clean, responsive, and easy to use. Next, I plan to add more advanced features and continue refining the overall experience."}]...
|
Title: Clipboard++ by @Eel | Stardance
Devlogs:
I Title: Clipboard++ by @Eel | Stardance
Devlogs:
I finished the first working version of Clipboard++ today. The application can now save clipboard history, search through copied items, pin important snippets, and quickly copy them back when needed. I also spent time polishing the interface to make it feel clean, responsive, and easy to use. Next, I plan to add more advanced features and continue refining the overall experience.
Made a huge update to Clipboard++ today. I added a full Settings & Privacy page with configurable history limits, pause/resume clipboard capture, launch at startup, customizable global shortcuts, and password manager exclusions so sensitive data isn’t saved. I also added dark, light, and system themes, update checking, and improved reliability with SQLite migrations, automated tests, and CI. After testing the app at multiple window sizes, I fixed a light theme contrast issue and packaged everything into a proper Windows installer for the v0.2.0 release.
Clipboard++ v0.3.0 is now live! This update adds image clipboard support with thumbnails, local Windows OCR for searchable text inside images, and one-click image copy-back. I also added image storage controls, pinned image protection, filtering, usage statistics, and more settings while polishing both the dark and light themes. I finished by testing everything, fixing bugs, and packaging a new public Windows release.
Clipboard++ v0.4.0 is released! This update focuses on making clipboard history much easier to organize by adding automatic local clip naming, editable custom names, color-coded collections, reusable tags, and powerful search across names, tags, clipboard content, and OCR text. I also added repeated-clip management, ensured existing clipboard history is preserved during upgrades, and finished another round of testing, bug fixes, and packaging for the latest public release.
Clipboard++ v0.5.0 is now available! This update adds several productivity features, including a Ctrl+K command palette, direct paste with Ctrl+Enter, multi-select for organizing multiple clips at once, and portable JSON backup and restore. I also introduced sensitive-content detection with customizable privacy terms, updated the documentation, and spent time testing, polishing, and preparing the latest public release.
Clipboard++ v0.6.0 is complete! This update focused on making the app much more powerful for everyday productivity. I added 14 built-in text and code transformations, reusable snippet templates with variables, and a new Ctrl+. shortcut that lets you instantly transform and paste clipboard content without leaving your workflow. I also updated the backup system to support templates, migrated the database to schema v5, and polished the Windows 11 dialogs in both dark and light mode for a more consistent experience.
Clipboard++ v0.7.0 is now complete! This update focused on making repetitive clipboard tasks much faster with reusable workflow pipelines. I added support for favorite workflows with up to 12 transformation steps, bounded regex find/replace, keyboard shortcuts (Ctrl+Alt+1 through Ctrl+Alt+9) for instantly launching workflows and templates, new paste formats including plain text, Markdown quotes, and JSON strings, plus workflow import/export for sharing or backing up custom setups. I also upgraded the database to schema v6 so workflows are included in backups, and polished the workflow editor and quick-action integration to make everything feel more seamless. Before releasing, I verified the project with TypeScript checks, a production frontend build, 39 Rust tests, interactive UI testing in both light and dark themes, and native MSI/NSIS builds.
Clipboard++ v0.8.0 is finished and officially live! This update adds a much smarter rules system for automatically organizing clipboard content. Clipboard++ can now track the source application and apply priority-ordered rules with AND conditions. Rules can match clips by application, content type, language, URL domain, or regex. I also added automatic actions based on those rules, including pinning clips, adding them to collections, applying tags, and triggering workflows. The new Rule Manager lets you reorder rules, test them inline, and export/import portable rule presets. Rules are also included in local backups, and the SQLite database has been upgraded to schema v7. Before releasing, I ran 44 Rust tests, TypeScript checks, production builds, browser UI testing, and the full GitHub CI/release workflows. Both MSI and NSIS installers were successfully built and published.
v0.9.0 is complete and published. This update was a pretty substantial one for Clipboard++. I added temporary clips with expiration timers, burn-after-paste, bulk controls, smart-rule automation, and backup support. I also updated the SQLite database to schema v8 to support the new functionality. A big part of this release was making sure everything actually held together after all the changes. All 46 Rust tests pass, TypeScript checks pass, and I visually verified both themes. I also built and tested both the MSI and NSIS installers.
This release adds one of the biggest features yet: a native Quick Paste overlay designed around keyboard-first searching and pasting. You can now quickly find clipboard entries without leaving what you’re doing, with filters for Recent, Pinned, Temporary, and source applications. I also added active-monitor positioning and full-library window restoration, so the UI behaves much more naturally across multiple monitors. Onboarding and accessibility got attention too, with a first-run guide and several accessibility improvements. Under the hood, Clipboard++ moved to SQLite schema v9, including integrity checks and recovery snapshots. I also tested the application with 5,000-entry clipboard histories to make sure the larger datasets remain manageable. Before publishing, I ran the full validation stack: 51 Rust tests, TypeScript checks, formatting, production frontend builds, visual QA, MSI packaging, and NSIS packaging.
Spent this session finishing and publishing Clipboard++ v1.1.0. The main focus was making the paste workflow much faster for users who prefer keyboard-driven interaction. I added a new Paste Queue that can be opened with Ctrl+Q, allowing clipboard entries to be reordered with Alt+↑ and Alt+↓, pasted individually with automatic advancement, or pasted as an entire queue. Separators can also be customized depending on how the queued content should be combined. I also added reusable named paste stacks, along with improvements to the favorite workflow and plain-text actions in Quick Paste. These features make Clipboard++ more useful for repetitive workflows where the same groups of clipboard items need to be pasted repeatedly. Under the hood, I updated the SQLite database to schema v10 and expanded the backup support to account for the new data. I also ran the full validation suite, including 53 Rust tests, TypeScript checks, production builds, visual QA, CI, and the GitHub release workflow.
Worked for this session on a major upgrade to Clipboard++’s search experience. v1.2.0 is now live with a much more powerful way to find clips across large histories. I added SQLite FTS5 Power Search, supporting phrases, exclusions, and structured search operators, along with search suggestions, removable filter chips, and match highlighting. I also added Smart Views, allowing useful searches to be saved and reused locally. Under the hood, this release includes the schema v11 migration plus backup and restore support for Smart Views. I also made additional responsive and light/dark Windows 11 UI improvements. One of the biggest things I wanted to verify was that the new search system would remain fast with large clipboard histories. Testing showed approximately 0.90 ms searches with 10,000 entries and 1.05 ms with 50,000 entries. Validation passed across CI and the release workflow, and v1.2.0 is now publicly released.
Clipboard++ v1.3.0 is now complete and published! This update focused on making clipboard history much more powerful and recoverable. I added a full clipboard editor with syntax preview, along with revision history that shows line-by-line differences between versions. Clipboard entries can now also be sent to a Recycle Bin, where they can be restored, permanently deleted, or undone exactly. I also added a duplicate-and-edit workflow and made expired and burn-after-reading clips recoverable. The backup format was updated as well so revisions and deleted items are preserved during backups and restores. During visual QA, I found and fixed a stale-row transition issue that could cause the clipboard list to display outdated information after changes.
Clipboard++ v1.4.0 is now live. This release adds a full-resolution Image Workspace with non-destructive cropping, along with editable and searchable OCR with support for selecting installed Windows languages. Images can now be exported as PNG, JPEG, or WebP, and the workspace also provides image metadata, transparency information, and an option to reveal the file in File Explorer. I also added schema v13 and backup support for OCR metadata. Before releasing, I ran the full native test suite with all 63 tests passing, verified the production build, completed visual QA, and confirmed that the GitHub CI and release workflows passed. The main worktree is clean and v1.4.0 is tagged.
v1.5.0 is finally complete and published! This was a pretty major update for Clipboard++, adding a full editor for modifying captured images while keeping the original clips untouched. The biggest part of this update was adding a bunch of editing tools, including permanent redaction, blur, pixelation, highlighting, shapes, arrows, pen drawing, and text. I also added undo/redo and made the editor responsive for different Windows 11 layouts. You can now copy or export your edited result, or save it as an entirely new clip. I also added OCR for edited regions, including secure handling of the metadata needed for redactions. A big focus of this release was making sure the native rendering stays bounded for both performance and safety. Most importantly, the original image is never modified when making edits. I also spent a lot of time validating the release instead of just assuming everything worked. TypeScript and production builds passed, all 66 Rust tests passed, and both MSI and NSIS installers built successfully. I also went through desktop and compact visual QA and checked for console errors. The GitHub CI and release workflows were tested as well, and everything is now published.
Clipboard++ v1.5.1 is focused on making the app feel calmer and more at home on Windows. I replaced the card-heavy clipboard history with a flatter list, reduced the purple styling, improved typography and metadata readability, and gave Quick Paste the same cleaner visual treatment. Keyboard controls and existing workflows remain unchanged. I also rewrote the README around the actual product, added real screenshots, and documented the Power Search benchmark with its hardware, query, and testing method. Before publishing, I tested compact window sizes, ran all 66 active Rust tests, built both Windows installers, and verified the release through GitHub Actions.
Ships:
I built Clipboard++, a desktop clipboard manager designed to make copying and pasting much faster for programmers, students, and anyone who frequently reuses text or images. Windows’ built-in clipboard history is fairly limited, so I wanted to create something that makes organizing and finding previous clipboard items effortless. Along the way I added searchable clipboard history, favorites, image clipboard support with local OCR, automatic local clip naming, collections and tags, privacy controls, a command palette, bulk organization tools, customizable themes, and portable backup/restore. The biggest challenge was making all of the features work together while keeping the application responsive and reliable. I also spent a lot of time testing edge cases, preserving existing user data during updates, and making sure privacy-sensitive content could be excluded from history. I’m most proud that Clipboard++ has grown into something I would genuinely use every day. It has gone through multiple public releases, each adding meaningful quality-of-life improvements rather than just cosmetic changes. To test the project, download the Windows installer from the GitHub Releases page (or build it from source), launch Clipboard++, copy text or images as you normally would, and try searching, pinning, tagging, renaming, organizing, and restoring clipboard items. The project is completely local, so no account or internet connection is required after installation.
Since the last ship, Clipboard++ has gone through a pretty massive expansion, with the focus shifting from a simple clipboard manager into a much more complete productivity tool. The biggest changes started with the workflow system. I added reusable workflows with multiple transformation steps, keyboard shortcuts, additional paste formats, and import/export support. This was followed by a rules engine that can automatically organize clips based on things like source application, content type, language, URL domains, and regex matches. Rules can perform actions such as pinning clips, adding tags or collections, and triggering workflows. I then expanded temporary clipboard functionality with expiration timers, burn-after-paste, bulk controls, and smart-rule automation. The backup system has also grown alongside these features, with each database migration preserving more of the application’s data. The paste workflow received another major upgrade with the native Quick Paste overlay and a keyboard-first Paste Queue. Quick Paste supports filtering by recent, pinned, temporary, and source application clips, while the Paste Queue allows clips to be reordered, pasted individually with automatic advancement, or pasted as a complete queue. Named paste stacks and configurable separators make it especially useful for repetitive tasks. Search has also been completely reworked. Clipboard++ now uses SQLite FTS5 for much faster full-text searching, including phrases, exclusions, structured operators, suggestions, filter chips, and match highlighting. Searches can be saved locally as Smart Views and included in backups. Performance testing reached roughly 0.90 ms for 10,000 entries and 1.05 ms for 50,000 entries. Most recently, I focused on making clipboard data safer and more recoverable. Clipboard entries can now be edited directly with syntax preview, and every edit can be tracked through revision history with line-by-line diffs. Deleted clips go into a Recycle Bin where they can be restored, permanently deleted, or undone. Clips that expire or use burn-after-reading can also be recovered. Backups now preserve revisions and deleted items as well. Across these releases, the SQLite schema has progressed from v5 through v11 as the application gained more functionality. I’ve repeatedly tested migrations, backups, large clipboard histories, both Windows 11 themes, and native installers to make sure the growing feature set remains reliable. Clipboard++ has gone from a basic clipboard history application to a much more complete system for searching, transforming, organizing, automating, and recovering clipboard content. Thank you all so much for the support!!!
Shipped Clipboard++ v1.5.1! This update introduces a cleaner Windows-style interface, a flatter clipboard list, improved Quick Paste readability, real product screenshots, and documented search benchmarks....
|
1792882055.198709
|
1793746055.198709
|
|
23555
|
Standby by @geenk | Stardance
|
geenk
|
1
|
30.0
|
512
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-18T21:07:26Z", "hours": 30.0, "multiplier": 16.89, "payout": 512, "blessing": "neutral", "text": "Standby Standby is an simple Android app that turns your phone into basically a smart bedside or desk clock (similar to StandBy mode on iPhones). Instead of a black screen while charging, your phone now is a nice little glanceable screen for a desk or nightstand. It can display many things and thanks to the customizability of the plugins, the limit is your imagination (you can probably run doom lol). When I moved from iOS to Android, I didnt find an app that ticked all the boxes for me, they were all either paid or the useful features were all locked behind paywalls or they didnt look good… So I built Standby. The core philosophy of Standby is for everything to be customizable and easy to do so. Plugins use the very well established HTML/CSS/JS to display and have access to both the web and local phone sensors if needed (permission is granted on a plugin by plugin basis). The challenges It was my first time coding an Android app, so it was hard for me to figure things out, but thanks to the assistance of generative AI tools and of numerous Youtube tutorials, I was able to (mostly) firgure things out. I would say the AppWidgetHost part was the hardest to make, I constantly ran into issues where the third party widgets wasn’t updating properly or the widgets would just crash the app when selected. Those issues took a lot of head scratching to figure out. The WebView part was surprisingly easy, since it was just pretty much a glorified web browser in the app. Compose also helped a lot with the UI side of things, it was nice to have reusable things I can use instead of making my own UI components, etc. Though AI also helped a lot with UI due to simply how long it was to write the UI code. Demo You can watch the video demo to see how the app works in general: https://drive.google.com/file/d/1LBqg1Of4_amh87YIiEeGrte-fc33Wl7u/view?usp=sharing There also many screenshots on GitHub showcasing plugins. If you want to install the app, the signed APK is in the GitHub releases tab. To load plugins into the app, download the plugin zips you want under plugins/build/ on GitHub and either import it using the local uploader or import it as a file from the app.", "repo": "https://github.com/Haxintosh/standby", "demo": "https://github.com/Haxintosh/standby/releases/tag/v0.1"}]...
|
[{"post_id": 49823, "ts": "202 [{"post_id": 49823, "ts": "2026-08-18T19:26:03Z", "hours": 1.9322, "text": "New plugins, night mode and page indicators Added new half sized clock plugins and a bad apple plugin Added a night mode for the app to allow for scheduled actions Made a new banner for the app"}, {"post_id": 49118, "ts": "2026-08-17T19:00:48Z", "hours": 4.1339, "text": "Fixed issues with weather provider and add AppWidgetHost functionality Added AppWidgetHost functionality to the app, allowing for third party app widgets to be displayed in the app. Removed GPS settings for privacy. Added a hold menu for widgets to rename the widgets. Added button to refresh plugins"}, {"post_id": 18459, "ts": "2026-06-29T16:52:31Z", "hours": 4.6319, "text": "Updated clock faces, alarms, and added provider API Added a clock face and updated the more colorful one to look better when the digits overlap each other. Added a new sensor bridge method getNextAlarm() , to get the phone’s next alarm Added the foundations for provider APIs and an example implementation using weather The provider API handles more complex and repetitive tasks for the plugins. For instance, instead of having 2 plugins both having to send out API requests to get data, the app gets the weather data itself and distributes it to the plugins in a similar way to the SensorBridge JS interface. The weather provider refreshes every hour and caches the response from open meteo and provides some basic helper methods. For instance getCurrentWeather() gives the current weather information in a JSON which is easily used by other plugins. It also manages weather icon loading and caching from OpenWeather and passes it to the plugin in base64."}, {"post_id": 14690, "ts": "2026-06-23T21:42:01Z", "hours": 3.0578, "text": "Import plugin dialog! Added a popup when the user imports a new plugin, whether from file picker or from the web that lists the requested sensor access, the domains the plugin needs access to and general metadata about the plugin (author, name, description, etc). Also, added a way to rename plugins to be able to differentiate between multiple instances of the same plugin, especially useful when you want to have multiple configs of the same plugin!"}, {"post_id": 14452, "ts": "2026-06-23T16:08:11Z", "hours": 3.8658, "text": "Bug fixes & new plugins I added a new weather plugin and a full screen digital clock plugin. I also migrated some of old plugins made before the plugin spec was written. Also fixed a bug with stale plugin states. The old behavior was that the setup and the listeners captured a stale instance of the plugin params, which meant issues related to permissions and logging. For instance, logcat gives “PluginWebView com.geenk.standby D [Default Clock]” instead of logging it as [Weather plugin]. Also found an issue that kept crashing my phone over ADB screen mirroring, though the issue was more of an AOSP issue. (DEBUG crash_dump64 A Abort message: ’Splitting motion events requires a down time to be set for the target on connection …)"}, {"post_id": 13974, "ts": "2026-06-22T22:48:16Z", "hours": 2.8394, "text": "More battery stats I have added support for more battery data to be accessed by plugins, now with support for most battery data. The SensorBridge.kt now using JSON to send information to the plugin because I was having issues with List being sent over to WebView not working correctly. Also added a battery plugin demonstrating the new battery information."}, {"post_id": 13163, "ts": "2026-06-21T15:15:20Z", "hours": 9.8283, "text": "Standby! Sorry I forgot to break it down into smaller logs… Standby now supports many new features. Full plugin spec Now the plugins for the app are no longer just HTML files. There is now a structure to the plugin zip files with support for customization of the plugin itself (ie changing accent colors, turning features on/off) that is reflected in the UI. Remote plugin uploading Instead of having to send the plugin to your phone, you can now enable a lightweight HTTP server where you can upload plugin files directly from your computer! Better security With the full plugin spec, there is now a whitelist for the allowed domains and phone sensor APIs [note this still needs to be tested further and needs a UI when the user imports a plugin] Side by side layout Now the app supports putting 2 half sized plugin next to each other, similar to iOS’s StandBy implementation. You can also have many different panels of plugins. OLED burn-in protection Since the app displays a static screen for most of the time, I have added in an OLED protection feature that turns off very other pixel and alternates it to reduce burn it (user configurable, can turn off up to ~83% of the pixels, though it is very dim).Also, for phones supporting lower refresh rates, there is now an option to force the app to the lowest refresh rate when idle. Better UI The old version had no animations and was pretty ugly in terms of UI. Now, the different buttons are animated and disappear when the app is idle. The UI now follows the phone’s colors."}]...
|
Title: Standby by @geenk | Stardance
Devlogs:
Sta Title: Standby by @geenk | Stardance
Devlogs:
Standby! Sorry I forgot to break it down into smaller logs… Standby now supports many new features. Full plugin spec Now the plugins for the app are no longer just HTML files. There is now a structure to the plugin zip files with support for customization of the plugin itself (ie changing accent colors, turning features on/off) that is reflected in the UI. Remote plugin uploading Instead of having to send the plugin to your phone, you can now enable a lightweight HTTP server where you can upload plugin files directly from your computer! Better security With the full plugin spec, there is now a whitelist for the allowed domains and phone sensor APIs [note this still needs to be tested further and needs a UI when the user imports a plugin] Side by side layout Now the app supports putting 2 half sized plugin next to each other, similar to iOS’s StandBy implementation. You can also have many different panels of plugins. OLED burn-in protection Since the app displays a static screen for most of the time, I have added in an OLED protection feature that turns off very other pixel and alternates it to reduce burn it (user configurable, can turn off up to ~83% of the pixels, though it is very dim).Also, for phones supporting lower refresh rates, there is now an option to force the app to the lowest refresh rate when idle. Better UI The old version had no animations and was pretty ugly in terms of UI. Now, the different buttons are animated and disappear when the app is idle. The UI now follows the phone’s colors.
More battery stats I have added support for more battery data to be accessed by plugins, now with support for most battery data. The SensorBridge.kt now using JSON to send information to the plugin because I was having issues with List being sent over to WebView not working correctly. Also added a battery plugin demonstrating the new battery information.
Bug fixes & new plugins I added a new weather plugin and a full screen digital clock plugin. I also migrated some of old plugins made before the plugin spec was written. Also fixed a bug with stale plugin states. The old behavior was that the setup and the listeners captured a stale instance of the plugin params, which meant issues related to permissions and logging. For instance, logcat gives “PluginWebView com.geenk.standby D [Default Clock]” instead of logging it as [Weather plugin]. Also found an issue that kept crashing my phone over ADB screen mirroring, though the issue was more of an AOSP issue. (DEBUG crash_dump64 A Abort message: ’Splitting motion events requires a down time to be set for the target on connection …)
Import plugin dialog! Added a popup when the user imports a new plugin, whether from file picker or from the web that lists the requested sensor access, the domains the plugin needs access to and general metadata about the plugin (author, name, description, etc). Also, added a way to rename plugins to be able to differentiate between multiple instances of the same plugin, especially useful when you want to have multiple configs of the same plugin!
Updated clock faces, alarms, and added provider API Added a clock face and updated the more colorful one to look better when the digits overlap each other. Added a new sensor bridge method getNextAlarm() , to get the phone’s next alarm Added the foundations for provider APIs and an example implementation using weather The provider API handles more complex and repetitive tasks for the plugins. For instance, instead of having 2 plugins both having to send out API requests to get data, the app gets the weather data itself and distributes it to the plugins in a similar way to the SensorBridge JS interface. The weather provider refreshes every hour and caches the response from open meteo and provides some basic helper methods. For instance getCurrentWeather() gives the current weather information in a JSON which is easily used by other plugins. It also manages weather icon loading and caching from OpenWeather and passes it to the plugin in base64.
Fixed issues with weather provider and add AppWidgetHost functionality Added AppWidgetHost functionality to the app, allowing for third party app widgets to be displayed in the app. Removed GPS settings for privacy. Added a hold menu for widgets to rename the widgets. Added button to refresh plugins
New plugins, night mode and page indicators Added new half sized clock plugins and a bad apple plugin Added a night mode for the app to allow for scheduled actions Made a new banner for the app
Ships:
Standby Standby is an simple Android app that turns your phone into basically a smart bedside or desk clock (similar to StandBy mode on iPhones). Instead of a black screen while charging, your phone now is a nice little glanceable screen for a desk or nightstand. It can display many things and thanks to the customizability of the plugins, the limit is your imagination (you can probably run doom lol). When I moved from iOS to Android, I didnt find an app that ticked all the boxes for me, they were all either paid or the useful features were all locked behind paywalls or they didnt look good… So I built Standby. The core philosophy of Standby is for everything to be customizable and easy to do so. Plugins use the very well established HTML/CSS/JS to display and have access to both the web and local phone sensors if needed (permission is granted on a plugin by plugin basis). The challenges It was my first time coding an Android app, so it was hard for me to figure things out, but thanks to the assistance of generative AI tools and of numerous Youtube tutorials, I was able to (mostly) firgure things out. I would say the AppWidgetHost part was the hardest to make, I constantly ran into issues where the third party widgets wasn’t updating properly or the widgets would just crash the app when selected. Those issues took a lot of head scratching to figure out. The WebView part was surprisingly easy, since it was just pretty much a glorified web browser in the app. Compose also helped a lot with the UI side of things, it was nice to have reusable things I can use instead of making my own UI components, etc. Though AI also helped a lot with UI due to simply how long it was to write the UI code. Demo You can watch the video demo to see how the app works in general: https://drive.google.com/file/d/1LBqg1Of4_amh87YIiEeGrte-fc33Wl7u/view?usp=sharing There also many screenshots on GitHub showcasing plugins. If you want to install the app, the signed APK is in the GitHub releases tab. To load plugins into the app, download the plugin zips you want under plugins/build/ on GitHub and either import it using the local uploader or import it as a file from the app....
|
1793001038.8126585
|
1793087438.8126585
|
|
30594
|
Roobiks - A 3d software rasterizer by @arkaive19 | Roobiks - A 3d software rasterizer by @arkaive19 | Stardance...
|
arkaive19
|
1
|
30.0
|
512
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-14T17:38:21Z", "hours": 30.0, "multiplier": 17.09, "payout": 512, "blessing": "neutral", "text": "I made a 3d rasterizer in Javascript using the HTML5 canvas API! This whole project was inspired by TScoding’s projection formula. The name roobik’s just happened to be there. The rubiks cube is NOT my project, i repeat the rubiks cube is NOT my project. Its just a demonstration of a renderable Mesh, (Alongside the penguin model too)", "repo": "https://github.com/Arkaive19/roobiks", "demo": "https://arkaive19.is-a.dev/roobiks"}]...
|
[{"post_id": 28418, "ts": "202 [{"post_id": 28418, "ts": "2026-07-14T17:32:06Z", "hours": 1.3117, "text": "I finally added the last bit of optimization with some binary color storing and magic tricking, i think this is the end of the line for my project as i see no further addition than some ui/ux which i dont wanna do for a project thats already this complex. i spent a LOT of time documenting everything, so that anyone reading the source code gets an idea of whats going on. Also added comic sans for a jolly effect with a HUD."}, {"post_id": 28251, "ts": "2026-07-14T12:21:31Z", "hours": 1.0325, "text": "The first (incomplete) demo is now up and ready! headover to https://arkaive19.is-a.dev/roobiks to see the magic for yourself!"}, {"post_id": 27286, "ts": "2026-07-12T18:46:48Z", "hours": 2.9397, "text": "I finally implemented a better UX system, with customizable keybinds, actually usable buttons! (yay), a fps bar and also HUGE optimization change. (i just found out the bayecentric coordinates could be incremented instead of manual addition), the renderer is now comfortably rendering a complex penguin at ~60fps which has 323 vertices and 625 faces."}, {"post_id": 26732, "ts": "2026-07-11T18:11:37Z", "hours": 1.9194, "text": "external assets can be loaded! (ive only tested it for this penguin asset for now, but i will test more in the near future)"}, {"post_id": 26469, "ts": "2026-07-11T08:52:50Z", "hours": 3.1028, "text": "I implemented a wireframe drawing method to my software rasterizer and also implemented front face culling (front face culling too a LOOONG time to implement due to the tedious maths) ive also documented how everything works so anyone can understand whats going on. With the drawWireframe theres this weird ghostly effect going on and thats what im hoping on solving next"}, {"post_id": 26096, "ts": "2026-07-10T18:00:44Z", "hours": 1.0175, "text": "I added some buttons for a better user experience, with keybinds and such. also i implemented a scrambling technique which generates a 20 move based random assortment. The ive also optimized frame waiting, with delay based Promises which wait check every frame before inputting the move to be displayed with solve or scramble. (i tested if user interruption changes anything and gladly it did not for scramble, but i have to fix the unsolvable problem if user interrupts when solving the cube)"}, {"post_id": 25964, "ts": "2026-07-10T14:26:43Z", "hours": 2.9481, "text": "Ive finally added some rubiks cube qol features like resetting the cube and solving it! (for now im just reversing the users steps as using an actual alogrithm would be out of scope of this project.), and im planning on documenting the remaining parts"}, {"post_id": 24874, "ts": "2026-07-08T18:41:20Z", "hours": 3.0894, "text": "Hello everyone, Ive upgraded my code to work with canvas to use the canvas method .putImageData, as ive now implemented triangle rasterization, and something very interesting called as z-indexing. Basically, every frame all pixels of the canvas are being controlled by the renderer to draw stuff instead of relying on the canvas methods like fillRect, etc! Ive also optimized the entire renderer to work well and fix any buggy areas too, but some more optimization is possible, and im thinking of continuing from there. I think im gonna add some UI/UX components later on but for right now im gonna optimize the renderer more! also, the live demo is up and running! check the current progress out at: ++++++++++++++++++++++++++++++++ https://arkaive19.is-a.dev/roobiks/ ++++++++++++++++++++++++++++++++ have a nice day and stay tuned for the next update!"}, {"post_id": 23646, "ts": "2026-07-06T18:40:08Z", "hours": 3.4439, "text": "I finally finished the rotation cycle and documented the entire process inside my scripts. The rubiks cube works and also animates now! also i fixed the backface culling issue, and the animations are fixed and crisp! I think im gonna add some qol features like enhance my current camera reframe to also reset the cube and make it a general reset, and also add some physical buttons or sum like that. With the current state of things i might wrap it as a electron app as its not designed to be mobile friendly."}, {"post_id": 22773, "ts": "2026-07-05T11:13:20Z", "hours": 0.5333, "text": "I finally implemented PROPER mesh rendering. before i had to flatmap and insert each model vertices, edges and faces in 1 giant pile for computation but not anymore. it does that internally so all i need to do is renderer.startFrame(); renderer.drawMesh(cat); renderer.drawMesh(dog); renderer.drawMesh(bug); renderer.endFrame(); Bug fixing was really tough because of optimization errors and whatnot, but changing basically all my arrays to Float32Arrays gave me an extra 100 frames 💔🥀🥀"}, {"post_id": 22703, "ts": "2026-07-05T08:25:39Z", "hours": 2.0628, "text": "Ive made some changes to the 3d graphics changer where the painters alogorithm stopped working with multiple meshes. For now, ive flatmapped all points edges and faces of the multi meshes so its just 1 giant mesh that has to be rendered! (I think my system will break if i use another instance of drawMesh() somewhere else as theyre not flatmapped. I think thats the problem ill try to solve next)"}, {"post_id": 22309, "ts": "2026-07-04T18:21:28Z", "hours": 2.1708, "text": "I recently learnt and implemented about Depth Based Rendering. Basically, make faces closer to u render last so they can appear more lifelike than a static order or rendering which often breaks with freecam"}, {"post_id": 22205, "ts": "2026-07-04T15:45:51Z", "hours": 4.5167, "text": "Ive been wanting to learn how 3d renderers have worked for the longest time, and recently i thought of making an app for it. Roobiks is an freecam 3d space rubix cube sandbox like software, that is built ENTIRELY on a 2d canvas using nothing but pure mathematics, and HTML5 canvas properties."}]...
|
Title: Roobiks - A 3d software rasterizer by @arka Title: Roobiks - A 3d software rasterizer by @arkaive19 | Stardance
Devlogs:
Ive been wanting to learn how 3d renderers have worked for the longest time, and recently i thought of making an app for it. Roobiks is an freecam 3d space rubix cube sandbox like software, that is built ENTIRELY on a 2d canvas using nothing but pure mathematics, and HTML5 canvas properties.
I recently learnt and implemented about Depth Based Rendering. Basically, make faces closer to u render last so they can appear more lifelike than a static order or rendering which often breaks with freecam
Ive made some changes to the 3d graphics changer where the painters alogorithm stopped working with multiple meshes. For now, ive flatmapped all points edges and faces of the multi meshes so its just 1 giant mesh that has to be rendered! (I think my system will break if i use another instance of drawMesh() somewhere else as theyre not flatmapped. I think thats the problem ill try to solve next)
I finally implemented PROPER mesh rendering. before i had to flatmap and insert each model vertices, edges and faces in 1 giant pile for computation but not anymore. it does that internally so all i need to do is renderer.startFrame(); renderer.drawMesh(cat); renderer.drawMesh(dog); renderer.drawMesh(bug); renderer.endFrame(); Bug fixing was really tough because of optimization errors and whatnot, but changing basically all my arrays to Float32Arrays gave me an extra 100 frames 💔🥀🥀
I finally finished the rotation cycle and documented the entire process inside my scripts. The rubiks cube works and also animates now! also i fixed the backface culling issue, and the animations are fixed and crisp! I think im gonna add some qol features like enhance my current camera reframe to also reset the cube and make it a general reset, and also add some physical buttons or sum like that. With the current state of things i might wrap it as a electron app as its not designed to be mobile friendly.
Hello everyone, Ive upgraded my code to work with canvas to use the canvas method .putImageData, as ive now implemented triangle rasterization, and something very interesting called as z-indexing. Basically, every frame all pixels of the canvas are being controlled by the renderer to draw stuff instead of relying on the canvas methods like fillRect, etc! Ive also optimized the entire renderer to work well and fix any buggy areas too, but some more optimization is possible, and im thinking of continuing from there. I think im gonna add some UI/UX components later on but for right now im gonna optimize the renderer more! also, the live demo is up and running! check the current progress out at: ++++++++++++++++++++++++++++++++ https://arkaive19.is-a.dev/roobiks/ ++++++++++++++++++++++++++++++++ have a nice day and stay tuned for the next update!
Ive finally added some rubiks cube qol features like resetting the cube and solving it! (for now im just reversing the users steps as using an actual alogrithm would be out of scope of this project.), and im planning on documenting the remaining parts
I added some buttons for a better user experience, with keybinds and such. also i implemented a scrambling technique which generates a 20 move based random assortment. The ive also optimized frame waiting, with delay based Promises which wait check every frame before inputting the move to be displayed with solve or scramble. (i tested if user interruption changes anything and gladly it did not for scramble, but i have to fix the unsolvable problem if user interrupts when solving the cube)
I implemented a wireframe drawing method to my software rasterizer and also implemented front face culling (front face culling too a LOOONG time to implement due to the tedious maths) ive also documented how everything works so anyone can understand whats going on. With the drawWireframe theres this weird ghostly effect going on and thats what im hoping on solving next
external assets can be loaded! (ive only tested it for this penguin asset for now, but i will test more in the near future)
I finally implemented a better UX system, with customizable keybinds, actually usable buttons! (yay), a fps bar and also HUGE optimization change. (i just found out the bayecentric coordinates could be incremented instead of manual addition), the renderer is now comfortably rendering a complex penguin at ~60fps which has 323 vertices and 625 faces.
The first (incomplete) demo is now up and ready! headover to https://arkaive19.is-a.dev/roobiks to see the magic for yourself!
I finally added the last bit of optimization with some binary color storing and magic tricking, i think this is the end of the line for my project as i see no further addition than some ui/ux which i dont wanna do for a project thats already this complex. i spent a LOT of time documenting everything, so that anyone reading the source code gets an idea of whats going on. Also added comic sans for a jolly effect with a HUD.
Ships:
I made a 3d rasterizer in Javascript using the HTML5 canvas API! This whole project was inspired by TScoding’s projection formula. The name roobik’s just happened to be there. The rubiks cube is NOT my project, i repeat the rubiks cube is NOT my project. Its just a demonstration of a renderable Mesh, (Alongside the penguin model too)...
|
1792990158.4003136
|
1793076558.4003136
|
|
1654
|
It's Not Copper Tools by @glacialSkyfarer | St It's Not Copper Tools by @glacialSkyfarer | Stardance...
|
glacialSkyfarer
|
1
|
29.0
|
507
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T07:37:57Z", "hours": 29.0, "multiplier": 17.24, "payout": 507, "blessing": "neutral", "text": "I’ve been working on this mod for a little while now and so for stardance I decided to make it its first significant content update ::3 After a month or two of work I think it’s ready to ship, and is now up publicly on modrinth! It took a bunch of tinkering with mixins and stuff to get some things to work, cough cough biome specific mob spawns in the nether, but in the end I managed to get everything working! I’m hoping to update it more in the future, though I doubt I’ll have anything done on that front in time to ship this thing TWICE this stardance lol. I’ve enjoyed figuring stuff out for this project and making the visual assets for it, and it also got me to make my first pull request to any like, Big Thing™️ so that’s neat. If you want to try it without any of the hassle of getting a babric instance set up, I’ve made a little quick start instance for MultiMC and PrismLauncher, so you can just paste this link ( https://codeberg.org/GlacialSkyfarer/notcoppertools/raw/branch/main/INCT%20Stardance%20Instance.zip ) into your launcher of choice and start playing right away.", "repo": "https://codeberg.org/GlacialSkyfarer/notcoppertools", "demo": "https://modrinth.com/mod/its-not-copper-tools"}]...
|
[{"post_id": 19809, "ts": "202 [{"post_id": 19809, "ts": "2026-07-01T06:15:28Z", "hours": 1.7364, "text": "…"}, {"post_id": 19713, "ts": "2026-07-01T03:18:20Z", "hours": 4.2375, "text": "It’S ALIVEE Hi so as it turns out!! the stationapi biome stuff is not set up properly! The getBiome(ChunkPos) method isn’t overwritten by NetherBiomeSourceImpl so it was just returning Biome.HELL no matter where I went! After mixing into that to make it actually use the system it’s meant to i was able to get ash slimes spawning in the igneum pools!!"}, {"post_id": 19064, "ts": "2026-06-30T08:04:54Z", "hours": 2.2769, "text": "Now for the actual main focus of this update; the igneum pools is a new nether biome that takes up around half of the new nether! Making this definitely helped me get acquainted with making structures in minecraft through code, as all of the worldgen features you see are generated on the fly ::3 You can also see the geysers there in both images."}, {"post_id": 18963, "ts": "2026-06-30T04:19:18Z", "hours": 0.6925, "text": "This one is mostly just new assets, added a new stone type and an ore to go with it for the nether wastes as a sort of Not-Quartz. I think it looks nice ::>"}, {"post_id": 18886, "ts": "2026-06-30T02:38:01Z", "hours": 3.4853, "text": "added the other type of tree! this one was a bit of a pain because i mixed up x and z for a bit! but other than that pretty simple! It’s nice seeing something like this just, like, WORK once you’re finished. also I added fossils that you can soak with water to get saplings and i think they turned out really cool!!"}, {"post_id": 18173, "ts": "2026-06-29T06:43:32Z", "hours": 4.2872, "text": "i have successfully rewritten the beta 1.7.3 background music handling to use categories that it can check against predicates to play specific music under specific circumstances such as being in the nether. nice thing is other mods can use this system if they want by putting stuff in the same folders"}, {"post_id": 17484, "ts": "2026-06-28T09:03:51Z", "hours": 1.7533, "text": "and the last thing for today, ashwood saplings! These were actually pretty simple to get working as they’re basically just a line upward and then a cube and then some lines downward around the cube."}, {"post_id": 17429, "ts": "2026-06-28T06:29:15Z", "hours": 1.5606, "text": "three new blocksets! Two new wood types that you’ll be able to find in the form of fossilized saplings in the nether, along with all their block variants, and all the fancy variations for igneum ::3c"}, {"post_id": 17346, "ts": "2026-06-28T03:04:03Z", "hours": 1.0833, "text": "took some fiddling but they look a lot nicer with emission!"}, {"post_id": 17290, "ts": "2026-06-28T00:35:14Z", "hours": 3.745, "text": "I’ve implemented flame and steam geysers! like I did with the pots, I wrestled with trying to make scheduled block updates work as a timer before caving and just using block entities for these. They turned out pretty nice though! The particles turned out to be less complicated than I thought and I made a version of the spawn function that lets me pass in totally custom particle objects in case I need to in the future ::3"}, {"post_id": 16729, "ts": "2026-06-27T05:24:50Z", "hours": 4.0311, "text": "falling marrow blocks! and also ash behind them! Had to learn the station api entity workflow for this, and it was pretty simple all things considered. Most of the behaviour is just directly grabbed from vanilla falling blocks but the renderer is instead grabbed from BoxEntityRenderer lol"}, {"post_id": 348, "ts": "2026-06-01T17:28:38Z", "hours": 0.535, "text": "hi so i’ve been working on a mod for minecraft beta 1.7.3 because i like playing it and I want there to be more cool stuff in it. this is really one of my first Finished Projects that I’ve actually been able to release and i’m pretty proud of it and I wanted to make more stuff for it so I’m making a 2.0 update! this one focusing on the nether!"}]...
|
Title: It's Not Copper Tools by @glacialSkyfar Title: It's Not Copper Tools by @glacialSkyfarer | Stardance
Devlogs:
hi so i’ve been working on a mod for minecraft beta 1.7.3 because i like playing it and I want there to be more cool stuff in it. this is really one of my first Finished Projects that I’ve actually been able to release and i’m pretty proud of it and I wanted to make more stuff for it so I’m making a 2.0 update! this one focusing on the nether!
falling marrow blocks! and also ash behind them! Had to learn the station api entity workflow for this, and it was pretty simple all things considered. Most of the behaviour is just directly grabbed from vanilla falling blocks but the renderer is instead grabbed from BoxEntityRenderer lol
I’ve implemented flame and steam geysers! like I did with the pots, I wrestled with trying to make scheduled block updates work as a timer before caving and just using block entities for these. They turned out pretty nice though! The particles turned out to be less complicated than I thought and I made a version of the spawn function that lets me pass in totally custom particle objects in case I need to in the future ::3
took some fiddling but they look a lot nicer with emission!
three new blocksets! Two new wood types that you’ll be able to find in the form of fossilized saplings in the nether, along with all their block variants, and all the fancy variations for igneum ::3c
and the last thing for today, ashwood saplings! These were actually pretty simple to get working as they’re basically just a line upward and then a cube and then some lines downward around the cube.
i have successfully rewritten the beta 1.7.3 background music handling to use categories that it can check against predicates to play specific music under specific circumstances such as being in the nether. nice thing is other mods can use this system if they want by putting stuff in the same folders
added the other type of tree! this one was a bit of a pain because i mixed up x and z for a bit! but other than that pretty simple! It’s nice seeing something like this just, like, WORK once you’re finished. also I added fossils that you can soak with water to get saplings and i think they turned out really cool!!
This one is mostly just new assets, added a new stone type and an ore to go with it for the nether wastes as a sort of Not-Quartz. I think it looks nice ::>
Now for the actual main focus of this update; the igneum pools is a new nether biome that takes up around half of the new nether! Making this definitely helped me get acquainted with making structures in minecraft through code, as all of the worldgen features you see are generated on the fly ::3 You can also see the geysers there in both images.
It’S ALIVEE Hi so as it turns out!! the stationapi biome stuff is not set up properly! The getBiome(ChunkPos) method isn’t overwritten by NetherBiomeSourceImpl so it was just returning Biome.HELL no matter where I went! After mixing into that to make it actually use the system it’s meant to i was able to get ash slimes spawning in the igneum pools!!
…
Ships:
I’ve been working on this mod for a little while now and so for stardance I decided to make it its first significant content update ::3 After a month or two of work I think it’s ready to ship, and is now up publicly on modrinth! It took a bunch of tinkering with mixins and stuff to get some things to work, cough cough biome specific mob spawns in the nether, but in the end I managed to get everything working! I’m hoping to update it more in the future, though I doubt I’ll have anything done on that front in time to ship this thing TWICE this stardance lol. I’ve enjoyed figuring stuff out for this project and making the visual assets for it, and it also got me to make my first pull request to any like, Big Thing™️ so that’s neat. If you want to try it without any of the hassle of getting a babric instance set up, I’ve made a little quick start instance for MultiMC and PrismLauncher, so you can just paste this link ( https://codeberg.org/GlacialSkyfarer/notcoppertools/raw/branch/main/INCT%20Stardance%20Instance.zip ) into your launcher of choice and start playing right away....
|
1792968820.1985614
|
1793055220.1985614
|
|
18188
|
Onara by @aarushk | Stardance
|
aarushk
|
1
|
103.77
|
504
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T22:28:48Z", "hours": 44.0, "multiplier": 19.06, "payout": 504, "blessing": "neutral", "text": "I made Onara, an AI website builder for local businesses. It helps contractors turn their Google Business Profile, or manually entered business info, into a live website with copy, design, SEO, photos, contact forms, and a public URL. The hardest part was connecting everything together: the Next.js app, Supabase auth/database, Stripe billing, the FastAPI AI pipeline, Cloudflare deployment, GitHub backups, and the revision system. Getting the AI output to be good and not broken was also challenging. I’m proud that it is not just a mockup anymore. Users can sign in, search or enter a business, generate a site, revise it, manage billing, and keep their generated code backed up. To test it, sign up, search for a local business, confirm the details, pick a style, and start a build. After the site generates, try the revision page and ask for a small change like “make the hero CTA bigger.”", "repo": "https://github.com/Ak123yay/Onara/", "demo": "https://onara.tech"}]...
|
[{"post_id": 27459, "ts": "202 [{"post_id": 27459, "ts": "2026-07-13T01:25:29Z", "hours": 9.7311, "text": "First generated site!!! Pipeline finally works!"}, {"post_id": 23034, "ts": "2026-07-05T19:25:57Z", "hours": 12.2622, "text": "turning onara into Google Business Profile → website → quote form → missed-call recovery → lead inbox → booked job follow-up"}, {"post_id": 17247, "ts": "2026-06-27T23:26:00Z", "hours": 37.7717, "text": "Trying to make the pipeline generate a proper output. Polishing up the application."}, {"post_id": 12202, "ts": "2026-06-19T22:22:13Z", "hours": 8.2644, "text": "devlog 003 - making Onara launch-ready Date: 2026-06-19 Since devlog 002, I mostly worked on turning Onara from “it works” into something closer to launch-ready. what I worked on billing + accounts I added more real account controls: cancel subscription from billing plan limits better account page better checkout layout Google-login warning if someone tries password login on a Google account Google account -> use Continue with Google Password account -> normal email/password login generated sites I worked on making the sites Onara creates more useful after launch: contact form lead emails better email HTML Pro code download cancellation placeholder pages Google Reviews refresh job support email surfaces contact form -> Onara lead email -> site owner inbox pipeline fixes I fixed more backend/build issues: longer pipeline timeout better health monitor support fixed /health HEAD checks fixed broken generated HTML cases improved Google Maps region filtering back toward DC / VA GET /health -> 200 OK HEAD /health -> 200 OK launch cleanup I added launch stuff that real products need: privacy policy terms of service support page favicon/logo polish SEO metadata .env.example updates docs for production fixes AI + training data I also added the start of a cleaner AI improvement system: user consent copy opt-out/delete handling training example storage QA-approved examples only no saving random bad generated sites into RAG good QA result -> redact -> save as training example bad result -> do not save biggest change Onara is not just generating sites now. It is starting to act like a real app with billing, support, cancellation, reviews, contact leads, account limits, and safer AI improvement rules. still left finish production deploy polish make generated site quality more consistent keep fixing slow render/build issues launch testing outreach assets"}, {"post_id": 11090, "ts": "2026-06-18T04:09:31Z", "hours": 26.8906, "text": "devlog 002 - the fake flow became the real app Date: 2026-06-18 Sorry abt not posting a devlog in a while, completely forgot i had to do them! (too locked in lol). Onara moved from prototype to real product system. Devlog 001 ended with the app shell, Supabase setup, and mock agent progress. Since then, the missing backend got built: FastAPI, real agents, deployment, revisions, billing, and account gating. Find -> Confirm -> Style -> Generate now connects to the actual pipeline. what I built FastAPI backend /generate and /health job queue + dedupe SSE progress stream dashboard build resume Cloudflare Tunnel + PM2 Next.js -> FastAPI -> agents -> Cloudflare -> Supabase AI pipeline I added the real 10-agent flow: Analyst, Content Writer, Style Agent, Planner, Prompt Engineer, Code Generator, Debugger, SEO Agent, QA, and Mobile check. Agent 6 now has a plan-gated model picker. Free -> Onara default Starter -> Copilot options Trial / Pro -> full access I also added shared AI clients for NVIDIA NIM, Ollama, and GitHub Copilot SDK. z-ai/glm-5.1 -> llama-4-maverick -> gemma4:e4b RAG and deployment I added RAG with ChromaDB, BM25 search, seeded HTML/CSS/JS patterns, and contractor layout examples. Deployment now does this: parse generated HTML split component files back up code to GitHub deploy to Cloudflare Pages save metadata in Supabase generated site -> GitHub -> Cloudflare -> Supabase revisions The revision page became a real workflow with: revision threads queued work log auto-pick or manual components changed-file summaries rollback UI retry without charging failed builds { instruction : \" make the hero CTA bigger \" , componentSelection : { mode : \" auto \" } } The UI also got cleaner: denser chat, better work log placement, flatter composer, and Onara styling. billing I added real billing: Stripe checkout sessions Starter monthly Starter annual at $99/year Pro checkout Stripe webhooks payment failed / succeeded handling reverse trial setup trial downgrade monthly revision reset STRIPE_STARTER_PRICE_ID=... STRIPE_STARTER_ANNUAL_PRICE_ID=... STRIPE_PRO_PRICE_ID=... Checkout now uses embedded Stripe Elements with PaymentElement , ExpressCheckoutElement , wallet buttons when available, and an Onara checkout page. account and limits I added plan display, trial days left, usage stats, upgrade CTAs, Starter / Pro cards, and annual Starter. Free -> 1 active site Starter -> 1 active site Pro / Trial -> 3 active sites Limits are checked before generation and enforced in Supabase. cancellation flow When Stripe sends customer.subscription.deleted or invoice.payment_failed , Onara now: updates the account sets show_url=false deploys a Cloudflare placeholder marks projects as suspended keeps Supabase records and GitHub backups cancel -> hide URL -> placeholder -> suspended project Cancellation hides the site but does not delete the generated code. what changed from devlog 001 Now the pipeline runs, agents generate sites, previews stream status, sites deploy, code backs up, projects persist, revisions work, billing is wired, trials downgrade, limits are enforced, and canceled sites get suspended. still missing lead SMS Pro code download weekly Google Reviews badge refresh monitoring privacy / terms cleanup support / consent copy launch outreach assets"}, {"post_id": 8868, "ts": "2026-06-14T19:21:29Z", "hours": 8.4192, "text": "devlog 001 - i started making the app Date: 2026-06-14 This update was big because Onara is not just plans anymore. I added real app code inside Onara_Code . Before this, it was mostly wiki pages, task lists, and design references. Now it has a real frontend and Supabase setup. what I built Next.js app landing page auth pages dashboard business build flow Google Places search agent progress screen Supabase migrations Supabase edge functions The app now has login, signup, password reset, protected dashboard routes, a contractor landing page, and a 4-step build flow: Find -> Confirm -> Style -> Generate I also added the mock agent progress screen. It shows the 10 agents running, streams progress, updates a preview, and has a fake retry moment. It is not the real backend yet, but it makes the frontend flow feel real. Supabase now has migrations for users, projects, pipeline jobs, revisions, RLS, auth triggers, and cron jobs. I also added edge functions for trial downgrade, revision reset, and Stripe webhook handling. what is still missing The big missing thing is: Onara_Code/pipeline/ That is where the FastAPI server needs to go. Still needed: FastAPI app /generate endpoint /health endpoint real agents AI client RAG deployment code account/billing pages Stripe checkout route verification I tried: npm run type-check but it failed because dependencies are not installed: tsc: not found next Next step: Build the FastAPI server. That is what turns the fake agent progress flow into the real Onara AI pipeline."}]...
|
Title: Onara by @aarushk | Stardance
Devlogs:
dev Title: Onara by @aarushk | Stardance
Devlogs:
devlog 001 - i started making the app Date: 2026-06-14 This update was big because Onara is not just plans anymore. I added real app code inside Onara_Code . Before this, it was mostly wiki pages, task lists, and design references. Now it has a real frontend and Supabase setup. what I built Next.js app landing page auth pages dashboard business build flow Google Places search agent progress screen Supabase migrations Supabase edge functions The app now has login, signup, password reset, protected dashboard routes, a contractor landing page, and a 4-step build flow: Find -> Confirm -> Style -> Generate I also added the mock agent progress screen. It shows the 10 agents running, streams progress, updates a preview, and has a fake retry moment. It is not the real backend yet, but it makes the frontend flow feel real. Supabase now has migrations for users, projects, pipeline jobs, revisions, RLS, auth triggers, and cron jobs. I also added edge functions for trial downgrade, revision reset, and Stripe webhook handling. what is still missing The big missing thing is: Onara_Code/pipeline/ That is where the FastAPI server needs to go. Still needed: FastAPI app /generate endpoint /health endpoint real agents AI client RAG deployment code account/billing pages Stripe checkout route verification I tried: npm run type-check but it failed because dependencies are not installed: tsc: not found next Next step: Build the FastAPI server. That is what turns the fake agent progress flow into the real Onara AI pipeline.
devlog 002 - the fake flow became the real app Date: 2026-06-18 Sorry abt not posting a devlog in a while, completely forgot i had to do them! (too locked in lol). Onara moved from prototype to real product system. Devlog 001 ended with the app shell, Supabase setup, and mock agent progress. Since then, the missing backend got built: FastAPI, real agents, deployment, revisions, billing, and account gating. Find -> Confirm -> Style -> Generate now connects to the actual pipeline. what I built FastAPI backend /generate and /health job queue + dedupe SSE progress stream dashboard build resume Cloudflare Tunnel + PM2 Next.js -> FastAPI -> agents -> Cloudflare -> Supabase AI pipeline I added the real 10-agent flow: Analyst, Content Writer, Style Agent, Planner, Prompt Engineer, Code Generator, Debugger, SEO Agent, QA, and Mobile check. Agent 6 now has a plan-gated model picker. Free -> Onara default Starter -> Copilot options Trial / Pro -> full access I also added shared AI clients for NVIDIA NIM, Ollama, and GitHub Copilot SDK. z-ai/glm-5.1 -> llama-4-maverick -> gemma4:e4b RAG and deployment I added RAG with ChromaDB, BM25 search, seeded HTML/CSS/JS patterns, and contractor layout examples. Deployment now does this: parse generated HTML split component files back up code to GitHub deploy to Cloudflare Pages save metadata in Supabase generated site -> GitHub -> Cloudflare -> Supabase revisions The revision page became a real workflow with: revision threads queued work log auto-pick or manual components changed-file summaries rollback UI retry without charging failed builds { instruction : " make the hero CTA bigger " , componentSelection : { mode : " auto " } } The UI also got cleaner: denser chat, better work log placement, flatter composer, and Onara styling. billing I added real billing: Stripe checkout sessions Starter monthly Starter annual at $99/year Pro checkout Stripe webhooks payment failed / succeeded handling reverse trial setup trial downgrade monthly revision reset STRIPE_STARTER_PRICE_ID=... STRIPE_STARTER_ANNUAL_PRICE_ID=... STRIPE_PRO_PRICE_ID=... Checkout now uses embedded Stripe Elements with PaymentElement , ExpressCheckoutElement , wallet buttons when available, and an Onara checkout page. account and limits I added plan display, trial days left, usage stats, upgrade CTAs, Starter / Pro cards, and annual Starter. Free -> 1 active site Starter -> 1 active site Pro / Trial -> 3 active sites Limits are checked before generation and enforced in Supabase. cancellation flow When Stripe sends customer.subscription.deleted or invoice.payment_failed , Onara now: updates the account sets show_url=false deploys a Cloudflare placeholder marks projects as suspended keeps Supabase records and GitHub backups cancel -> hide URL -> placeholder -> suspended project Cancellation hides the site but does not delete the generated code. what changed from devlog 001 Now the pipeline runs, agents generate sites, previews stream status, sites deploy, code backs up, projects persist, revisions work, billing is wired, trials downgrade, limits are enforced, and canceled sites get suspended. still missing lead SMS Pro code download weekly Google Reviews badge refresh monitoring privacy / terms cleanup support / consent copy launch outreach assets
devlog 003 - making Onara launch-ready Date: 2026-06-19 Since devlog 002, I mostly worked on turning Onara from “it works” into something closer to launch-ready. what I worked on billing + accounts I added more real account controls: cancel subscription from billing plan limits better account page better checkout layout Google-login warning if someone tries password login on a Google account Google account -> use Continue with Google Password account -> normal email/password login generated sites I worked on making the sites Onara creates more useful after launch: contact form lead emails better email HTML Pro code download cancellation placeholder pages Google Reviews refresh job support email surfaces contact form -> Onara lead email -> site owner inbox pipeline fixes I fixed more backend/build issues: longer pipeline timeout better health monitor support fixed /health HEAD checks fixed broken generated HTML cases improved Google Maps region filtering back toward DC / VA GET /health -> 200 OK HEAD /health -> 200 OK launch cleanup I added launch stuff that real products need: privacy policy terms of service support page favicon/logo polish SEO metadata .env.example updates docs for production fixes AI + training data I also added the start of a cleaner AI improvement system: user consent copy opt-out/delete handling training example storage QA-approved examples only no saving random bad generated sites into RAG good QA result -> redact -> save as training example bad result -> do not save biggest change Onara is not just generating sites now. It is starting to act like a real app with billing, support, cancellation, reviews, contact leads, account limits, and safer AI improvement rules. still left finish production deploy polish make generated site quality more consistent keep fixing slow render/build issues launch testing outreach assets
Trying to make the pipeline generate a proper output. Polishing up the application.
turning onara into Google Business Profile → website → quote form → missed-call recovery → lead inbox → booked job follow-up
First generated site!!! Pipeline finally works!
Ships:
I made Onara, an AI website builder for local businesses. It helps contractors turn their Google Business Profile, or manually entered business info, into a live website with copy, design, SEO, photos, contact forms, and a public URL. The hardest part was connecting everything together: the Next.js app, Supabase auth/database, Stripe billing, the FastAPI AI pipeline, Cloudflare deployment, GitHub backups, and the revision system. Getting the AI output to be good and not broken was also challenging. I’m proud that it is not just a mockup anymore. Users can sign in, search or enter a business, generate a site, revise it, manage billing, and keep their generated code backed up. To test it, sign up, search for a local business, confirm the details, pick a style, and start a build. After the site generates, try the revision page and ask for a small change like “make the hero CTA bigger.”...
|
1792990499.733223
|
1793076899.733223
|
|
22550
|
Olympus by @nithilgadde | Stardance
|
nithilgadde
|
1
|
26.88
|
503
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-24T01:51:24Z", "hours": 26.0, "multiplier": 19.33, "payout": 503, "blessing": "neutral", "text": "Hey everyone! I made Olympus, a small game engine for Python that lets you build tiny pixel games on a 128x128 screen with 16 colors, kind of like PICO-8. The twist is I built it from scratch. No pygame, no pyxel. The screen is just a numpy grid of color numbers, and I hand-wrote all the drawing myself: the lines, the circles, the sprite blitting, a little pixel font, even the sound. SDL2 only opens the window and reads the keyboard, it does none of the actual drawing. The hardest parts were the ones you don’t see. My filled circles came out with weird spikes poking off the sides until I rewrote them with a proper midpoint algorithm. Then turning it into a real installable library nearly broke me: wrong Python versions, a locked-down pip, and an upload token that kept getting rejected. I learned a lot more about packaging than I planned to. What I’m proudest of is that it’s actually real. You can install the library by going to the ‘Try project’ or ‘See source code’, both have proper instructions on how to install the library. Then, you can start building games! There is proper documentation in the ‘Wiki’ tab in the Github Repo (click See source code). Happy making! (The Demo is a copy of Snake using the Olympus Engine)", "repo": "https://github.com/nithilgadde/Olympus", "demo": "https://pypi.org/project/olympus-engine/"}]...
|
[{"post_id": 34068, "ts": "202 [{"post_id": 34068, "ts": "2026-07-24T15:02:51Z", "hours": 0.8831, "text": "Devlog #9: Starting to Fly Again Hello everyone! I’m finally making another devlog for Olympus. I took a break because I went on vacation and I didn’t feel motivated to start coding again. But now, I’m ready to show you the new things I’ve created. When I was looking at the code, I realized that I never added functionality to export a game. If you wanted to share your game with someone, you would have to send them your entire code and then make them install Python, Olympus, and it’s a huge deal just to play your game. So, I’ve implemented a game exporter! How it works So I used PyInstaller to make this work. Basically, when you export your game, PyInstalled will “freeze” your program. This means that it will trace every import your game makes, gathers all of your assets (your code, the Python interpreter, olympus, numpy, Pillow, PySDL2) and then packs it into one self-contained bundle. And that’s your game! What’s Next? Honesty, I have no idea. I’m planning on adding mouse implementation but it depends on what I’m feeling like doing. See you later! Below is a simple snake game that I created and it was created and exported by Olympus Engine."}, {"post_id": 14810, "ts": "2026-06-24T01:37:11Z", "hours": 0.7514, "text": "Devlog #8: The Ship has Sailed? Hey everyone! Stardance says that I have a certain amount of time logged and that if I ship and don’t make a devlog for that time, I’m gonna lose it. So, I’ll make a quick devlog: README.md: I created a nice README.md for the GitHub Repo. I also added a wiki, so that it will be very easy for anyone to learn Olympus. Turned into a Python Package This is my first time uploading a Python Package to PyPi, the official provider for Python packages, so this was a new experience. However, there are lots of documentation online that made it very easy. So, Olympus is now an official Python library! You can check it out when i ship the project. Welp, that’s it. I hope to see you next time!"}, {"post_id": 14579, "ts": "2026-06-23T19:01:45Z", "hours": 7.7639, "text": "Devlog #7: We’ve Reached the Peak! Hello everyone! Welcome back to another devlog. I’m happy to announce that my game engine, Olympus, is finally finished! Here’s what I added. Sound This part took about 1 - 2 hours to implement. Because the game engine is a 16-bit game engine, this means that we can only play sounds that are 16-bit. You can create your own sounds using the game engine, but you can also upload your own sounds. The program works by converting your sounds into a 16-bit audio that the game engine can render. Sprite Editor This part took foreverrrrr. Basically, instead of manually typing out sprites for your game, I wanted a editor where you could draw the sprites and then export them. This took forever because I didn’t know how to export your sprites into actual array code that would turn into a sprite. However, I was able to just reuse my code that render sprites from a list into the sprite editor and add functionality that would turn the blank spaces in the canvas into a ‘.’ (blank space) and all the squares that are drawn into an ‘x’ (the actual sprite pixels). I was also able to add saving and onion skinning. What’s Next? I’ll be turning Olympus into a Python library so everyone can install it. Then, I will ship the project. See you next time!"}, {"post_id": 14065, "ts": "2026-06-23T01:24:29Z", "hours": 4.1719, "text": "Devlog #6: Sights on the Peak! Hey everyone! Welcome back to another devlog. Today, we are one giant step forward in finishing the game engine: tilemaps and animations. Tilemaps: The whole level is a grid of letters. I draw my maps as plain text: W is a wall, C is a coin, ’. ‘is empty space (These are just the examples that I’m using for the demos). So a level is literally a block of text I type out, like ASCII art of the room. The engine turns each letter into a tile. It walks the grid square by square, and for each letter it looks up a matching 8×8 picture and stamps it at that spot. A ‘W’ becomes a wall tile, a ’. ‘draw nothing. This is all easy on paper but when actually trying to create it, it was hell. The amount of bugs that would come wouldn’t stop and I actually was very close to giving up for the day. But, I persisted, and after over 20+ Google Tabs, I was able to work it out. Animations: Even though I thought this would be the hardest thing to implement, this one was the easiest feature to implement imo. It’s a flipbook of sprites. A walk animation is just a list of frames, the same little pixel sprites I already made. Flip through them fast and the legs look like they’re moving. A timer controls the speed. If I swapped frames every single frame of the game (60 times a second) it’d be a blur, so I count ticks and only switch to the next frame every few ticks. That one number tunes how fast the walk looks. When it reaches the last frame it loops back to the first, so it cycles forever. It only animates when it should. While you hold an arrow, I advance the frames so the hero walks. When you let go, I reset to the standing pose so he doesn’t moonwalk in place. What’s Next? This engine is veryyy close to being finished! I just need to add sounds and this engine should be complete! After I finish the engine, I will ship the engine. See you next time! Also, if you want to know what the tilemap in the demo looks like in code, here it is: LEVEL = [ \"WWWWWWWWWWWWWWWW\", \"W...........................................................W\", \"W.................WWW.......................C....W\", \"W............................................WWW..W\", \"W..C......................................................W\", \"W.......................WW...........................W\", \"W.....................WW............C...............W\", \"W..........................................................W\", \"W..................WWWW........................W\", \"W.............................C...........................W\", \"W.............................C...........................W\", \"W.........................WWWW.................W\", \"W..........................................................W\", \"W........................C...............C..............W\", \"W..........................................................W\", \"WWWWWWWWWWWWWWWW\", ] ``` The formatting is messed up as the original is in Python, but I hope you get the gist!"}, {"post_id": 13496, "ts": "2026-06-22T02:53:30Z", "hours": 6.105, "text": "Devlog #5: The Writing’s on the Wall. Hey everyone! Welcome back to another devlog for my game engine made in Python: Olympus. Today, I added the hardest things to implement: text and collisions. Text: This is the one I struggled with the most. I wanted text while having the 16-bit style that I was going for. I tried displaying text using the SDL2 functions, but it didn’t give me the effect I was looking for. So, I had to make my own. And, it was tough. It didn’t help that I had no idea what I was doing, but it also didn’t help that I had many bugs. However, I was able to figure it out. I was able to do this by making each letter a tiny picture made of pixels and store all of the characters in a lookup table. Collisions: Collisions was easy when looking at it. Check of the walls or an object is colliding. if it is, do something. Otherwise, don’t let the player go into it. But boy, was it hard to implement. I spent a good 3 hours just trying to figure out how to do this. But, eventually, I figured it out. It works as the collisions check if two boxes overlap only if they overlap left-to-right AND up-and-down. If there is a gap, then they aren’t touching. You can see both the text and the collisions in effect in the little demo I made below. What’s Next? I have a feeling that we are very close to being finished with this game engine, but I’m probably getting my hopes up. Next up, adding animations and tilemaps so that you can create levels. That’s it for me. see you later!"}, {"post_id": 13275, "ts": "2026-06-21T18:58:22Z", "hours": 2.5392, "text": "Devlog #4: If Looks could Kill Hey everyone! Welcome back to another devlog! Today, I’ve finally implemented sprites into the game engine: Olympus. This way, you can make your character look like anything! How do the sprites actually work? I made my own sprite format, where each sprite is just rows of text where each character is a color and a dot means transparent. This is the coolest part as the engine will think the dots are transparent and there won’t be a big black box dragging the sprite around. And, if I wanted to flip the sprite around, I could just reverse the rows with numpy. There was a stupid bug where I kept getting a Screen object has no attribute spr error, an I couldn’t find out why. But, I realized that I wrote the method in the wrong file. But, after fixing that error, the program worked! What’s Next? Next up, we are adding text. Every game engine needs text and next up, we are adding that. See you next time!"}, {"post_id": 12855, "ts": "2026-06-21T01:40:19Z", "hours": 1.7486, "text": "Devlog #3: Let there be Movement! Hey everyone! In this devlog, I added movement to our game engine: Olympus! New functions! I created two new functions: btn() and btnp() . btn() is for when the key on your keyboard will be held down. This can be used for movement. btnp() is for when the key is only going to be pressed once. This can be used for actions such as jumping, shooting, or confirming something in the game. How does the movement work? An objects position is two variables: px and py . px is the x-axis (left and right) and py is the y-axis (up and down). If you remember from algebra, when you subtract your initial position in the x-axis, you move to the left and when you add your initial position in the x-axis, you move right. The same applys for the y-axis. If you subtract, you move down. If you add, you go up. So, we check the keys using the btn() function. So, if btn(LEFT) == True when the left arrow is held, it will subtract from px on whatever value you want and it will move the character that way. What’s next? That’s it for today’s devlog. Tomorrow, I hope to finally implement sprites into the game, so you can add custom models instead of using just circles and squares. See you later!"}, {"post_id": 12274, "ts": "2026-06-20T01:13:08Z", "hours": 2.2489, "text": "Devlog #2: Adding Elements One Shape at a Time! Hey everyone, devlog #2! This week I added the first real drawing tools to the engine: lines,rectangles, and circles, all from scratch, no graphics library. Here’s how each shape works: Lines Lines use the Bresenham algorithm, which is an algorithm which finds the best way to create a straight line between two points. At first, I tried using the built-in SDL2 Line function, but it would produce choppy lines that wouldn’t be a straight, full line (see screenshot below). But, after implementing the Bresenham algorithm, it worked perfectly! Lines can be called using the line() function. Rectangles For Rectangles, I created two new functions. rectfill() and rect() . For rectfill() , I just hand to numpy to fill a whole block at once. For rect() , I just use the line() function 4 times to create the rectangle. Circles Circles use the midpoint method. The circles gave me the most trouble. My filled circle used different math than the outline, so it grew these weird single-pixel spikes around the edge (before pic). The fix was making the fill reuse the exact same midpoint math as the outline, so they finally match (after pic). What’s Next? In order for a game to work, we need the player to control something. So, the next step is adding movement. See you in the next devlog!"}, {"post_id": 12060, "ts": "2026-06-19T17:46:51Z", "hours": 1.0283, "text": "Devlog #1: The Start of a Long Climb! Hey everyone! Starting a new project: Olympus, a little game engine like PICO-8, built from scratch in Python. What I’ve Done So Far: So far I’ve got a window opening and my 16-color palette working. The annoying part was SDL2. I’m using it raw through ctypes, so it wants C-style byte strings and pointers everywhere, and I spent way too long just getting a blank window to show up without crashing. It works now though in the screenshot below. What’s Next? Next up: drawing actual shapes onto it. I’ve already tried implementing lines in the screenshot below, but it isn’t working currently. Hopefully in the next devlog, I can get it to work!"}]...
|
Title: Olympus by @nithilgadde | Stardance
Devlog Title: Olympus by @nithilgadde | Stardance
Devlogs:
Devlog #1: The Start of a Long Climb! Hey everyone! Starting a new project: Olympus, a little game engine like PICO-8, built from scratch in Python. What I’ve Done So Far: So far I’ve got a window opening and my 16-color palette working. The annoying part was SDL2. I’m using it raw through ctypes, so it wants C-style byte strings and pointers everywhere, and I spent way too long just getting a blank window to show up without crashing. It works now though in the screenshot below. What’s Next? Next up: drawing actual shapes onto it. I’ve already tried implementing lines in the screenshot below, but it isn’t working currently. Hopefully in the next devlog, I can get it to work!
Devlog #2: Adding Elements One Shape at a Time! Hey everyone, devlog #2! This week I added the first real drawing tools to the engine: lines,rectangles, and circles, all from scratch, no graphics library. Here’s how each shape works: Lines Lines use the Bresenham algorithm, which is an algorithm which finds the best way to create a straight line between two points. At first, I tried using the built-in SDL2 Line function, but it would produce choppy lines that wouldn’t be a straight, full line (see screenshot below). But, after implementing the Bresenham algorithm, it worked perfectly! Lines can be called using the line() function. Rectangles For Rectangles, I created two new functions. rectfill() and rect() . For rectfill() , I just hand to numpy to fill a whole block at once. For rect() , I just use the line() function 4 times to create the rectangle. Circles Circles use the midpoint method. The circles gave me the most trouble. My filled circle used different math than the outline, so it grew these weird single-pixel spikes around the edge (before pic). The fix was making the fill reuse the exact same midpoint math as the outline, so they finally match (after pic). What’s Next? In order for a game to work, we need the player to control something. So, the next step is adding movement. See you in the next devlog!
Devlog #3: Let there be Movement! Hey everyone! In this devlog, I added movement to our game engine: Olympus! New functions! I created two new functions: btn() and btnp() . btn() is for when the key on your keyboard will be held down. This can be used for movement. btnp() is for when the key is only going to be pressed once. This can be used for actions such as jumping, shooting, or confirming something in the game. How does the movement work? An objects position is two variables: px and py . px is the x-axis (left and right) and py is the y-axis (up and down). If you remember from algebra, when you subtract your initial position in the x-axis, you move to the left and when you add your initial position in the x-axis, you move right. The same applys for the y-axis. If you subtract, you move down. If you add, you go up. So, we check the keys using the btn() function. So, if btn(LEFT) == True when the left arrow is held, it will subtract from px on whatever value you want and it will move the character that way. What’s next? That’s it for today’s devlog. Tomorrow, I hope to finally implement sprites into the game, so you can add custom models instead of using just circles and squares. See you later!
Devlog #4: If Looks could Kill Hey everyone! Welcome back to another devlog! Today, I’ve finally implemented sprites into the game engine: Olympus. This way, you can make your character look like anything! How do the sprites actually work? I made my own sprite format, where each sprite is just rows of text where each character is a color and a dot means transparent. This is the coolest part as the engine will think the dots are transparent and there won’t be a big black box dragging the sprite around. And, if I wanted to flip the sprite around, I could just reverse the rows with numpy. There was a stupid bug where I kept getting a Screen object has no attribute spr error, an I couldn’t find out why. But, I realized that I wrote the method in the wrong file. But, after fixing that error, the program worked! What’s Next? Next up, we are adding text. Every game engine needs text and next up, we are adding that. See you next time!
Devlog #5: The Writing’s on the Wall. Hey everyone! Welcome back to another devlog for my game engine made in Python: Olympus. Today, I added the hardest things to implement: text and collisions. Text: This is the one I struggled with the most. I wanted text while having the 16-bit style that I was going for. I tried displaying text using the SDL2 functions, but it didn’t give me the effect I was looking for. So, I had to make my own. And, it was tough. It didn’t help that I had no idea what I was doing, but it also didn’t help that I had many bugs. However, I was able to figure it out. I was able to do this by making each letter a tiny picture made of pixels and store all of the characters in a lookup table. Collisions: Collisions was easy when looking at it. Check of the walls or an object is colliding. if it is, do something. Otherwise, don’t let the player go into it. But boy, was it hard to implement. I spent a good 3 hours just trying to figure out how to do this. But, eventually, I figured it out. It works as the collisions check if two boxes overlap only if they overlap left-to-right AND up-and-down. If there is a gap, then they aren’t touching. You can see both the text and the collisions in effect in the little demo I made below. What’s Next? I have a feeling that we are very close to being finished with this game engine, but I’m probably getting my hopes up. Next up, adding animations and tilemaps so that you can create levels. That’s it for me. see you later!
Devlog #6: Sights on the Peak! Hey everyone! Welcome back to another devlog. Today, we are one giant step forward in finishing the game engine: tilemaps and animations. Tilemaps: The whole level is a grid of letters. I draw my maps as plain text: W is a wall, C is a coin, ’. ‘is empty space (These are just the examples that I’m using for the demos). So a level is literally a block of text I type out, like ASCII art of the room. The engine turns each letter into a tile. It walks the grid square by square, and for each letter it looks up a matching 8×8 picture and stamps it at that spot. A ‘W’ becomes a wall tile, a ’. ‘draw nothing. This is all easy on paper but when actually trying to create it, it was hell. The amount of bugs that would come wouldn’t stop and I actually was very close to giving up for the day. But, I persisted, and after over 20+ Google Tabs, I was able to work it out. Animations: Even though I thought this would be the hardest thing to implement, this one was the easiest feature to implement imo. It’s a flipbook of sprites. A walk animation is just a list of frames, the same little pixel sprites I already made. Flip through them fast and the legs look like they’re moving. A timer controls the speed. If I swapped frames every single frame of the game (60 times a second) it’d be a blur, so I count ticks and only switch to the next frame every few ticks. That one number tunes how fast the walk looks. When it reaches the last frame it loops back to the first, so it cycles forever. It only animates when it should. While you hold an arrow, I advance the frames so the hero walks. When you let go, I reset to the standing pose so he doesn’t moonwalk in place. What’s Next? This engine is veryyy close to being finished! I just need to add sounds and this engine should be complete! After I finish the engine, I will ship the engine. See you next time! Also, if you want to know what the tilemap in the demo looks like in code, here it is: LEVEL = [ "WWWWWWWWWWWWWWWW", "W...........................................................W", "W.................WWW.......................C....W", "W............................................WWW..W", "W..C......................................................W", "W.......................WW...........................W", "W.....................WW............C...............W", "W..........................................................W", "W..................WWWW........................W", "W.............................C...........................W", "W.............................C...........................W", "W.........................WWWW.................W", "W..........................................................W", "W........................C...............C..............W", "W..........................................................W", "WWWWWWWWWWWWWWWW", ] ``` The formatting is messed up as the original is in Python, but I hope you get the gist!
Devlog #7: We’ve Reached the Peak! Hello everyone! Welcome back to another devlog. I’m happy to announce that my game engine, Olympus, is finally finished! Here’s what I added. Sound This part took about 1 - 2 hours to implement. Because the game engine is a 16-bit game engine, this means that we can only play sounds that are 16-bit. You can create your own sounds using the game engine, but you can also upload your own sounds. The program works by converting your sounds into a 16-bit audio that the game engine can render. Sprite Editor This part took foreverrrrr. Basically, instead of manually typing out sprites for your game, I wanted a editor where you could draw the sprites and then export them. This took forever because I didn’t know how to export your sprites into actual array code that would turn into a sprite. However, I was able to just reuse my code that render sprites from a list into the sprite editor and add functionality that would turn the blank spaces in the canvas into a ‘.’ (blank space) and all the squares that are drawn into an ‘x’ (the actual sprite pixels). I was also able to add saving and onion skinning. What’s Next? I’ll be turning Olympus into a Python library so everyone can install it. Then, I will ship the project. See you next time!
Devlog #8: The Ship has Sailed? Hey everyone! Stardance says that I have a certain amount of time logged and that if I ship and don’t make a devlog for that time, I’m gonna lose it. So, I’ll make a quick devlog: README.md: I created a nice README.md for the GitHub Repo. I also added a wiki, so that it will be very easy for anyone to learn Olympus. Turned into a Python Package This is my first time uploading a Python Package to PyPi, the official provider for Python packages, so this was a new experience. However, there are lots of documentation online that made it very easy. So, Olympus is now an official Python library! You can check it out when i ship the project. Welp, that’s it. I hope to see you next time!
Devlog #9: Starting to Fly Again Hello everyone! I’m finally making another devlog for Olympus. I took a break because I went on vacation and I didn’t feel motivated to start coding again. But now, I’m ready to show you the new things I’ve created. When I was looking at the code, I realized that I never added functionality to export a game. If you wanted to share your game with someone, you would have to send them your entire code and then make them install Python, Olympus, and it’s a huge deal just to play your game. So, I’ve implemented a game exporter! How it works So I used PyInstaller to make this work. Basically, when you export your game, PyInstalled will “freeze” your program. This means that it will trace every import your game makes, gathers all of your assets (your code, the Python interpreter, olympus, numpy, Pillow, PySDL2) and then packs it into one self-contained bundle. And that’s your game! What’s Next? Honesty, I have no idea. I’m planning on adding mouse implementation but it depends on what I’m feeling like doing. See you later! Below is a simple snake game that I created and it was created and exported by Olympus Engine.
Ships:
Hey everyone! I made Olympus, a small game engine for Python that lets you build tiny pixel games on a 128x128 screen with 16 colors, kind of like PICO-8. The twist is I built it from scratch. No pygame, no pyxel. The screen is just a numpy grid of color numbers, and I hand-wrote all the drawing myself: the lines, the circles, the sprite blitting, a little pixel font, even the sound. SDL2 only opens the window and reads the keyboard, it does none of the actual drawing. The hardest parts were the ones you don’t see. My filled circles came out with weird spikes poking off the sides until I rewrote them with a proper midpoint algorithm. Then turning it into a real installable library nearly broke me: wrong Python versions, a locked-down pip, and an upload token that kept getting rejected. I learned a lot more about packaging than I planned to. What I’m proudest of is that it’s actually real. You can install the library by going to the ‘Try project’ or ‘See source code’, both have proper instructions on how to install the library. Then, you can start building games! There is proper documentation in the ‘Wiki’ tab in the Github Repo (click See source code). Happy making! (The Demo is a copy of Snake using the Olympus Engine)...
|
1792972520.0249393
|
1793058920.0249393
|
|
24731
|
Ocelot by @Leftie | Stardance
|
Leftie
|
2
|
29.0
|
503
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-17T02:42:20Z", "hours": 10.0, "multiplier": 16.41, "payout": 159, "blessing": "neutral", "text": "I made a chess engine without any dependencies. The hardest part were the small bugs that could have been avoided by just being more careful in the moment. I’m proudest of its UCI implementation–it can communicate with most chess GUIs via the Universal Chess Interface protocol. To test the project, you need Cargo to download and install the crate. You need to use the CLI (pictured) to test it if you don’t want to download a 3rd-party interface.", "repo": "https://github.com/left-alert-chaos/ocelot", "demo": "https://crates.io/crates/ocelot-chess/"}, {"ship_num": 2, "ts": "2026-06-28T19:43:37Z", "hours": 19.0, "multiplier": 17.93, "payout": 344, "blessing": "neutral", "text": "I made a chess engine from scratch. The board representation was the hardest part. While it wasn’t too challenging, there were some simple bugs that took more time than I’d like to admit to fix. I’m proudest of the engine’s speed–on my laptop’s performance mode, most moves take around 3.5 seconds. The engine is written in Rust, and needs Cargo in order to download and run.", "repo": "https://github.com/left-alert-chaos/ocelot", "demo": "https://crates.io/crates/ocelot-chess/"}]...
|
[{"post_id": 29908, "ts": "202 [{"post_id": 29908, "ts": "2026-07-17T02:34:01Z", "hours": 0.8, "text": "Devlog 9: The unnecessary one Stardance doesn’t want me to ship again without logging my 48 minutes, so here’s a brief summary: I removed some old code, changed the pawns_in_center heuristic to be more drastic, and made the TUI display how much time the engine took to move."}, {"post_id": 29727, "ts": "2026-07-16T20:21:32Z", "hours": 3.6853, "text": "Devlog 8: the procrastination is the hard part I’m going to try not to sound like a cringey motivational speaker, so bear with me. I’ve been procrastinating for a while now on one final part of the UCI implementation: the go command. It’s really complicated and I just didn’t want to write a parser for it, so since it was created, the engine hasn’t been able to change its search time based on how much time it has left. This is a problem, because it couldn’t reliably play with non-infinite time controls. Anyway, after I waited for the willpower to write the parser I just sat down and did it , and it wasn’t actually that hard! The one issue is that it seems to be weaker than it was before the time controls. That’s definitely not a huge problem I’ll have to fix later!"}, {"post_id": 21777, "ts": "2026-07-03T21:38:30Z", "hours": 2.9394, "text": "Devlog 7: Better luck this time? I’ve been doing some work on less crucial parts of the engine, but mostly trying to entertain myself while I waited for my ship to be reviewed. Today, I can proudly say that it was! However, it was send back because the player could make illegal moves in the TUI. This wasn’t too hard to fix, but there were a few things that I hadn’t known were wrong that work properly now. I didn’t realize it, but if the player tried to castle when they couldn’t, it would tell them it was illegal… after switching the color of the piece the king was going to replace. I did some sleuthing, and it turns out that it’s because the castle wasn’t being parsed as a castle, but as a move. This move was then being performed and undone. When moves are performed, they record the type of piece they capture so that the pieces can be restored when the moves are undone. Here, though, it was recording that it was capturing a knight but replacing it with a black knight because white can’t legally capture its own pieces. Anyway, that’s fixed now, so I’ll request another review and keep you posted!"}, {"post_id": 18622, "ts": "2026-06-29T20:25:24Z", "hours": 2.2492, "text": "Devlog 6: A need for speed! After my first (still pending) ship, I needed something else to focus my energy on other than the fundamentals. I landed on time management: I can make the engine more efficient with its time. And I’ve kind of done that, in a way. Firstly, I made the search algorithm track its time, so if it was iterating on a node while it surpassed its allowed time, it would just return the value it already had. I played around with the time value, and it seemed to work! When I set it to 1, the engine played moves in around 1.1 seconds. When I set it to 15, it played moves in exactly 15 seconds! It doesn’t dynamically adjust depth yet, but this is a good start!"}, {"post_id": 17803, "ts": "2026-06-28T18:53:15Z", "hours": 1.2617, "text": "Devlog 5: Final touches I’d already done most of the work–I just needed a few more minor things done before I could ship. These were: Make the TUI exit gracefully instead of just disappearing Add multi-threading Publish to crates.io I’m proud to say that I’ve done all of those! Making the search tree dispatch threads was much easier than I thought it would be, especially considering I’m still pretty new to Rust. The TUI was simply adding a struct field of whether to exit. Publishing was a breeze, and I’ve now published 2 different versions. All I need to do before I ship now is finish my README, which is just add a section about installing the project."}, {"post_id": 17288, "ts": "2026-06-28T00:31:04Z", "hours": 3.73, "text": "Devlog 4: I added a TUI After finishing most of the engine, I play tested it for a bit. As discussed in my last post, I fixed 3 big bugs. I was getting closer than ever to shipping a finished product! However, there was one problem: the engine wasn’t really usable on its own. Sure, it played decently, but it still needed the GUI to display the board. This is unfeasible for shipping–I can’t make people download someone else’s GUI just so my engine is playable. Therefore, I needed some sort of inbuilt user interface. My highest-priority design goal was to have no dependencies, so making a GUI wasn’t really an option. That left TUIs. I couldn’t use a library, so that left me 2 options: I could do the easy thing and hard-code the interface, or I could (and I know this sounds absurd) build a miniature TUI framework from the ground up just to make a simple screen. I picked the latter, because why not? I already had a decent prototype written in Python for another project, so I could just port that to Rust and life would be easy. Right? Well, kind of. I spent some time on it, but before I added yet another mandatory argument to a trait method, I stopped and asked myself if this was really worth it. It wasn’t going to be easy or practical, so why do it in the first place? And after coming to that realization, I quickly threw together a decent interface using hard-coded methods. No, it’s not extensible. But why would it need to be? It works, and that’s what matters. And it’s pretty nice, too!"}, {"post_id": 16583, "ts": "2026-06-26T23:34:04Z", "hours": 0.2664, "text": "Devlog 3 A couple bug fixes. This one’s more minor, so I’ll keep it short. There were 3 bugs: A crash (caused by calling unwrap() ) Moving an opponent’s piece (caused by not changing Board::turn ) Late en passant (caused by setting the en passant turn one too high) To solve them, I did 3 fixes: Add pattern matching Change the player to move when castling Change a turn number I also played the first legal game with this engine! I used CuteChess to make it play itself, and 35 rounds later the game ended by stalemate. No illegal moves were made and no crashes happened. I’ve attached a screenshot of the end of the game. I’m going to take this as a good sign and try to target Monday (6/29/2026) for my first ship."}, {"post_id": 16493, "ts": "2026-06-26T20:47:25Z", "hours": 1.3897, "text": "Devlog 2 I did UCI! The engine now is UCI-compatible, so it can play with GUIs like CuteChess. When I first connected it to CuteChess, it crashed on the first move. After enabling debugging, I realized it was because I hadn’t added the moves clause to the position command. I added it and… It still crashed. It crashed when it was time to make a move over and over and over again. After many ultimately useless println! statements, I finally realized why: I had been applying the user’s move before resetting the entire board, thus overwriting the move. After fixing this, I turned it on again and played for exactly one move before it crashed again. Why now? Once again, I hadn’t properly implemented the position command. It only accepted one move, but needed to take as many as were supplied. This was pretty easy - just a for loop. After fixing that, I was able to play an almost-complete game with it before it crashed yet again. After some more testing, it seems to crash when it doesn’t have any legal king moves. My next step is to fix this and a few other minor bugs, and then we should be off to the races!"}, {"post_id": 16381, "ts": "2026-06-26T17:38:02Z", "hours": 8.3358, "text": "Devlog 1 I’ve written a FEN parser. FEN (Forsyth-Edwards Notation) is a way of representing a chess board in one line of ASCII characters. It was intimidating, and I procrastinated a lot before biting the bullet. However, after a couple hours of work, I can successfully generate a board from a string and cargo test is green again!"}, {"post_id": 15274, "ts": "2026-06-24T20:11:03Z", "hours": 4.1747, "text": "Devlog 0 - renaming and joining First, some background. I’ve been working on a chess engine for a couple months now - first in Python, then in Rust. The Python implementation had a few problems. It made illegal moves and was buggy in general. But it had one problem that couldn’t be solved by more loss of sleep: It was written in Python. This made it incredibly slow, and you can’t do much about the language you’re writing in. I tried for a couple days to port the code base over to Codon, a compiled implementation of Python, but I had used dynamic typing so much that it wouldn’t have been feasible. So I came to a crossroads. I could keep working on the Python project, with the limitations of either an incredibly slow environment or an unpopular one, or I could leave my comfort zone, learn something, rewrite it in Rust . I’m now about 2000 lines into the Rust version, and it’s faster and more accurate than the old one could ever dream of being. Joining Stardance I joined Hack Club a couple days ago, and I didn’t know what to expect. I’ve had fun talking to other like-minded “hackers”. I was reading about Stardance, and it seemed like the thing to do. I was even told that I could bring an existing project! I renamed my engine (“Sophisticate”) to Ocelot, and joined."}]...
|
Title: Ocelot by @Leftie | Stardance
Devlogs:
Dev Title: Ocelot by @Leftie | Stardance
Devlogs:
Devlog 0 - renaming and joining First, some background. I’ve been working on a chess engine for a couple months now - first in Python, then in Rust. The Python implementation had a few problems. It made illegal moves and was buggy in general. But it had one problem that couldn’t be solved by more loss of sleep: It was written in Python. This made it incredibly slow, and you can’t do much about the language you’re writing in. I tried for a couple days to port the code base over to Codon, a compiled implementation of Python, but I had used dynamic typing so much that it wouldn’t have been feasible. So I came to a crossroads. I could keep working on the Python project, with the limitations of either an incredibly slow environment or an unpopular one, or I could leave my comfort zone, learn something, rewrite it in Rust . I’m now about 2000 lines into the Rust version, and it’s faster and more accurate than the old one could ever dream of being. Joining Stardance I joined Hack Club a couple days ago, and I didn’t know what to expect. I’ve had fun talking to other like-minded “hackers”. I was reading about Stardance, and it seemed like the thing to do. I was even told that I could bring an existing project! I renamed my engine (“Sophisticate”) to Ocelot, and joined.
Devlog 1 I’ve written a FEN parser. FEN (Forsyth-Edwards Notation) is a way of representing a chess board in one line of ASCII characters. It was intimidating, and I procrastinated a lot before biting the bullet. However, after a couple hours of work, I can successfully generate a board from a string and cargo test is green again!
Devlog 2 I did UCI! The engine now is UCI-compatible, so it can play with GUIs like CuteChess. When I first connected it to CuteChess, it crashed on the first move. After enabling debugging, I realized it was because I hadn’t added the moves clause to the position command. I added it and… It still crashed. It crashed when it was time to make a move over and over and over again. After many ultimately useless println! statements, I finally realized why: I had been applying the user’s move before resetting the entire board, thus overwriting the move. After fixing this, I turned it on again and played for exactly one move before it crashed again. Why now? Once again, I hadn’t properly implemented the position command. It only accepted one move, but needed to take as many as were supplied. This was pretty easy - just a for loop. After fixing that, I was able to play an almost-complete game with it before it crashed yet again. After some more testing, it seems to crash when it doesn’t have any legal king moves. My next step is to fix this and a few other minor bugs, and then we should be off to the races!
Devlog 3 A couple bug fixes. This one’s more minor, so I’ll keep it short. There were 3 bugs: A crash (caused by calling unwrap() ) Moving an opponent’s piece (caused by not changing Board::turn ) Late en passant (caused by setting the en passant turn one too high) To solve them, I did 3 fixes: Add pattern matching Change the player to move when castling Change a turn number I also played the first legal game with this engine! I used CuteChess to make it play itself, and 35 rounds later the game ended by stalemate. No illegal moves were made and no crashes happened. I’ve attached a screenshot of the end of the game. I’m going to take this as a good sign and try to target Monday (6/29/2026) for my first ship.
Devlog 4: I added a TUI After finishing most of the engine, I play tested it for a bit. As discussed in my last post, I fixed 3 big bugs. I was getting closer than ever to shipping a finished product! However, there was one problem: the engine wasn’t really usable on its own. Sure, it played decently, but it still needed the GUI to display the board. This is unfeasible for shipping–I can’t make people download someone else’s GUI just so my engine is playable. Therefore, I needed some sort of inbuilt user interface. My highest-priority design goal was to have no dependencies, so making a GUI wasn’t really an option. That left TUIs. I couldn’t use a library, so that left me 2 options: I could do the easy thing and hard-code the interface, or I could (and I know this sounds absurd) build a miniature TUI framework from the ground up just to make a simple screen. I picked the latter, because why not? I already had a decent prototype written in Python for another project, so I could just port that to Rust and life would be easy. Right? Well, kind of. I spent some time on it, but before I added yet another mandatory argument to a trait method, I stopped and asked myself if this was really worth it. It wasn’t going to be easy or practical, so why do it in the first place? And after coming to that realization, I quickly threw together a decent interface using hard-coded methods. No, it’s not extensible. But why would it need to be? It works, and that’s what matters. And it’s pretty nice, too!
Devlog 5: Final touches I’d already done most of the work–I just needed a few more minor things done before I could ship. These were: Make the TUI exit gracefully instead of just disappearing Add multi-threading Publish to crates.io I’m proud to say that I’ve done all of those! Making the search tree dispatch threads was much easier than I thought it would be, especially considering I’m still pretty new to Rust. The TUI was simply adding a struct field of whether to exit. Publishing was a breeze, and I’ve now published 2 different versions. All I need to do before I ship now is finish my README, which is just add a section about installing the project.
Devlog 6: A need for speed! After my first (still pending) ship, I needed something else to focus my energy on other than the fundamentals. I landed on time management: I can make the engine more efficient with its time. And I’ve kind of done that, in a way. Firstly, I made the search algorithm track its time, so if it was iterating on a node while it surpassed its allowed time, it would just return the value it already had. I played around with the time value, and it seemed to work! When I set it to 1, the engine played moves in around 1.1 seconds. When I set it to 15, it played moves in exactly 15 seconds! It doesn’t dynamically adjust depth yet, but this is a good start!
Devlog 7: Better luck this time? I’ve been doing some work on less crucial parts of the engine, but mostly trying to entertain myself while I waited for my ship to be reviewed. Today, I can proudly say that it was! However, it was send back because the player could make illegal moves in the TUI. This wasn’t too hard to fix, but there were a few things that I hadn’t known were wrong that work properly now. I didn’t realize it, but if the player tried to castle when they couldn’t, it would tell them it was illegal… after switching the color of the piece the king was going to replace. I did some sleuthing, and it turns out that it’s because the castle wasn’t being parsed as a castle, but as a move. This move was then being performed and undone. When moves are performed, they record the type of piece they capture so that the pieces can be restored when the moves are undone. Here, though, it was recording that it was capturing a knight but replacing it with a black knight because white can’t legally capture its own pieces. Anyway, that’s fixed now, so I’ll request another review and keep you posted!
Devlog 8: the procrastination is the hard part I’m going to try not to sound like a cringey motivational speaker, so bear with me. I’ve been procrastinating for a while now on one final part of the UCI implementation: the go command. It’s really complicated and I just didn’t want to write a parser for it, so since it was created, the engine hasn’t been able to change its search time based on how much time it has left. This is a problem, because it couldn’t reliably play with non-infinite time controls. Anyway, after I waited for the willpower to write the parser I just sat down and did it , and it wasn’t actually that hard! The one issue is that it seems to be weaker than it was before the time controls. That’s definitely not a huge problem I’ll have to fix later!
Devlog 9: The unnecessary one Stardance doesn’t want me to ship again without logging my 48 minutes, so here’s a brief summary: I removed some old code, changed the pawns_in_center heuristic to be more drastic, and made the TUI display how much time the engine took to move.
Ships:
I made a chess engine from scratch. The board representation was the hardest part. While it wasn’t too challenging, there were some simple bugs that took more time than I’d like to admit to fix. I’m proudest of the engine’s speed–on my laptop’s performance mode, most moves take around 3.5 seconds. The engine is written in Rust, and needs Cargo in order to download and run.
I made a chess engine without any dependencies. The hardest part were the small bugs that could have been avoided by just being more careful in the moment. I’m proudest of its UCI implementation–it can communicate with most chess GUIs via the Universal Chess Interface protocol. To test the project, you need Cargo to download and install the crate. You need to use the CLI (pictured) to test it if you don’t want to download a 3rd-party interface....
|
1792997268.6565228
|
1793083668.6565228
|
|
38164
|
Determinist by @Mate1166 | Stardance
|
Mate1166
|
3
|
83.0
|
503
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-16T23:53:05Z", "hours": 38.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Determinist Determinist is a deterministic password generator that lets you recover forgotten passwords easily, given that you remember a master password, and a few things about your lost password. Features CLI and Web interface, featuring a PWA that also works offline Three algorithm versions to choose from A preset system Generated passwords are identical on both the website and the CLI Fully local generation Presets The presets use the TOML format, which is very user-friendly and easy to edit. The presets have multiple categories inside them like ‘general’ (for the algorithm version and password length), ‘preset’ (the preset name, description and whether it is set as defaul), and version specific ones like ‘v3’, which has the settings for the v3 algorithm. If you’re unsure how to edit preset files, you can also just export your settings from the website, and use it across all versions of Determinist! To Reviewers Please, test both the CLI and the website (if possible), and provide feedback on User Experience if you encountered any issues, include that in the review. You can even suggest features, and I may implement them :) Thank you!", "repo": "https://github.com/szentpeterimate/Determinist", "demo": "https://szentpeterimate.github.io/determinist/"}, {"ship_num": 2, "ts": "2026-08-13T14:20:06Z", "hours": 29.0, "multiplier": 14.15, "payout": 412, "blessing": "neutral", "text": "Well, it’s official: Determinist now has a website! Features: Easy to use interface Straightforward settings 1:1 compatibility with the CLI Fully client-side The only thing that hasn’t made it into the website (yet) is the preset system, just like with the CLI, I’m adding that later as the web UI is already really easy to use. And now the less technical bit… It’s been an incredible journey, Determinist has been my dream project for a few years now, and it’s really amazing how I can share it with the world now that it’s done. Just to mention a few things I learned from this project: Testing Proper git usage Cryptography JavaScript These are things I wouldn’t really have learned without Determinist. Sure, I could have done so, but not this fast and effectively. I must thank those who supported the project, who liked the devlogs, and of course the reviewers who gave their opinion on the CLI. Because of your feedback, I made Determinist even easier to use now, and I will continue doing so. Version 3 of the algorithm is on its way, as well as the preset system for the web. Thank you everyone!", "repo": "https://github.com/szentpeterimate/Determinist", "demo": "https://szentpeterimate.github.io/determinist/"}, {"ship_num": 3, "ts": "2026-08-01T18:32:59Z", "hours": 16.0, "multiplier": 6.15, "payout": 91, "blessing": "neutral", "text": "Determinist is a password generator made for people who often forget or leave passwords behind, just like me. A few years ago I was on vacation when I wanted to log into a website. However, the password for it was left at home on my PC, which I didn’t bring with myself. Of course, I could’ve just reset the password, but that would’ve been worse since I’d still have mismatched passwords. Determinist solves that. It uses a deterministic algorithm to take your inputs, and generate you a password you can recover anytime, anywhere. The only thing you need to remember is your master passphrase, which site you want to log in, and a few additional settings. (presets coming soon!) I had a lot of fun with this project, and it taught me quite a bit about encryption, randomness, and most importantly how a real-world project functions. (I do have to mention my initial struggle with Typer though, I would not want to wish that on my worst enemy.) With that being said, I hope you’ll have your password problems solved, and that you’ll enjoy using Determinist! Have fun!", "repo": "https://github.com/szentpeterimate/Determinist", "demo": "https://szentpeterimate.github.io/determinist/"}]...
|
[{"post_id": 80257, "ts": "202 [{"post_id": 80257, "ts": "2026-10-16T23:42:22Z", "hours": 1.6311, "text": "Determinist // Devlog 16 // 2026.09.17. Version 1.0.0 is out, and this is my final devlog. Well, it finally arrived. Version 1.0.0. This is where active development stops. Of course, I will still fix issues and implement features suggested by you guys, but I probably won’t be adding any by myself. Stardance has been a great inspiration for me, not only to make this project, but to keep going and coming back to doing what I love: coding, and making things for others. I am very happy with how Determinist turned out, despite the difficulties and me being busy with school. But enough of this, what was changed since my last devlog? Changes Updated the documentation to show that a PWA is available to install Fixed various bugs and style inconsistencies Added a description of the generation process to the website Added a Copy to Clipboard toggle Added an Export as Preset button Removed Google Fonts connections What’s next? Nothing. I’d like to thank everyone who had a chance to try and use Determinist. Everyone who reviewed it and even you, the one reading this devlog :) Y’all have showed me that things I make can and are useful for others. See you in the next Hack Club program!"}, {"post_id": 79995, "ts": "2026-10-15T20:30:50Z", "hours": 5.9489, "text": "Determinist // Devlog 15 // 2026.09.15. A few design changes, and a brand new section on the website! Design I have fixed several design issues I noticed and did not like. Just to mention a few, there was unnecessary overflow on mobile devices, the spacing was off on several elements, and the width of the file input field was also too big. The Wall of Text™ It isn’t that big to be fair, it just explains how Determinist works, split into the 3 versions of the generation algorithm. I didn’t want to copy the page I had linked in the README, so I just wrote it down again and tried wording it better. Additionally, I tried to preserve the original one page, no scroll design by placing the About section below the actual app, so you have to scroll to see it. Other changes I refactored parts of the web code as the Generator element was getting really long, above 500 lines. I moved the algorithms out to a separate importable module, and I placed it along with the python-random module into a self-explanatory modules directory. I’ve also moved generror.jsx and presethandler.jsx into their own handlers/ directory, and the two specialized input fields into an inputs/ directory. Overall, this change makes the code way easier to read. The preset generator works now as well, just click the “Export as Preset” button below “Generate”, name the preset and the preset will be downloaded for you! You can also toggle on a “Copy to Clipboard” feature which allows you to automatically copy your generated password to your clipboard. Pretty neat! What’s next? Bug fixes Auto clear password popup"}, {"post_id": 77686, "ts": "2026-10-07T21:23:27Z", "hours": 2.1339, "text": "Determinist // Devlog 14 // 2026.09.06. Finally, I figured out how to make the site work offline… The process After working on the PWA for way longer than I expected, it finally works as intended! After I’ve figured out how to use next-pwa , I encountered an issue: the site was being cached and loaded correctly in the browser but not when installed as a PWA. I rewrote multiple parts of the code for it to work, yet it did not. In the end, it was the unsecured connections that were at fault. Discovering that, I have learned to use something new again: Localtunnel, which allows me to use a valid (not self-signed) HTTPS connection while testing. This uncovered even more issues with my code, the most obvious being the fact that fonts were not cached at all. This was because I was getting my fonts by connecting to fonts.google.com . This was a really easy thing to fix though, as Next.js already has a next/fonts/google library that had the fonts I used, and now everything works well. What’s next? Bug fixes Descriptions Preset Generator Auto Copy to Clipboard toggle"}, {"post_id": 73593, "ts": "2026-09-25T13:12:35Z", "hours": 4.1403, "text": "Determinist // Devlog 13 // 2026.09.25. Quite a few issues, but apparently it works… Progressive Web App Well, making Determinist a PWA certainly took way longer than expected. I thought it would be an hour at most, I mean Next.js literally has a guide that tells me what to do step-by-step. It was in fact NOT easy. I encountered a ton of problems. First off, I had to write a manifest which had the app name, icons etc., the obvious things. What was not obvious however was that I had multiple ways of doing that. I could write a JSON file, or write a JavaScript file that exports an object. I chose the latter as it was the version that the Next.js guide was using. Then came the icons. Oh, the icons. I made my icons and put it in the public/ directory with the correct names so that they match the manifest. Cool, works when I share it but there is no icon when I add it to my home screen on my iPhone. It said I’m missing a file called apple-touch-icon and apple-touch-icon-precomposed . Cool, I duplicated the icons and I renamed them. No 404s, but it still did not work. I look for a solution. For hours. I look at Next.js docs, YouTube, StackOverflow, Reddit, GitHub issues and there is nothing that would fix it. Finally, I found out I need to link the icon in the head of the website. Great, but still doesn’t work. Turns out, the problem was that I was following the Next.js guide which told me to use HTTPS to test the PWA, but iOS does not trust self-signed keys so it did not download the icon. After that, the generation broke when I was connecting to the site with the IP and not through localhost . I noticed that submitting (pressing the generate button) redirected me which should not have happened due to the line e.preventDefault() . Then I saw Next.js attempting to connect a websocket, and a bunch of 403 errors that weren’t there before. I spent quite a bit of time debugging that, and it was due to not adding my IP to allowedDevOrigins in the next.config.mjs file despite it working perfectly fine before. The Icon As you can see, the image I decided to include in my devlog is the icon for Determinist. I actually did not think of putting the D and the E together at first, but when I did, it reminded me of a lock (hope you can see it!) and I chose to keep it as it kind of fits. And I didn’t want a solid color background, so I decided I’ll just add the name repeating. It was fun making it, and it was also a very good way to practice using Illustrator. What’s next? Making the PWA work offline Bug fixes Descriptions Preset Generator Auto Copy to Clipboard toggle"}, {"post_id": 69184, "ts": "2026-09-16T15:26:59Z", "hours": 5.1517, "text": "Determinist // Devlog 12 // 2026.09.16. Well, it took me more than a week, but the v3 algorithm is on the website! CLI Update I have published version 0.5.2 of the Python CLI, which fixed a few issues I found (you can see them on the GitHub page!), and added actual functionality to the default presets. You can also report issues on the GitHub page, and it is highly appreciated. What changed? I added the v3 algorithm, after a bit of tinkering with the error handling. My problem was that the error handling wasn’t really dynamic. It couldn’t handle the invalid input errprs from v3, so I made a separate component. I also had to learn how to use HKDF on the client side, which was actually easier to do than I expected, although the actual usage of HKDF was a bit more complicated than it is in Python. What’s next? Bug fixes Descriptions Preset Generator PWA Implementation Auto Copy to Clipboard toggle"}, {"post_id": 63122, "ts": "2026-09-06T19:06:33Z", "hours": 8.5219, "text": "Determinist // Devlog 11 // 2026.09.06. After the first week of school, I have finished work on the CLI, and Determinist 0.5.1 is released! Changes Added presets create command Changed preset option to allow selection in one line Changed the presets list to show invalid files in the configuration directory Added password generation errors Fixed bugs: The password being allowed to have less characters than the sum of the minimum required characters is fixed The g prefix from the commit hash is now removed Various preset error handling issues have been fixed Presets are now not required to have all the versions inside them What’s taking so long? Is Determinist done? Firstly, I just started school, so I got very busy lately and that is why I haven’t been doing much work. As a compensation, v3 of the algorithm is now available on GitHub !! This is version 0.5.1, which is a pretty big jump if you look at the versions before. However, there is a reason for that: active development of Determinist is going to stop once version 1.0.0 comes out, with all the new features and fixes being ported to the website. This will come out in the next week or so. Determinist will still be updated here and there if I miss some features or people have suggestions and issues, but I will be mainly focusing on other projects. Latest development stuff The preset creation was actually pretty easy. I figured I’ll reuse the options from the generate command so I don’t have to write them manually again, and it worked amazing! I had to add to the PresetHandler to make it work, and that was really simple as well. I first thought of adding strings together, but then I realized I could just create dictionaries that my TOML library can convert to TOML and write them to the preset, so I didn’t have to do all the writing myself. The bug fixes weren’t interesting at all, honestly. I messed around with Determinist, found bugs and issues and I fixed them. My favorite one was debugging errors with the preset commands however. I found a bunch of things worth fixing, and in the end I made another helper function, as well as changing how check_file_type works. To do Port everything over to the website Add more text to the website explaining Determinist and how it works"}, {"post_id": 55761, "ts": "2026-08-27T19:06:48Z", "hours": 4.7333, "text": "Determinist // Devlog 10 // 2026.08.27 Updates here and there, and the v3 algorithm is finally complete! All of this and the content of the rest of the devlogs will only be released with the final 1.0.0 release of Determinist. Changes Added v3 algorithm for the Python CLI It features dynamic byte generation so that no matter what, you’ll never run out of characters! (Unless you’re VERY unlucky) You can now enter a third value called a “differentiator” that can be used to change the output further. This is especially useful if you have multiple accounts on the same site. This option can be left empty Your generated password is now guaranteed to have the correct amount of characters You can now set a minimum amount of characters of each type! Simply enter 0 to exclude the character type, and 1 or above to choose how many characters your password have minimum of that type. Made generate prompt only prompt users if the prompts are applicable. This means you will no longer be prompted for the settings of v1 when you use one of the other two algorithms. Fixed an issue where if the site_name option is omitted, the prompt will display Master pass instead of the correct prompt. The difficulties Well, of course the development of v3 came with some challenges. Firstly, I had to figure out how to actually generate enough bytes to pass rejection sampling (making sure no bytes are out of range when mapped onto the character set), as the previous implementation was that I multiplied the password length by 32. This worked, but wasn’t pretty and in very rare and unlucky cases, there weren’t enough bytes. I fixed this by using something called HKDF, which stands for HMAC-based Extract-and-Expand Key Derivation Function. I’d really prefer to use HKDF. Anyway, this function was really good for this task, as it can take the Argon2 output and create a long, pseudo-random key that can go through rejection sampling, and finally end up in the password. In case this generated key is not enough, HKDF will generate more of it, essentially giving us infinite bytes to then map to our characters. This was especially good because in the same loop I could implement… Minimum requirements This should have been easy, but it took me a day to think about how to do it. The challenge: take a dictionary ( {\"lowercase\": 2, \"uppercase\": 3, \"special\": 1, \"digits\": 0} ), and include at least as many characters of each type as their value in that dictionary says, and if it’s 0 then don’t include it at all. Fine, I said, but I didn’t actually know how to implement this. After a day of thinking, it finally clicked: I implement this in the rejection sampling loop, as that is where my characters get added. Introducing the _construct_pass function: it looks for the already added characters, determines the type of the current character, counts how many are missing, and if a character type is missing some characters or there aren’t any left, the character is added, and otherwise it is discarded. To do Add a preset generator command Fix a g prefix appearing in the version command output before the git commit hash Add the ability to choose a preset in one line instead of being prompted for it Fix the password being allowed to be shorter than the sum of minimum required characters (I found that one while writing this) Port everything over to the website Update the docs Add more text to the website explaining Determinist and how it works"}, {"post_id": 52485, "ts": "2026-08-22T16:59:34Z", "hours": 6.1439, "text": "Determinist // Devlog 9 // 2026.08.22 Long time no see y’all, sorry for the wait! I’m on vacation so I had less time to work on the project, but I did bring some amazing improvements. Announcement The website is officially up and works identically to the CLI, now with presets! Just load your TOML presets into the website, and they will be saved for you to reuse! Important note: they are saved locally, therefore you will not see them on different devices unless you import them there too. Changes Added the preset system to the website! You can now import and use presets, and you can easily remove them if needed. Adjusted the UI so that it fits most (if not all) screens. The smallest screen I tested was an iPhone SE. The Challenges There actually weren’t a lot of challenges for once. The biggest one was that I forgot to work on the project while on vacation, but that’s not horrible. And then came React, JavaScript and everything else… firstly, the preset loading was actually really easy, I did however fight with React about passing values from a child component to the parent. And then it turned out I forgot to make it actually pleasant to use, as I had to select the preset file every time I wanted to load it. Now you can save, select and load your presets on the website. However, React had other plans. I finally learned how React’s useEffect hook works, and using it is pretty easy now that I get what I’m doing. Along with this, I also properly learned about using functions inside useState for lazy initialization which I needed for localStorage . Oh, localStorage was a pleasure to learn and use… Well, the operations with it are actually fairly easy, it’s like an object, and my first thought of initializing a state with it was to use useState({ ...localStorage }) , which did work, but it introduced something else: a build error after I merged the changes into main . Turns out, localStorage is undefined when GitHub Actions wants to build my website, therefore it gave me an error saying so. What I had to do is check if the window object is equal to 'undefined' , and if not, then spread localStorage and initialize the state. Finally, the website managed to build properly, but when I tried to use it on my phone, the output of the generator was outside my screen… so I had to go back and change how the UI looks after I’ve already merged everything into main . Amazing. Well, the good new is that it works, and next up is the v3 algorithm, as well as QoL changes, bug fixes, and more in both the CLI and web versions."}, {"post_id": 46026, "ts": "2026-08-12T22:45:54Z", "hours": 6.4178, "text": "Determinist // Devlog 8 // 2026.08.13 The UI is mostly complete, and I will be releasing the website tomorrow! Changes Significantly improved the entire user interface Version and special character mode (V1) now use <select> instead of the regular <input> , so you don’t have to type them out The difficulties There really wasn’t anything too hard about making the UI. You might ask, “why did you spend over 6 hours on it then?”. I have an answer for you. I tried using Figma for designing the UI but it was just too boring for me, so I decided to start coding it and figure it out as I go. I’m pretty satisfied with the result, but with everything, it can always be improved. The second problem was that while I was coding, I was also listening to music and I spent a bunch of time skipping songs because I didn’t feel like listening to them. This took my attention along with singing a bit too much, so my progress was slowed… The last thing to slow me down was my general inexperience with React and JS, although I got over that quick because the frontend is way easier to work on. Planned Adding the preset system Building the site & uploading to GitHub Pages"}, {"post_id": 45454, "ts": "2026-08-11T22:28:05Z", "hours": 4.7858, "text": "Determinist // Devlog 7 // 2026.08.12 Well, it’s official. I had to use AI for the first time :( Why? JavaScript does not have the same random implementation as Python does. Python uses MT19937 while JS uses Xorshift128+. This means we can’t use JavaScript’s random number generator, not to mention that we can’t even use it to shuffle arrays, as it lacks the method. And since I am relatively new to JS, I had two options: get a 15 year old module work that does exactly what I need it to, or make it with AI. I tried getting that package to work. I really did. Unfortunately, the algorithm it uses seems to be outdated, as the results differed in tests. That is why I used AI. I really didn’t want to, but I had to. Well, let’s look at the positives, at least! Changes The V2 algorithm is implemented and works 1:1 with the Python version! I managed to make another input component that uses checkboxes so you can select what kind of characters you’d like. It was challenging but it works! Next Up Tomorrow I’ll work on the UI design Adding the preset system Building the site Uploading to GitHub Pages"}, {"post_id": 44862, "ts": "2026-08-10T21:58:48Z", "hours": 2.4364, "text": "Determinist // Devlog 6 // 2026.08.10 Pretty big milestone: V1 is finally working on the website! Additions Added the V1 generation algorithm Added the customization options to the interface The Generator V1 is complete and works perfectly! I had to figure out a way to enter objects, and it was quite difficult. See, JavaScript doesn’t really have a dictionary type like Python does, so I had to use an object, which is similar enough and I can look for keys with in , just like in Python. The tricky part was creating such an object from the user’s input. I chose the most user friendly way I could think of, and made separate inputs for the key and value, and you can dynamically add more with an “Add Character Pair” button. I really wish there was an easier way and maybe there is a template out there, but I didn’t consider it until writing this very sentence. Anyways, tomorrow I’ll spend more time refining V1, the inputs and I’ll start working on V2. To Do Refining the generator and inputs Creating V2 Desgining the UI Adding the preset system Generating the static site"}, {"post_id": 44238, "ts": "2026-08-09T21:17:27Z", "hours": 2.4381, "text": "Determinist // Devlog 5 // 2026.08.09 I’ve started working on the website finally! The plan I’ll use GitHub Pages to host Determinist until I can get my own domain and personal site up, after which I’ll transfer it there. The plan is to make the generator client sided by using WebAssembly to access Argon2 in the browser without requiring a backend. I wanna do this so that no information leaves the user’s computer, which is a key part of keeping Determinist privacy focused. I chose to use Next.js because I used it before, and it has Static Site Generation which is essential if I want to put the site on GitHub Pages. What I achieved in 2 and a half hours I made Argon2 work Yes, that’s about it. I spent most of my time debugging errors and learning basics as I’ve only used JavaScript for making components, not to make more complex algorithms like Determinist’s is. I am a fast learner though, so I expect to be able to recreate Determinist V1 relatively quickly. Starting with WASM on my first serious web project where I’m still learning JS maybe wasn’t the most amazing idea, but hey, I like challenges and learning by doing. What’s next? Continuing work on V1 Porting V2 to JavaScript Desgining the UI Adding the preset system Generating the static site and fixing errors after it’s done And to the reviewers and people who liked the Determinist CLI… Thank you! Developing Determinist has been lots of fun and I’ve learned a lot of valuable things. Your support and feedback is greatly appreciated, it motivates me to work every single day. It’s a project I’m really passionate about, as I wanted to create this for years. Thank you all for your support, and I hope you’ll enjoy using Determinist whether it’s in your terminal or the web. See you in the next devlog!"}, {"post_id": 42594, "ts": "2026-08-07T12:38:38Z", "hours": 3.0314, "text": "Determinist // Devlog 4 // 2026.08.07 Developer experience and cleanups What changed My code now has comments! Although it is quite straightforward to understand, I did include a few here and there. A brand new version command shows what version Determinist is on, what commit it was built from, and the Python version it uses. I added more custom error handling to commands Something funny happened… I was testing the generation of the default preset, and I forgot to press tab when deleting the Determinist config directory. I only realized that when Hyprland started screaming at me about missing configurations. I thought “that’s weird”, so I checked the command I ran. rm -rf ~/.config/ . I deleted my entire configuration directory… Luckily, I had backups, but at least I’ve learned that I should double check my commands. Another Typer issue To absolutely no one’s surprise, Typer didn’t work as intended, once again. It kept reporting the wrong error when running presets subcommands. Turns out it was the callback I wrote to list the presets. It actually ran the check every time a presets command was run, giving the wrong error when a non TOML file was detected in the presets directory. It was a quick fix, but now I’m quite comfortable with Typer."}, {"post_id": 41993, "ts": "2026-08-06T15:11:38Z", "hours": 10.2806, "text": "Determinist // Devlog 3 // 2026.08.06. Determinist v0.2.2 is here and available to install, but I certainly did not thing this would take another 10 hours… What changed I have made a preset system that can load settings so you don’t have to type them out manually. You can only use this with the regular generate command. The presets command lists out all installed presets Running presets save with a path added at the end will save the selected preset to your config folder Adding delete after presets with the name of a preset will delete that permanently Using presets default and adding the preset name will set that preset as default Running --help is actually helpful now! Another change is I made prompt a subcommand of generate . I ran into an issue while implementing this… The issue You see, Typer cannot tell the difference between a positional argument and a subcommand, meaning that it took prompt as the master_pass argument for generate . This is obviously not at all what I intended, so I needed a way to figure out how to solve this. I didn’t want to make prompt an option, since that would’ve complicated things a lot more than they needed to be. Therefore, I changed master_pass and site_name to required options, which means they need to be typed out manually. Fear not however, because if you forget to do that, Determinist now prompts you for it! Another problem was with types, again. Typer apparently doesn’t like Union types, which I would’ve used for the preset option. What I wanted to do is make the user be able to type out the name of the preset, select one if none is entered in the command, or do everything manually. Problem: that’s 3 types: None , str and UNSET , which is basically a different spelling of None , it jut signals that the presets option was passed without an argument, as a flag. But Typer decided to ruin my day and only let me use two types, so I removed it all and made --preset a boolean, therefore a flag. That’s about it for now, if you like the idea of having an easy way of remembering your passwords, check out Determinist!"}, {"post_id": 39036, "ts": "2026-08-01T18:20:18Z", "hours": 11.0289, "text": "Determinist // Devlog 2 // 2026.08.01 Welcome back to the second devlog of Determinist! It’s been a while, so let’s recap what happened… Release!! The first official release of Determinist is here! You can check out the GitHub page to learn more. Algorithm V2 Quite a few changes here. I changed the algorithm so that it uses the bytes that Argon2 returns The bytes are now mapped to characters in a shuffled charset Insert/Replace modes have been removed because special characters are already in the charset You can now construct your own charset Typer I made my CLI with Typer, which was a challenge to say the least. This is my first time using it, and looking back, it wasn’t THAT bad. All I had to do is refactor generator.py completely, and make my types compatible (which I worked REALLY HARD on for V1). Typer doesn’t allow me to use things like lists and dictionaries, both of which are essential, but I managed to change everything in a way that’s mostly straightforward. I can split strings into a list and use JSON for dictionaries. Refactoring Challenges This is pretty funny. I wrote a series of tests for version 2 of the algorithm before I started implementing Typer. After than however, all tests passed except one. I was supposed to use assertUnequal() , but used the opposite instead, and that was I caught an error in my code that would’ve went unnoticed. The tests saved me another time, when I noticed that changing the order in which the charset character types are written changes the output, which is not what I need because it’s essentially the same input, and it should be more like a toggle. The fix was making the charset canonical. The algorithm goes through the list, writes the correct characters into a string, and uses that in the salt instead of the list of the charset. Other The Generator class was removed, as it served no purpose."}, {"post_id": 33987, "ts": "2026-07-24T11:33:26Z", "hours": 4.8617, "text": "Determinist // Devlog 1 // 2026.07.24. Hey everyone! This is the first devlog of Determinist, a deterministic password generator. After a few hours of messing around, I’ve managed to write the first working version of the generator algorithm. (Flowchart attached) You can specify the parameters such as password length, special character frequency, etc. as well as the master passphrase and the salt (site name in this case), and the script will generate a pseudorandom password for you. I’ve hit quite a few roadblock along the way, such as the salt being too small. This is a feature of Argon2, so for now you can only use custom salts that are bigger than 8 bytes. I’ve also included a few unit tests as proof of concept. The generator algorithm will be improved in later versions, and a CLI tool will be available."}]...
|
Title: Determinist by @Mate1166 | Stardance
Devlo Title: Determinist by @Mate1166 | Stardance
Devlogs:
Determinist // Devlog 1 // 2026.07.24. Hey everyone! This is the first devlog of Determinist, a deterministic password generator. After a few hours of messing around, I’ve managed to write the first working version of the generator algorithm. (Flowchart attached) You can specify the parameters such as password length, special character frequency, etc. as well as the master passphrase and the salt (site name in this case), and the script will generate a pseudorandom password for you. I’ve hit quite a few roadblock along the way, such as the salt being too small. This is a feature of Argon2, so for now you can only use custom salts that are bigger than 8 bytes. I’ve also included a few unit tests as proof of concept. The generator algorithm will be improved in later versions, and a CLI tool will be available.
Determinist // Devlog 2 // 2026.08.01 Welcome back to the second devlog of Determinist! It’s been a while, so let’s recap what happened… Release!! The first official release of Determinist is here! You can check out the GitHub page to learn more. Algorithm V2 Quite a few changes here. I changed the algorithm so that it uses the bytes that Argon2 returns The bytes are now mapped to characters in a shuffled charset Insert/Replace modes have been removed because special characters are already in the charset You can now construct your own charset Typer I made my CLI with Typer, which was a challenge to say the least. This is my first time using it, and looking back, it wasn’t THAT bad. All I had to do is refactor generator.py completely, and make my types compatible (which I worked REALLY HARD on for V1). Typer doesn’t allow me to use things like lists and dictionaries, both of which are essential, but I managed to change everything in a way that’s mostly straightforward. I can split strings into a list and use JSON for dictionaries. Refactoring Challenges This is pretty funny. I wrote a series of tests for version 2 of the algorithm before I started implementing Typer. After than however, all tests passed except one. I was supposed to use assertUnequal() , but used the opposite instead, and that was I caught an error in my code that would’ve went unnoticed. The tests saved me another time, when I noticed that changing the order in which the charset character types are written changes the output, which is not what I need because it’s essentially the same input, and it should be more like a toggle. The fix was making the charset canonical. The algorithm goes through the list, writes the correct characters into a string, and uses that in the salt instead of the list of the charset. Other The Generator class was removed, as it served no purpose.
Determinist // Devlog 3 // 2026.08.06. Determinist v0.2.2 is here and available to install, but I certainly did not thing this would take another 10 hours… What changed I have made a preset system that can load settings so you don’t have to type them out manually. You can only use this with the regular generate command. The presets command lists out all installed presets Running presets save with a path added at the end will save the selected preset to your config folder Adding delete after presets with the name of a preset will delete that permanently Using presets default and adding the preset name will set that preset as default Running --help is actually helpful now! Another change is I made prompt a subcommand of generate . I ran into an issue while implementing this… The issue You see, Typer cannot tell the difference between a positional argument and a subcommand, meaning that it took prompt as the master_pass argument for generate . This is obviously not at all what I intended, so I needed a way to figure out how to solve this. I didn’t want to make prompt an option, since that would’ve complicated things a lot more than they needed to be. Therefore, I changed master_pass and site_name to required options, which means they need to be typed out manually. Fear not however, because if you forget to do that, Determinist now prompts you for it! Another problem was with types, again. Typer apparently doesn’t like Union types, which I would’ve used for the preset option. What I wanted to do is make the user be able to type out the name of the preset, select one if none is entered in the command, or do everything manually. Problem: that’s 3 types: None , str and UNSET , which is basically a different spelling of None , it jut signals that the presets option was passed without an argument, as a flag. But Typer decided to ruin my day and only let me use two types, so I removed it all and made --preset a boolean, therefore a flag. That’s about it for now, if you like the idea of having an easy way of remembering your passwords, check out Determinist!
Determinist // Devlog 4 // 2026.08.07 Developer experience and cleanups What changed My code now has comments! Although it is quite straightforward to understand, I did include a few here and there. A brand new version command shows what version Determinist is on, what commit it was built from, and the Python version it uses. I added more custom error handling to commands Something funny happened… I was testing the generation of the default preset, and I forgot to press tab when deleting the Determinist config directory. I only realized that when Hyprland started screaming at me about missing configurations. I thought “that’s weird”, so I checked the command I ran. rm -rf ~/.config/ . I deleted my entire configuration directory… Luckily, I had backups, but at least I’ve learned that I should double check my commands. Another Typer issue To absolutely no one’s surprise, Typer didn’t work as intended, once again. It kept reporting the wrong error when running presets subcommands. Turns out it was the callback I wrote to list the presets. It actually ran the check every time a presets command was run, giving the wrong error when a non TOML file was detected in the presets directory. It was a quick fix, but now I’m quite comfortable with Typer.
Determinist // Devlog 5 // 2026.08.09 I’ve started working on the website finally! The plan I’ll use GitHub Pages to host Determinist until I can get my own domain and personal site up, after which I’ll transfer it there. The plan is to make the generator client sided by using WebAssembly to access Argon2 in the browser without requiring a backend. I wanna do this so that no information leaves the user’s computer, which is a key part of keeping Determinist privacy focused. I chose to use Next.js because I used it before, and it has Static Site Generation which is essential if I want to put the site on GitHub Pages. What I achieved in 2 and a half hours I made Argon2 work Yes, that’s about it. I spent most of my time debugging errors and learning basics as I’ve only used JavaScript for making components, not to make more complex algorithms like Determinist’s is. I am a fast learner though, so I expect to be able to recreate Determinist V1 relatively quickly. Starting with WASM on my first serious web project where I’m still learning JS maybe wasn’t the most amazing idea, but hey, I like challenges and learning by doing. What’s next? Continuing work on V1 Porting V2 to JavaScript Desgining the UI Adding the preset system Generating the static site and fixing errors after it’s done And to the reviewers and people who liked the Determinist CLI… Thank you! Developing Determinist has been lots of fun and I’ve learned a lot of valuable things. Your support and feedback is greatly appreciated, it motivates me to work every single day. It’s a project I’m really passionate about, as I wanted to create this for years. Thank you all for your support, and I hope you’ll enjoy using Determinist whether it’s in your terminal or the web. See you in the next devlog!
Determinist // Devlog 6 // 2026.08.10 Pretty big milestone: V1 is finally working on the website! Additions Added the V1 generation algorithm Added the customization options to the interface The Generator V1 is complete and works perfectly! I had to figure out a way to enter objects, and it was quite difficult. See, JavaScript doesn’t really have a dictionary type like Python does, so I had to use an object, which is similar enough and I can look for keys with in , just like in Python. The tricky part was creating such an object from the user’s input. I chose the most user friendly way I could think of, and made separate inputs for the key and value, and you can dynamically add more with an “Add Character Pair” button. I really wish there was an easier way and maybe there is a template out there, but I didn’t consider it until writing this very sentence. Anyways, tomorrow I’ll spend more time refining V1, the inputs and I’ll start working on V2. To Do Refining the generator and inputs Creating V2 Desgining the UI Adding the preset system Generating the static site
Determinist // Devlog 7 // 2026.08.12 Well, it’s official. I had to use AI for the first time :( Why? JavaScript does not have the same random implementation as Python does. Python uses MT19937 while JS uses Xorshift128+. This means we can’t use JavaScript’s random number generator, not to mention that we can’t even use it to shuffle arrays, as it lacks the method. And since I am relatively new to JS, I had two options: get a 15 year old module work that does exactly what I need it to, or make it with AI. I tried getting that package to work. I really did. Unfortunately, the algorithm it uses seems to be outdated, as the results differed in tests. That is why I used AI. I really didn’t want to, but I had to. Well, let’s look at the positives, at least! Changes The V2 algorithm is implemented and works 1:1 with the Python version! I managed to make another input component that uses checkboxes so you can select what kind of characters you’d like. It was challenging but it works! Next Up Tomorrow I’ll work on the UI design Adding the preset system Building the site Uploading to GitHub Pages
Determinist // Devlog 8 // 2026.08.13 The UI is mostly complete, and I will be releasing the website tomorrow! Changes Significantly improved the entire user interface Version and special character mode (V1) now use <select> instead of the regular <input> , so you don’t have to type them out The difficulties There really wasn’t anything too hard about making the UI. You might ask, “why did you spend over 6 hours on it then?”. I have an answer for you. I tried using Figma for designing the UI but it was just too boring for me, so I decided to start coding it and figure it out as I go. I’m pretty satisfied with the result, but with everything, it can always be improved. The second problem was that while I was coding, I was also listening to music and I spent a bunch of time skipping songs because I didn’t feel like listening to them. This took my attention along with singing a bit too much, so my progress was slowed… The last thing to slow me down was my general inexperience with React and JS, although I got over that quick because the frontend is way easier to work on. Planned Adding the preset system Building the site & uploading to GitHub Pages
Determinist // Devlog 9 // 2026.08.22 Long time no see y’all, sorry for the wait! I’m on vacation so I had less time to work on the project, but I did bring some amazing improvements. Announcement The website is officially up and works identically to the CLI, now with presets! Just load your TOML presets into the website, and they will be saved for you to reuse! Important note: they are saved locally, therefore you will not see them on different devices unless you import them there too. Changes Added the preset system to the website! You can now import and use presets, and you can easily remove them if needed. Adjusted the UI so that it fits most (if not all) screens. The smallest screen I tested was an iPhone SE. The Challenges There actually weren’t a lot of challenges for once. The biggest one was that I forgot to work on the project while on vacation, but that’s not horrible. And then came React, JavaScript and everything else… firstly, the preset loading was actually really easy, I did however fight with React about passing values from a child component to the parent. And then it turned out I forgot to make it actually pleasant to use, as I had to select the preset file every time I wanted to load it. Now you can save, select and load your presets on the website. However, React had other plans. I finally learned how React’s useEffect hook works, and using it is pretty easy now that I get what I’m doing. Along with this, I also properly learned about using functions inside useState for lazy initialization which I needed for localStorage . Oh, localStorage was a pleasure to learn and use… Well, the operations with it are actually fairly easy, it’s like an object, and my first thought of initializing a state with it was to use useState({ ...localStorage }) , which did work, but it introduced something else: a build error after I merged the changes into main . Turns out, localStorage is undefined when GitHub Actions wants to build my website, therefore it gave me an error saying so. What I had to do is check if the window object is equal to 'undefined' , and if not, then spread localStorage and initialize the state. Finally, the website managed to build properly, but when I tried to use it on my phone, the output of the generator was outside my screen… so I had to go back and change how the UI looks after I’ve already merged everything into main . Amazing. Well, the good new is that it works, and next up is the v3 algorithm, as well as QoL changes, bug fixes, and more in both the CLI and web versions.
Determinist // Devlog 10 // 2026.08.27 Updates here and there, and the v3 algorithm is finally complete! All of this and the content of the rest of the devlogs will only be released with the final 1.0.0 release of Determinist. Changes Added v3 algorithm for the Python CLI It features dynamic byte generation so that no matter what, you’ll never run out of characters! (Unless you’re VERY unlucky) You can now enter a third value called a “differentiator” that can be used to change the output further. This is especially useful if you have multiple accounts on the same site. This option can be left empty Your generated password is now guaranteed to have the correct amount of characters You can now set a minimum amount of characters of each type! Simply enter 0 to exclude the character type, and 1 or above to choose how many characters your password have minimum of that type. Made generate prompt only prompt users if the prompts are applicable. This means you will no longer be prompted for the settings of v1 when you use one of the other two algorithms. Fixed an issue where if the site_name option is omitted, the prompt will display Master pass instead of the correct prompt. The difficulties Well, of course the development of v3 came with some challenges. Firstly, I had to figure out how to actually generate enough bytes to pass rejection sampling (making sure no bytes are out of range when mapped onto the character set), as the previous implementation was that I multiplied the password length by 32. This worked, but wasn’t pretty and in very rare and unlucky cases, there weren’t enough bytes. I fixed this by using something called HKDF, which stands for HMAC-based Extract-and-Expand Key Derivation Function. I’d really prefer to use HKDF. Anyway, this function was really good for this task, as it can take the Argon2 output and create a long, pseudo-random key that can go through rejection sampling, and finally end up in the password. In case this generated key is not enough, HKDF will generate more of it, essentially giving us infinite bytes to then map to our characters. This was especially good because in the same loop I could implement… Minimum requirements This should have been easy, but it took me a day to think about how to do it. The challenge: take a dictionary ( {"lowercase": 2, "uppercase": 3, "special": 1, "digits": 0} ), and include at least as many characters of each type as their value in that dictionary says, and if it’s 0 then don’t include it at all. Fine, I said, but I didn’t actually know how to implement this. After a day of thinking, it finally clicked: I implement this in the rejection sampling loop, as that is where my characters get added. Introducing the _construct_pass function: it looks for the already added characters, determines the type of the current character, counts how many are missing, and if a character type is missing some characters or there aren’t any left, the character is added, and otherwise it is discarded. To do Add a preset generator command Fix a g prefix appearing in the version command output before the git commit hash Add the ability to choose a preset in one line instead of being prompted for it Fix the password being allowed to be shorter than the sum of minimum required characters (I found that one while writing this) Port everything over to the website Update the docs Add more text to the website explaining Determinist and how it works
Determinist // Devlog 11 // 2026.09.06. After the first week of school, I have finished work on the CLI, and Determinist 0.5.1 is released! Changes Added presets create command Changed preset option to allow selection in one line Changed the presets list to show invalid files in the configuration directory Added password generation errors Fixed bugs: The password being allowed to have less characters than the sum of the minimum required characters is fixed The g prefix from the commit hash is now removed Various preset error handling issues have been fixed Presets are now not required to have all the versions inside them What’s taking so long? Is Determinist done? Firstly, I just started school, so I got very busy lately and that is why I haven’t been doing much work. As a compensation, v3 of the algorithm is now available on GitHub !! This is version 0.5.1, which is a pretty big jump if you look at the versions before. However, there is a reason for that: active development of Determinist is going to stop once version 1.0.0 comes out, with all the new features and fixes being ported to the website. This will come out in the next week or so. Determinist will still be updated here and there if I miss some features or people have suggestions and issues, but I will be mainly focusing on other projects. Latest development stuff The preset creation was actually pretty easy. I figured I’ll reuse the options from the generate command so I don’t have to write them manually again, and it worked amazing! I had to add to the PresetHandler to make it work, and that was really simple as well. I first thought of adding strings together, but then I realized I could just create dictionaries that my TOML library can convert to TOML and write them to the preset, so I didn’t have to do all the writing myself. The bug fixes weren’t interesting at all, honestly. I messed around with Determinist, found bugs and issues and I fixed them. My favorite one was debugging errors with the preset commands however. I found a bunch of things worth fixing, and in the end I made another helper function, as well as changing how check_file_type works. To do Port everything over to the website Add more text to the website explaining Determinist and how it works
Determinist // Devlog 12 // 2026.09.16. Well, it took me more than a week, but the v3 algorithm is on the website! CLI Update I have published version 0.5.2 of the Python CLI, which fixed a few issues I found (you can see them on the GitHub page!), and added actual functionality to the default presets. You can also report issues on the GitHub page, and it is highly appreciated. What changed? I added the v3 algorithm, after a bit of tinkering with the error handling. My problem was that the error handling wasn’t really dynamic. It couldn’t handle the invalid input errprs from v3, so I made a separate component. I also had to learn how to use HKDF on the client side, which was actually easier to do than I expected, although the actual usage of HKDF was a bit more complicated than it is in Python. What’s next? Bug fixes Descriptions Preset Generator PWA Implementation Auto Copy to Clipboard toggle
Determinist // Devlog 13 // 2026.09.25. Quite a few issues, but apparently it works… Progressive Web App Well, making Determinist a PWA certainly took way longer than expected. I thought it would be an hour at most, I mean Next.js literally has a guide that tells me what to do step-by-step. It was in fact NOT easy. I encountered a ton of problems. First off, I had to write a manifest which had the app name, icons etc., the obvious things. What was not obvious however was that I had multiple ways of doing that. I could write a JSON file, or write a JavaScript file that exports an object. I chose the latter as it was the version that the Next.js guide was using. Then came the icons. Oh, the icons. I made my icons and put it in the public/ directory with the correct names so that they match the manifest. Cool, works when I share it but there is no icon when I add it to my home screen on my iPhone. It said I’m missing a file called apple-touch-icon and apple-touch-icon-precomposed . Cool, I duplicated the icons and I renamed them. No 404s, but it still did not work. I look for a solution. For hours. I look at Next.js docs, YouTube, StackOverflow, Reddit, GitHub issues and there is nothing that would fix it. Finally, I found out I need to link the icon in the head of the website. Great, but still doesn’t work. Turns out, the problem was that I was following the Next.js guide which told me to use HTTPS to test the PWA, but iOS does not trust self-signed keys so it did not download the icon. After that, the generation broke when I was connecting to the site with the IP and not through localhost . I noticed that submitting (pressing the generate button) redirected me which should not have happened due to the line e.preventDefault() . Then I saw Next.js attempting to connect a websocket, and a bunch of 403 errors that weren’t there before. I spent quite a bit of time debugging that, and it was due to not adding my IP to allowedDevOrigins in the next.config.mjs file despite it working perfectly fine before. The Icon As you can see, the image I decided to include in my devlog is the icon for Determinist. I actually did not think of putting the D and the E together at first, but when I did, it reminded me of a lock (hope you can see it!) and I chose to keep it as it kind of fits. And I didn’t want a solid color background, so I decided I’ll just add the name repeating. It was fun making it, and it was also a very good way to practice using Illustrator. What’s next? Making the PWA work offline Bug fixes Descriptions Preset Generator Auto Copy to Clipboard toggle
Determinist // Devlog 14 // 2026.09.06. Finally, I figured out how to make the site work offline… The process After working on the PWA for way longer than I expected, it finally works as intended! After I’ve figured out how to use next-pwa , I encountered an issue: the site was being cached and loaded correctly in the browser but not when installed as a PWA. I rewrote multiple parts of the code for it to work, yet it did not. In the end, it was the unsecured connections that were at fault. Discovering that, I have learned to use something new again: Localtunnel, which allows me to use a valid (not self-signed) HTTPS connection while testing. This uncovered even more issues with my code, the most obvious being the fact that fonts were not cached at all. This was because I was getting my fonts by connecting to fonts.google.com . This was a really easy thing to fix though, as Next.js already has a next/fonts/google library that had the fonts I used, and now everything works well. What’s next? Bug fixes Descriptions Preset Generator Auto Copy to Clipboard toggle
Determinist // Devlog 15 // 2026.09.15. A few design changes, and a brand new section on the website! Design I have fixed several design issues I noticed and did not like. Just to mention a few, there was unnecessary overflow on mobile devices, the spacing was off on several elements, and the width of the file input field was also too big. The Wall of Text™ It isn’t that big to be fair, it just explains how Determinist works, split into the 3 versions of the generation algorithm. I didn’t want to copy the page I had linked in the README, so I just wrote it down again and tried wording it better. Additionally, I tried to preserve the original one page, no scroll design by placing the About section below the actual app, so you have to scroll to see it. Other changes I refactored parts of the web code as the Generator element was getting really long, above 500 lines. I moved the algorithms out to a separate importable module, and I placed it along with the python-random module into a self-explanatory modules directory. I’ve also moved generror.jsx and presethandler.jsx into their own handlers/ directory, and the two specialized input fields into an inputs/ directory. Overall, this change makes the code way easier to read. The preset generator works now as well, just click the “Export as Preset” button below “Generate”, name the preset and the preset will be downloaded for you! You can also toggle on a “Copy to Clipboard” feature which allows you to automatically copy your generated password to your clipboard. Pretty neat! What’s next? Bug fixes Auto clear password popup
Determinist // Devlog 16 // 2026.09.17. Version 1.0.0 is out, and this is my final devlog. Well, it finally arrived. Version 1.0.0. This is where active development stops. Of course, I will still fix issues and implement features suggested by you guys, but I probably won’t be adding any by myself. Stardance has been a great inspiration for me, not only to make this project, but to keep going and coming back to doing what I love: coding, and making things for others. I am very happy with how Determinist turned out, despite the difficulties and me being busy with school. But enough of this, what was changed since my last devlog? Changes Updated the documentation to show that a PWA is available to install Fixed various bugs and style inconsistencies Added a description of the generation process to the website Added a Copy to Clipboard toggle Added an Export as Preset button Removed Google Fonts connections What’s next? Nothing. I’d like to thank everyone who had a chance to try and use Determinist. Everyone who reviewed it and even you, the one reading this devlog :) Y’all have showed me that things I make can and are useful for others. See you in the next Hack Club program!
Ships:
Determinist is a password generator made for people who often forget or leave passwords behind, just like me. A few years ago I was on vacation when I wanted to log into a website. However, the password for it was left at home on my PC, which I didn’t bring with myself. Of course, I could’ve just reset the password, but that would’ve been worse since I’d still have mismatched passwords. Determinist solves that. It uses a deterministic algorithm to take your inputs, and generate you a password you can recover anytime, anywhere. The only thing you need to remember is your master passphrase, which site you want to log in, and a few additional settings. (presets coming soon!) I had a lot of fun with this project, and it taught me quite a bit about encryption, randomness, and most importantly how a real-world project functions. (I do have to mention my initial struggle with Typer though, I would not want to wish that on my worst enemy.) With that being said, I hope you’ll have your password problems solved, and that you’ll enjoy using Determinist! Have fun!
Well, it’s official: Determinist now has a website! Features: Easy to use interface Straightforward settings 1:1 compatibility with the CLI Fully client-side The only thing that hasn’t made it into the website (yet) is the preset system, just like with the CLI, I’m adding that later as the web UI is already really easy to use. And now the less technical bit… It’s been an incredible journey, Determinist has been my dream project for a few years now, and it’s really amazing how I can share it with the world now that it’s done. Just to mention a few things I learned from this project: Testing Proper git usage Cryptography JavaScript These are things I wouldn’t really have learned without Determinist. Sure, I could have done so, but not this fast and effectively. I must thank those who supported the project, who liked the devlogs, and of course the reviewers who gave their opinion on the CLI. Because of your feedback, I made Determinist even easier to use now, and I will continue doing so. Version 3 of the algorithm is on its way, as well as the preset system for the web. Thank you everyone!
Determinist Determinist is a deterministic password generator that lets you recover forgotten passwords easily, given that you remember a master password, and a few things about your lost password. Features CLI and Web interface, featuring a PWA that also works offline Three algorithm versions to choose from A preset system Generated passwords are identical on both the website and the CLI Fully local generation Presets The presets use the TOML format, which is very user-friendly and easy to edit. The presets have multiple categories inside them like ‘general’ (for the algorithm version and password length), ‘preset’ (the preset name, description and whether it is set as defaul), and version specific ones like ‘v3’, which has the settings for the v3 algorithm. If you’re unsure how to edit preset files, you can also just export your settings from the website, and use it across all versions of Determinist! To Reviewers Please, test both the CLI and the website (if possible), and provide feedback on User Experience if you encountered any issues, include that in the review. You can even suggest features, and I may implement them :) Thank you!...
|
1792304412.9257355
|
1793168412.9257355
|
|
21464
|
OpenCV Gesture Based Online Arcade by @anushkaa | OpenCV Gesture Based Online Arcade by @anushkaa | Stardance...
|
anushkaa
|
1
|
31.0
|
502
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-21T19:22:32Z", "hours": 31.0, "multiplier": 16.45, "payout": 502, "blessing": "neutral", "text": "Built a hand gesture controlled arcade where you play games using just your webcam! Three games: Hand Pong, Space Shooter and Snake, each using a different gesture. Started in Python with OpenCV and MediaPipe, rebuilt in JavaScript so it runs in the browser with no downloads needed. Not the smoothest or best arcade ever but definitely built with a lot of struggle and I’m still working on making it better everyday! Learned both languages from scratch during this project. The hardest part was getting MediaPipe working in the browser, went through four different CDN links before finding one that worked!", "repo": "https://github.com/anushkabasu/gesture-arcade-web", "demo": "https://anushkabasu.github.io/gesture-arcade-web/"}]...
|
[{"post_id": 32453, "ts": "202 [{"post_id": 32453, "ts": "2026-07-21T17:30:33Z", "hours": 0.5886, "text": "Devlog 03 — Fixing, Tuning and Ready to Ship What I Fixed This Session Spent this session purely on debugging and tuning. No new features — just making everything feel right. Snake controls — went through three different control schemes. Tried fist tilt, tried swipe gestures, finally landed on index finger pointing. The snake steers toward wherever your finger is pointing relative to the snake’s head. Tiny finger movements don’t accidentally change direction: const dist = Math . sqrt ( dx * dx + dy * dy ) if ( dist > CELL * 3 ) { } Space Shooter — enemies were spawning too slowly and too late. Fixed spawn timer to start at 999 so enemies appear immediately, and doubled the spawn rate. Waves feel much more intense now. Instructions — Added the instructions page correctly so anyone can click [I] to understand required gestures. Mirror flipping — cursor and menu hover were using inconsistent coordinate systems. Unified everything so palmX is flipped once at the source and all games use the same value. What the Project Is Now A fully browser-based hand gesture arcade with three games: Hand Pong — palm height controls your paddle Space Shooter — palm position aims, pinch fires Snake — point your index finger to steer No downloads. No installs. Just a webcam and a browser. Shipping Pushing to GitHub Pages today. Anyone with a webcam can play instantly at the live URL. Finally ready to ship!"}, {"post_id": 32340, "ts": "2026-07-21T13:26:49Z", "hours": 10.1625, "text": "Devlog 02 - Rebuilding Gesture Arcade for the Web The Big Decision Scrapped the entire Python version and rebuilt from scratch in JavaScript. Python with pygame cannot run in a browser, and without a live demo URL Stardance reviewers can’t try the project. The whole point is gesture control — and that needs a webcam running locally. Only solution was JavaScript. Problem? I had never written it before. Learning JavaScript from Scratch Coming from Python the syntax felt familiar but the logic was completely different. Hardest part was MediaPipe. In Python it’s 2 lines: import mediapipe as mp hands = mp . solutions . hands . Hands () In JavaScript it’s a whole async setup that took me forever to get right: const fs = await FilesetResolver . forVisionTasks ( \" https://cdn.jsdelivr.net/npm/@mediapipe/ [email protected] /wasm \" ) const hl = await HandLandmarker . createFromOptions ( fs , { baseOptions : { modelAssetPath : \" ... \" }, numHands : 1 , runningMode : \" VIDEO \" }) Went through 4 different CDN links before finding one that worked. CORS errors, 404s, wrong module formats — been through everything. Eventually got it working with Skypack. How the Hand Tracking Works Every frame the camera captures an image, MediaPipe finds 21 landmark points on your hand, and I calculate useful values from those points: hand . palmX = ( lm [ 0 ]. x + lm [ 5 ]. x + lm [ 9 ]. x + lm [ 13 ]. x + lm [ 17 ]. x ) / 5 hand . palmY = ( lm [ 0 ]. y + lm [ 5 ]. y + lm [ 9 ]. y + lm [ 13 ]. y + lm [ 17 ]. y ) / 5 const dx = lm [ 4 ]. x - lm [ 8 ]. x const dy = lm [ 4 ]. y - lm [ 8 ]. y hand . pinching = Math . sqrt ( dx * dx + dy * dy ) < 0.07 const up = [ lm [ 8 ]. y < lm [ 6 ]. y , lm [ 12 ]. y < lm [ 10 ]. y , lm [ 16 ]. y < lm [ 14 ]. y , lm [ 20 ]. y < lm [ 18 ]. y ] hand . fist = up . every ( f => ! f ) All 3 games share the same hand object that gets updated every single frame. Bugs I Ran Into Mirror flipping — spent ages debugging why the cursor moved the wrong way. Camera captures a mirrored image so moving right makes x go in the -x direction. Fixed by flipping palmX at the source: hand . palmX = 1 - ( lm [ 0 ]. x + lm [ 5 ]. x + lm [ 9 ]. x + lm [ 13 ]. x + lm [ 17 ]. x ) / 5 CDN failures — MediaPipe’s official CDN kept returning 404. Tried jsdelivr, unpkg, and two others before Skypack worked. Module type errors — JavaScript modules need type=\"module\" on the script tag otherwise imports don’t work at all. What Needs Fixing Next Space Shooter — not enough enemies spawning, waves feel too sparse. AI enemies too aggressive, players can’t score enough Hand Cursor — white circle cursor looks too similar to the pong ball, confusing during gameplay. Needs a better indicator GitHub Pages — need to push everything live so there’s an actual demo URL"}, {"post_id": 24213, "ts": "2026-07-07T17:05:18Z", "hours": 5.6992, "text": "Devlog 2.01 - Building the Web Version of Gesture Arcade What I worked on today Rebuilt the entire Gesture Arcade frontend from Python and Pygame to a fully web-based version using HTML, CSS, and JavaScript! This was a big decision and here’s why I made it… Why I switched from Python -> Web The Python version runs almost perfectly as a desktop app (that’s a lie, I’ve been struggling a bit with one of the games) but cannot be played in a browser! Gesture control requires webcam access which Python/Pygame cannot expose over the internet. A browser version means -> anyone with a webcam can play instantly! An ‘.exe’ limits who can actually try it. This also counts as an extended Python version. So, consider this an improvement on the last version. Here on, I’m going to refine the UI/UX, basic gameplay, better my logs, and finish this in a better error-less manner. Ignore all logs till now, it’s only about to get better! What I built today Retro monospace homepage in HTML/CSS. (Screenshot attached) Integrated MediaPipe Hand Landmarker via JavaScript for real-time hand tracking. Challenges I ran into MediaPipe CDN kept returning 404 errors (went through about 4 different CDN links before finding one that worked) ‘type=“module”’ was required for the import to work correctly. What’s Next Build Hand Pong in JavaScript using HTML5 Canvas(??) Connect hand tracking to paddle movement. Add all 4 games one by one. Host on GitHub Pages for a live URL. Tech Stack HTML + CSS + JavaScript MediaPipe Tasks Vsion 0.10.3. Skypack CDN for module imports."}, {"post_id": 19407, "ts": "2026-06-30T18:35:44Z", "hours": 7.1633, "text": "Snake game added! Finished making the Snake game for the arcade! It’s working, but I don’t think it’s where I want it to be yet. Right now the controls use fist direction, but I’m thinking of switching to palm direction instead because I feel like it’d be more smooth to play. I also haven’t fully figured out optimizing for different screen sizes yet, and the grid still needs some work so gameplay feels more consistent across displays. Visually, I want to tweak the snake design a bit too and make it feel less placeholder and more polished. Still a bunch of things to improve, but honestly every game has been teaching me something new and I’m slowly figuring things out as I go :)"}, {"post_id": 14288, "ts": "2026-06-23T10:51:09Z", "hours": 3.1236, "text": "Small Update - I’m sort of done making Pong! The paddle on your side is controlled by how far or low you position your palm in front of the camera. It definitely doesn’t work as well as I want it to yet 😭🙏 but getting the basic gameplay running feels like a milestone! Right now I’m trying to improve responsiveness, fix weird behavior, and generally figure out as I go. Still lots to improve, but one game down and have learnt a ton. :D"}, {"post_id": 13831, "ts": "2026-06-22T17:43:08Z", "hours": 3.9269, "text": "OpenCV Hand Gesture Controlled Gaming Arcade 🎮 Hi! I’m currently building a hand gesture controlled gaming arcade using OpenCV! I’m still pretty new to programming, so this project doesn’t involve a lot of fancy or advanced programming, I’m using it as a way to learn and understand Python. I’ve been reading a lot of documentation, experimenting, failing, and debugging, more than I’d like to admit. To help plan everything out, I also made a simple flowchart to map the project structure and workflow. I’ve attached it as an image. The current plan is to include these four games: Hand Pong Fruit Ninja Space Shooter Snake Here’s the homepage I’ve made. Along with a popup instructions panel. If anyone has suggestions on libraries/ references I should use, please let me know."}]...
|
Title: OpenCV Gesture Based Online Arcade by @anus Title: OpenCV Gesture Based Online Arcade by @anushkaa | Stardance
Devlogs:
OpenCV Hand Gesture Controlled Gaming Arcade 🎮 Hi! I’m currently building a hand gesture controlled gaming arcade using OpenCV! I’m still pretty new to programming, so this project doesn’t involve a lot of fancy or advanced programming, I’m using it as a way to learn and understand Python. I’ve been reading a lot of documentation, experimenting, failing, and debugging, more than I’d like to admit. To help plan everything out, I also made a simple flowchart to map the project structure and workflow. I’ve attached it as an image. The current plan is to include these four games: Hand Pong Fruit Ninja Space Shooter Snake Here’s the homepage I’ve made. Along with a popup instructions panel. If anyone has suggestions on libraries/ references I should use, please let me know.
Small Update - I’m sort of done making Pong! The paddle on your side is controlled by how far or low you position your palm in front of the camera. It definitely doesn’t work as well as I want it to yet 😭🙏 but getting the basic gameplay running feels like a milestone! Right now I’m trying to improve responsiveness, fix weird behavior, and generally figure out as I go. Still lots to improve, but one game down and have learnt a ton. :D
Snake game added! Finished making the Snake game for the arcade! It’s working, but I don’t think it’s where I want it to be yet. Right now the controls use fist direction, but I’m thinking of switching to palm direction instead because I feel like it’d be more smooth to play. I also haven’t fully figured out optimizing for different screen sizes yet, and the grid still needs some work so gameplay feels more consistent across displays. Visually, I want to tweak the snake design a bit too and make it feel less placeholder and more polished. Still a bunch of things to improve, but honestly every game has been teaching me something new and I’m slowly figuring things out as I go :)
Devlog 2.01 - Building the Web Version of Gesture Arcade What I worked on today Rebuilt the entire Gesture Arcade frontend from Python and Pygame to a fully web-based version using HTML, CSS, and JavaScript! This was a big decision and here’s why I made it… Why I switched from Python -> Web The Python version runs almost perfectly as a desktop app (that’s a lie, I’ve been struggling a bit with one of the games) but cannot be played in a browser! Gesture control requires webcam access which Python/Pygame cannot expose over the internet. A browser version means -> anyone with a webcam can play instantly! An ‘.exe’ limits who can actually try it. This also counts as an extended Python version. So, consider this an improvement on the last version. Here on, I’m going to refine the UI/UX, basic gameplay, better my logs, and finish this in a better error-less manner. Ignore all logs till now, it’s only about to get better! What I built today Retro monospace homepage in HTML/CSS. (Screenshot attached) Integrated MediaPipe Hand Landmarker via JavaScript for real-time hand tracking. Challenges I ran into MediaPipe CDN kept returning 404 errors (went through about 4 different CDN links before finding one that worked) ‘type=“module”’ was required for the import to work correctly. What’s Next Build Hand Pong in JavaScript using HTML5 Canvas(??) Connect hand tracking to paddle movement. Add all 4 games one by one. Host on GitHub Pages for a live URL. Tech Stack HTML + CSS + JavaScript MediaPipe Tasks Vsion 0.10.3. Skypack CDN for module imports.
Devlog 02 - Rebuilding Gesture Arcade for the Web The Big Decision Scrapped the entire Python version and rebuilt from scratch in JavaScript. Python with pygame cannot run in a browser, and without a live demo URL Stardance reviewers can’t try the project. The whole point is gesture control — and that needs a webcam running locally. Only solution was JavaScript. Problem? I had never written it before. Learning JavaScript from Scratch Coming from Python the syntax felt familiar but the logic was completely different. Hardest part was MediaPipe. In Python it’s 2 lines: import mediapipe as mp hands = mp . solutions . hands . Hands () In JavaScript it’s a whole async setup that took me forever to get right: const fs = await FilesetResolver . forVisionTasks ( " https://cdn.jsdelivr.net/npm/@mediapipe/ [email protected] /wasm " ) const hl = await HandLandmarker . createFromOptions ( fs , { baseOptions : { modelAssetPath : " ... " }, numHands : 1 , runningMode : " VIDEO " }) Went through 4 different CDN links before finding one that worked. CORS errors, 404s, wrong module formats — been through everything. Eventually got it working with Skypack. How the Hand Tracking Works Every frame the camera captures an image, MediaPipe finds 21 landmark points on your hand, and I calculate useful values from those points: hand . palmX = ( lm [ 0 ]. x + lm [ 5 ]. x + lm [ 9 ]. x + lm [ 13 ]. x + lm [ 17 ]. x ) / 5 hand . palmY = ( lm [ 0 ]. y + lm [ 5 ]. y + lm [ 9 ]. y + lm [ 13 ]. y + lm [ 17 ]. y ) / 5 const dx = lm [ 4 ]. x - lm [ 8 ]. x const dy = lm [ 4 ]. y - lm [ 8 ]. y hand . pinching = Math . sqrt ( dx * dx + dy * dy ) < 0.07 const up = [ lm [ 8 ]. y < lm [ 6 ]. y , lm [ 12 ]. y < lm [ 10 ]. y , lm [ 16 ]. y < lm [ 14 ]. y , lm [ 20 ]. y < lm [ 18 ]. y ] hand . fist = up . every ( f => ! f ) All 3 games share the same hand object that gets updated every single frame. Bugs I Ran Into Mirror flipping — spent ages debugging why the cursor moved the wrong way. Camera captures a mirrored image so moving right makes x go in the -x direction. Fixed by flipping palmX at the source: hand . palmX = 1 - ( lm [ 0 ]. x + lm [ 5 ]. x + lm [ 9 ]. x + lm [ 13 ]. x + lm [ 17 ]. x ) / 5 CDN failures — MediaPipe’s official CDN kept returning 404. Tried jsdelivr, unpkg, and two others before Skypack worked. Module type errors — JavaScript modules need type="module" on the script tag otherwise imports don’t work at all. What Needs Fixing Next Space Shooter — not enough enemies spawning, waves feel too sparse. AI enemies too aggressive, players can’t score enough Hand Cursor — white circle cursor looks too similar to the pong ball, confusing during gameplay. Needs a better indicator GitHub Pages — need to push everything live so there’s an actual demo URL
Devlog 03 — Fixing, Tuning and Ready to Ship What I Fixed This Session Spent this session purely on debugging and tuning. No new features — just making everything feel right. Snake controls — went through three different control schemes. Tried fist tilt, tried swipe gestures, finally landed on index finger pointing. The snake steers toward wherever your finger is pointing relative to the snake’s head. Tiny finger movements don’t accidentally change direction: const dist = Math . sqrt ( dx * dx + dy * dy ) if ( dist > CELL * 3 ) { } Space Shooter — enemies were spawning too slowly and too late. Fixed spawn timer to start at 999 so enemies appear immediately, and doubled the spawn rate. Waves feel much more intense now. Instructions — Added the instructions page correctly so anyone can click [I] to understand required gestures. Mirror flipping — cursor and menu hover were using inconsistent coordinate systems. Unified everything so palmX is flipped once at the source and all games use the same value. What the Project Is Now A fully browser-based hand gesture arcade with three games: Hand Pong — palm height controls your paddle Space Shooter — palm position aims, pinch fires Snake — point your index finger to steer No downloads. No installs. Just a webcam and a browser. Shipping Pushing to GitHub Pages today. Anyone with a webcam can play instantly at the live URL. Finally ready to ship!
Ships:
Built a hand gesture controlled arcade where you play games using just your webcam! Three games: Hand Pong, Space Shooter and Snake, each using a different gesture. Started in Python with OpenCV and MediaPipe, rebuilt in JavaScript so it runs in the browser with no downloads needed. Not the smoothest or best arcade ever but definitely built with a lot of struggle and I’m still working on making it better everyday! Learned both languages from scratch during this project. The hardest part was getting MediaPipe working in the browser, went through four different CDN links before finding one that worked!...
|
1792993770.0292656
|
1793080170.0292656
|
|
30561
|
No Let by @ethmarks | Stardance
|
ethmarks
|
2
|
38.0
|
499
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-09T00:10:21Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "No Let: a JS puzzle site where you aren’t allowed to use let or anything with mutable state. This second ship was about implementing the fantastic suggestions in the feedback I got from my first ship. I added anti-hardcoding checks to stop people from cheesing the puzzles I added two new levels, including a very difficult one I added confetti and visual feedback when a user completes a puzzle I added a favicon …Plus a handful of small tweaks and improvements I’m looking forward to reading the feedback I get this time :)", "repo": "https://github.com/ethmarks/nolet", "demo": "https://ethmarks.github.io/nolet/"}, {"ship_num": 2, "ts": "2026-07-09T21:55:18Z", "hours": 28.0, "multiplier": 18.96, "payout": 499, "blessing": "neutral", "text": "No Let is a JavaScript puzzle site where you have to use pure functional programming, which means that you aren’t allowed to use let variables or anything else with mutable state. I learned how to use QuickJS-emscripten, Prism code editor, and AcornJS, all of which are skills that I intend to reuse for later projects. I also learned a lot about pure functional programming itself while designing the puzzles. I’m especially proud of how the linter/test messages smoothly animate in and out. The animation itself was just a simple slide transition with Svelte, but in order to make it work I had to refactor and unify the error message generation into one big array, which was unexpectedly difficult.", "repo": "https://github.com/ethmarks/nolet", "demo": "https://ethmarks.github.io/nolet/"}]...
|
[{"post_id": 64518, "ts": "202 [{"post_id": 64518, "ts": "2026-09-08T23:57:42Z", "hours": 0.6822, "text": "Final devlog before ship #2 I added difficulty ratings for each puzzle I moved the logic/linter output (aka the checklist) right above the “run” button because it makes more sense there I updated the README and added some screenshots"}, {"post_id": 63280, "ts": "2026-09-07T00:56:34Z", "hours": 2.1544, "text": "How the heck did this take 2 hours… All that I did in this devlog was improve the Conway’s Game of Life puzzle a bit. I rewrote some of the starter and solution code for simplicity (I can’t believe I forgot about the .flatMap() method), and I also wrote a bunch of comments that explain the starter code and solution code. Next, I think I’ll add a difficulty indicator for the puzzles. I think I’ll probably be ready to re-ship after that!"}, {"post_id": 60511, "ts": "2026-09-02T21:57:40Z", "hours": 4.1878, "text": "Hi! It’s been a while. Again. The highlight of this devlog is the new puzzle: Conway’s Game of Life. In the feedback on my first ship, several people mentioned that they wanted more challenging levels. Well, here ya go! This puzzle is much more complex, and it also doesn’t lend itself well to functional programming, so you have to get creative in order to make the linter happy. Personally, after I designed the puzzle and wrote the starter code, it took me over 45 minutes to write the solution code. It’s pretty difficult, so hopefully it’ll satisfy the users who want a challenge. I also made a few smaller changes: I removed dev.css’s light mode, because all the rest of my styling is meant for dark mode I set Maple Mono as the preferred font, but I intentionally made it only work if you already have Maple Mono installed, because I know that not everybody likes it I added a special message if you try to run empty code Next, I think I’ll start adding comments to some of the starter code and solution code. I think it’d be helpful for users who aren’t as familiar with JavaScript or function programming, so that they can more easily get acquainted with the starter code, and so that they can learn how the solution works if they choose to use it."}, {"post_id": 43738, "ts": "2026-08-09T04:43:58Z", "hours": 1.0986, "text": "I made a new puzzle! The puzzle involves implementing a Caesar cipher. That’s it, actually. It’s certainly not a very difficult puzzle, but it does contribute to puzzle variety. Also, do you notice the new favicon? No more Svelte logo!"}, {"post_id": 42385, "ts": "2026-08-07T02:27:16Z", "hours": 0.4897, "text": "…i think the user would have more feedback/satisfaction if upon completion, something else happens to let them know they successfully completed a puzzle, something like confetti, or even just the “run” button changing color/text When the puzzle states changes to “passed” (meaning the logic test and linter both passed) from some other status, I made it trigger a confetti effect via canvas-confetti and made the run button turn green. Next, I’m probably going to make a favicon."}, {"post_id": 42359, "ts": "2026-08-07T01:15:08Z", "hours": 0.4586, "text": "One thing: I can just cheese everything by changing the output manually. I recommend you use multiple test cases so i can not just type “return 6” and complete the task. I added secretInput values to the rest of the puzzles to fix the hardcoding cheese. I also mentioned the anti-hardcoding in the README. Next, I’m going to work on adding some confetti and whatnot for when the user’s code passes both the logic test and the linter."}, {"post_id": 41006, "ts": "2026-08-04T21:57:16Z", "hours": 0.7825, "text": "Hi again! It’s been a while. I’m coming back to No Let because when I shipped it the first time, the lovely people who rated it took the time to write really thoughtful feedback and suggest great actionable improvements. So i thought it’d be fun to implement your suggestions (and also I was bored). Here are some excerpts from the feedback I got: One thing: I can just cheese everything by changing the output manually. I recommend you use multiple test cases so i can not just type “return 6” and complete the task. Anyway, my biggest critique would be the lack of levels. I think that adding tiers of difficulty, along with 10-15 more levels would take this project to the highest possible level. …svelte favicon ;)… …i think the user would have more feedback/satisfaction if upon completion, something else happens to let them know they successfully completed a puzzle, something like confetti, or even just the “run” button changing color/text I intend to fix/implement each one of these. With the exception of the “10-15 levels” one; that’s a bit more than I’m willing to make, but I will add some new puzzles. So far, I’ve started implementing the first suggestion. I’m creating secretInput values for each puzzle, and in the test function, after it evaluates the input (which is publicly displayed), it runs the code again using the secretInput . If the code passes the input check but fails the secretInput check, it fails the logic test with this message: Failed secret anti-hardcoding check. You need to generalize your logic. I’ve only added secretInput s for two puzzles so far, so the work is still ongoing."}, {"post_id": 25055, "ts": "2026-07-09T00:36:32Z", "hours": 3.2028, "text": "I wrote the README and also fixed a minor performance bug. Because Prism code editor only initializes once Svelte finishes hydrating, there’s a delay of a few hundred milliseconds between when the page becomes visible and when the editor initializes. This caused a layout shift on each puzzle page, which was making Lighthouse take away a few points in the performance category. So I precalculated the height of each puzzle editor in advance and applied that minimum height to the placeholder text. This fixed the layout shift, so now Lighthouse gives the site perfect 100s in performance, best practices, and SEO, which is cool."}, {"post_id": 24392, "ts": "2026-07-07T22:22:32Z", "hours": 0.7942, "text": "I just added some error handling for infinite loops and infinite recursion. Before, if you wrote while (true) {} in the editor and pressed run, it would permanently lock up the UI and crash the browser tab. Now the logic test just interrupts the execution after 1000ms and fails your code for taking too long. Likewise, if you wrote const r=()=>r();r(); and ran it, QuickJS would silently throw an uncaught error and the logic test would be stuck at “Waiting…” forever. Now it just instantly fails the code because it recurses too deeply and QuickJS can’t execute it. I’m probably going to ship No Let soon, unless I have more puzzle ideas, find more bugs to patch, or think of more features to add."}, {"post_id": 23943, "ts": "2026-07-07T04:44:58Z", "hours": 3.4903, "text": "I spent the last 3.5 hours making a single puzzle. It’s the hardest puzzle yet and took the most time to create, and by a lot. The puzzle is called Headcount, and it involves extracting a total count from a deeply-nested data object. I considered using nested arrays instead, but that would have a pretty trivial solution: return input.flat(Infinity).length . JS has far fewer built-in utilities for manipulating objects than it does for arrays, so I figured that using objects would pose more of a challenge, which I think it does. You can play the new puzzle here: https://ethmarks.github.io/nolet/headcount ."}, {"post_id": 23703, "ts": "2026-07-06T20:13:38Z", "hours": 1.945, "text": "I added more puzzles and wrote a congrats page for users who finish the whole site. The congrats page finally gave me the excuse to reference xkcd 1312 , which I’d been dying to do since I started this project. Next, I just need to make more puzzles. I have 4 so far, which I don’t think is nearly enough. Puzzle design is really hard though."}, {"post_id": 23105, "ts": "2026-07-05T21:00:44Z", "hours": 11.4647, "text": "I’ve made a lot of progress since my last devlog. I’d say that No Let is basically feature-complete now. All that’s left to do is adding polish and creating a bunch more puzzles. You can try No Let right now at https://ethmarks.github.io/nolet/ . Here are some of the highlights of the changes in this devlog. I added the Output.svelte component that runs the logic test and the linter and outputs their results into a human-readable HTML list. I also made it use Svelte’s slide transition , which required a lot of refactoring . I made each puzzle a separate page. I was originally planning on making the site an SPA, but I decided that a MPA was probably a better fit. Because the puzzles are defined as classes and not as separate Svelte routes, I had to add a dynamic route. I’m using SvelteKit’s static adapter because I prefer static sites, but that meant that I had to tell SvelteKit which pages to prerender. I added description text and suggested solutions for each puzzle. The descriptions provide instructions, tips, and flavor text, and the solutions should keep users from getting stuck or frustrated. But most of the work I did has been refactors, fixes, and creating new puzzles."}, {"post_id": 22007, "ts": "2026-07-04T07:34:27Z", "hours": 6.9069, "text": "So my idea for this project is that it’s a JavaScript puzzle site which forces you to use pure functional programming , which means that you aren’t allowed to use let or anything else with mutable state. Basically, pure functional programming says that you should never ever reassign variables after you declare them. Ever. Because you can’t reassign variables, you also can’t increment counters, which means that it’s impossible to use for loops. The same logic applies to while loops, and to a few other things. These extremely restrictive self-imposed limitations force you to do things the functional programming way, which involves lambda calculus, recursive functions, currying, etc. I think that this project will have four main parts. I’ve been working on it for about 7 hours and I’ve made some good progress, but there’s still a lot to do. Running the user’s code and reading the result. I can just wrap quickjs-emscripten and remove a few built-in methods like Math.random() that are considered “impure” by functional programming because they’re non-deterministic. Linting the user’s code to check if it uses any banned syntax like let . I can use acornjs to parse the code into an AST, then applying a bunch of custom rules to it. Allowing the user to write their code. The conventional choice would be to use Monaco or CodeMirror, but they’re extremely heavy and I don’t like VSCode anyways, so I’m going with Prism code editor , which is much lighter and in my opinion nicer. Having puzzles for the user to complete. Each puzzle should have a test function that can check if the code logic is correct, and also should have some initial code that has correct logic but fails the linting because it uses let and whatnot. Right now I have minimal versions of parts 1, 2, and 3. They do work (mostly), but they’re missing features and don’t integrate well with each other."}]...
|
Title: No Let by @ethmarks | Stardance
Devlogs:
S Title: No Let by @ethmarks | Stardance
Devlogs:
So my idea for this project is that it’s a JavaScript puzzle site which forces you to use pure functional programming , which means that you aren’t allowed to use let or anything else with mutable state. Basically, pure functional programming says that you should never ever reassign variables after you declare them. Ever. Because you can’t reassign variables, you also can’t increment counters, which means that it’s impossible to use for loops. The same logic applies to while loops, and to a few other things. These extremely restrictive self-imposed limitations force you to do things the functional programming way, which involves lambda calculus, recursive functions, currying, etc. I think that this project will have four main parts. I’ve been working on it for about 7 hours and I’ve made some good progress, but there’s still a lot to do. Running the user’s code and reading the result. I can just wrap quickjs-emscripten and remove a few built-in methods like Math.random() that are considered “impure” by functional programming because they’re non-deterministic. Linting the user’s code to check if it uses any banned syntax like let . I can use acornjs to parse the code into an AST, then applying a bunch of custom rules to it. Allowing the user to write their code. The conventional choice would be to use Monaco or CodeMirror, but they’re extremely heavy and I don’t like VSCode anyways, so I’m going with Prism code editor , which is much lighter and in my opinion nicer. Having puzzles for the user to complete. Each puzzle should have a test function that can check if the code logic is correct, and also should have some initial code that has correct logic but fails the linting because it uses let and whatnot. Right now I have minimal versions of parts 1, 2, and 3. They do work (mostly), but they’re missing features and don’t integrate well with each other.
I’ve made a lot of progress since my last devlog. I’d say that No Let is basically feature-complete now. All that’s left to do is adding polish and creating a bunch more puzzles. You can try No Let right now at https://ethmarks.github.io/nolet/ . Here are some of the highlights of the changes in this devlog. I added the Output.svelte component that runs the logic test and the linter and outputs their results into a human-readable HTML list. I also made it use Svelte’s slide transition , which required a lot of refactoring . I made each puzzle a separate page. I was originally planning on making the site an SPA, but I decided that a MPA was probably a better fit. Because the puzzles are defined as classes and not as separate Svelte routes, I had to add a dynamic route. I’m using SvelteKit’s static adapter because I prefer static sites, but that meant that I had to tell SvelteKit which pages to prerender. I added description text and suggested solutions for each puzzle. The descriptions provide instructions, tips, and flavor text, and the solutions should keep users from getting stuck or frustrated. But most of the work I did has been refactors, fixes, and creating new puzzles.
I added more puzzles and wrote a congrats page for users who finish the whole site. The congrats page finally gave me the excuse to reference xkcd 1312 , which I’d been dying to do since I started this project. Next, I just need to make more puzzles. I have 4 so far, which I don’t think is nearly enough. Puzzle design is really hard though.
I spent the last 3.5 hours making a single puzzle. It’s the hardest puzzle yet and took the most time to create, and by a lot. The puzzle is called Headcount, and it involves extracting a total count from a deeply-nested data object. I considered using nested arrays instead, but that would have a pretty trivial solution: return input.flat(Infinity).length . JS has far fewer built-in utilities for manipulating objects than it does for arrays, so I figured that using objects would pose more of a challenge, which I think it does. You can play the new puzzle here: https://ethmarks.github.io/nolet/headcount .
I just added some error handling for infinite loops and infinite recursion. Before, if you wrote while (true) {} in the editor and pressed run, it would permanently lock up the UI and crash the browser tab. Now the logic test just interrupts the execution after 1000ms and fails your code for taking too long. Likewise, if you wrote const r=()=>r();r(); and ran it, QuickJS would silently throw an uncaught error and the logic test would be stuck at “Waiting…” forever. Now it just instantly fails the code because it recurses too deeply and QuickJS can’t execute it. I’m probably going to ship No Let soon, unless I have more puzzle ideas, find more bugs to patch, or think of more features to add.
I wrote the README and also fixed a minor performance bug. Because Prism code editor only initializes once Svelte finishes hydrating, there’s a delay of a few hundred milliseconds between when the page becomes visible and when the editor initializes. This caused a layout shift on each puzzle page, which was making Lighthouse take away a few points in the performance category. So I precalculated the height of each puzzle editor in advance and applied that minimum height to the placeholder text. This fixed the layout shift, so now Lighthouse gives the site perfect 100s in performance, best practices, and SEO, which is cool.
Hi again! It’s been a while. I’m coming back to No Let because when I shipped it the first time, the lovely people who rated it took the time to write really thoughtful feedback and suggest great actionable improvements. So i thought it’d be fun to implement your suggestions (and also I was bored). Here are some excerpts from the feedback I got: One thing: I can just cheese everything by changing the output manually. I recommend you use multiple test cases so i can not just type “return 6” and complete the task. Anyway, my biggest critique would be the lack of levels. I think that adding tiers of difficulty, along with 10-15 more levels would take this project to the highest possible level. …svelte favicon ;)… …i think the user would have more feedback/satisfaction if upon completion, something else happens to let them know they successfully completed a puzzle, something like confetti, or even just the “run” button changing color/text I intend to fix/implement each one of these. With the exception of the “10-15 levels” one; that’s a bit more than I’m willing to make, but I will add some new puzzles. So far, I’ve started implementing the first suggestion. I’m creating secretInput values for each puzzle, and in the test function, after it evaluates the input (which is publicly displayed), it runs the code again using the secretInput . If the code passes the input check but fails the secretInput check, it fails the logic test with this message: Failed secret anti-hardcoding check. You need to generalize your logic. I’ve only added secretInput s for two puzzles so far, so the work is still ongoing.
One thing: I can just cheese everything by changing the output manually. I recommend you use multiple test cases so i can not just type “return 6” and complete the task. I added secretInput values to the rest of the puzzles to fix the hardcoding cheese. I also mentioned the anti-hardcoding in the README. Next, I’m going to work on adding some confetti and whatnot for when the user’s code passes both the logic test and the linter.
…i think the user would have more feedback/satisfaction if upon completion, something else happens to let them know they successfully completed a puzzle, something like confetti, or even just the “run” button changing color/text When the puzzle states changes to “passed” (meaning the logic test and linter both passed) from some other status, I made it trigger a confetti effect via canvas-confetti and made the run button turn green. Next, I’m probably going to make a favicon.
I made a new puzzle! The puzzle involves implementing a Caesar cipher. That’s it, actually. It’s certainly not a very difficult puzzle, but it does contribute to puzzle variety. Also, do you notice the new favicon? No more Svelte logo!
Hi! It’s been a while. Again. The highlight of this devlog is the new puzzle: Conway’s Game of Life. In the feedback on my first ship, several people mentioned that they wanted more challenging levels. Well, here ya go! This puzzle is much more complex, and it also doesn’t lend itself well to functional programming, so you have to get creative in order to make the linter happy. Personally, after I designed the puzzle and wrote the starter code, it took me over 45 minutes to write the solution code. It’s pretty difficult, so hopefully it’ll satisfy the users who want a challenge. I also made a few smaller changes: I removed dev.css’s light mode, because all the rest of my styling is meant for dark mode I set Maple Mono as the preferred font, but I intentionally made it only work if you already have Maple Mono installed, because I know that not everybody likes it I added a special message if you try to run empty code Next, I think I’ll start adding comments to some of the starter code and solution code. I think it’d be helpful for users who aren’t as familiar with JavaScript or function programming, so that they can more easily get acquainted with the starter code, and so that they can learn how the solution works if they choose to use it.
How the heck did this take 2 hours… All that I did in this devlog was improve the Conway’s Game of Life puzzle a bit. I rewrote some of the starter and solution code for simplicity (I can’t believe I forgot about the .flatMap() method), and I also wrote a bunch of comments that explain the starter code and solution code. Next, I think I’ll add a difficulty indicator for the puzzles. I think I’ll probably be ready to re-ship after that!
Final devlog before ship #2 I added difficulty ratings for each puzzle I moved the logic/linter output (aka the checklist) right above the “run” button because it makes more sense there I updated the README and added some screenshots
Ships:
No Let is a JavaScript puzzle site where you have to use pure functional programming, which means that you aren’t allowed to use let variables or anything else with mutable state. I learned how to use QuickJS-emscripten, Prism code editor, and AcornJS, all of which are skills that I intend to reuse for later projects. I also learned a lot about pure functional programming itself while designing the puzzles. I’m especially proud of how the linter/test messages smoothly animate in and out. The animation itself was just a simple slide transition with Svelte, but in order to make it work I had to refactor and unify the error message generation into one big array, which was unexpectedly difficult.
No Let: a JS puzzle site where you aren’t allowed to use let or anything with mutable state. This second ship was about implementing the fantastic suggestions in the feedback I got from my first ship. I added anti-hardcoding checks to stop people from cheesing the puzzles I added two new levels, including a very difficult one I added confetti and visual feedback when a user completes a puzzle I added a favicon …Plus a handful of small tweaks and improvements I’m looking forward to reading the feedback I get this time :)...
|
1792993885.3627887
|
1793080285.3627887
|
|
13539
|
MewoOS by @subhansh | Stardance
|
|
2
|
70.0
|
497
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-09T14:12:55Z", "hours": 56.0, "multiplier": 19.42, "payout": 497, "blessing": "neutral", "text": "Made the most productive web operating system ever created comes with a browser, terminal, music player, gallery, customizable wallpapers, draggable windows, and doomscroll — because no operating system is complete without destroying your attention span… built with react, typescript, and questionable life choices :3 new features :- functional file system voice assistant with vocal modulation and os control 4 desktop workspace mewo store (more apps that u can actually install !!)", "repo": "https://github.com/subhansh-dev/MewoOS", "demo": "https://mewoos.vercel.app"}, {"ship_num": 2, "ts": "2026-06-15T20:05:47Z", "hours": 14.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Made the most productive web operating system ever created comes with a browser, terminal, music player, gallery, customizable wallpapers, draggable windows, and doomscroll — because no operating system is complete without destroying your attention span and we must scroll and larp… built with react, typescript, and questionable life choices :3", "repo": "https://github.com/subhansh-dev/MewoOS", "demo": "https://mewoos.vercel.app"}]...
|
[{"post_id": 25288, "ts": "202 [{"post_id": 25288, "ts": "2026-07-09T14:01:57Z", "hours": 5.5736, "text": "final devlog for mewo os 🍓😺 okay so guess wat… i was debugging mewo again and again for a bug that wasnt even real 💔… what happened is.. i opened mewo saw that nothing is functional and i was like everything looks gud why its not wokring… and then i saw my mails and found out that vercel and supabase paused my web cause i ran out of the free tier 💔😭… anyways aside from this i added ts js for the vibes lol Window Switcher Open 2+ apps (e.g. Calculator + Terminal + Notes) Press Ctrl+Shift+A — overlay appears with all open windows Press Tab to cycle forward, Shift+Tab to cycle backward Release Shift or click a window to switch to it Escape to cancel also i did optimized mewo earlier but it was still lagging a bit cause of overlaying animations and effects so i fixed that too ts time redeployed on vercel again!! try it out ^-^ :- https://mewoos.vercel.app"}, {"post_id": 24814, "ts": "2026-07-08T16:49:19Z", "hours": 26.8408, "text": "MewoOS Devlog #8 🍓😺 Pixel Cat Redesign redesigned the pixel cat that follows ur cursor around the desktop. she looks way better now ngl…more detailed sprite, smoother animation, and shes silver now which fits the dark theme way more. u can click her to toggle between following ur cursor or staying pinned. small thing but it makes the whole desktop feel alive fr Meo Can Control The OS (waw..dem ) this ones big. meo can now literally control the whole os. tell her “open the calculator” and she opens it. “open the terminal” — done. “minimize all windows” — gone. she parses whatever u say and does OS actions through action tags. supports open, close, min, max, focus, minimizeAll, closeAll. feels like ur actually talking to the os not just a chatbot Voice & Emotions Rework improved meos voice n emotions big time. she now detects what ur saying and adjusts — happy, excited, concerned, playful, calm, tired, urgent. each one has its own rate, pitch, personality. the voice sounds way less robotic now and more natural. also fixed that annoying thing where the reply would show up in the chat 4 seconds before the tts spoke it. now they happen at the same time so its smooth 4 Desktop Workspaces added a desktop workspace system. u get 4 separate desktops switch between them with ctrl 1 2 3 4. each desktop has its own windows so u can have coding stuff on desktop 1 music and browser on desktop 2 etc. ctrl left right cycles between them. feels like a real os now not just a web page Mewo Store(new feature…yey) built a full app store for mewoos. premium dock style icons glassmorphism ui category filters search the works. and the apps u can actually install and they actually work when u open them Installable Apps weather — 5 cities 7 day forecast animated temp bars humidity wind stats kanban board — drag and drop 3 columns colored tags 7 pre loaded tasks focus timer — working pomodoro timer svg ring progress 3 modes focus short long session stats type racer — typing speed test real time character highlighting green red wpm calc 8 sentences paint studio — actual working canvas color picker brush size clear button u can draw on it image editor — 8 filter presets original warm cool b&w vintage vivid fade noir brightness contrast saturation sliders uses a real image Store Features when u install an app theres a progress bar animation then the app icon shows up in the dock with a premium dock style icon. and u can uninstall apps too removes from dock and closes any open windows…. mewo meow mewo"}, {"post_id": 22867, "ts": "2026-07-05T14:22:43Z", "hours": 23.1842, "text": "OKAAAA WE’RE BACCKKK.. aaa so i did all of the basic stuffs in the webos1 (mandatory features, basic glass morph for the windows, parallax effects on the wallpaper etc) so now in the part 2… its time to take this further… so i started with fixing the lag and some minor bugs and then we redesigned every window and dock with an aurora tint and enhanced glassmorphism with glare and then came the features that i added… i mean they are not complete but the base is ready the dock got upgraded added a Files app(new feature..yey) to the dock with a sky blue gradient icon. the file manager opens with a proper glassmorphic window. breadcrumbs for navigation, grid and list views, right click menus, inline rename… the whole deal. double click a file and it opens in an editor with Ctrl+S to save. tab inserts spaces. its got the mewoOS glass treatment on everything what is meo (new feature…yey) so meo is basically the AI assistant that lives inside MewoOS. think of it like Siri but actually useful and with personality….a menace on silicon. u tap the orb, speak to her, and she responds. she can open apps, close them, minimize, maximize — basically control the whole OS with voice. she has emotions too — happy, excited, concerned, playful, calm, tired, urgent — and her voice changes based on that. she roasts u but its from love. like a best friend who also happens to be an AI running inside an operating system the whole thing runs on Gemini — both the brain (chat) and the voice (TTS). she uses Gemini 2.5 Flash for thinking and Gemini 2.5 Flash Preview TTS for speaking back to u with different voices depending on her mood now the part that took forever — making meo actually work bruh so making meo work took some work… idk how many times i debugged for her to actually listen to me the STT problem so the original problem was the Web Speech API — that thing is just unreliable as hell. it only works in Chrome, needs HTTPS or localhost, and half the time it just doesnt fire onresult at all. like u speak, it says “listening…”, then nothing happens. the text never shows up. no transcription, no response, nothing i tried fixing it multiple times — started recognition immediately instead of waiting for mic permission, added error handling, changed the flow… still broken. the Web Speech API is just built different (bad different) so i ripped it out completely. replaced it with MediaRecorder + Gemini for transcription. now when u tap the orb it records audio using the MediaRecorder API, sends the audio blob to Gemini, and Gemini transcribes it. way more reliable because it doesnt depend on browser-specific speech engines. it just works the gemini model error THEN the gemini model error… we had the wrong model names everywhere lol the chat model was set to gemini-3.5-flash which literally doesnt exist the TTS was gemini-2.5-flash-preview-tts which kept failing silently and falling back to browser TTS the STT was using gemini-2.0-flash which was mid so we updated everything to the right models: chat: gemini-2.5-flash (the actual latest flash model) TTS: gemini-2.5-flash-preview-tts (the dedicated TTS model with audio output) STT: gemini-2.5-flash (for transcribing the recorded audio) and added detailed console logging so we can actually see whats happening when things break. because before it was just silently falling back to browser TTS and we had no idea why the final pipeline: u tap the orb MediaRecorder starts capturing audio from the mic waveforms animate while u speak u tap again to stop audio blob gets sent to Gemini for transcription transcription goes to Gemini for the actual response Gemini responds with text + emotion response gets spoken back using Gemini TTS with the right voice"}, {"post_id": 6232, "ts": "2026-06-10T14:05:36Z", "hours": 3.2247, "text": "devlog#6 added a guide app and 3 new live wallpapers with parallax effect restyled dock and app icons a bit new songs and covers feature to resize window’s length and breadth Go check it out!! :3 its done now (hopefully, i dont want more bugs 💔✌) https://mewoos.vercel.app"}, {"post_id": 6116, "ts": "2026-06-10T09:02:37Z", "hours": 4.6342, "text": "devlog #5 waawaw so i did a complete ui uphaul and polished everything and then added that analog watch and calendar too. also add parallax effect for the wallpapers, then added 2 more songs and then updated the song covers too. then fixed alot of bugs and animation issues. added 3 more static wallpapers and 3 new live wallpapers (ima show that in the next devlog). and then i also added a cute pet which follows ur cursor and if u tap on it u can make her sit!!, tap again and she will start following ur cursor again. should i add more reels tho ? 🥀"}, {"post_id": 5782, "ts": "2026-06-09T18:11:43Z", "hours": 0.6644, "text": "the most app is finally here 😭😭🥀…. drumrolls DOOMSCROLL! 🥀… y a u can now watch 38 exclusive reels on MewoOS now (gonna add more later 😺) and then i added 3 static interactive bagrounds and now working on live wallpapers too andd thennn aaaa ye i added those good looking app icons created from figma and agagin fixed allat of bugs ofc 🥀…. then improved the animations and glass morphism effect and restyled all of the panels and basically the whole ui lol 😭…. and added more gud pics in the gallery and the song count in the music player app went from 6 to 20!! and yes they are real songs and not js some random ahh chimes lol anddddd aaa idk more… maybe that was it for this devlog holdup now lemme cook the livewallpapers and polish things up"}, {"post_id": 5745, "ts": "2026-06-09T17:25:41Z", "hours": 3.8269, "text": "devlog #3 - MewoOS Added a booting animation and fixed allat of bugs and improved dock , animations , and ui (will show these in the next devlog)"}, {"post_id": 5555, "ts": "2026-06-09T11:47:16Z", "hours": 0.9858, "text": "Devlog 2 — MewoOS yayyayayay its finally coming together… basic version is done now ive add some more features and apps and just polish the whole ui a bit too should i add an app for doomscrolling 🥀 ? anyways heres the details of what it has rn :- -added an iframe browser because the jam said “be creative” and my creativity said “put the entire internet inside a window inside a fake OS inside a browser.” it loads Wikipedia and GitHub reliably. most other sites block iframes so its basically a very expensive Wikipedia viewer. but it works and im counting it as a feature also the basic version of music player was alr done but my first thought was “the music player needs REAL music” — not some placeholder beeps, actual songs. so i set up yt-dlp and went on a downloading spree at unholy hours. we got Cruel Angel’s Thesis, YOASOBI’s Idol, Ado’s Usseewa, Night Dancer, Fly Me to the Moon, Feeling Good by Nina Simone, Chopin Ballade No.4 in G minor, Rachmaninoff Piano Concerto No.2 (the full 37MB concerto because i have no concept of file size restraint), Paganini Caprice No.24, and some jazz tracks for the cultured folks. HTML5 audio API handles all of it — play, pause, skip, progress bar, the whole thing. no npm packages, no dependencies, just vibes and tags the UI went through approximately 47 iterations of “is this too pink” vs “is this dark enough” — settled on a deep black (#0A0709) with sakura pink accents and floating ambient glow orbs that drift around the screen like little ghosts of my questionable design choices. windows have glass panels with backdrop blur, the dock has custom SVG icons (not emojis, im not a monster), and the whole thing radiates “what if a gothic cathedral had a kawaii phase” energy 💔💔"}, {"post_id": 5528, "ts": "2026-06-09T10:39:01Z", "hours": 0.6197, "text": "wawawa basic frontend almost done (js have to polish it now )"}]...
|
Title: MewoOS by @subhansh | Stardance
Devlogs:
w Title: MewoOS by @subhansh | Stardance
Devlogs:
wawawa basic frontend almost done (js have to polish it now )
Devlog 2 — MewoOS yayyayayay its finally coming together… basic version is done now ive add some more features and apps and just polish the whole ui a bit too should i add an app for doomscrolling 🥀 ? anyways heres the details of what it has rn :- -added an iframe browser because the jam said “be creative” and my creativity said “put the entire internet inside a window inside a fake OS inside a browser.” it loads Wikipedia and GitHub reliably. most other sites block iframes so its basically a very expensive Wikipedia viewer. but it works and im counting it as a feature also the basic version of music player was alr done but my first thought was “the music player needs REAL music” — not some placeholder beeps, actual songs. so i set up yt-dlp and went on a downloading spree at unholy hours. we got Cruel Angel’s Thesis, YOASOBI’s Idol, Ado’s Usseewa, Night Dancer, Fly Me to the Moon, Feeling Good by Nina Simone, Chopin Ballade No.4 in G minor, Rachmaninoff Piano Concerto No.2 (the full 37MB concerto because i have no concept of file size restraint), Paganini Caprice No.24, and some jazz tracks for the cultured folks. HTML5 audio API handles all of it — play, pause, skip, progress bar, the whole thing. no npm packages, no dependencies, just vibes and tags the UI went through approximately 47 iterations of “is this too pink” vs “is this dark enough” — settled on a deep black (#0A0709) with sakura pink accents and floating ambient glow orbs that drift around the screen like little ghosts of my questionable design choices. windows have glass panels with backdrop blur, the dock has custom SVG icons (not emojis, im not a monster), and the whole thing radiates “what if a gothic cathedral had a kawaii phase” energy 💔💔
devlog #3 - MewoOS Added a booting animation and fixed allat of bugs and improved dock , animations , and ui (will show these in the next devlog)
the most app is finally here 😭😭🥀…. drumrolls DOOMSCROLL! 🥀… y a u can now watch 38 exclusive reels on MewoOS now (gonna add more later 😺) and then i added 3 static interactive bagrounds and now working on live wallpapers too andd thennn aaaa ye i added those good looking app icons created from figma and agagin fixed allat of bugs ofc 🥀…. then improved the animations and glass morphism effect and restyled all of the panels and basically the whole ui lol 😭…. and added more gud pics in the gallery and the song count in the music player app went from 6 to 20!! and yes they are real songs and not js some random ahh chimes lol anddddd aaa idk more… maybe that was it for this devlog holdup now lemme cook the livewallpapers and polish things up
devlog #5 waawaw so i did a complete ui uphaul and polished everything and then added that analog watch and calendar too. also add parallax effect for the wallpapers, then added 2 more songs and then updated the song covers too. then fixed alot of bugs and animation issues. added 3 more static wallpapers and 3 new live wallpapers (ima show that in the next devlog). and then i also added a cute pet which follows ur cursor and if u tap on it u can make her sit!!, tap again and she will start following ur cursor again. should i add more reels tho ? 🥀
devlog#6 added a guide app and 3 new live wallpapers with parallax effect restyled dock and app icons a bit new songs and covers feature to resize window’s length and breadth Go check it out!! :3 its done now (hopefully, i dont want more bugs 💔✌) https://mewoos.vercel.app
OKAAAA WE’RE BACCKKK.. aaa so i did all of the basic stuffs in the webos1 (mandatory features, basic glass morph for the windows, parallax effects on the wallpaper etc) so now in the part 2… its time to take this further… so i started with fixing the lag and some minor bugs and then we redesigned every window and dock with an aurora tint and enhanced glassmorphism with glare and then came the features that i added… i mean they are not complete but the base is ready the dock got upgraded added a Files app(new feature..yey) to the dock with a sky blue gradient icon. the file manager opens with a proper glassmorphic window. breadcrumbs for navigation, grid and list views, right click menus, inline rename… the whole deal. double click a file and it opens in an editor with Ctrl+S to save. tab inserts spaces. its got the mewoOS glass treatment on everything what is meo (new feature…yey) so meo is basically the AI assistant that lives inside MewoOS. think of it like Siri but actually useful and with personality….a menace on silicon. u tap the orb, speak to her, and she responds. she can open apps, close them, minimize, maximize — basically control the whole OS with voice. she has emotions too — happy, excited, concerned, playful, calm, tired, urgent — and her voice changes based on that. she roasts u but its from love. like a best friend who also happens to be an AI running inside an operating system the whole thing runs on Gemini — both the brain (chat) and the voice (TTS). she uses Gemini 2.5 Flash for thinking and Gemini 2.5 Flash Preview TTS for speaking back to u with different voices depending on her mood now the part that took forever — making meo actually work bruh so making meo work took some work… idk how many times i debugged for her to actually listen to me the STT problem so the original problem was the Web Speech API — that thing is just unreliable as hell. it only works in Chrome, needs HTTPS or localhost, and half the time it just doesnt fire onresult at all. like u speak, it says “listening…”, then nothing happens. the text never shows up. no transcription, no response, nothing i tried fixing it multiple times — started recognition immediately instead of waiting for mic permission, added error handling, changed the flow… still broken. the Web Speech API is just built different (bad different) so i ripped it out completely. replaced it with MediaRecorder + Gemini for transcription. now when u tap the orb it records audio using the MediaRecorder API, sends the audio blob to Gemini, and Gemini transcribes it. way more reliable because it doesnt depend on browser-specific speech engines. it just works the gemini model error THEN the gemini model error… we had the wrong model names everywhere lol the chat model was set to gemini-3.5-flash which literally doesnt exist the TTS was gemini-2.5-flash-preview-tts which kept failing silently and falling back to browser TTS the STT was using gemini-2.0-flash which was mid so we updated everything to the right models: chat: gemini-2.5-flash (the actual latest flash model) TTS: gemini-2.5-flash-preview-tts (the dedicated TTS model with audio output) STT: gemini-2.5-flash (for transcribing the recorded audio) and added detailed console logging so we can actually see whats happening when things break. because before it was just silently falling back to browser TTS and we had no idea why the final pipeline: u tap the orb MediaRecorder starts capturing audio from the mic waveforms animate while u speak u tap again to stop audio blob gets sent to Gemini for transcription transcription goes to Gemini for the actual response Gemini responds with text + emotion response gets spoken back using Gemini TTS with the right voice
MewoOS Devlog #8 🍓😺 Pixel Cat Redesign redesigned the pixel cat that follows ur cursor around the desktop. she looks way better now ngl…more detailed sprite, smoother animation, and shes silver now which fits the dark theme way more. u can click her to toggle between following ur cursor or staying pinned. small thing but it makes the whole desktop feel alive fr Meo Can Control The OS (waw..dem ) this ones big. meo can now literally control the whole os. tell her “open the calculator” and she opens it. “open the terminal” — done. “minimize all windows” — gone. she parses whatever u say and does OS actions through action tags. supports open, close, min, max, focus, minimizeAll, closeAll. feels like ur actually talking to the os not just a chatbot Voice & Emotions Rework improved meos voice n emotions big time. she now detects what ur saying and adjusts — happy, excited, concerned, playful, calm, tired, urgent. each one has its own rate, pitch, personality. the voice sounds way less robotic now and more natural. also fixed that annoying thing where the reply would show up in the chat 4 seconds before the tts spoke it. now they happen at the same time so its smooth 4 Desktop Workspaces added a desktop workspace system. u get 4 separate desktops switch between them with ctrl 1 2 3 4. each desktop has its own windows so u can have coding stuff on desktop 1 music and browser on desktop 2 etc. ctrl left right cycles between them. feels like a real os now not just a web page Mewo Store(new feature…yey) built a full app store for mewoos. premium dock style icons glassmorphism ui category filters search the works. and the apps u can actually install and they actually work when u open them Installable Apps weather — 5 cities 7 day forecast animated temp bars humidity wind stats kanban board — drag and drop 3 columns colored tags 7 pre loaded tasks focus timer — working pomodoro timer svg ring progress 3 modes focus short long session stats type racer — typing speed test real time character highlighting green red wpm calc 8 sentences paint studio — actual working canvas color picker brush size clear button u can draw on it image editor — 8 filter presets original warm cool b&w vintage vivid fade noir brightness contrast saturation sliders uses a real image Store Features when u install an app theres a progress bar animation then the app icon shows up in the dock with a premium dock style icon. and u can uninstall apps too removes from dock and closes any open windows…. mewo meow mewo
final devlog for mewo os 🍓😺 okay so guess wat… i was debugging mewo again and again for a bug that wasnt even real 💔… what happened is.. i opened mewo saw that nothing is functional and i was like everything looks gud why its not wokring… and then i saw my mails and found out that vercel and supabase paused my web cause i ran out of the free tier 💔😭… anyways aside from this i added ts js for the vibes lol Window Switcher Open 2+ apps (e.g. Calculator + Terminal + Notes) Press Ctrl+Shift+A — overlay appears with all open windows Press Tab to cycle forward, Shift+Tab to cycle backward Release Shift or click a window to switch to it Escape to cancel also i did optimized mewo earlier but it was still lagging a bit cause of overlaying animations and effects so i fixed that too ts time redeployed on vercel again!! try it out ^-^ :- https://mewoos.vercel.app
Ships:
Made the most productive web operating system ever created comes with a browser, terminal, music player, gallery, customizable wallpapers, draggable windows, and doomscroll — because no operating system is complete without destroying your attention span and we must scroll and larp… built with react, typescript, and questionable life choices :3
Made the most productive web operating system ever created comes with a browser, terminal, music player, gallery, customizable wallpapers, draggable windows, and doomscroll — because no operating system is complete without destroying your attention span… built with react, typescript, and questionable life choices :3 new features :- functional file system voice assistant with vocal modulation and os control 4 desktop workspace mewo store (more apps that u can actually install !!)...
|
1792975805.784023
|
1793062205.784023
|
|
43024
|
nwwm by @pinetree182 | Stardance
|
pinetree182
|
1
|
30.0
|
496
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-24T02:18:12Z", "hours": 30.0, "multiplier": 16.48, "payout": 496, "blessing": "neutral", "text": "I made nwwm, a simple tiling window manager for the X windowing system, a popular display server for Linux. Its job is basically to decide where windows go on the screen and how they should look, as well as listen to keypresses and decide what should happen. I ran into quite a few issues since I was using Rust which is not a language I’m 100% familiar with, and this was also my first proper systems-level project, but I managed to pull through and I’m really happy with where nwwm has gotten. Some features include: Tiling Multiple workspaces Support for docked windows, like statusbars Config loading from ~/.config/nwwm/config.toml Configurable keybinds (Barebones) EWMH support Since this is a Linux project, I know that most people won’t be able to test it so I’ve made a small video showing off some of the core features. You can view this video on the website, just scroll down to the “Demo” section and play the video.", "repo": "https://github.com/annaxiomm/nwwm", "demo": "https://annaxiomm.github.io/nwwm"}]...
|
[{"post_id": 72932, "ts": "202 [{"post_id": 72932, "ts": "2026-09-24T02:13:03Z", "hours": 5.9592, "text": "devlog #8 - the end is near stardance is coming to a close, the school holidays are nearing, and I’m running out of things to add to nwwm so I think I’m going to ship it here. I’m really happy with how far I’ve come in this project and I’ve learned a ton about X11, Rust, and myself. GAPS!! every good modern tiling window manager has gaps, so naturally I added them to nwwm. you can configure them in the config.toml through the gaps_inner and gaps_outer rules. gaps_inner controls the gaps between the windows themselves, and gaps_outer controls the gaps between the windows and the outer edge of the screen. other essentials I also added the ability to move windows between two workspaces. you can now set keybinds with the movetoworkspace <workspace> action to move the currently focused window to <workspace> . this was fairly easy to implement but I did run into a bug where the wm wasn’t correctly selecting a new window to focus after the focused window was moved to another workspace. I also finally added the ability to move focus backwards instead of just forwards, which you can do with the focus last action. promotional material I also sunk a few hours into making a cool little website for nwwm. it’s pretty generic but it gets the job done, and has a demo, config, screenshot, project description, and an example config file. you can see the website at annaxiomm.github.io/nwwm . finally, I made a simple logo in the form of a compass (because nwwm stands for N orth W est W indow M anager ) next steps ship it cash in my loot"}, {"post_id": 67018, "ts": "2026-09-13T01:49:32Z", "hours": 1.0403, "text": "devlog #7 - sanity check a bit of a short devlog here, but I decided to take a break from programming to make the repo look a bit more presentable (I’m planning to ship soon so it needs to look good for the camera!) README changes the existing README was quite barebones so I fully fleshed it out with a bunch of new stuff, including a proper testing tutorial, configuration help, and an entire section dedicated to what’s wrong with the project and what I’m going to fix when I decide to try and rewrite this bowl of spaghetti at some point next steps cleaning up the project, writting code comments, etc polishing up the project with some final features, like vanity gaps making a landing page for the wm because I know that when it comes time to ship, most people won’t be able to try out nwwm for themselves so I want to make a little showcase (so I don’t get a bad grade for usability!)"}, {"post_id": 66302, "ts": "2026-09-12T02:00:06Z", "hours": 3.9894, "text": "devlog #6 - CONFIGURATION!!! adding a config file has been in the next steps of just about every devlog i’ve made, and i finally got around to doing it! config.toml nwwm wouldn’t be a cliche rust project without a config.toml . but in all seriousness, i really like toml as a configuration language and it integrates really cleanly with rust anyway. so far, you can set parameters like window border, mod key, and default layout in $HOME/.config/nwwm/config.toml and nwwm will read those and apply them at runtime. unfortunately, config isn’t reloadable at the moment (next step?). you can also configure keybinds and even startup commands! i would really have liked to have lua scripting as a config but it’s just a bit too hard for a first wm project. the error handling is pretty hairy at the moment but i’ll fix that soon i promise other stuff i’ve changed not much else happened, but i added a feature where debug logging only happens if you run nwwm with -v or --verbose . next steps better error handling in config loading config re loading at runtime better documentation (maybe a website?)"}, {"post_id": 64645, "ts": "2026-09-09T06:37:27Z", "hours": 6.4375, "text": "devlog #5 - self hosted? ok it’s been quite a while since my last devlog but i’ve added a ton of new stuff - to the point where nwwm might become my main window manager soon! docks n’ struts “what even are those?” i hear you ask, and fear not because i am here to answer. a docked window is any kind of window that isn’t tiled, doesn’t belong to any workspace, and reserves space on the screen that other windows can’t take up. a really common example is a status bar: it persists between desktops, and reserves space on the screen. a strut is basically the space on the screen that it reserves. i implemented support for this so you can now use your favourite status bar with nwwm! i also spent like 3 hours debugging an error that happened sometimes when you closed a docked window, and ended up fixing it by complete accident workspaces 🧰 a window manager is basically useless without workspaces, so naturally i’ve added them to nwwm. they were actually quite easy to implement since i’ve technically supported them since day 1 i just never added workspace switching. basically when you switch a workspace it checks to see if the workspace exists, then it unfocuses the current window, unmaps (hides) all the windows in the current workspace, switches to the new workspace, maps (shows) all the windows in the new workspace, and focuses the first window in the new workspace. phew, try saying that in one breath! status bar compatibility as i mentioned earlier, i added struts and docks so that status bars can reserve space on the screen, but i also added some ewmh hints that allow status bars to see and change the current desktop. this was really easy, i just had to add some atoms and listen for ClientMessage events, and then connect those to my existing code next steps config file loading more ewmh 😭"}, {"post_id": 46047, "ts": "2026-08-12T23:48:13Z", "hours": 3.6097, "text": "devlog #4 - +10 usability! we’re now shifting from the realm of “experimental” to “experimental but usable ”. i’ve added a ton of new features recently and i’m really happy with how nwwm is coming together. actually good tiling i’ve added 2 new tiling layouts: monocle, and master/stack. monocle is the easiest to understand: all windows are the same size as the screen, and the currently focused window is brought to the front. master/stack is the traditional layout you see in wms like dwm, where there is a “master” window that takes up half of the screen and the rest split vertically (or “stack”) on the other half of the screen. i also added keybinds that switch between layouts revamped keybind system previously, the keybind system was just using raw x11 keycodes which were really annoying because they don’t match up with any other system (25 = w??) and are keymap-dependant. so, i switched to using xkbcommon and now keybinds are defined with more human-readable keysyms like KEY_w or KEY_Return . i also implemented a small command runner system so now you can launch commands with keybinds. so far i’ve set Mod+Enter to launch kitty and ofc these will all be configurable through the config file mysterious bugs i spent ages trying to debug some weird behaviour where bound keys wouldn’t register as keypresses if no windows had been opened in nwwm yet. after a lot of trial and error, and a few ChatGPT therapy sessions, i discovered that my error was one letter: i had keyboard_mode in the global mouse grab (which i need for click to focus) set to GrabMode::Sync instead of GrabMode::Async (fml) next steps more usability (moving windows, closing windows) better EWMH compliance support for temporary and permanent floating windows (i.e. tiled windows that you make float, and windows that only float like rofi) config file when?"}, {"post_id": 42968, "ts": "2026-08-07T23:32:08Z", "hours": 3.5736, "text": "devlog #3 - wow! visuals! how many times can i call conn.send_request() in one program?? config file i made a struct called Config which the wm owns, and it has values like border width, color, and keybinds. eventually it will read from a config.toml file but for now it’s all hard coded in the source code. window borders windows now have borders with color and width deriving from the Config (meaning they’ll be configurable through a config file at some point!). also, the currently focused window has a different border color (also configurable!) modular keybinds instead of hard-coding keybinds, i gave Config a child called Keybinds , which are hard coded in the source code… but eventually they’ll be part of the config file. when each keybind is called, it calls an Action which is linked to a function call in the wm. later there’ll be plenty of actions for anything you can think of, but for now theres only FocusNext which… focuses the next window! next steps config.toml loading better tiling (again) gaps EWMH compliance"}, {"post_id": 42307, "ts": "2026-08-06T23:15:26Z", "hours": 2.8794, "text": "devlog #2 - an actual window manager x11 is an ancient beast, full of mismatched types (screen height is a u16, window height is a u32, window position is an i32, etc), difficult protocols, and more double colons than you can shake a stick at, but i’m working through it. a (tiling) window manager i started off by storing a list of open workspaces in the main wm struct, and each workspace has a list of open windows (and a tiling layout). then, i made the wm listen for DestroyNotify events and remove them from their respective workspaces. soon after marvelling at my creation i realised that i could only see one window at a time, so i worked on implementing a basic tiling algorithm. so far, all i have is columns ( window_width = screen_width / num_of_windows ) but i’m working on adding master-stack tiling (what dwm uses) focus! i also realised that it’s no use having multiple windows if you can only use type on one, so i made each window grab the left click, and then listen for ButtonPress events, focusing the clicked window. next steps more tiling layouts cosmetic stuff (borders, gaps) keyboard shortcuts"}, {"post_id": 40452, "ts": "2026-08-03T23:38:06Z", "hours": 2.6114, "text": "devlog #1 - getting things started after working on tundra I decided that I wanted to make a window manager for an actual os instead, so I loaded arch onto an old macbook and got started. xlib woes I initially started by loosely following a tutorial that uses xlib for rust, but I soon realised that any direct mapping to C from rust is going to be an absolute horror to use (literally every function call had to be unsafe), so I switched to xcb. it has a slightly different API but it’s cleaner and i3 uses it so it must be good. current features: it runs it doesn’t crash you can open a window (by externally injecting it from a command prompt next steps: storing open windows in a struct / list basic tiling"}]...
|
Title: nwwm by @pinetree182 | Stardance
Devlogs:
Title: nwwm by @pinetree182 | Stardance
Devlogs:
devlog #1 - getting things started after working on tundra I decided that I wanted to make a window manager for an actual os instead, so I loaded arch onto an old macbook and got started. xlib woes I initially started by loosely following a tutorial that uses xlib for rust, but I soon realised that any direct mapping to C from rust is going to be an absolute horror to use (literally every function call had to be unsafe), so I switched to xcb. it has a slightly different API but it’s cleaner and i3 uses it so it must be good. current features: it runs it doesn’t crash you can open a window (by externally injecting it from a command prompt next steps: storing open windows in a struct / list basic tiling
devlog #2 - an actual window manager x11 is an ancient beast, full of mismatched types (screen height is a u16, window height is a u32, window position is an i32, etc), difficult protocols, and more double colons than you can shake a stick at, but i’m working through it. a (tiling) window manager i started off by storing a list of open workspaces in the main wm struct, and each workspace has a list of open windows (and a tiling layout). then, i made the wm listen for DestroyNotify events and remove them from their respective workspaces. soon after marvelling at my creation i realised that i could only see one window at a time, so i worked on implementing a basic tiling algorithm. so far, all i have is columns ( window_width = screen_width / num_of_windows ) but i’m working on adding master-stack tiling (what dwm uses) focus! i also realised that it’s no use having multiple windows if you can only use type on one, so i made each window grab the left click, and then listen for ButtonPress events, focusing the clicked window. next steps more tiling layouts cosmetic stuff (borders, gaps) keyboard shortcuts
devlog #3 - wow! visuals! how many times can i call conn.send_request() in one program?? config file i made a struct called Config which the wm owns, and it has values like border width, color, and keybinds. eventually it will read from a config.toml file but for now it’s all hard coded in the source code. window borders windows now have borders with color and width deriving from the Config (meaning they’ll be configurable through a config file at some point!). also, the currently focused window has a different border color (also configurable!) modular keybinds instead of hard-coding keybinds, i gave Config a child called Keybinds , which are hard coded in the source code… but eventually they’ll be part of the config file. when each keybind is called, it calls an Action which is linked to a function call in the wm. later there’ll be plenty of actions for anything you can think of, but for now theres only FocusNext which… focuses the next window! next steps config.toml loading better tiling (again) gaps EWMH compliance
devlog #4 - +10 usability! we’re now shifting from the realm of “experimental” to “experimental but usable ”. i’ve added a ton of new features recently and i’m really happy with how nwwm is coming together. actually good tiling i’ve added 2 new tiling layouts: monocle, and master/stack. monocle is the easiest to understand: all windows are the same size as the screen, and the currently focused window is brought to the front. master/stack is the traditional layout you see in wms like dwm, where there is a “master” window that takes up half of the screen and the rest split vertically (or “stack”) on the other half of the screen. i also added keybinds that switch between layouts revamped keybind system previously, the keybind system was just using raw x11 keycodes which were really annoying because they don’t match up with any other system (25 = w??) and are keymap-dependant. so, i switched to using xkbcommon and now keybinds are defined with more human-readable keysyms like KEY_w or KEY_Return . i also implemented a small command runner system so now you can launch commands with keybinds. so far i’ve set Mod+Enter to launch kitty and ofc these will all be configurable through the config file mysterious bugs i spent ages trying to debug some weird behaviour where bound keys wouldn’t register as keypresses if no windows had been opened in nwwm yet. after a lot of trial and error, and a few ChatGPT therapy sessions, i discovered that my error was one letter: i had keyboard_mode in the global mouse grab (which i need for click to focus) set to GrabMode::Sync instead of GrabMode::Async (fml) next steps more usability (moving windows, closing windows) better EWMH compliance support for temporary and permanent floating windows (i.e. tiled windows that you make float, and windows that only float like rofi) config file when?
devlog #5 - self hosted? ok it’s been quite a while since my last devlog but i’ve added a ton of new stuff - to the point where nwwm might become my main window manager soon! docks n’ struts “what even are those?” i hear you ask, and fear not because i am here to answer. a docked window is any kind of window that isn’t tiled, doesn’t belong to any workspace, and reserves space on the screen that other windows can’t take up. a really common example is a status bar: it persists between desktops, and reserves space on the screen. a strut is basically the space on the screen that it reserves. i implemented support for this so you can now use your favourite status bar with nwwm! i also spent like 3 hours debugging an error that happened sometimes when you closed a docked window, and ended up fixing it by complete accident workspaces 🧰 a window manager is basically useless without workspaces, so naturally i’ve added them to nwwm. they were actually quite easy to implement since i’ve technically supported them since day 1 i just never added workspace switching. basically when you switch a workspace it checks to see if the workspace exists, then it unfocuses the current window, unmaps (hides) all the windows in the current workspace, switches to the new workspace, maps (shows) all the windows in the new workspace, and focuses the first window in the new workspace. phew, try saying that in one breath! status bar compatibility as i mentioned earlier, i added struts and docks so that status bars can reserve space on the screen, but i also added some ewmh hints that allow status bars to see and change the current desktop. this was really easy, i just had to add some atoms and listen for ClientMessage events, and then connect those to my existing code next steps config file loading more ewmh 😭
devlog #6 - CONFIGURATION!!! adding a config file has been in the next steps of just about every devlog i’ve made, and i finally got around to doing it! config.toml nwwm wouldn’t be a cliche rust project without a config.toml . but in all seriousness, i really like toml as a configuration language and it integrates really cleanly with rust anyway. so far, you can set parameters like window border, mod key, and default layout in $HOME/.config/nwwm/config.toml and nwwm will read those and apply them at runtime. unfortunately, config isn’t reloadable at the moment (next step?). you can also configure keybinds and even startup commands! i would really have liked to have lua scripting as a config but it’s just a bit too hard for a first wm project. the error handling is pretty hairy at the moment but i’ll fix that soon i promise other stuff i’ve changed not much else happened, but i added a feature where debug logging only happens if you run nwwm with -v or --verbose . next steps better error handling in config loading config re loading at runtime better documentation (maybe a website?)
devlog #7 - sanity check a bit of a short devlog here, but I decided to take a break from programming to make the repo look a bit more presentable (I’m planning to ship soon so it needs to look good for the camera!) README changes the existing README was quite barebones so I fully fleshed it out with a bunch of new stuff, including a proper testing tutorial, configuration help, and an entire section dedicated to what’s wrong with the project and what I’m going to fix when I decide to try and rewrite this bowl of spaghetti at some point next steps cleaning up the project, writting code comments, etc polishing up the project with some final features, like vanity gaps making a landing page for the wm because I know that when it comes time to ship, most people won’t be able to try out nwwm for themselves so I want to make a little showcase (so I don’t get a bad grade for usability!)
devlog #8 - the end is near stardance is coming to a close, the school holidays are nearing, and I’m running out of things to add to nwwm so I think I’m going to ship it here. I’m really happy with how far I’ve come in this project and I’ve learned a ton about X11, Rust, and myself. GAPS!! every good modern tiling window manager has gaps, so naturally I added them to nwwm. you can configure them in the config.toml through the gaps_inner and gaps_outer rules. gaps_inner controls the gaps between the windows themselves, and gaps_outer controls the gaps between the windows and the outer edge of the screen. other essentials I also added the ability to move windows between two workspaces. you can now set keybinds with the movetoworkspace <workspace> action to move the currently focused window to <workspace> . this was fairly easy to implement but I did run into a bug where the wm wasn’t correctly selecting a new window to focus after the focused window was moved to another workspace. I also finally added the ability to move focus backwards instead of just forwards, which you can do with the focus last action. promotional material I also sunk a few hours into making a cool little website for nwwm. it’s pretty generic but it gets the job done, and has a demo, config, screenshot, project description, and an example config file. you can see the website at annaxiomm.github.io/nwwm . finally, I made a simple logo in the form of a compass (because nwwm stands for N orth W est W indow M anager ) next steps ship it cash in my loot
Ships:
I made nwwm, a simple tiling window manager for the X windowing system, a popular display server for Linux. Its job is basically to decide where windows go on the screen and how they should look, as well as listen to keypresses and decide what should happen. I ran into quite a few issues since I was using Rust which is not a language I’m 100% familiar with, and this was also my first proper systems-level project, but I managed to pull through and I’m really happy with where nwwm has gotten. Some features include: Tiling Multiple workspaces Support for docked windows, like statusbars Config loading from ~/.config/nwwm/config.toml Configurable keybinds (Barebones) EWMH support Since this is a Linux project, I know that most people won’t be able to test it so I’ve made a small video showing off some of the core features. You can view this video on the website, just scroll down to the “Demo” section and play the video....
|
1793004562.7687805
|
1793090962.7687805
|
|
27038
|
CodeKidsIDE by @Nanos | Stardance
|
Nanos
|
4
|
39.0
|
494
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T09:37:04Z", "hours": 14.0, "multiplier": 11.29, "payout": 132, "blessing": "neutral", "text": "Stable Desktop Synchronization (Live Sync Reworked) One of the biggest issues discovered during testing involved the Desktop synchronization system. Previously, if you linked the Desktop application while it didn’t contain any projects or files, the synchronization process treated the empty Desktop workspace as the latest version and deleted the existing files stored on the Website. This could result in accidental data loss. The synchronization logic has now been completely redesigned. The Website is now considered the source of truth during the initial connection. When a Desktop client is linked for the first time, the Web version automatically pushes all current files to the Desktop instead of allowing the Desktop to overwrite existing data. This guarantees that users never lose their work simply because they connected a fresh installation. Another issue appeared while editing code in the browser. Because Live Sync constantly updated the editor, keyboard shortcuts such as Ctrl+Z (Undo) could stop working correctly or even freeze the editing experience. This has also been fixed. While the user is actively editing and the editor has focus, incoming synchronization updates are temporarily ignored. Once editing stops, synchronization continues normally in the background. As a result, undo/redo shortcuts now work exactly as expected without interfering with Live Sync. Smarter Error Detection and Feedback The error reporting system has been completely rewritten to provide much clearer and more helpful feedback. Previously, runtime errors could display completely incorrect line numbers, sometimes reporting errors hundreds of lines away from where the problem actually existed. This made debugging frustrating, especially for beginners. The new parser now extracts the correct source location and accurately reports the line where the error originated using the detected line information. In addition, many common programming mistakes are now recognized automatically. Instead of displaying only a technical interpreter message, CodeKids now explains the problem in plain language. For example: Missing quotation marks now generate a clear explanation telling the user that strings must be enclosed inside single or double quotes. Mixing tabs and spaces produces an understandable warning instead of a confusing interpreter error. Common syntax mistakes now include helpful hints and suggestions for fixing the issue. Every major error now includes a dedicated [TIP] section whenever possible, helping beginners understand not only what went wrong, but also how to solve it. UI & User Experience Improvements Several parts of the interface have been modernized to create a smoother and more professional experience. All default browser alert() and confirm() dialogs have been removed and replaced with fully custom modal windows that match the application’s design. Toast notifications have also been introduced across the IDE, providing lightweight feedback for actions such as saving files, synchronization events, successful operations, and warnings without interrupting the user’s workflow. The onboarding experience has also been improved. Previously, the guided tutorial could sometimes appear before the welcome screen had finished loading, leaving users unable to continue. The onboarding system now initializes correctly, ensuring that the welcome screen appears first before starting the interactive tutorial. This creates a much smoother first-time experience for new users.", "repo": "https://github.com/na1os/codeKidsIDE", "demo": "https://m1hai.xyz/s/"}, {"ship_num": 2, "ts": "2026-07-07T19:34:57Z", "hours": 15.0, "multiplier": 18.32, "payout": 269, "blessing": "neutral", "text": "CodeKids IDE is a beginner-friendly programming environment designed to help kids learn Python through interactive lessons, helpful coding tools, and a simple interface. Highlights Multi-project workspace with support for multiple files and folders Import and export entire projects as .zip Cross-file Python imports (modules work across files) Autocomplete for Python keywords, variables, and functions Better Error Feedback with beginner-friendly explanations instead of confusing Python errors Explain Code to help students understand what their code does Smart Fix for common beginner mistakes Search & Replace Interactive lessons with hints, XP, achievements, badges, and daily challenges Multiple editor themes, including a custom Kids theme More stable Python execution with crash protection and improved project saving This release marks the completion of the web version (v2). My next goal is to build an even better desktop version with more advanced features, improved performance, and an even better learning experience for kids.", "repo": "https://github.com/na1os/codeKidsIDE", "demo": "https://m1hai.xyz/s/"}, {"ship_num": 3, "ts": "2026-07-02T09:31:00Z", "hours": 6.0, "multiplier": 9.08, "payout": 57, "blessing": "neutral", "text": "A web version for CideKidsIde with almost all the features of the app", "repo": "https://github.com/na1os/codeKidsIDE", "demo": "https://m1hai.xyz/s/"}, {"ship_num": 4, "ts": "2026-06-27T22:16:42Z", "hours": 4.0, "multiplier": 8.14, "payout": 36, "blessing": "neutral", "text": "What I did: I built a simple Python IDE for kids using CustomTkinter. It has a code editor, a file explorer, and a run button. I also added a lessons tab with badges and a beginner mode that explains errors. What was hard: The hardest part was running the code without freezing the app. I had to learn how to use the threading module to run the subprocess in the background. Also, CustomTkinter textboxes do not support tags well, so I had to use the standard tkinter Text widget for the editor to get syntax highlighting and line numbers working. What I am proud of: I am proud of the error helper. Python tracebacks are scary for an 8 year old. I wrote a script that reads the errors and gives simple hints, like telling them they forgot a colon or that they cannot divide by zero. What people should know to test it: You need to install customtkinter first. Try the templates like the Snake Game and go through the lessons tab to see how the badges unlock. I will modify it in the future to add more features.", "repo": "https://github.com/na1os/codeKidsIDE", "demo": "https://m1hai.xyz/s/"}]...
|
[{"post_id": 28800, "ts": "202 [{"post_id": 28800, "ts": "2026-07-15T09:30:25Z", "hours": 12.5333, "text": "Stable Desktop Synchronization (Live Sync Reworked) One of the biggest issues discovered during testing involved the Desktop synchronization system. Previously, if you linked the Desktop application while it didn’t contain any projects or files, the synchronization process treated the empty Desktop workspace as the latest version and deleted the existing files stored on the Website. This could result in accidental data loss. The synchronization logic has now been completely redesigned. The Website is now considered the source of truth during the initial connection. When a Desktop client is linked for the first time, the Web version automatically pushes all current files to the Desktop instead of allowing the Desktop to overwrite existing data. This guarantees that users never lose their work simply because they connected a fresh installation. Another issue appeared while editing code in the browser. Because Live Sync constantly updated the editor, keyboard shortcuts such as Ctrl+Z (Undo) could stop working correctly or even freeze the editing experience. This has also been fixed. While the user is actively editing and the editor has focus, incoming synchronization updates are temporarily ignored. Once editing stops, synchronization continues normally in the background. As a result, undo/redo shortcuts now work exactly as expected without interfering with Live Sync. Smarter Error Detection and Feedback The error reporting system has been completely rewritten to provide much clearer and more helpful feedback. Previously, runtime errors could display completely incorrect line numbers, sometimes reporting errors hundreds of lines away from where the problem actually existed. This made debugging frustrating, especially for beginners. The new parser now extracts the correct source location and accurately reports the line where the error originated using the detected line information. In addition, many common programming mistakes are now recognized automatically. Instead of displaying only a technical interpreter message, CodeKids now explains the problem in plain language. For example: Missing quotation marks now generate a clear explanation telling the user that strings must be enclosed inside single or double quotes. Mixing tabs and spaces produces an understandable warning instead of a confusing interpreter error. Common syntax mistakes now include helpful hints and suggestions for fixing the issue. Every major error now includes a dedicated [TIP] section whenever possible, helping beginners understand not only what went wrong, but also how to solve it. UI & User Experience Improvements Several parts of the interface have been modernized to create a smoother and more professional experience. All default browser alert() and confirm() dialogs have been removed and replaced with fully custom modal windows that match the application’s design. Toast notifications have also been introduced across the IDE, providing lightweight feedback for actions such as saving files, synchronization events, successful operations, and warnings without interrupting the user’s workflow. The onboarding experience has also been improved. Previously, the guided tutorial could sometimes appear before the welcome screen had finished loading, leaving users unable to continue. The onboarding system now initializes correctly, ensuring that the welcome screen appears first before starting the interactive tutorial. This creates a much smoother first-time experience for new users."}, {"post_id": 28405, "ts": "2026-07-14T17:19:48Z", "hours": 1.6881, "text": "Web Improvements & Desktop Version V2 I’ve been focusing on improving the web version based on the feedback I received. The goal was to make the IDE easier to use for complete beginners while polishing the overall experience. Web Improvements: Replaced native browser dialogs with custom in-app modals for a more consistent and professional UI. Improved the lesson flow to make challenges clearer and easier to understand. Expanded the educational content with more explanations before exercises. Redesigned the console to provide clearer error messages and better debugging feedback. Improved the code explanation system and started separating code explanations from debugging information. Refined the onboarding experience so new users can quickly learn how to use the IDE. Added and polished project templates directly inside the web IDE. Fixed various UI issues and improved the overall responsiveness and smoothness of the application. These improvements address the majority of the feedback received during testing and make the web version significantly more beginner-friendly. Development Begins on Desktop Version V2 Alongside the improvements to the web version, development has officially begun on Desktop Version V2. Unlike the original desktop version, which was designed as a standalone application, Version V2 is being built to work seamlessly with the web platform, creating a unified experience across both environments. Planned Features: Automatic project synchronization between the desktop app and the website. Continue working on the same project from any device without manually transferring files. Shared lessons, XP, achievements, and learning progress. Automatic project backups. Near real-time synchronization whenever projects are modified. Improved local performance for larger projects while keeping the convenience of cloud access. The long-term vision is to make the web version and Desktop Version V2 feel like a single platform. Users will be able to start coding in the browser, continue on the desktop application, and switch back at any time with their projects and progress automatically synchronized."}, {"post_id": 24261, "ts": "2026-07-07T18:28:17Z", "hours": 3.3, "text": "Web Version Complete The web version of CodeKids IDE is now complete and ready to ship. I added many of the features I had planned, including autocomplete, better error feedback, support for multiple files and folders, cross-file imports, and theme support. The goal was to create a coding environment that is simple enough for beginners while still feeling like a real IDE. Development doesn’t stop here, though. My next focus will be building a much more powerful desktop version, with even more features, better performance, and an improved experience for kids learning to code."}, {"post_id": 24152, "ts": "2026-07-07T15:10:13Z", "hours": 1.8333, "text": "Better Error Feedback & File System Complete I finished implementing Better Error Feedback and the new file system for CodeKids IDE. Error messages are now much more beginner-friendly, helping users understand what went wrong instead of only showing technical errors. For common mistakes, the editor now provides simple explanations and helpful suggestions. For example, if a user tries to use a variable before creating it, CodeKids IDE will display a message like: You used the variable x before creating it. Create it first, for example: x = 10. I also completed the new file system, which now supports creating multiple files and folders, as well as importing Python files from one another. This makes it much easier to organize projects and gives users a more realistic development experience while keeping the interface simple for beginners. To make the editor more enjoyable to use, I also added theme support, allowing users to switch between different editor themes. These features are important milestones for Version 2 and bring CodeKids IDE one step closer to becoming a complete learning environment for new programmers."}, {"post_id": 24097, "ts": "2026-07-07T13:19:40Z", "hours": 5.7517, "text": "Working on Better Error Feedback With autocomplete now finished, I’m currently working on Better Error Feedback. The goal is to make error messages much more beginner-friendly. Instead of displaying confusing technical errors, CodeKids IDE will explain what went wrong in simple language, point to the exact location of the problem, and provide helpful suggestions on how to fix it. I’m also improving how errors are presented so they’re easier to understand at a glance. Since CodeKids IDE is designed for kids and beginners, I want mistakes to become learning opportunities instead of frustrating roadblocks. This feature is still in development, but it’s one of the biggest improvements planned for Version 2 and should make learning to code much more approachable."}, {"post_id": 23718, "ts": "2026-07-06T20:35:50Z", "hours": 4.3011, "text": "Working on Autocomplete Today I started working on one of the biggest features planned for Version 2: autocomplete. I spent time researching how modern code editors provide suggestions while you’re typing and planning how to integrate a similar system into CodeKids IDE. My goal is to make coding easier for beginners by suggesting keywords, built-in functions, and common code patterns as they type."}, {"post_id": 20650, "ts": "2026-07-02T09:28:41Z", "hours": 6.2725, "text": "Just finished a web version"}, {"post_id": 17202, "ts": "2026-06-27T22:13:55Z", "hours": 4.3986, "text": "I tried to build a simple Python IDE for kids using CustomTkinter. I wanted a clean layout with a code editor, file explorer, and a run button that doesn’t freeze the app. I also wanted to translate scary Python errors into simple English and add a lesson system with badges.I managed to do it by using the threading module to run code in the background. I used standard tkinter Text widgets for the code editor so I could add syntax highlighting and line numbers. For the errors, I wrote a helper script that uses regex to find common mistakes and prints friendly hints. The lessons and badges are stored in a local JSON file.I will modify it in the future. Right now the input function doesn’t work because of the background thread, so I want to fix that. I also plan to add more templates and maybe drag and drop file support."}]...
|
Title: CodeKidsIDE by @Nanos | Stardance
Devlogs: Title: CodeKidsIDE by @Nanos | Stardance
Devlogs:
I tried to build a simple Python IDE for kids using CustomTkinter. I wanted a clean layout with a code editor, file explorer, and a run button that doesn’t freeze the app. I also wanted to translate scary Python errors into simple English and add a lesson system with badges.I managed to do it by using the threading module to run code in the background. I used standard tkinter Text widgets for the code editor so I could add syntax highlighting and line numbers. For the errors, I wrote a helper script that uses regex to find common mistakes and prints friendly hints. The lessons and badges are stored in a local JSON file.I will modify it in the future. Right now the input function doesn’t work because of the background thread, so I want to fix that. I also plan to add more templates and maybe drag and drop file support.
Just finished a web version
Working on Autocomplete Today I started working on one of the biggest features planned for Version 2: autocomplete. I spent time researching how modern code editors provide suggestions while you’re typing and planning how to integrate a similar system into CodeKids IDE. My goal is to make coding easier for beginners by suggesting keywords, built-in functions, and common code patterns as they type.
Working on Better Error Feedback With autocomplete now finished, I’m currently working on Better Error Feedback. The goal is to make error messages much more beginner-friendly. Instead of displaying confusing technical errors, CodeKids IDE will explain what went wrong in simple language, point to the exact location of the problem, and provide helpful suggestions on how to fix it. I’m also improving how errors are presented so they’re easier to understand at a glance. Since CodeKids IDE is designed for kids and beginners, I want mistakes to become learning opportunities instead of frustrating roadblocks. This feature is still in development, but it’s one of the biggest improvements planned for Version 2 and should make learning to code much more approachable.
Better Error Feedback & File System Complete I finished implementing Better Error Feedback and the new file system for CodeKids IDE. Error messages are now much more beginner-friendly, helping users understand what went wrong instead of only showing technical errors. For common mistakes, the editor now provides simple explanations and helpful suggestions. For example, if a user tries to use a variable before creating it, CodeKids IDE will display a message like: You used the variable x before creating it. Create it first, for example: x = 10. I also completed the new file system, which now supports creating multiple files and folders, as well as importing Python files from one another. This makes it much easier to organize projects and gives users a more realistic development experience while keeping the interface simple for beginners. To make the editor more enjoyable to use, I also added theme support, allowing users to switch between different editor themes. These features are important milestones for Version 2 and bring CodeKids IDE one step closer to becoming a complete learning environment for new programmers.
Web Version Complete The web version of CodeKids IDE is now complete and ready to ship. I added many of the features I had planned, including autocomplete, better error feedback, support for multiple files and folders, cross-file imports, and theme support. The goal was to create a coding environment that is simple enough for beginners while still feeling like a real IDE. Development doesn’t stop here, though. My next focus will be building a much more powerful desktop version, with even more features, better performance, and an improved experience for kids learning to code.
Web Improvements & Desktop Version V2 I’ve been focusing on improving the web version based on the feedback I received. The goal was to make the IDE easier to use for complete beginners while polishing the overall experience. Web Improvements: Replaced native browser dialogs with custom in-app modals for a more consistent and professional UI. Improved the lesson flow to make challenges clearer and easier to understand. Expanded the educational content with more explanations before exercises. Redesigned the console to provide clearer error messages and better debugging feedback. Improved the code explanation system and started separating code explanations from debugging information. Refined the onboarding experience so new users can quickly learn how to use the IDE. Added and polished project templates directly inside the web IDE. Fixed various UI issues and improved the overall responsiveness and smoothness of the application. These improvements address the majority of the feedback received during testing and make the web version significantly more beginner-friendly. Development Begins on Desktop Version V2 Alongside the improvements to the web version, development has officially begun on Desktop Version V2. Unlike the original desktop version, which was designed as a standalone application, Version V2 is being built to work seamlessly with the web platform, creating a unified experience across both environments. Planned Features: Automatic project synchronization between the desktop app and the website. Continue working on the same project from any device without manually transferring files. Shared lessons, XP, achievements, and learning progress. Automatic project backups. Near real-time synchronization whenever projects are modified. Improved local performance for larger projects while keeping the convenience of cloud access. The long-term vision is to make the web version and Desktop Version V2 feel like a single platform. Users will be able to start coding in the browser, continue on the desktop application, and switch back at any time with their projects and progress automatically synchronized.
Stable Desktop Synchronization (Live Sync Reworked) One of the biggest issues discovered during testing involved the Desktop synchronization system. Previously, if you linked the Desktop application while it didn’t contain any projects or files, the synchronization process treated the empty Desktop workspace as the latest version and deleted the existing files stored on the Website. This could result in accidental data loss. The synchronization logic has now been completely redesigned. The Website is now considered the source of truth during the initial connection. When a Desktop client is linked for the first time, the Web version automatically pushes all current files to the Desktop instead of allowing the Desktop to overwrite existing data. This guarantees that users never lose their work simply because they connected a fresh installation. Another issue appeared while editing code in the browser. Because Live Sync constantly updated the editor, keyboard shortcuts such as Ctrl+Z (Undo) could stop working correctly or even freeze the editing experience. This has also been fixed. While the user is actively editing and the editor has focus, incoming synchronization updates are temporarily ignored. Once editing stops, synchronization continues normally in the background. As a result, undo/redo shortcuts now work exactly as expected without interfering with Live Sync. Smarter Error Detection and Feedback The error reporting system has been completely rewritten to provide much clearer and more helpful feedback. Previously, runtime errors could display completely incorrect line numbers, sometimes reporting errors hundreds of lines away from where the problem actually existed. This made debugging frustrating, especially for beginners. The new parser now extracts the correct source location and accurately reports the line where the error originated using the detected line information. In addition, many common programming mistakes are now recognized automatically. Instead of displaying only a technical interpreter message, CodeKids now explains the problem in plain language. For example: Missing quotation marks now generate a clear explanation telling the user that strings must be enclosed inside single or double quotes. Mixing tabs and spaces produces an understandable warning instead of a confusing interpreter error. Common syntax mistakes now include helpful hints and suggestions for fixing the issue. Every major error now includes a dedicated [TIP] section whenever possible, helping beginners understand not only what went wrong, but also how to solve it. UI & User Experience Improvements Several parts of the interface have been modernized to create a smoother and more professional experience. All default browser alert() and confirm() dialogs have been removed and replaced with fully custom modal windows that match the application’s design. Toast notifications have also been introduced across the IDE, providing lightweight feedback for actions such as saving files, synchronization events, successful operations, and warnings without interrupting the user’s workflow. The onboarding experience has also been improved. Previously, the guided tutorial could sometimes appear before the welcome screen had finished loading, leaving users unable to continue. The onboarding system now initializes correctly, ensuring that the welcome screen appears first before starting the interactive tutorial. This creates a much smoother first-time experience for new users.
Ships:
What I did: I built a simple Python IDE for kids using CustomTkinter. It has a code editor, a file explorer, and a run button. I also added a lessons tab with badges and a beginner mode that explains errors. What was hard: The hardest part was running the code without freezing the app. I had to learn how to use the threading module to run the subprocess in the background. Also, CustomTkinter textboxes do not support tags well, so I had to use the standard tkinter Text widget for the editor to get syntax highlighting and line numbers working. What I am proud of: I am proud of the error helper. Python tracebacks are scary for an 8 year old. I wrote a script that reads the errors and gives simple hints, like telling them they forgot a colon or that they cannot divide by zero. What people should know to test it: You need to install customtkinter first. Try the templates like the Snake Game and go through the lessons tab to see how the badges unlock. I will modify it in the future to add more features.
A web version for CideKidsIde with almost all the features of the app
CodeKids IDE is a beginner-friendly programming environment designed to help kids learn Python through interactive lessons, helpful coding tools, and a simple interface. Highlights Multi-project workspace with support for multiple files and folders Import and export entire projects as .zip Cross-file Python imports (modules work across files) Autocomplete for Python keywords, variables, and functions Better Error Feedback with beginner-friendly explanations instead of confusing Python errors Explain Code to help students understand what their code does Smart Fix for common beginner mistakes Search & Replace Interactive lessons with hints, XP, achievements, badges, and daily challenges Multiple editor themes, including a custom Kids theme More stable Python execution with crash protection and improved project saving This release marks the completion of the web version (v2). My next goal is to build an even better desktop version with more advanced features, improved performance, and an even better learning experience for kids.
Stable Desktop Synchronization (Live Sync Reworked) One of the biggest issues discovered during testing involved the Desktop synchronization system. Previously, if you linked the Desktop application while it didn’t contain any projects or files, the synchronization process treated the empty Desktop workspace as the latest version and deleted the existing files stored on the Website. This could result in accidental data loss. The synchronization logic has now been completely redesigned. The Website is now considered the source of truth during the initial connection. When a Desktop client is linked for the first time, the Web version automatically pushes all current files to the Desktop instead of allowing the Desktop to overwrite existing data. This guarantees that users never lose their work simply because they connected a fresh installation. Another issue appeared while editing code in the browser. Because Live Sync constantly updated the editor, keyboard shortcuts such as Ctrl+Z (Undo) could stop working correctly or even freeze the editing experience. This has also been fixed. While the user is actively editing and the editor has focus, incoming synchronization updates are temporarily ignored. Once editing stops, synchronization continues normally in the background. As a result, undo/redo shortcuts now work exactly as expected without interfering with Live Sync. Smarter Error Detection and Feedback The error reporting system has been completely rewritten to provide much clearer and more helpful feedback. Previously, runtime errors could display completely incorrect line numbers, sometimes reporting errors hundreds of lines away from where the problem actually existed. This made debugging frustrating, especially for beginners. The new parser now extracts the correct source location and accurately reports the line where the error originated using the detected line information. In addition, many common programming mistakes are now recognized automatically. Instead of displaying only a technical interpreter message, CodeKids now explains the problem in plain language. For example: Missing quotation marks now generate a clear explanation telling the user that strings must be enclosed inside single or double quotes. Mixing tabs and spaces produces an understandable warning instead of a confusing interpreter error. Common syntax mistakes now include helpful hints and suggestions for fixing the issue. Every major error now includes a dedicated [TIP] section whenever possible, helping beginners understand not only what went wrong, but also how to solve it. UI & User Experience Improvements Several parts of the interface have been modernized to create a smoother and more professional experience. All default browser alert() and confirm() dialogs have been removed and replaced with fully custom modal windows that match the application’s design. Toast notifications have also been introduced across the IDE, providing lightweight feedback for actions such as saving files, synchronization events, successful operations, and warnings without interrupting the user’s workflow. The onboarding experience has also been improved. Previously, the guided tutorial could sometimes appear before the welcome screen had finished loading, leaving users unable to continue. The onboarding system now initializes correctly, ensuring that the welcome screen appears first before starting the interactive tutorial. This creates a much smoother first-time experience for new users....
|
1792979804.4851303
|
1793066204.4851303
|
|
30641
|
Gun's Skyblock Mod by @GunRattler28 | Stardanc Gun's Skyblock Mod by @GunRattler28 | Stardance...
|
GunRattler28
|
2
|
43.0
|
490
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-26T23:16:58Z", "hours": 30.0, "multiplier": 12.75, "payout": 386, "blessing": "neutral", "text": "I added a custom enderchest UI !!! To see a video showcasing all the features so far go to my website and scroll down til you see the section about the mod", "repo": "https://github.com/GunRattler28/Skyblock-Mod", "demo": "https://github.com/GunRattler28/Guns-Skyblock-Mod/releases"}, {"ship_num": 2, "ts": "2026-07-06T21:07:12Z", "hours": 13.0, "multiplier": 8.8, "payout": 104, "blessing": "neutral", "text": "I created a mod that runs on minecraft 26.2 using fabric. I found this quite challenging since I have low experience with Java as a language but it was so satisfying when I managed to make it work. So far it has: Item Prices (bazaar and lbin) Slot locking (Tap L to lock slot. Locked items can’t be moved or dropped) Custom Scoreboard (Custom scoreboard with a modern pop. Also shows bank balance which isn’t shown by default scoreboard)", "repo": "https://github.com/GunRattler28/Skyblock-Mod", "demo": "https://github.com/GunRattler28/Guns-Skyblock-Mod/releases"}]...
|
[{"post_id": 35202, "ts": "202 [{"post_id": 35202, "ts": "2026-07-26T13:59:54Z", "hours": 1.5242, "text": "Tooltips now show when hovering over items in enderchest UI"}, {"post_id": 29690, "ts": "2026-07-16T19:21:01Z", "hours": 6.8356, "text": "Managed to get the enderchest UI to actually display the amount of items in the stack. Click handling is so much cleaner now…."}, {"post_id": 26696, "ts": "2026-07-11T17:15:03Z", "hours": 10.0247, "text": "I’ve improved my enderchest UI (still have to add backpack UI) but its a bit buggy right now. Working on improving it by not being stupid and just using the functions mojang provided. Idk why I didn’t before lol"}, {"post_id": 25254, "ts": "2026-07-09T12:11:43Z", "hours": 10.2722, "text": "I found that the storage gui felt old and boring and so I made my own. If you click on Ender Chest it runs the /ec 1 command to open the first ender chest page. You can use the buttons that are built into it to go to over pages. The numbers correspond to backpacks. Clicking 1 does /bp 1. (Took a long time because it was supposed to look like firmaments where it is all the pages shown at once but I couldn’t do that)"}, {"post_id": 24039, "ts": "2026-07-07T10:13:42Z", "hours": 1.5456, "text": "I realised a crucial error! Slot locking wasn’t permanent. After an hour and a half of hard work I’ve managed to make slot locking permanent. Now whenever a slot is locked the slot number is written into a file that lives in the config file of minecraft folder. When the slot is unlocked it is deleted from the file. I had to spend a while making sure that it only locks slots when on Hypixel Skyblock but now when you join, it reads all the slots in the file and locks those slots."}, {"post_id": 23731, "ts": "2026-07-06T21:00:50Z", "hours": 6.3661, "text": "Custom scoreboard. I thought that the default scoreboard looked pretty dull. It had a lack of colours, boring font, no pop so I added my own custom scoreboard. I used ‘§’ quite a lot to change how the text looked. Overall, I am quite pleased with how it turned out. (I had to change to a random ironman coop profile I’m part of so that I could show that it shows objectives). It works by having a file which reads data from tab (which has the bank and other details) and another file which reads from the default tab (We can’t see the default tab but it’s data still exists)"}, {"post_id": 22860, "ts": "2026-07-05T14:04:40Z", "hours": 3.3711, "text": "Slot locking. I’ve always had a problem of dropping items when changing tabs as alt is my drop key (as i said last time) so i added slot locking. Pressing L whilst hovering over an item in your inventory locks the slot. When a slot is locked the item inside it can’t be picked up or dropped (this includes when inventory is closed). Trying to drop an item which is slot locked will result in a message which only you can see that tells you the slot is locked. The slot can be unlocked by pressing L while hovering over it again. When your inventory is open a translucent lock icon is over whichever items / slots are locked. How it works: When i go to drop and item, it checks whether the slot the item is in is locked. If it is then it cancels the drop. Same logic applies when trying to move it around in my inventory with mouse"}, {"post_id": 22452, "ts": "2026-07-04T22:25:29Z", "hours": 2.6569, "text": "Items now show prices when hovering over them. Insta sell and insta buy for bazaar items and lbin for ah items. (removed things from inventory because alt is my drop key and was scared to drop item when alt tabbing)"}, {"post_id": 22157, "ts": "2026-07-04T14:03:31Z", "hours": 0.4828, "text": "Managed to set up the base stuff so now I can open minecraft from VS Code and be logged into my account and join hypixel. This will be ESSENTIAL in helping me develop the mod"}]...
|
Title: Gun's Skyblock Mod by @GunRattler28 | S Title: Gun's Skyblock Mod by @GunRattler28 | Stardance
Devlogs:
Managed to set up the base stuff so now I can open minecraft from VS Code and be logged into my account and join hypixel. This will be ESSENTIAL in helping me develop the mod
Items now show prices when hovering over them. Insta sell and insta buy for bazaar items and lbin for ah items. (removed things from inventory because alt is my drop key and was scared to drop item when alt tabbing)
Slot locking. I’ve always had a problem of dropping items when changing tabs as alt is my drop key (as i said last time) so i added slot locking. Pressing L whilst hovering over an item in your inventory locks the slot. When a slot is locked the item inside it can’t be picked up or dropped (this includes when inventory is closed). Trying to drop an item which is slot locked will result in a message which only you can see that tells you the slot is locked. The slot can be unlocked by pressing L while hovering over it again. When your inventory is open a translucent lock icon is over whichever items / slots are locked. How it works: When i go to drop and item, it checks whether the slot the item is in is locked. If it is then it cancels the drop. Same logic applies when trying to move it around in my inventory with mouse
Custom scoreboard. I thought that the default scoreboard looked pretty dull. It had a lack of colours, boring font, no pop so I added my own custom scoreboard. I used ‘§’ quite a lot to change how the text looked. Overall, I am quite pleased with how it turned out. (I had to change to a random ironman coop profile I’m part of so that I could show that it shows objectives). It works by having a file which reads data from tab (which has the bank and other details) and another file which reads from the default tab (We can’t see the default tab but it’s data still exists)
I realised a crucial error! Slot locking wasn’t permanent. After an hour and a half of hard work I’ve managed to make slot locking permanent. Now whenever a slot is locked the slot number is written into a file that lives in the config file of minecraft folder. When the slot is unlocked it is deleted from the file. I had to spend a while making sure that it only locks slots when on Hypixel Skyblock but now when you join, it reads all the slots in the file and locks those slots.
I found that the storage gui felt old and boring and so I made my own. If you click on Ender Chest it runs the /ec 1 command to open the first ender chest page. You can use the buttons that are built into it to go to over pages. The numbers correspond to backpacks. Clicking 1 does /bp 1. (Took a long time because it was supposed to look like firmaments where it is all the pages shown at once but I couldn’t do that)
I’ve improved my enderchest UI (still have to add backpack UI) but its a bit buggy right now. Working on improving it by not being stupid and just using the functions mojang provided. Idk why I didn’t before lol
Managed to get the enderchest UI to actually display the amount of items in the stack. Click handling is so much cleaner now….
Tooltips now show when hovering over items in enderchest UI
Ships:
I created a mod that runs on minecraft 26.2 using fabric. I found this quite challenging since I have low experience with Java as a language but it was so satisfying when I managed to make it work. So far it has: Item Prices (bazaar and lbin) Slot locking (Tap L to lock slot. Locked items can’t be moved or dropped) Custom Scoreboard (Custom scoreboard with a modern pop. Also shows bank balance which isn’t shown by default scoreboard)
I added a custom enderchest UI !!! To see a video showcasing all the features so far go to my website and scroll down til you see the section about the mod...
|
1792832013.0259128
|
1793696013.0259128
|
|
557
|
MatchRatingCalculator by @Allen | Stardance
|
Allen
|
4
|
118.0
|
488
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-24T23:22:10Z", "hours": 57.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made Veyro, a React-based sports rating website that lets players enter match stats, calculate a live performance score, save matches to a vault, compare progress, and use role-based features like Coach, Premium, and Video AI. The hardest part was converting the old HTML version into a full React app while keeping the same original graphics, layout, and feel, because the design and logic had to stay consistent across every page. I am proud that the project now has stronger account persistence, saving, navigation, monetization gates, Firebase/Firestore security, CI/CD, and automated tests with all tests passing. To test it, people should sign in or use guest mode, try the soccer calculator, save a match, open the vault, check graph/compare pages, and test locked features like team tools or Video AI depending on the user plan.", "repo": "https://github.com/awang03-crypto/Veyrov2.6", "demo": "https://darksalmon-lark-983637.hostingersite.com"}, {"ship_num": 2, "ts": "2026-07-10T17:15:40Z", "hours": 28.0, "multiplier": 7.97, "payout": 225, "blessing": "neutral", "text": "I made Veyro, a React-based sports rating website that lets players enter match stats, calculate a live performance score, save matches to a vault, compare progress, and use role-based features like Coach, Premium, and Video AI. The hardest part was converting the old HTML version into a full React app while keeping the same original graphics, layout, and feel, because the design and logic had to stay consistent across every page. I am proud that the project now has stronger account persistence, saving, navigation, monetization gates, Firebase/Firestore security, CI/CD, and automated tests with all tests passing. To test it, people should sign in or use guest mode, try the soccer calculator, save a match, open the vault, check graph/compare pages, and test locked features like team tools or Video AI depending on the user plan.", "repo": "https://github.com/awang03-crypto/Veyrov2.6", "demo": "https://darksalmon-lark-983637.hostingersite.com"}, {"ship_num": 3, "ts": "2026-07-01T19:24:22Z", "hours": 30.0, "multiplier": 7.92, "payout": 236, "blessing": "neutral", "text": "This looks like a Ship post on Replit or a similar platform. Here's something you can paste in: I built Veyro, a multi-sport player performance rating app for soccer, basketball, and football. Players enter their match stats and get a rating out of 100 using a position-specific formula — so a goalkeeper is judged on saves and clean sheets, not goals, and a quarterback is judged on touchdowns and interceptions, not tackles. Matches save to a personal vault so players can track their development over time. The most challenging part was building a clean React codebase that could handle three completely different sports with separate calculators, vaults, graphs, and coach pages for each — while keeping the architecture maintainable and the bundle size small. I also built a full coach onboarding flow with shareable team invite links, a three-tier monetization system with Stripe integration, and a CI/CD pipeline with 87 passing tests. I'm most proud of the billing and entitlements system — it handles free tier limits, Coach plan features, and Premium Video AI access cleanly across both the server and the React UI. The app scores 94 for performance, 100 for accessibility, and 96 for best practices on PageSpeed Insights. To test it: go to the calculator, pick your sport and position, enter some match stats, and hit calculate. Free accounts can save up to 5 matches to the vault. If you're a coach, hit Setup in the sidebar to create a team and get a shareable invite link for your players.", "repo": "https://github.com/awang03-crypto/Veyrov2.6", "demo": "https://darksalmon-lark-983637.hostingersite.com"}, {"ship_num": 4, "ts": "2026-06-06T19:21:42Z", "hours": 3.0, "multiplier": 8.58, "payout": 27, "blessing": "neutral", "text": "I made Match Rating, a soccer performance app that helps players turn their match stats into a clear rating out of 100. I can calculate a live score, save games, track my progress in a vault, view graphs, analyze strengths and weaknesses, compare games, join coach teams, and test an experimental AI video-analysis tool. The most challenging part was making everything work together: the calculator, Firebase sign-in, saved stats, graphs, analysis, coach/player roles, team codes, privacy settings, mobile design, and the AI backend. It was also hard to make the app remember each player’s name, age, position, team, saved games, and detailed stats without breaking the user experience. I am proud that this became more than just a simple calculator. I built a full player-development platform with accounts, saved match history, team features, analytics, exports, scorecards, and a mobile-friendly design. I’m also proud that I improved it through feedback and kept making it cleaner, faster, and easier to use. People testing my product should know that they should sign up as a player or coach, enter their profile information, use the calculator first, and then save the match in the Vault. After saving games, they can check the Graph, Analysis, Compare Games, Profile, and Team pages. Coaches can create a team code and invite players. The Video AI feature is still experimental, so users should double-check the stats it gives.", "repo": "https://github.com/awang03-crypto/Veyrov2.6", "demo": "https://darksalmon-lark-983637.hostingersite.com"}]...
|
[{"post_id": 34256, "ts": "202 [{"post_id": 34256, "ts": "2026-07-24T19:58:49Z", "hours": 9.0, "text": "I improved the security and I improved and rewrote the firebase rules to make it easier to login and stuff."}, {"post_id": 33518, "ts": "2026-07-23T15:13:44Z", "hours": 9.0, "text": "I debugged the whole site"}, {"post_id": 32555, "ts": "2026-07-21T20:15:21Z", "hours": 9.0, "text": "I worked on the pricing of everything. I also made the video ai better and also worked on the pricing of the ai."}, {"post_id": 29287, "ts": "2026-07-16T03:09:38Z", "hours": 8.0, "text": "Making Veyro blogs on the site to improve backlinks along with SEO along with improving how to explain how this works."}, {"post_id": 28462, "ts": "2026-07-14T18:31:32Z", "hours": 9.0, "text": "I just focused on making it more suitable for coaches and trying to add more sports"}, {"post_id": 27717, "ts": "2026-07-13T14:51:07Z", "hours": 9.0, "text": "I worked on running tests on my website and making sure that there were no significant bugs."}, {"post_id": 26008, "ts": "2026-07-10T15:58:23Z", "hours": 8.0, "text": "I worked on the privacy and security."}, {"post_id": 24927, "ts": "2026-07-08T20:04:41Z", "hours": 8.0, "text": "I worked on just improving minor bugs and minor fixes. I also tried to make a lot of guides in the site to help coaches and parents."}, {"post_id": 24196, "ts": "2026-07-07T16:43:22Z", "hours": 8.0, "text": "I improved the calculator logic and scoring system along with the SEO"}, {"post_id": 23461, "ts": "2026-07-06T13:30:42Z", "hours": 2.0, "text": "I just improved the security"}, {"post_id": 20205, "ts": "2026-07-01T19:09:11Z", "hours": 2.0, "text": "I built out the coach onboarding flow, which walks coaches through creating an account, setting their role, generating a team, and sharing a unique invite link so players can request to join at veyro.com/join/TEAMCODE. I also wrote five long-form SEO blog posts targeting high-intent keywords — how to rate soccer players, a youth coach playbook, player performance analytics, a basketball rating system guide, and a football rating system guide — each with JSON-LD schema markup for Google rich results. Alongside the content work, I updated the sitemap to include all sixteen pages, fixed a missing meta description that PageSpeed Insights had flagged, and added SoftwareApplication and FAQPage structured data to the calculator homepage to improve search visibility."}, {"post_id": 19501, "ts": "2026-06-30T20:34:01Z", "hours": 5.0, "text": "I just improved the SEO"}, {"post_id": 18021, "ts": "2026-06-29T00:09:19Z", "hours": 2.0, "text": "I migrated the website into a unified React application while preserving its original graphics and layout, restored the calculator’s complete rating logic, improved account persistence, fixed saving and navigation, added Free, Coach, and Premium feature gates, strengthened Firebase and Firestore security, configured Stripe billing support, expanded automated backend and React tests, and updated CI/CD until all 87 tests passed."}, {"post_id": 13978, "ts": "2026-06-22T22:57:55Z", "hours": 2.0, "text": "I fixed the calculator format by implementing the iframe-based architecture from the zip, added the missing /calculator route to resolve the blank page issue, updated the navigation to use React Router’s navigate instead of window.location.href, implemented authentication bridging between React and legacy HTML pages, configured legacy page loaders for all routes, set up basketball and football subdirectories with their own calculators, added proper CSS module imports for all pages, integrated the sidebar, mobile nav, and toast components, and established the services for ratings and monetization."}, {"post_id": 11625, "ts": "2026-06-18T22:50:05Z", "hours": 1.0, "text": "I worked on turning the website from a mixed old HTML project into a React-based Veyro app while trying to keep the original graphics and page style the same. I added infrastructure like tests, build checks, linting, coverage, CI-style safety work, monetization plan logic, Video AI entitlement checks, and Hostinger deployment support. I also rebuilt the deployment output, fixed the Save & Benchmark flow, fixed the Vault save error caused by about:srcdoc, rewired old .html routes into React routes, added Hostinger .htaccess fallback support, and added basketball/football redirect files so those sections could still open after the old HTML files were removed."}, {"post_id": 10822, "ts": "2026-06-17T19:23:33Z", "hours": 2.0, "text": "I added coverage reporting and enforced a minimum threshold in CI, expanded unit and integration tests (including Firestore rules and critical server endpoints), implemented a billing integration with secure webhook handling to update plan fields, incrementally migrated legacy HTML pages into React components—prioritizing high‑traffic and complex pages and retiring the static files after verifying parity and tests—added linting, dependency and secret scanning to CI, and hardened operations with health/metrics checks and deployment documentation."}, {"post_id": 9941, "ts": "2026-06-16T13:51:54Z", "hours": 1.0, "text": "I polished Veyro from a rougher soccer rating site into a more professional product: I improved the homepage branding, spacing, mobile layout, CTA clarity, guest flow, rating preview, and overall visual quality; fixed the bad unfinished React placeholder that was accidentally showing instead of the real site; moved the React build safely under /app; rebuilt and tested the project; removed the mini pitch that I didn’t like."}, {"post_id": 9247, "ts": "2026-06-15T15:07:49Z", "hours": 4.0, "text": "I changed the website to feel much more like a polished Veyro landing/app entry page: the homepage now has a branded hero, clearer soccer performance messaging, feature pills for the live calculator, saved vault, and coach insights, a rating preview card showing an example match score, improved signup/sign-in/profile entry states, and expanded SEO sections explaining how Veyro works for players, parents, and coaches. I also added basic ESLint config for cleaner JavaScript going forward. Finally, I also changed the whole website to be running with React instead of HTML only so that the whole app should be faster."}, {"post_id": 6335, "ts": "2026-06-10T17:45:54Z", "hours": 2.0, "text": "In the last couple hours, we tightened up Veyro across auth, SEO, sharing, and polish: we fixed Firebase/Google auth issues by changing the server popup header, switching Google auth to popup-first, improving stale service-worker caching, and adding clearer email/password errors plus email verification reminders; upgraded the public recruiting profile with copy-link, save-PDF, and coach-style sections; improved SEO with a new soccer performance guide, better metadata, sitemap/robots cleanup, breadcrumb/FAQ schema validation, noindexing the experimental Video AI page, and backlink outreach copy; rewrote the README into a cleaner project overview; scanned the whole site for bugs without changing anything; and discussed advertising strategy plus the best next product improvements like demo data, coach setup, invite links, and better empty states."}, {"post_id": 5879, "ts": "2026-06-09T20:46:35Z", "hours": 1.0, "text": "I changed the website name to Veyro and I also made the firebase security more secure and way faster. I made the sidebar again look better and improved the UI of all the pages."}, {"post_id": 5149, "ts": "2026-06-08T20:44:04Z", "hours": 1.0, "text": "I worked on making the sidebar for the whole website look better. I also added a privacy page where users can request their data and object to any preferences they don’t want. I also made it so that the styles of different pages are more or less the same so that users feel like there aren’t big changes when going to the next page."}, {"post_id": 4941, "ts": "2026-06-08T15:47:49Z", "hours": 1.0, "text": "I added a cleaner coach page and made reports easier to share and cleaner to share. I also made the vault cleaner and less clogged. I also tightened the whole security of the whole website."}, {"post_id": 4455, "ts": "2026-06-07T19:36:33Z", "hours": 1.0, "text": "Improving the SEO and getting it ready for Google Search Console."}, {"post_id": 3704, "ts": "2026-06-06T19:12:57Z", "hours": 3.0, "text": "I made the whole website faster and cleaner. I also made it so that you can download this website as a app now."}]...
|
Title: MatchRatingCalculator by @Allen | Stardance Title: MatchRatingCalculator by @Allen | Stardance
Devlogs:
I made the whole website faster and cleaner. I also made it so that you can download this website as a app now.
Improving the SEO and getting it ready for Google Search Console.
I added a cleaner coach page and made reports easier to share and cleaner to share. I also made the vault cleaner and less clogged. I also tightened the whole security of the whole website.
I worked on making the sidebar for the whole website look better. I also added a privacy page where users can request their data and object to any preferences they don’t want. I also made it so that the styles of different pages are more or less the same so that users feel like there aren’t big changes when going to the next page.
I changed the website name to Veyro and I also made the firebase security more secure and way faster. I made the sidebar again look better and improved the UI of all the pages.
In the last couple hours, we tightened up Veyro across auth, SEO, sharing, and polish: we fixed Firebase/Google auth issues by changing the server popup header, switching Google auth to popup-first, improving stale service-worker caching, and adding clearer email/password errors plus email verification reminders; upgraded the public recruiting profile with copy-link, save-PDF, and coach-style sections; improved SEO with a new soccer performance guide, better metadata, sitemap/robots cleanup, breadcrumb/FAQ schema validation, noindexing the experimental Video AI page, and backlink outreach copy; rewrote the README into a cleaner project overview; scanned the whole site for bugs without changing anything; and discussed advertising strategy plus the best next product improvements like demo data, coach setup, invite links, and better empty states.
I changed the website to feel much more like a polished Veyro landing/app entry page: the homepage now has a branded hero, clearer soccer performance messaging, feature pills for the live calculator, saved vault, and coach insights, a rating preview card showing an example match score, improved signup/sign-in/profile entry states, and expanded SEO sections explaining how Veyro works for players, parents, and coaches. I also added basic ESLint config for cleaner JavaScript going forward. Finally, I also changed the whole website to be running with React instead of HTML only so that the whole app should be faster.
I polished Veyro from a rougher soccer rating site into a more professional product: I improved the homepage branding, spacing, mobile layout, CTA clarity, guest flow, rating preview, and overall visual quality; fixed the bad unfinished React placeholder that was accidentally showing instead of the real site; moved the React build safely under /app; rebuilt and tested the project; removed the mini pitch that I didn’t like.
I added coverage reporting and enforced a minimum threshold in CI, expanded unit and integration tests (including Firestore rules and critical server endpoints), implemented a billing integration with secure webhook handling to update plan fields, incrementally migrated legacy HTML pages into React components—prioritizing high‑traffic and complex pages and retiring the static files after verifying parity and tests—added linting, dependency and secret scanning to CI, and hardened operations with health/metrics checks and deployment documentation.
I worked on turning the website from a mixed old HTML project into a React-based Veyro app while trying to keep the original graphics and page style the same. I added infrastructure like tests, build checks, linting, coverage, CI-style safety work, monetization plan logic, Video AI entitlement checks, and Hostinger deployment support. I also rebuilt the deployment output, fixed the Save & Benchmark flow, fixed the Vault save error caused by about:srcdoc, rewired old .html routes into React routes, added Hostinger .htaccess fallback support, and added basketball/football redirect files so those sections could still open after the old HTML files were removed.
I fixed the calculator format by implementing the iframe-based architecture from the zip, added the missing /calculator route to resolve the blank page issue, updated the navigation to use React Router’s navigate instead of window.location.href, implemented authentication bridging between React and legacy HTML pages, configured legacy page loaders for all routes, set up basketball and football subdirectories with their own calculators, added proper CSS module imports for all pages, integrated the sidebar, mobile nav, and toast components, and established the services for ratings and monetization.
I migrated the website into a unified React application while preserving its original graphics and layout, restored the calculator’s complete rating logic, improved account persistence, fixed saving and navigation, added Free, Coach, and Premium feature gates, strengthened Firebase and Firestore security, configured Stripe billing support, expanded automated backend and React tests, and updated CI/CD until all 87 tests passed.
I just improved the SEO
I built out the coach onboarding flow, which walks coaches through creating an account, setting their role, generating a team, and sharing a unique invite link so players can request to join at veyro.com/join/TEAMCODE. I also wrote five long-form SEO blog posts targeting high-intent keywords — how to rate soccer players, a youth coach playbook, player performance analytics, a basketball rating system guide, and a football rating system guide — each with JSON-LD schema markup for Google rich results. Alongside the content work, I updated the sitemap to include all sixteen pages, fixed a missing meta description that PageSpeed Insights had flagged, and added SoftwareApplication and FAQPage structured data to the calculator homepage to improve search visibility.
I just improved the security
I improved the calculator logic and scoring system along with the SEO
I worked on just improving minor bugs and minor fixes. I also tried to make a lot of guides in the site to help coaches and parents.
I worked on the privacy and security.
I worked on running tests on my website and making sure that there were no significant bugs.
I just focused on making it more suitable for coaches and trying to add more sports
Making Veyro blogs on the site to improve backlinks along with SEO along with improving how to explain how this works.
I worked on the pricing of everything. I also made the video ai better and also worked on the pricing of the ai.
I debugged the whole site
I improved the security and I improved and rewrote the firebase rules to make it easier to login and stuff.
Ships:
I made Match Rating, a soccer performance app that helps players turn their match stats into a clear rating out of 100. I can calculate a live score, save games, track my progress in a vault, view graphs, analyze strengths and weaknesses, compare games, join coach teams, and test an experimental AI video-analysis tool. The most challenging part was making everything work together: the calculator, Firebase sign-in, saved stats, graphs, analysis, coach/player roles, team codes, privacy settings, mobile design, and the AI backend. It was also hard to make the app remember each player’s name, age, position, team, saved games, and detailed stats without breaking the user experience. I am proud that this became more than just a simple calculator. I built a full player-development platform with accounts, saved match history, team features, analytics, exports, scorecards, and a mobile-friendly design. I’m also proud that I improved it through feedback and kept making it cleaner, faster, and easier to use. People testing my product should know that they should sign up as a player or coach, enter their profile information, use the calculator first, and then save the match in the Vault. After saving games, they can check the Graph, Analysis, Compare Games, Profile, and Team pages. Coaches can create a team code and invite players. The Video AI feature is still experimental, so users should double-check the stats it gives.
This looks like a Ship post on Replit or a similar platform. Here's something you can paste in: I built Veyro, a multi-sport player performance rating app for soccer, basketball, and football. Players enter their match stats and get a rating out of 100 using a position-specific formula — so a goalkeeper is judged on saves and clean sheets, not goals, and a quarterback is judged on touchdowns and interceptions, not tackles. Matches save to a personal vault so players can track their development over time. The most challenging part was building a clean React codebase that could handle three completely different sports with separate calculators, vaults, graphs, and coach pages for each — while keeping the architecture maintainable and the bundle size small. I also built a full coach onboarding flow with shareable team invite links, a three-tier monetization system with Stripe integration, and a CI/CD pipeline with 87 passing tests. I'm most proud of the billing and entitlements system — it handles free tier limits, Coach plan features, and Premium Video AI access cleanly across both the server and the React UI. The app scores 94 for performance, 100 for accessibility, and 96 for best practices on PageSpeed Insights. To test it: go to the calculator, pick your sport and position, enter some match stats, and hit calculate. Free accounts can save up to 5 matches to the vault. If you're a coach, hit Setup in the sidebar to create a team and get a shareable invite link for your players.
I made Veyro, a React-based sports rating website that lets players enter match stats, calculate a live performance score, save matches to a vault, compare progress, and use role-based features like Coach, Premium, and Video AI. The hardest part was converting the old HTML version into a full React app while keeping the same original graphics, layout, and feel, because the design and logic had to stay consistent across every page. I am proud that the project now has stronger account persistence, saving, navigation, monetization gates, Firebase/Firestore security, CI/CD, and automated tests with all tests passing. To test it, people should sign in or use guest mode, try the soccer calculator, save a match, open the vault, check graph/compare pages, and test locked features like team tools or Video AI depending on the user plan.
I made Veyro, a React-based sports rating website that lets players enter match stats, calculate a live performance score, save matches to a vault, compare progress, and use role-based features like Coach, Premium, and Video AI. The hardest part was converting the old HTML version into a full React app while keeping the same original graphics, layout, and feel, because the design and logic had to stay consistent across every page. I am proud that the project now has stronger account persistence, saving, navigation, monetization gates, Firebase/Firestore security, CI/CD, and automated tests with all tests passing. To test it, people should sign in or use guest mode, try the soccer calculator, save a match, open the vault, check graph/compare pages, and test locked features like team tools or Video AI depending on the user plan....
|
1792882070.3901622
|
1793746070.3901622
|
|
610
|
MARGE - Modular Advanced Raytracing & Graphics MARGE - Modular Advanced Raytracing & Graphics Engine by @markmris | Stardance...
|
markmris
|
2
|
31.0
|
482
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-23T22:21:26Z", "hours": 9.0, "multiplier": 16.75, "payout": 159, "blessing": "neutral", "text": "I improved and optimized my raytracing graphics engine. Images now render ~2x faster under default settings. Textures have been added, along with motion blur. I ran into issues like my first stack overflow error and nullpointers. To try the project, follow the instructions at the bottom of the README for the best experience.", "repo": "https://github.com/markmris/marge", "demo": "https://github.com/markmris/marge/releases/tag/v0.16.2"}, {"ship_num": 2, "ts": "2026-08-05T22:53:58Z", "hours": 22.0, "multiplier": 14.64, "payout": 323, "blessing": "neutral", "text": "I built a raytracing graphics engine in raw C++. The engine uses mathematical concepts involving vectors, quadratics, as well as scientific concepts like reflection and refraction. This was my first long-term project I actually committed to. I learned a lot about C++ and math in general. To try the project, follow the instructions at the bottom of the README.", "repo": "https://github.com/markmris/marge", "demo": "https://github.com/markmris/marge/releases/tag/v0.16.2"}]...
|
[{"post_id": 53380, "ts": "202 [{"post_id": 53380, "ts": "2026-08-23T22:12:27Z", "hours": 4.5031, "text": "These final hours have been excruciating. I encountered my first ever stack overflow (cannon event), I had trouble with null pointers, and somehow a function I made 2 weeks ago was broken but never showed its way through until today. But finally, I added textures! The 2 textures added are a checkerboard texture (as seen in the image below), and now you can upload any jpeg, png, or tga to the textures folder and they will be randomly applied to spheres. I added an earth texture and basketball texture. The image library was not me, it’s from an open source image library called stb_image. I would not have been able to make it myself. Also, I reorganized the project file structure because when I started my files were very non-conventional. Believe it or not, I got the file advice from The Cherno on YouTube. This is probably my final devlog for the summer. I learned a lot making this project and will continue it for the next few months to hopefully get it to where I want it to be."}, {"post_id": 49940, "ts": "2026-08-18T22:19:25Z", "hours": 3.9922, "text": "2 things done today: Fixed the black sphere bug. I realized the issue was generating the colors by using normal vectors, which return values between -1 and 1. Since negative values are clamped to 0 by the color module, I rendered black spheres. I fixed this by making a designated randomColor() function. I added Bounding Volume Hierarchies, or BVH for short. BVH creates a massive performance increase, just over doubling render speed (from 6:30 to 3:04). This feature was by far the hardest to implement and understand, but basically it chunks up objects in the world to be in groups of boxes, and instead of looping through each object in the scene for collision checks, we loop through bounding boxes (groups) first, eliminating the objects that were missed. There was lots of friction creating this feature, especially after implementing a new loop that mathematically, should make the renderer faster, but in reality it became ~2.6x slower? I scrapped that for now and I’ll revisit it later."}, {"post_id": 46630, "ts": "2026-08-14T00:57:35Z", "hours": 0.9831, "text": "Today I made motion blur and moving objects. The camera cannot move yet, but objects can now be given a current and moveto position. The lower the fps is and/or the further the points are from each other, the blurrier the object will be, since as of now, each object is “moving” at a constant speed that will get them from point A to B in 1 time unit. (Maybe I should call it ticks or something) Feel free to leave a fun name idea in the comments. One weird issue I ran into was the 2nd book skipped a few steps and used methods and variables that were never covered, so I had to ask AI for help. There’s also a bug that makes the sphere look black and the motion blur is the proper color so that will have to be fixed soon."}, {"post_id": 40898, "ts": "2026-08-04T18:29:28Z", "hours": 5.435, "text": "I made a lots of progress and learned a bunch in the past few hours! I added 2 big features: Custom Command Line Parsing and Random Scene Generation. I also ran into a lot of friction doing these. I first had to learn how to connect an enum to strings, which was pretty easy, but the hard part was making sure commands were secure and wouldn’t break under one mistype. The random scene generation was pretty hard too. The big part was calculating the center point every object revolved around and positioning them nicely. This made the renderer quite a bit slower, but it was worth it."}, {"post_id": 40148, "ts": "2026-08-03T15:32:59Z", "hours": 0.5725, "text": "Not much done this log. I just added defocus blur. This works by conceptually simulating a real camera with a virtual lens that grows and shrinks along with a focus distance. At the focus distance, objects are fully in focus. The further objects get from that distance, they decrease in focus linearly based on the size of the lens as well. Once again not much friction."}, {"post_id": 39767, "ts": "2026-08-02T23:06:59Z", "hours": 1.4736, "text": "Finished something huge today, a positionable/modifiable camera! Each image can now have a unique position for the camera, as well as a rotated camera. I also added FOV which makes the camera zoom in or out. (Default set to 90). One big thing I had to deal with was the cross products. The cross product of two vectors returns one vector perpendicular to both original vectors, which was required to calculate the direction the camera was facing. The order of calculation matters a lot because incorrect cross products flipped the image upside down, inversed rotation and position, etc."}, {"post_id": 39688, "ts": "2026-08-02T20:31:11Z", "hours": 0.3392, "text": "Didn’t do much this log. I just added some code to handle edge cases where light intersects glass or any dielectric at a 90 degree angle that screws up the pixel slightly. Not really much friction at all today. On the sphere t the left, I made it look hollow by placing another sphere inside the bigger one which makes light bend multiple times causing the hollow effect."}, {"post_id": 39216, "ts": "2026-08-02T01:19:31Z", "hours": 0.9275, "text": "Today I created another material, dielectrics. A dielectric is any material that bends or refracts light, for example, glass, water, diamonds, etc. Think of when you dip a pencil in water and it looks bent, that’s refraction. The sphere on the left is now a solid glass ball where light refracts in a way that flips it 180 degrees. I ran into an issue where I used multiplication instead of addition in the refraction code which made the refraction look warped and messy. (Forgot to screenshot it)"}, {"post_id": 37936, "ts": "2026-07-30T23:24:59Z", "hours": 0.5417, "text": "Today I made the fuzzy metal material. Metal surfaces now take a new fuzz parameter which modifies the reflectivity and makes it look like a shiny diffuse material the more fuzzy it is. In the screenshot I posted, the sphere on the left is non-fuzzy metal, the middle one is diffuse, and the right one is fuzzy metal."}, {"post_id": 35313, "ts": "2026-07-26T17:09:41Z", "hours": 1.4764, "text": "My renderer is starting to get pretty advanced now! I just finished making the metal/reflective material, as you can see in the photo. I also added gamma correction, which is just square rooting the color output so that the color accuracy and intensity is proper. One issue I ran into was figuring out a weird compiler quirk with override methods, how I wasn’t meant to use the override keyword when defining a function in the .cpp module, but you are supposed to use it only in the declaration in the .h header file."}, {"post_id": 34794, "ts": "2026-07-25T19:48:08Z", "hours": 1.2036, "text": "I fixed one big thing today! Shadow Acne. (Yes that’s what it’s called). This is an issue where a ray starts too close to its origin and accidentally hits itself, causing black freckles all over the image. (As seen in the first photo below). It seemed the only way to fix it was to increase pixel sampling, which is shooting multiple rays at each pixel that are all slightly offset and calculating the average of the colors hit, as seen in the second photo. The downside to this is that it makes the renderer MUCH slower. Image generation jumped from a few seconds to ~2 minutes. I also spent a decent amount of time getting a better understanding of the pipeline and rendering process. Here’s a rundown of how it works if you’re interested: Start by initializing the camera, image and viewport size, and defining the position of every object in the world. Loop through each pixel in the image. For each pixel looped through, loop through every object in the scene. Run each object’s respective “hit” function to calculate whether or not it was hit. If the object was hit, run the sampling process as explained above. If not, color the sky gradient. Obviously there’s much more to it but that’s too much to explain."}, {"post_id": 33207, "ts": "2026-07-22T22:10:48Z", "hours": 0.6583, "text": "Today I did some new vector math to generate diffuse materials. The idea is that a diffuse is a surface that is the same color all around it, and not this pixely, but it’s a work in progress. Not much friction today overall."}, {"post_id": 31415, "ts": "2026-07-19T19:21:13Z", "hours": 2.9711, "text": "Today I worked on antialiasing, the process of blending edge pixels with the background to give the image smoother surfaces and to look nicer. Unfortunately, this process makes the renderer a lot slower, meaning it will have to be heavily optimized over time. I also ran into a big issue where the rendered image was black. I found out that I messed up some arithmetic and also had a divide by zero error that didn’t show up."}, {"post_id": 22496, "ts": "2026-07-05T00:14:22Z", "hours": 3.9025, "text": "I finally have a decent graphics engine! Over the past while, I’ve been cleaning up and reorganizing the entire codebase so it’s much easier to work with and expand. Instead of having everything jumbled together, I’ve split the project into reusable modules and created a central header that keeps the code organized. The biggest improvement is how objects are handled. Before, adding another sphere or object required changing the rendering code itself. Now, I can simply add a new object to a list, and the engine automatically includes it the next time it renders the image. This makes building more complex worlds much faster and sets up a solid foundation for future features and shapes. This’ll hopefully someday turn into a game engine or open source graphics engine that will actually generate frames, so it can be used to make video games from scratch! Here’s the GitHub if you’re interested in following along: https://github.com/markmris/marge"}, {"post_id": 15722, "ts": "2026-06-25T16:11:09Z", "hours": 1.2989, "text": "Finally got a chance after exams to continue working on my graphics engine. I spent some time watching videos on vector math to better understand them and how they differ from regular scalars, coordinates, and lines. With my new knowledge I got to work on creating a surface normal, and now my sphere has a VERY ugly blend of colors that give it some visual depth. The concept of surface normals still doesn’t make that much sense to me, so I’m gonna spend more time watching videos and understanding them"}, {"post_id": 575, "ts": "2026-06-02T02:11:11Z", "hours": 0.4825, "text": "I’ve started rendering actual shapes now. The first shape I rendered is a sphere, though it looks like a circle (kind of like the Japanese flag) since it doesn’t have any depth yet. I also discovered and fixed a major bug making the viewport/window a square and the image a rectangle which distorted shapes and gradients."}, {"post_id": 149, "ts": "2026-05-31T23:26:33Z", "hours": 0.7561, "text": "I implemented raycasts to be used instead of manual color drawings and made a sky gradient. Ran into a bug with the vector math and moved around a few things to fix it, now it works, looks better, and renders faster!"}]...
|
Title: MARGE - Modular Advanced Raytracing & G Title: MARGE - Modular Advanced Raytracing & Graphics Engine by @markmris | Stardance
Devlogs:
I implemented raycasts to be used instead of manual color drawings and made a sky gradient. Ran into a bug with the vector math and moved around a few things to fix it, now it works, looks better, and renders faster!
I’ve started rendering actual shapes now. The first shape I rendered is a sphere, though it looks like a circle (kind of like the Japanese flag) since it doesn’t have any depth yet. I also discovered and fixed a major bug making the viewport/window a square and the image a rectangle which distorted shapes and gradients.
Finally got a chance after exams to continue working on my graphics engine. I spent some time watching videos on vector math to better understand them and how they differ from regular scalars, coordinates, and lines. With my new knowledge I got to work on creating a surface normal, and now my sphere has a VERY ugly blend of colors that give it some visual depth. The concept of surface normals still doesn’t make that much sense to me, so I’m gonna spend more time watching videos and understanding them
I finally have a decent graphics engine! Over the past while, I’ve been cleaning up and reorganizing the entire codebase so it’s much easier to work with and expand. Instead of having everything jumbled together, I’ve split the project into reusable modules and created a central header that keeps the code organized. The biggest improvement is how objects are handled. Before, adding another sphere or object required changing the rendering code itself. Now, I can simply add a new object to a list, and the engine automatically includes it the next time it renders the image. This makes building more complex worlds much faster and sets up a solid foundation for future features and shapes. This’ll hopefully someday turn into a game engine or open source graphics engine that will actually generate frames, so it can be used to make video games from scratch! Here’s the GitHub if you’re interested in following along: https://github.com/markmris/marge
Today I worked on antialiasing, the process of blending edge pixels with the background to give the image smoother surfaces and to look nicer. Unfortunately, this process makes the renderer a lot slower, meaning it will have to be heavily optimized over time. I also ran into a big issue where the rendered image was black. I found out that I messed up some arithmetic and also had a divide by zero error that didn’t show up.
Today I did some new vector math to generate diffuse materials. The idea is that a diffuse is a surface that is the same color all around it, and not this pixely, but it’s a work in progress. Not much friction today overall.
I fixed one big thing today! Shadow Acne. (Yes that’s what it’s called). This is an issue where a ray starts too close to its origin and accidentally hits itself, causing black freckles all over the image. (As seen in the first photo below). It seemed the only way to fix it was to increase pixel sampling, which is shooting multiple rays at each pixel that are all slightly offset and calculating the average of the colors hit, as seen in the second photo. The downside to this is that it makes the renderer MUCH slower. Image generation jumped from a few seconds to ~2 minutes. I also spent a decent amount of time getting a better understanding of the pipeline and rendering process. Here’s a rundown of how it works if you’re interested: Start by initializing the camera, image and viewport size, and defining the position of every object in the world. Loop through each pixel in the image. For each pixel looped through, loop through every object in the scene. Run each object’s respective “hit” function to calculate whether or not it was hit. If the object was hit, run the sampling process as explained above. If not, color the sky gradient. Obviously there’s much more to it but that’s too much to explain.
My renderer is starting to get pretty advanced now! I just finished making the metal/reflective material, as you can see in the photo. I also added gamma correction, which is just square rooting the color output so that the color accuracy and intensity is proper. One issue I ran into was figuring out a weird compiler quirk with override methods, how I wasn’t meant to use the override keyword when defining a function in the .cpp module, but you are supposed to use it only in the declaration in the .h header file.
Today I made the fuzzy metal material. Metal surfaces now take a new fuzz parameter which modifies the reflectivity and makes it look like a shiny diffuse material the more fuzzy it is. In the screenshot I posted, the sphere on the left is non-fuzzy metal, the middle one is diffuse, and the right one is fuzzy metal.
Today I created another material, dielectrics. A dielectric is any material that bends or refracts light, for example, glass, water, diamonds, etc. Think of when you dip a pencil in water and it looks bent, that’s refraction. The sphere on the left is now a solid glass ball where light refracts in a way that flips it 180 degrees. I ran into an issue where I used multiplication instead of addition in the refraction code which made the refraction look warped and messy. (Forgot to screenshot it)
Didn’t do much this log. I just added some code to handle edge cases where light intersects glass or any dielectric at a 90 degree angle that screws up the pixel slightly. Not really much friction at all today. On the sphere t the left, I made it look hollow by placing another sphere inside the bigger one which makes light bend multiple times causing the hollow effect.
Finished something huge today, a positionable/modifiable camera! Each image can now have a unique position for the camera, as well as a rotated camera. I also added FOV which makes the camera zoom in or out. (Default set to 90). One big thing I had to deal with was the cross products. The cross product of two vectors returns one vector perpendicular to both original vectors, which was required to calculate the direction the camera was facing. The order of calculation matters a lot because incorrect cross products flipped the image upside down, inversed rotation and position, etc.
Not much done this log. I just added defocus blur. This works by conceptually simulating a real camera with a virtual lens that grows and shrinks along with a focus distance. At the focus distance, objects are fully in focus. The further objects get from that distance, they decrease in focus linearly based on the size of the lens as well. Once again not much friction.
I made a lots of progress and learned a bunch in the past few hours! I added 2 big features: Custom Command Line Parsing and Random Scene Generation. I also ran into a lot of friction doing these. I first had to learn how to connect an enum to strings, which was pretty easy, but the hard part was making sure commands were secure and wouldn’t break under one mistype. The random scene generation was pretty hard too. The big part was calculating the center point every object revolved around and positioning them nicely. This made the renderer quite a bit slower, but it was worth it.
Today I made motion blur and moving objects. The camera cannot move yet, but objects can now be given a current and moveto position. The lower the fps is and/or the further the points are from each other, the blurrier the object will be, since as of now, each object is “moving” at a constant speed that will get them from point A to B in 1 time unit. (Maybe I should call it ticks or something) Feel free to leave a fun name idea in the comments. One weird issue I ran into was the 2nd book skipped a few steps and used methods and variables that were never covered, so I had to ask AI for help. There’s also a bug that makes the sphere look black and the motion blur is the proper color so that will have to be fixed soon.
2 things done today: Fixed the black sphere bug. I realized the issue was generating the colors by using normal vectors, which return values between -1 and 1. Since negative values are clamped to 0 by the color module, I rendered black spheres. I fixed this by making a designated randomColor() function. I added Bounding Volume Hierarchies, or BVH for short. BVH creates a massive performance increase, just over doubling render speed (from 6:30 to 3:04). This feature was by far the hardest to implement and understand, but basically it chunks up objects in the world to be in groups of boxes, and instead of looping through each object in the scene for collision checks, we loop through bounding boxes (groups) first, eliminating the objects that were missed. There was lots of friction creating this feature, especially after implementing a new loop that mathematically, should make the renderer faster, but in reality it became ~2.6x slower? I scrapped that for now and I’ll revisit it later.
These final hours have been excruciating. I encountered my first ever stack overflow (cannon event), I had trouble with null pointers, and somehow a function I made 2 weeks ago was broken but never showed its way through until today. But finally, I added textures! The 2 textures added are a checkerboard texture (as seen in the image below), and now you can upload any jpeg, png, or tga to the textures folder and they will be randomly applied to spheres. I added an earth texture and basketball texture. The image library was not me, it’s from an open source image library called stb_image. I would not have been able to make it myself. Also, I reorganized the project file structure because when I started my files were very non-conventional. Believe it or not, I got the file advice from The Cherno on YouTube. This is probably my final devlog for the summer. I learned a lot making this project and will continue it for the next few months to hopefully get it to where I want it to be.
Ships:
I built a raytracing graphics engine in raw C++. The engine uses mathematical concepts involving vectors, quadratics, as well as scientific concepts like reflection and refraction. This was my first long-term project I actually committed to. I learned a lot about C++ and math in general. To try the project, follow the instructions at the bottom of the README.
I improved and optimized my raytracing graphics engine. Images now render ~2x faster under default settings. Textures have been added, along with motion blur. I ran into issues like my first stack overflow error and nullpointers. To try the project, follow the instructions at the bottom of the README for the best experience....
|
1792987011.817136
|
1793073411.817136
|
|
34089
|
Carnival Chaos by @Nico | Stardance
|
Nico
|
2
|
56.0
|
482
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-08T16:26:51Z", "hours": 30.0, "multiplier": 16.44, "payout": 482, "blessing": "neutral", "text": "Carnival Chaos Carnival Chaos is a short, WarioWare-like game with 7 fun minigames you need to complete to win Hay bale climb - Platform up the hay bales to collect the coins Whack-a-mole - Click on all the moles before time runs out Dunk Tank - rapidly click the target as fast as you can to dunk the person Water Gun - Spray the target with your water gun to fill up the meter and win High Striker - Hit the button with the hammer to ring the bell Tug of War - Hit quick-time events to pull on the rope. pull far enough to win Face Painting - Paint the face to match the template. If you are close enough to the guide, you win the game! Once you win, you’ll see how long you took. Click play again and see how fast you can go!. My fastest time is 90.30 seconds. Try to beat that! Have fun!!!", "repo": "https://github.com/DinoMito1/Carnival-Chaos", "demo": "https://dino-mito.itch.io/carnival-chaos"}, {"ship_num": 2, "ts": "2026-08-18T18:43:59Z", "hours": 26.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Carnival Chaos This is a WarioWare-like game There are 4 quick minigames you must complete to win A platformer - climb on hay bales and collect the coins Whack-a-mole - click all of the moles in time Dunk Tank - rapidly hit the target many times Water Gun - spray water at a target to fill up the bar and win When you win, you’ll see how long you took to win. Try again and see how fast you can go my fastest time is 31.10 seconds. Try beating that! Hope you have fun!", "repo": "https://github.com/DinoMito1/Carnival-Chaos", "demo": "https://dino-mito.itch.io/carnival-chaos"}]...
|
[{"post_id": 77720, "ts": "202 [{"post_id": 77720, "ts": "2026-10-08T02:44:08Z", "hours": 2.5572, "text": "One Last Devlog! This devlog will be a shorter one. There wasn’t to much work left to do, so this last section didn’t take too long. I added another option into settings, being a manual toggle for mobile controls, incase they dont turn on automatically for mobile users or you just want to try the controls on PC. I also made a pause button . During any level of the game you can press the button to pause the game and decide whether to continue or quit back to the start of the game. I can’t believe this game is finally finished! I’ll be shipping it very soon, but in the meantime, you can try the game here! Let me know what you think!"}, {"post_id": 73724, "ts": "2026-09-25T19:49:24Z", "hours": 10.935, "text": "THE FINAL MINIGAME!!! Took a while, but I finally finished minigame 7! You have to paint the face to match the reference image before time runs out. This minigame was super difficult to get working because i needed to edit the face texture during run time, and I had no idea how to do that. Once I got the drawing to work I ran into another problem – how do you beat the game? I ended up having it check every pixel of your drawing against the reference image and keeping track of how many are the same color and letting you win as long as you are at least 70% accurate. I thought I was finished, so I exported the game and gave it one last test. It didn’t work. For some reason, when I exported to web, none of the drawing parts would work and I had to recode parts of the minigame several times. Eventually I got everything working. I know I just complained a lot, but I am really proud of this. It’s easily the most difficult thing I’ve made yet. Go test the game, tell me what you think! You can try it here!"}, {"post_id": 68378, "ts": "2026-09-15T01:05:16Z", "hours": 8.6708, "text": "Minigame Six!!! It’s Tug of War! You have to hit the QTEs to pull the rope in your direction and win the minigame. I originally started making an entire different minigame, but after working on it for several hours I realized it wasn’t very fun at all and scrapped it. I spent forever tweaking with the different numbers for this game, trying to get it to feel nice to play, and I think its pretty fun now. I also tried showing off the game to my brothers on mobile and they really struggled to use the mobile arrow key things, so they helped me fix it so that the 1st and 4th minigame are easier to play on phone. I’m trying really hard to balance the difficulty for this while keeping this fun for everyone, but for those looking for a challenge, I am planning on adding a hard mode soon If you want to try the game, you can play it here !"}, {"post_id": 64563, "ts": "2026-09-09T02:17:49Z", "hours": 8.0703, "text": "I’m back with minigame five! This one is based on those hammer tower games I can never remember the name of You have to press spacebar when the hammer is above the button to swing down and ring the bell! I also added… MOBILE SUPPORT Every single minigame now works on mobile. I made custom arrow key buttons for the platforming and water gun game on mobile. I also slightly polished some older things, mainly the first two minigames, making it slightly more obvious when you win and playing a sad sound when you lose If you want to try the game, you can play it here Sorry its been a while since my last devlog. I’ve been on vacation for the last several days and now school has started again. I’ll try to make 2 more minigames for a total of 7, and then I will be happy to call this complete!"}, {"post_id": 47856, "ts": "2026-08-16T02:43:27Z", "hours": 6.0897, "text": "Fourth Minigame!!! You have to shoot the target with the water gun to fill up the bar in time to win the minigame. The target is constantly moving along a track so it is more difficult to stay on the target. I was struggling for a while to get this minigame feeling fun. Whenever I tested it, it always felt like something was missing so I tried a bunch of different stuff, like adding little sound effects or making the target react to being sprayed with water. I tried lots of different things, not all of them got used, but I think I’m happy with how this plays right now With the fourth minigame finished, I’d say the game is finished too. I just have to write the README and put it on Itch.io, then this will be fully done. You can expect to see this get shipped soon!"}, {"post_id": 45250, "ts": "2026-08-11T16:26:19Z", "hours": 5.9428, "text": "Minigame Number 3!!! Its a Dunk Tank! You have to hit the target a bunch of times before time runs out to dunk the person and win the minigame. My little brother wanted to help out with this one so I let him make the splash sound for the dunk tank. speaking of my brother, I let him play test everything once I finished this minigame and he seemed to really enjoy it. He was playing for 20+ minutes trying to get a fast time, so I’m feeling pretty good about the game right now. I also added a volume slider in settings, this is where most of my time was spent. I originally was going to make the slider change the decibel level of every sound in the game individually, but since decibels are logarithmic, I didn’t know how to mute the audio this way. After a while I figured out how to scale volume linearly, but the way I was doing would require me to redo all of the audio ingame. I spent multiple hours messing around with audio stuff trying to make the slider work how I wanted, until I thought that there has to be an easier way. Then I found out about Audio Buses. I did exactly what I was already doing to all of the sounds to only the Audio Bus instead and this fixed my several hour long problem almost immediately. Just one more minigame to go and I think this game will be finished!"}, {"post_id": 42864, "ts": "2026-08-07T20:25:01Z", "hours": 3.9539, "text": "You can win now! Yippee!!! I made a win screen that shows if you beat all the minigames and a loss screen that shows if you somehow run out of lives. Both of the screens have a big retry button that takes you back to the menu, so you wont have to reopen the game to play again anymore. The win screen also has a cool sign that shows off your time and your best time. Your best time is saved if you retry so you can try to win all minigames as fast as you can To keep track of your time I just start a timer as soon as you press the start button and then check how long its been once you win I also added sound!!! It felt way too quiet playing through the game so I added some simple sound effects for stuff like clicking buttons, whacking moles, jumping, and some others. The sound effects were super fun to make because they are all just my voice lol. I’m not sure why this took me so long to do, it didnt feel like that much stuff. Regardless, I think I’ll make two more minigames after this, and then this will be ready to ship!"}, {"post_id": 40541, "ts": "2026-08-04T05:13:34Z", "hours": 3.4028, "text": "Second minigame finished!!! This one is just like classic Whack-a-mole games. You have to hit all the moles in time to win! This minigame was actually the quickest and easiest thing to code so far. (Though i did spend an embarrassingly long time on the art) Instead most of my time in Godot was spent polishing some things I didn’t like too much yet. The coins in the first minigame float up and down now. I forgot to do this when I first made them. Instead of just disappearing, your lives, which are tickets, rip in two then fade away when you lose a minigame. Lastly, I put an indicator before each minigame to show what it’s controls are. Such as arrow keys or mouse. Then when the minigame starts it shows in big text on the screen what your goal is. For example on the platforming minigame it says COLLECT Sorry for the longer devlog, I had a lot of little things I did I thought were worth sharing. Im really starting to like how this is coming along, so you can expect to see more devlogs from me soon."}, {"post_id": 38491, "ts": "2026-07-31T22:02:27Z", "hours": 4.3592, "text": "Finished the platforming minigame! It is based on those big stacks of hay you can climb at carnivals sometimes. You have to try and collect three coins before time is up to win. I wanted to give the little character a walking animation but i was struggling to figure it out so they just have a slightly different sprite while walking. I messed around with the movement speed and minigame time for a while to try and get good so overall im pretty happy with this."}, {"post_id": 35593, "ts": "2026-07-27T03:57:05Z", "hours": 2.0839, "text": "Made the menu for Carnival Chaos. This is going to be a WarioWare-like game where you complete several different carnival themed minigames to win! I got distracted making the art for a while and decided to make the building animated, but it took me forever to figure out how to use timers. I know there’s not too much right now but please let me know if you have any thoughts or criticism!"}]...
|
Title: Carnival Chaos by @Nico | Stardance
Devlog Title: Carnival Chaos by @Nico | Stardance
Devlogs:
Made the menu for Carnival Chaos. This is going to be a WarioWare-like game where you complete several different carnival themed minigames to win! I got distracted making the art for a while and decided to make the building animated, but it took me forever to figure out how to use timers. I know there’s not too much right now but please let me know if you have any thoughts or criticism!
Finished the platforming minigame! It is based on those big stacks of hay you can climb at carnivals sometimes. You have to try and collect three coins before time is up to win. I wanted to give the little character a walking animation but i was struggling to figure it out so they just have a slightly different sprite while walking. I messed around with the movement speed and minigame time for a while to try and get good so overall im pretty happy with this.
Second minigame finished!!! This one is just like classic Whack-a-mole games. You have to hit all the moles in time to win! This minigame was actually the quickest and easiest thing to code so far. (Though i did spend an embarrassingly long time on the art) Instead most of my time in Godot was spent polishing some things I didn’t like too much yet. The coins in the first minigame float up and down now. I forgot to do this when I first made them. Instead of just disappearing, your lives, which are tickets, rip in two then fade away when you lose a minigame. Lastly, I put an indicator before each minigame to show what it’s controls are. Such as arrow keys or mouse. Then when the minigame starts it shows in big text on the screen what your goal is. For example on the platforming minigame it says COLLECT Sorry for the longer devlog, I had a lot of little things I did I thought were worth sharing. Im really starting to like how this is coming along, so you can expect to see more devlogs from me soon.
You can win now! Yippee!!! I made a win screen that shows if you beat all the minigames and a loss screen that shows if you somehow run out of lives. Both of the screens have a big retry button that takes you back to the menu, so you wont have to reopen the game to play again anymore. The win screen also has a cool sign that shows off your time and your best time. Your best time is saved if you retry so you can try to win all minigames as fast as you can To keep track of your time I just start a timer as soon as you press the start button and then check how long its been once you win I also added sound!!! It felt way too quiet playing through the game so I added some simple sound effects for stuff like clicking buttons, whacking moles, jumping, and some others. The sound effects were super fun to make because they are all just my voice lol. I’m not sure why this took me so long to do, it didnt feel like that much stuff. Regardless, I think I’ll make two more minigames after this, and then this will be ready to ship!
Minigame Number 3!!! Its a Dunk Tank! You have to hit the target a bunch of times before time runs out to dunk the person and win the minigame. My little brother wanted to help out with this one so I let him make the splash sound for the dunk tank. speaking of my brother, I let him play test everything once I finished this minigame and he seemed to really enjoy it. He was playing for 20+ minutes trying to get a fast time, so I’m feeling pretty good about the game right now. I also added a volume slider in settings, this is where most of my time was spent. I originally was going to make the slider change the decibel level of every sound in the game individually, but since decibels are logarithmic, I didn’t know how to mute the audio this way. After a while I figured out how to scale volume linearly, but the way I was doing would require me to redo all of the audio ingame. I spent multiple hours messing around with audio stuff trying to make the slider work how I wanted, until I thought that there has to be an easier way. Then I found out about Audio Buses. I did exactly what I was already doing to all of the sounds to only the Audio Bus instead and this fixed my several hour long problem almost immediately. Just one more minigame to go and I think this game will be finished!
Fourth Minigame!!! You have to shoot the target with the water gun to fill up the bar in time to win the minigame. The target is constantly moving along a track so it is more difficult to stay on the target. I was struggling for a while to get this minigame feeling fun. Whenever I tested it, it always felt like something was missing so I tried a bunch of different stuff, like adding little sound effects or making the target react to being sprayed with water. I tried lots of different things, not all of them got used, but I think I’m happy with how this plays right now With the fourth minigame finished, I’d say the game is finished too. I just have to write the README and put it on Itch.io, then this will be fully done. You can expect to see this get shipped soon!
I’m back with minigame five! This one is based on those hammer tower games I can never remember the name of You have to press spacebar when the hammer is above the button to swing down and ring the bell! I also added… MOBILE SUPPORT Every single minigame now works on mobile. I made custom arrow key buttons for the platforming and water gun game on mobile. I also slightly polished some older things, mainly the first two minigames, making it slightly more obvious when you win and playing a sad sound when you lose If you want to try the game, you can play it here Sorry its been a while since my last devlog. I’ve been on vacation for the last several days and now school has started again. I’ll try to make 2 more minigames for a total of 7, and then I will be happy to call this complete!
Minigame Six!!! It’s Tug of War! You have to hit the QTEs to pull the rope in your direction and win the minigame. I originally started making an entire different minigame, but after working on it for several hours I realized it wasn’t very fun at all and scrapped it. I spent forever tweaking with the different numbers for this game, trying to get it to feel nice to play, and I think its pretty fun now. I also tried showing off the game to my brothers on mobile and they really struggled to use the mobile arrow key things, so they helped me fix it so that the 1st and 4th minigame are easier to play on phone. I’m trying really hard to balance the difficulty for this while keeping this fun for everyone, but for those looking for a challenge, I am planning on adding a hard mode soon If you want to try the game, you can play it here !
THE FINAL MINIGAME!!! Took a while, but I finally finished minigame 7! You have to paint the face to match the reference image before time runs out. This minigame was super difficult to get working because i needed to edit the face texture during run time, and I had no idea how to do that. Once I got the drawing to work I ran into another problem – how do you beat the game? I ended up having it check every pixel of your drawing against the reference image and keeping track of how many are the same color and letting you win as long as you are at least 70% accurate. I thought I was finished, so I exported the game and gave it one last test. It didn’t work. For some reason, when I exported to web, none of the drawing parts would work and I had to recode parts of the minigame several times. Eventually I got everything working. I know I just complained a lot, but I am really proud of this. It’s easily the most difficult thing I’ve made yet. Go test the game, tell me what you think! You can try it here!
One Last Devlog! This devlog will be a shorter one. There wasn’t to much work left to do, so this last section didn’t take too long. I added another option into settings, being a manual toggle for mobile controls, incase they dont turn on automatically for mobile users or you just want to try the controls on PC. I also made a pause button . During any level of the game you can press the button to pause the game and decide whether to continue or quit back to the start of the game. I can’t believe this game is finally finished! I’ll be shipping it very soon, but in the meantime, you can try the game here! Let me know what you think!
Ships:
Carnival Chaos This is a WarioWare-like game There are 4 quick minigames you must complete to win A platformer - climb on hay bales and collect the coins Whack-a-mole - click all of the moles in time Dunk Tank - rapidly hit the target many times Water Gun - spray water at a target to fill up the bar and win When you win, you’ll see how long you took to win. Try again and see how fast you can go my fastest time is 31.10 seconds. Try beating that! Hope you have fun!
Carnival Chaos Carnival Chaos is a short, WarioWare-like game with 7 fun minigames you need to complete to win Hay bale climb - Platform up the hay bales to collect the coins Whack-a-mole - Click on all the moles before time runs out Dunk Tank - rapidly click the target as fast as you can to dunk the person Water Gun - Spray the target with your water gun to fill up the meter and win High Striker - Hit the button with the hammer to ring the bell Tug of War - Hit quick-time events to pull on the rope. pull far enough to win Face Painting - Paint the face to match the template. If you are close enough to the guide, you win the game! Once you win, you’ll see how long you took. Click play again and see how fast you can go!. My fastest time is 90.30 seconds. Try to beat that! Have fun!!!...
|
1792990292.565813
|
1793076692.565813
|
|
23540
|
Thermals by @MarioS271 | Stardance
|
MarioS271
|
1
|
34.0
|
480
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-20T20:13:09Z", "hours": 34.0, "multiplier": 13.98, "payout": 480, "blessing": "neutral", "text": "Hi! Welcome to my project, Thermals. ######## It is a system resource monitor for Windows and Linux, written in Java. It monitors the following: CPU (usage, frequency, temperature) RAM (usage, free, on linux also cached) GPU (usage, temp, VRAM usage) Disks (name, mountpoint, read/write, usage) Network (adapter name, download/upload) Known Issues: Intel GPUs under Windows only report temperature correctly due to intel not really making it possible to read GPU data like you can with NVAPI/ADLX Intel GPUs under Linux do not show up at all AMD GPUs under Linux are untested and may not work (due to me not having AMD hardware avail, on windows a friend tested it for me) Tested on: Windows (Lenovo LOQ Gaming 15IRH8; i7-13620H, NVIDIA RTX 4050 Laptop GPU) WSL (same lenovo as above) Windows (Custom Build; AMD Ryzen 7 something, AMD Radeon something) Ubuntu 25.10 (Dell Latitude 5410; Stock) It works by polling hardware data on a background thread and pushing updates to the UI via a listener system. Data sources differ by platform: On windows, data comes from OSHI (a java library), D3DKMTHK for mainly GPU count and temperature on intel GPUs, NVAPI for NVIDIA GPUs and ADLX for AMD GPUs. The last three use an external C++ helper which interacts with these libraries and returns a json structure to the java app via stdout, which contains all the detected values. On Linux, data comes from OSHI, nvidia-smi and hwmon. The UI is built with Java Swing and FlatLaf for a dark, modern, Jetbrains-IDE-like style. For graphs, JFreeChart was used. The App also has a system tray icon, of which the color indicates the current CPU temperature. ######## I hope you have fun trying my project! :)", "repo": "https://github.com/MarioS271/thermals", "demo": "https://github.com/MarioS271/thermals/releases/latest"}]...
|
[{"post_id": 51260, "ts": "202 [{"post_id": 51260, "ts": "2026-08-20T19:56:57Z", "hours": 6.3822, "text": "Everything finally works!! I added support for linux and tested on WSL and native Ubuntu. Everything works perfectly (except AMD GPUs on Linux, didn’t have any hardware to test that…) In the last two days, a lot of changes happened, which are listed below. Changelog August 19th: Window immediately opens on app start now App now works without a tray icon Remove fan speed display Add CPU temp sensing for linux Make Disk and Net Panels grow on more entries that can fit Add filter for unwanted mounts/filesystems on disks view Hide middle panel (GPUs) if no valid GPU is present (mainly happens on linux + intel gpu) Implement GPU stat reading for NVIDIA and AMD GPUs in Linux Switch to JBR (Jetbrains Runtime) to fix scaling issues on Linux Create & debug CI/CD pipeline (a sh * t ton of debugging mostly) Add the logo Add file lock for only one instance Add PawnIO install prompt August 20th: Overhaul the tray icon behaviour and window controls Switch RAM graph to percentages from absolute values Add EMA filter for CPU temperature Add temperature data to CPU and GPU graphs Add color coded font for stats corresponding to graph datasets Fix up popups and the main class Clean up and optimize the whole app a little Fix Linux app launch Hide the AppImage mount under Linux … and of course tons of tiny tweaks and fixes everywhere too. :)"}, {"post_id": 49804, "ts": "2026-08-18T18:59:30Z", "hours": 2.3211, "text": "All Sensor Data works now! :) (on windows at least) Disks Per disk, you get its name and mountpoint, its R/W and its current capacity (used/total GB, progress bar and percentage). Network Adapters Per adapter, you get name and up/down speeds. Names above 40 chars are shortened to avoid text of the speed and name colliding. Next Up I’m working on getting Linux working too. Will probably have that done by tomorrow."}, {"post_id": 48405, "ts": "2026-08-16T18:54:25Z", "hours": 0.9208, "text": "RAM Panel and ADLX works! (yes, i did the adlx part partially using claude because i don’t hate myself enough to work on the adlx stuff for 5h when i have to get up tomorrow)"}, {"post_id": 48363, "ts": "2026-08-16T17:54:30Z", "hours": 3.6458, "text": "CPU and GPU data working! The Data Sources For CPU, mostly OSHI. For CPU frequency, I’ve also decided to go back to OSHI for various reasons. CPU temperature is queried using PawnIO. For GPU(s), D3DKMTHK is used for a list of GPUs and GPU temperature. For all other metrics, NVAPI (NVIDIA API) is used. AMD GPUs will also get support in the near future (via ADLX), Intel GPUs won’t be supported though. The Architecture of the PawnIO Reader Data Path The Hardware Manager calls the method requestData in WindowsReader which hands it a SensorData object, which contains the CPU temperature and a list of GpuData object, which look like this: public record GpuData ( String name , double tempC , double usagePct , long vramUsedMb , long vramTotalMb ) {} This data is then passed to all subclasses of the hardware manager that need it ( Cpu , Gpu ). Other Improvements The hardware manager now has a new method called addUpdateListener with which you can register a class that implements the HwUpdateListener interface. The hardware manager will then call onHwUpdate on all registered classes as soon as it has refreshed its data via OSHI and PawnIO-Reader. Additionally, the fan panel will not be displayed on windows because of reasons mentioned in the last devlog (too time-consuming to implement properly)"}, {"post_id": 47778, "ts": "2026-08-15T23:02:37Z", "hours": 2.1539, "text": "f * ck microsoft After MANY hours of research and wanting to launch this project into orbit WAY too many times, I’ve finally managed to query almost all of the missing and/or incorrect data in windows (CPU frequency and temp and all GPU stuff) except fan speeds i just dont care enough anymore to implement that too (why later). Why this is SO complicated In contrast to linux (which has hwmon), windows has no standardized way of getting proper sensor data reliably. CPU temp (accessible via WMI) is often not properly exposed by the manufacturer causing it to return either zero or garbage. CPU frequency is exposed, but it kinda lags behind and is measured/calculated badly. GPU stuff is basically not exposed at all, expect via their half-working API called “D3DKMTHK” (no i did not smash my keyboard) over which you can pretty reliably get GPU temp and memory frequency, but usage and fan speed not so much. For that, I used NVAPI (NVIDIA’s GPU query API). What? AMD and Intel GPUs don’t work with NVAPI? i know and i will not fix it, i don’t have the energy or time for that (i’m sorry). you’re welcome to give me a PR tho For the CPU stuff (frequency and temperatue) I used PawnIO, a kernel driver that can be scripted to do a lot of things. I use premade “AMX Modules” which basically are such scripts to get these CPU metrics. The AMX modules in use are: IntelMSR AMDFamily17 RyzenSMU (you can find these here ) The Final Solution A C++ shim which takes the data from PawnIO, NVAPI, “D3DKMTHK” and all the others and hands it to the java app via stdout . The java process runs the .exe everytime it needs the values, parses the returned json and saves the values. What were u talking about fan speeds too difficult again? You see, I could just do the same as with the CPU stuff (AMX modules). The problem is, the module LpcIO which exposes the EC (embedded controller) only exposes a direct path to it, meaning I’d have to implement and parse everything myself. The huge problem with this is: on laptops the EC is vendor-specific and undocumented, and on desktop, there are ~71 supported chips that require different implementations, which is probably the biggest waste of time, so I’ve decided to just skip fan speeds entirely."}, {"post_id": 27984, "ts": "2026-07-13T23:02:39Z", "hours": 3.5231, "text": "Partial Live CPU Data working! :) I’ve managed to get the live CPU stats (usage, per-core usage and (approx.) clock speed) and the CPU usage graph running. One problem with the current approach for measuring values (which is done using OSHI) is that on Windows, things like CPU temperature, CPU clock speed and others are not reliable. Why? On Windows, metrics like CPU temperature are read over WMI. However, the actual CPU temp is often only partially or not at all correctly exposed via WMI. CPU clock is often a stale/cached value or sometimes not at all given. This requires an external source of data which is both correct and more reliable. Technical Architecture of HwManager and live stats/graphs The hardware manager is a class that can provide all sensor data necessary. It abstracts OSHI and any future methods of aquiring data into one class (with instances of other classes such as Cpu ). It has its own thread which calls the pollValues method of all subclasses ( Cpu , …) which then update their internal values, which can be retrieved via getter functions. The Window class has an internal timer which calls the update method of TopPanel , MiddlePanel and BottomPanel , which then call each component panel’s update method which then update their stats and graphs."}, {"post_id": 22487, "ts": "2026-07-04T23:44:30Z", "hours": 2.0642, "text": "Fan Panel and Disks Panel done! After once again a little time away from this project, I finally finished the fan panel and the disks panel! :) Fan Panel The fan panel has a 2x3 grid which expands in columns if more than 6 fans are present (which also expands the width of the panel). Each fan is just a Stat instance. Disks Panel Each Disk is given params such as name, type (NVMe, SATA SSD/HDD, …), usage percentage and read/write rates. Then, the Disk instance manages the layout and drawing. The Disk class extends BaseBottomEntry , which is a horizontal JPanel with a BoxLayout and a name label. Then, Disk adds a JPanel on the right side of itsself and places stats like the ones given above (type, read/write activity, …) in it. For usage, there’s also a PercentageBar which is also custom-written. Looking forward to finishing the UI and then getting started on the actual stats reading! :)"}, {"post_id": 19556, "ts": "2026-06-30T21:42:55Z", "hours": 2.5158, "text": "UI coming together even more! The core UI structure is done now. This includes: Top Row Middle Row Bottom Row Top Row The top row contains CPU and RAM, same as in the last devlog. Middle Row The middle row contains all GPUs and fan speeds. This means it can contain 2..n component panels (if n is number of GPUs minus one). It is horizontally scrollable which prevents this row over-cluttering the popup (which would be caused by methods like wrapping excess panels to the next row). Bottom Row This row contains two panels which fill the window’s width. The first panel - the disks panel - contains info about all disks or drives in the computer. It will have one “entry” (one row inside the panel with info such as drive name, transfer speed and used/total size). Same goes for the network panel, which contains all network adapters. It will display info such as download, upload, adapter state and name."}, {"post_id": 17560, "ts": "2026-06-28T12:04:04Z", "hours": 4.2872, "text": "UI Overhaul!!!! I’ve decided I wanna go for a slightly different UI style, with CPU and RAM in the first row in a 2:1 ratio. Below, there’s the GPU row with 2 cols and as many rows as needed, and below will be one panel for all disks (including their usage, current transfer and so on) and one for all network adapters and their stats. What changed already The CPU and RAM panel are now positioned exactly how they will be in the final product. The CPU panel is also basically done, as its got the usage graph on top and stats on the bottom. Technical Details There are two new classes: Stat and Graph . A Graph is… well pretty self explanatory I hope, and a Stat is one value with text on what it is. (as seen below the red graph)."}, {"post_id": 16494, "ts": "2026-06-26T20:47:50Z", "hours": 1.9594, "text": "UI Overhaul!! :) I finally got the UI working in a way I like. You now have one panel per component. The Structure The window contains a JScrollPane (for scrolling when the content gets larger than the window) which contains a JSplitPane for dividing the contents into top and bottom. Additionally, there are the TopPanel and BottomPanel . The TopPanel contains three fixed panels: CPU, GPU and RAM. (still need to figure out how to properly display multi-GPU setups like this but future problem i guess) The BottomPanel contains all other devices, like drives and network adapters. Technical Details Both TopPanel and BottomPanel are containers for individual “component panels”. Each component panel ( CpuPanel , DiskPanel , …) owns its own components like labels, graphs or similar. I also wrote a custom JPanelRounded class for rounded panels. About to add a little detail to the component panels next! :)"}, {"post_id": 15916, "ts": "2026-06-25T21:20:54Z", "hours": 3.3436, "text": "Finally, progress again! After being offline for a little touching… grass and stuff (idk if anyone will get the reference) I finally got to work again and made two things work: Right Click Menu for the Tray Icon Basic Popup Window Structure The Window Architecture The popup window uses one main JSplitPlane which houses two panels ( TopPanel , BottomPanel ). Each of these panels again contains panels ( CpuPanel , GpuPanel , …), of which each one contains stuff like its own labels and other stuff."}, {"post_id": 13328, "ts": "2026-06-21T20:35:53Z", "hours": 0.8256, "text": "Tray Icon is nearing completion (already)! OK, don’t take it wrong: the app is nowhere near finished but at least the tray icon is! The current tray icon state The tray icon now displays the CPU temperature represented as a color, interpolated between a cold hue (green, 30°C) and a hot hue (red, 90°C). Also, I added a tooltip which shows temps for CPU and GPU (currently its placeholders but oh well) It took embarassingly long for me to realise I needed antialiasing to eliminate the choppyness-look from the icon btw"}, {"post_id": 13148, "ts": "2026-06-21T14:54:36Z", "hours": 0.4139, "text": "New project alert! I’ve started working on an app called “Thermals”. It serves the purpose of being a simple yet modern and elegant usage and temperature monitor, accessible through a tray icon, made to work on both Windows and Linux. Current Progress Build System, Repository and similar is set up and simple tray icon (a white square) is also working. Looking forward to how this project comes out! :)"}]...
|
Title: Thermals by @MarioS271 | Stardance
Devlogs Title: Thermals by @MarioS271 | Stardance
Devlogs:
New project alert! I’ve started working on an app called “Thermals”. It serves the purpose of being a simple yet modern and elegant usage and temperature monitor, accessible through a tray icon, made to work on both Windows and Linux. Current Progress Build System, Repository and similar is set up and simple tray icon (a white square) is also working. Looking forward to how this project comes out! :)
Tray Icon is nearing completion (already)! OK, don’t take it wrong: the app is nowhere near finished but at least the tray icon is! The current tray icon state The tray icon now displays the CPU temperature represented as a color, interpolated between a cold hue (green, 30°C) and a hot hue (red, 90°C). Also, I added a tooltip which shows temps for CPU and GPU (currently its placeholders but oh well) It took embarassingly long for me to realise I needed antialiasing to eliminate the choppyness-look from the icon btw
Finally, progress again! After being offline for a little touching… grass and stuff (idk if anyone will get the reference) I finally got to work again and made two things work: Right Click Menu for the Tray Icon Basic Popup Window Structure The Window Architecture The popup window uses one main JSplitPlane which houses two panels ( TopPanel , BottomPanel ). Each of these panels again contains panels ( CpuPanel , GpuPanel , …), of which each one contains stuff like its own labels and other stuff.
UI Overhaul!! :) I finally got the UI working in a way I like. You now have one panel per component. The Structure The window contains a JScrollPane (for scrolling when the content gets larger than the window) which contains a JSplitPane for dividing the contents into top and bottom. Additionally, there are the TopPanel and BottomPanel . The TopPanel contains three fixed panels: CPU, GPU and RAM. (still need to figure out how to properly display multi-GPU setups like this but future problem i guess) The BottomPanel contains all other devices, like drives and network adapters. Technical Details Both TopPanel and BottomPanel are containers for individual “component panels”. Each component panel ( CpuPanel , DiskPanel , …) owns its own components like labels, graphs or similar. I also wrote a custom JPanelRounded class for rounded panels. About to add a little detail to the component panels next! :)
UI Overhaul!!!! I’ve decided I wanna go for a slightly different UI style, with CPU and RAM in the first row in a 2:1 ratio. Below, there’s the GPU row with 2 cols and as many rows as needed, and below will be one panel for all disks (including their usage, current transfer and so on) and one for all network adapters and their stats. What changed already The CPU and RAM panel are now positioned exactly how they will be in the final product. The CPU panel is also basically done, as its got the usage graph on top and stats on the bottom. Technical Details There are two new classes: Stat and Graph . A Graph is… well pretty self explanatory I hope, and a Stat is one value with text on what it is. (as seen below the red graph).
UI coming together even more! The core UI structure is done now. This includes: Top Row Middle Row Bottom Row Top Row The top row contains CPU and RAM, same as in the last devlog. Middle Row The middle row contains all GPUs and fan speeds. This means it can contain 2..n component panels (if n is number of GPUs minus one). It is horizontally scrollable which prevents this row over-cluttering the popup (which would be caused by methods like wrapping excess panels to the next row). Bottom Row This row contains two panels which fill the window’s width. The first panel - the disks panel - contains info about all disks or drives in the computer. It will have one “entry” (one row inside the panel with info such as drive name, transfer speed and used/total size). Same goes for the network panel, which contains all network adapters. It will display info such as download, upload, adapter state and name.
Fan Panel and Disks Panel done! After once again a little time away from this project, I finally finished the fan panel and the disks panel! :) Fan Panel The fan panel has a 2x3 grid which expands in columns if more than 6 fans are present (which also expands the width of the panel). Each fan is just a Stat instance. Disks Panel Each Disk is given params such as name, type (NVMe, SATA SSD/HDD, …), usage percentage and read/write rates. Then, the Disk instance manages the layout and drawing. The Disk class extends BaseBottomEntry , which is a horizontal JPanel with a BoxLayout and a name label. Then, Disk adds a JPanel on the right side of itsself and places stats like the ones given above (type, read/write activity, …) in it. For usage, there’s also a PercentageBar which is also custom-written. Looking forward to finishing the UI and then getting started on the actual stats reading! :)
Partial Live CPU Data working! :) I’ve managed to get the live CPU stats (usage, per-core usage and (approx.) clock speed) and the CPU usage graph running. One problem with the current approach for measuring values (which is done using OSHI) is that on Windows, things like CPU temperature, CPU clock speed and others are not reliable. Why? On Windows, metrics like CPU temperature are read over WMI. However, the actual CPU temp is often only partially or not at all correctly exposed via WMI. CPU clock is often a stale/cached value or sometimes not at all given. This requires an external source of data which is both correct and more reliable. Technical Architecture of HwManager and live stats/graphs The hardware manager is a class that can provide all sensor data necessary. It abstracts OSHI and any future methods of aquiring data into one class (with instances of other classes such as Cpu ). It has its own thread which calls the pollValues method of all subclasses ( Cpu , …) which then update their internal values, which can be retrieved via getter functions. The Window class has an internal timer which calls the update method of TopPanel , MiddlePanel and BottomPanel , which then call each component panel’s update method which then update their stats and graphs.
f * ck microsoft After MANY hours of research and wanting to launch this project into orbit WAY too many times, I’ve finally managed to query almost all of the missing and/or incorrect data in windows (CPU frequency and temp and all GPU stuff) except fan speeds i just dont care enough anymore to implement that too (why later). Why this is SO complicated In contrast to linux (which has hwmon), windows has no standardized way of getting proper sensor data reliably. CPU temp (accessible via WMI) is often not properly exposed by the manufacturer causing it to return either zero or garbage. CPU frequency is exposed, but it kinda lags behind and is measured/calculated badly. GPU stuff is basically not exposed at all, expect via their half-working API called “D3DKMTHK” (no i did not smash my keyboard) over which you can pretty reliably get GPU temp and memory frequency, but usage and fan speed not so much. For that, I used NVAPI (NVIDIA’s GPU query API). What? AMD and Intel GPUs don’t work with NVAPI? i know and i will not fix it, i don’t have the energy or time for that (i’m sorry). you’re welcome to give me a PR tho For the CPU stuff (frequency and temperatue) I used PawnIO, a kernel driver that can be scripted to do a lot of things. I use premade “AMX Modules” which basically are such scripts to get these CPU metrics. The AMX modules in use are: IntelMSR AMDFamily17 RyzenSMU (you can find these here ) The Final Solution A C++ shim which takes the data from PawnIO, NVAPI, “D3DKMTHK” and all the others and hands it to the java app via stdout . The java process runs the .exe everytime it needs the values, parses the returned json and saves the values. What were u talking about fan speeds too difficult again? You see, I could just do the same as with the CPU stuff (AMX modules). The problem is, the module LpcIO which exposes the EC (embedded controller) only exposes a direct path to it, meaning I’d have to implement and parse everything myself. The huge problem with this is: on laptops the EC is vendor-specific and undocumented, and on desktop, there are ~71 supported chips that require different implementations, which is probably the biggest waste of time, so I’ve decided to just skip fan speeds entirely.
CPU and GPU data working! The Data Sources For CPU, mostly OSHI. For CPU frequency, I’ve also decided to go back to OSHI for various reasons. CPU temperature is queried using PawnIO. For GPU(s), D3DKMTHK is used for a list of GPUs and GPU temperature. For all other metrics, NVAPI (NVIDIA API) is used. AMD GPUs will also get support in the near future (via ADLX), Intel GPUs won’t be supported though. The Architecture of the PawnIO Reader Data Path The Hardware Manager calls the method requestData in WindowsReader which hands it a SensorData object, which contains the CPU temperature and a list of GpuData object, which look like this: public record GpuData ( String name , double tempC , double usagePct , long vramUsedMb , long vramTotalMb ) {} This data is then passed to all subclasses of the hardware manager that need it ( Cpu , Gpu ). Other Improvements The hardware manager now has a new method called addUpdateListener with which you can register a class that implements the HwUpdateListener interface. The hardware manager will then call onHwUpdate on all registered classes as soon as it has refreshed its data via OSHI and PawnIO-Reader. Additionally, the fan panel will not be displayed on windows because of reasons mentioned in the last devlog (too time-consuming to implement properly)
RAM Panel and ADLX works! (yes, i did the adlx part partially using claude because i don’t hate myself enough to work on the adlx stuff for 5h when i have to get up tomorrow)
All Sensor Data works now! :) (on windows at least) Disks Per disk, you get its name and mountpoint, its R/W and its current capacity (used/total GB, progress bar and percentage). Network Adapters Per adapter, you get name and up/down speeds. Names above 40 chars are shortened to avoid text of the speed and name colliding. Next Up I’m working on getting Linux working too. Will probably have that done by tomorrow.
Everything finally works!! I added support for linux and tested on WSL and native Ubuntu. Everything works perfectly (except AMD GPUs on Linux, didn’t have any hardware to test that…) In the last two days, a lot of changes happened, which are listed below. Changelog August 19th: Window immediately opens on app start now App now works without a tray icon Remove fan speed display Add CPU temp sensing for linux Make Disk and Net Panels grow on more entries that can fit Add filter for unwanted mounts/filesystems on disks view Hide middle panel (GPUs) if no valid GPU is present (mainly happens on linux + intel gpu) Implement GPU stat reading for NVIDIA and AMD GPUs in Linux Switch to JBR (Jetbrains Runtime) to fix scaling issues on Linux Create & debug CI/CD pipeline (a sh * t ton of debugging mostly) Add the logo Add file lock for only one instance Add PawnIO install prompt August 20th: Overhaul the tray icon behaviour and window controls Switch RAM graph to percentages from absolute values Add EMA filter for CPU temperature Add temperature data to CPU and GPU graphs Add color coded font for stats corresponding to graph datasets Fix up popups and the main class Clean up and optimize the whole app a little Fix Linux app launch Hide the AppImage mount under Linux … and of course tons of tiny tweaks and fixes everywhere too. :)
Ships:
Hi! Welcome to my project, Thermals. ######## It is a system resource monitor for Windows and Linux, written in Java. It monitors the following: CPU (usage, frequency, temperature) RAM (usage, free, on linux also cached) GPU (usage, temp, VRAM usage) Disks (name, mountpoint, read/write, usage) Network (adapter name, download/upload) Known Issues: Intel GPUs under Windows only report temperature correctly due to intel not really making it possible to read GPU data like you can with NVAPI/ADLX Intel GPUs under Linux do not show up at all AMD GPUs under Linux are untested and may not work (due to me not having AMD hardware avail, on windows a friend tested it for me) Tested on: Windows (Lenovo LOQ Gaming 15IRH8; i7-13620H, NVIDIA RTX 4050 Laptop GPU) WSL (same lenovo as above) Windows (Custom Build; AMD Ryzen 7 something, AMD Radeon something) Ubuntu 25.10 (Dell Latitude 5410; Stock) It works by polling hardware data on a background thread and pushing updates to the UI via a listener system. Data sources differ by platform: On windows, data comes from OSHI (a java library), D3DKMTHK for mainly GPU count and temperature on intel GPUs, NVAPI for NVIDIA GPUs and ADLX for AMD GPUs. The last three use an external C++ helper which interacts with these libraries and returns a json structure to the java app via stdout, which contains all the detected values. On Linux, data comes from OSHI, nvidia-smi and hwmon. The UI is built with Java Swing and FlatLaf for a dark, modern, Jetbrains-IDE-like style. For graphs, JFreeChart was used. The App also has a system tray icon, of which the color indicates the current CPU temperature. ######## I hope you have fun trying my project! :)...
|
1792968924.1521602
|
1793055324.1521602
|
|
41870
|
World Food Explore by @theodora | Stardance
|
theodora
|
1
|
29.0
|
479
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-02T19:12:35Z", "hours": 29.0, "multiplier": 13.73, "payout": 479, "blessing": "neutral", "text": "World Food Explorer🌍🍜 This is an interactive way to explore the world’s food. Spin a 3D globe on desktop, pan a 2D map on mobile, tap a city and discover its signature dish and where to actually go eat it. Live demo: https://theodora-sin.github.io/World-Food-Explore/ Features: 🌍 3D globe (desktop) / 2D map (mobile) — automatically switches based on screen width, so the experience fits any device 📍 Tap any city to open a food card: dish photo, description, cuisine type, meal course, and a recommended restaurant with address + Google Maps link 🔍 Search by city name, country, dish, or cuisine type; when it does not match, it will show “no matches” 🎲 Surprise Me — jumps to a random city (with a “spin then land” flourish on the 3D globe) 📍 Near Me — uses your device’s location to find and fly to the closest city in the dataset ★ Favourites — save cities to revisit later, stored locally in your browser 🕘 History — a running timeline of the last 10 cities you’ve explored this session 👋 Start screen with instructions and character guides, shown on first loading screen Data Structure: Each city in the dataset follow this shape: cityName country latitude longitude Type of Cuisine (Chinese, Western, Italian, etc.) dish_name course (e.g. Main,Dessert, Brunch,B reakfast) A photo of the famous dish A short description of the famous dish Name of the restaurant which served this dish priceRange ($, $$, $$$) address hyperlink to Google Maps Tech Stack: globe.gl — 3D globe rendering (built on Three.js) Leaflet + Leaflet.markercluster — 2D map and marker clustering CARTO Dark Matter tiles — dark map theme matching the 3D globe’s aesthetic Vanilla JavaScript (ES modules) — no framework or build step; every feature is a small, focused module localStorage — persists favourites across visits Browser Geolocation API — powers the Near Me feature No backend, no database, no build tooling — the whole thing is static files, deployed via GitHub Pages. AI Usage: AI was used to assist with development — debugging code, explaining errors, and helping me think through what users would actually want from the experience. The concept, design direction, and feature decisions were all mine.", "repo": "https://github.com/theodora-sin/World-Food-Explore", "demo": "https://theodora-sin.github.io/World-Food-Explore/"}]...
|
[{"post_id": 39631, "ts": "202 [{"post_id": 39631, "ts": "2026-08-02T19:10:30Z", "hours": 7.2236, "text": "Devlog #4 Final data were added to the Americas globe to cover the entire globe. It does not include all cities in the world, but it at least offers good representation of cuisine from around the world. Today’s main focus was adding the timeline, the Near Me button, and the start screen with favicon— the last few features on my list before shipping. This is the day when the project goes live. Thanks for following and supporting the project!"}, {"post_id": 39038, "ts": "2026-08-01T18:27:12Z", "hours": 6.3644, "text": "Devlog #3 Added some new cities in Africa to our dataset, going further than just covering Asia and Europe. The main highlight of today’s work was improving the 2D mobile interface, where the city card now appears with a slide-up animation from the bottom and is dismissed with a swipe-down action, not only a close button. But I also added three new features, working simultaneously for the 2D map and 3D globe: Search bar – search by city name, dish or cuisine Surprise me – navigate to some random city Favourites – mark your favourite city with a star, and open the list of saved cities (locally stored in the browser) later That’s all for today’s developer log, will see you in the next one."}, {"post_id": 38372, "ts": "2026-07-31T18:33:30Z", "hours": 7.1633, "text": "Devlog #2 Today I started working on my project. I made a map based on Leaflet.js that people can interact with. When people look at the site on their phones, they will see the 2D map. But if they are using a screen like a computer and the screen is wider than 768 pixels, then they will see a 3D globe instead of the 2D map. I have been putting places on my map. Today I worked on Asia and Europe. I also drew the favicon by hand. That’s it for today’s devlog. Thanks for reading, and see you in the next update!"}, {"post_id": 37807, "ts": "2026-07-30T19:12:04Z", "hours": 8.3539, "text": "Devlog #1 Today I made a start on the project by creating a cool interactive 3D globe using Globe.gl. The application is built around three things: City (on the globe:) cityName country Use the pin to pinpoint the exact location using longitude and latitude Cuisine: Type of Cuisine (Chinese, Western, Italian, etc.) dish_name course (e.g. Main, Dessert, Brunch, Breakfast) A photo of the famous dish A short description of the famous dish Place: Name of the restaurant which served this dish priceRange ($, $$, $$$) address hyperlink to Google Maps Each cuisine links to recommended places where users can try authentic local food."}]...
|
Title: World Food Explore by @theodora | Stardance Title: World Food Explore by @theodora | Stardance
Devlogs:
Devlog #1 Today I made a start on the project by creating a cool interactive 3D globe using Globe.gl. The application is built around three things: City (on the globe:) cityName country Use the pin to pinpoint the exact location using longitude and latitude Cuisine: Type of Cuisine (Chinese, Western, Italian, etc.) dish_name course (e.g. Main, Dessert, Brunch, Breakfast) A photo of the famous dish A short description of the famous dish Place: Name of the restaurant which served this dish priceRange ($, $$, $$$) address hyperlink to Google Maps Each cuisine links to recommended places where users can try authentic local food.
Devlog #2 Today I started working on my project. I made a map based on Leaflet.js that people can interact with. When people look at the site on their phones, they will see the 2D map. But if they are using a screen like a computer and the screen is wider than 768 pixels, then they will see a 3D globe instead of the 2D map. I have been putting places on my map. Today I worked on Asia and Europe. I also drew the favicon by hand. That’s it for today’s devlog. Thanks for reading, and see you in the next update!
Devlog #3 Added some new cities in Africa to our dataset, going further than just covering Asia and Europe. The main highlight of today’s work was improving the 2D mobile interface, where the city card now appears with a slide-up animation from the bottom and is dismissed with a swipe-down action, not only a close button. But I also added three new features, working simultaneously for the 2D map and 3D globe: Search bar – search by city name, dish or cuisine Surprise me – navigate to some random city Favourites – mark your favourite city with a star, and open the list of saved cities (locally stored in the browser) later That’s all for today’s developer log, will see you in the next one.
Devlog #4 Final data were added to the Americas globe to cover the entire globe. It does not include all cities in the world, but it at least offers good representation of cuisine from around the world. Today’s main focus was adding the timeline, the Near Me button, and the start screen with favicon— the last few features on my list before shipping. This is the day when the project goes live. Thanks for following and supporting the project!
Ships:
World Food Explorer🌍🍜 This is an interactive way to explore the world’s food. Spin a 3D globe on desktop, pan a 2D map on mobile, tap a city and discover its signature dish and where to actually go eat it. Live demo: https://theodora-sin.github.io/World-Food-Explore/ Features: 🌍 3D globe (desktop) / 2D map (mobile) — automatically switches based on screen width, so the experience fits any device 📍 Tap any city to open a food card: dish photo, description, cuisine type, meal course, and a recommended restaurant with address + Google Maps link 🔍 Search by city name, country, dish, or cuisine type; when it does not match, it will show “no matches” 🎲 Surprise Me — jumps to a random city (with a “spin then land” flourish on the 3D globe) 📍 Near Me — uses your device’s location to find and fly to the closest city in the dataset ★ Favourites — save cities to revisit later, stored locally in your browser 🕘 History — a running timeline of the last 10 cities you’ve explored this session 👋 Start screen with instructions and character guides, shown on first loading screen Data Structure: Each city in the dataset follow this shape: cityName country latitude longitude Type of Cuisine (Chinese, Western, Italian, etc.) dish_name course (e.g. Main,Dessert, Brunch,B reakfast) A photo of the famous dish A short description of the famous dish Name of the restaurant which served this dish priceRange ($, $$, $$$) address hyperlink to Google Maps Tech Stack: globe.gl — 3D globe rendering (built on Three.js) Leaflet + Leaflet.markercluster — 2D map and marker clustering CARTO Dark Matter tiles — dark map theme matching the 3D globe’s aesthetic Vanilla JavaScript (ES modules) — no framework or build step; every feature is a small, focused module localStorage — persists favourites across visits Browser Geolocation API — powers the Near Me feature No backend, no database, no build tooling — the whole thing is static files, deployed via GitHub Pages. AI Usage: AI was used to assist with development — debugging code, explaining errors, and helping me think through what users would actually want from the experience. The concept, design direction, and feature decisions were all mine....
|
1792975863.8900495
|
1793062263.8900495
|
|
56938
|
NevAI by @Nahida4479 | Stardance
|
Nahida4479
|
4
|
34.0
|
479
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-08T17:50:24Z", "hours": 3.0, "multiplier": 9.7, "payout": 30, "blessing": "neutral", "text": "NevAI New features Added Anthropic as an AI provider Added the Claude Haiku 5.5 model Adapted the web search tool for Anthropic models Added input validation to setup_env.sh Added a “How to use” section to the /help command Added ANTHROPIC_API to env.example Added a section about Anthropic models to README.md The console now shows input and output token counts for Anthropic models Updated the AI usage disclosure Changed the permissions in the bot invitation link Important Anthropic is an optional provider (NevAI requires at least one of the AI providers listed on GitHub). The bot keeps working with free APIs alone, and Anthropic is used only if you add an ANTHROPIC_API key. How to use Many people mention in project reviews that they don’t know how to use NevAI. Detailed information can be found in the README.md on GitHub and via the /help command. Planned I plan to continue developing the project. If you would like to add your language, please read CONTRIBUTING.md on GitHub. If you find a bug, please report it via GitHub Issues. Good luck with your projects! :)", "repo": "https://github.com/Nahida4479/NevAI-Bot", "demo": "https://discord.com/oauth2/authorize?client_id=1544417524613910628&permissions=17179995200&integration_type=0&scope=bot"}, {"ship_num": 2, "ts": "2026-10-05T23:51:48Z", "hours": 3.0, "multiplier": 12.26, "payout": 43, "blessing": "neutral", "text": "NevAI New features New install.sh script for easy installation Editing the custom prompt on Discord ( /ai_settings ) now loads your current prompt so you can modify it, instead of overwriting it with a new one Added Watchtower for automatic updates (downloads and runs the new Docker image) Changed model gemini-3-flash-preview → GPT-6-Luna Added env-example file Updated README.md (information about install.sh , the new AI model, and how to run the Docker image manually) Planned I plan to keep developing my project by adding new features and fixing bugs. If you want to report a bug or add your language, feel free to open an issue/pull request on GitHub.", "repo": "https://github.com/Nahida4479/NevAI-Bot", "demo": "https://discord.com/oauth2/authorize?client_id=1544417524613910628&permissions=17179995200&integration_type=0&scope=bot"}, {"ship_num": 3, "ts": "2026-09-18T15:44:37Z", "hours": 16.0, "multiplier": 17.39, "payout": 285, "blessing": "neutral", "text": "NevAI - Discord AI Bot Hi, I re-shipped my project because I added new features. New features Exa.ai system - the bot now responds using real web data NevAI returns images found by Exa I adjusted the model so it can’t lie and actually utilizes the available data The bot can use custom Discord server emojis I added more detailed logs returned by the /logs command on Discord I added a debugging system that can be enabled by adding the entry DEBUG_MODE=true to the .env file. This writes detailed logs to debug.log Changed model qwen/qwen3-32b -> google/gemini-3-flash-preview IMPORTANT! How to use? I’ve come across comments saying you don’t know how to use the bot. There are detailed instructions in the README.md , but I’m also posting them here: Add the bot and set the AI channel using the /ai command. Mention the bot, then ask your question. You can customize the bot options using administrator commands (server administrator only, more info on GitHub). You can also run the bot locally: docker pull ghcr.io/nahida4479/nevai:latest docker run –env-file .env ghcr.io/nahida4479/nevai:latest Planned I plan to continue developing this project, so if you encounter any bugs, please report them as issues on GitHub. You can also add your own translation for the bot (see CONTRIBUTING.md on GitHub). Thanks for reading, and good luck with your projects! :)", "repo": "https://github.com/Nahida4479/NevAI-Bot", "demo": "https://discord.com/oauth2/authorize?client_id=1544417524613910628&permissions=17179995200&integration_type=0&scope=bot"}, {"ship_num": 4, "ts": "2026-09-06T21:12:32Z", "hours": 12.0, "multiplier": 9.95, "payout": 121, "blessing": "neutral", "text": "NevAI - Discord AI Bot Hello everyone, I’ve finally finished my open-source Discord AI bot with some unique mechanics! Features Only the Discord server administrator can use /ai , /ai_settings , /language , and /logs . The bot responds using the AI models listed below. The bot supports vision models (image understanding). Responses are limited to 1500 characters. Pre-built Docker image available. Custom success and error emoji. The bot reacts with an emoji when responding in a Discord chat. The server administrator can set a custom AI prompt. Multi-language support (add your own language more info CONTRIBUTING.md)). The bot saves the last 15 messages for chat context. Live logs support ( /logs command). How to use? You can try it on my Discord server: https://discord.gg/3BqyZMQ85V Or run it locally (recommended if you plan to use it daily, since free AI APIs have rate limits). Docker (pre-built image) Create a .env file docker pull ghcr.io/nahida4479/nevai:latest docker run --env-file .env ghcr.io/nahida4479/nevai:latest AI models list Gemini gemini-2.5-flash gemini-2.5-flash-lite Groq openai/gpt-oss-120b openai/gpt-oss-20b HackClub meta-llama/llama-3.3-70b-instruct Vision models Groq qwen/qwen3.6-27b qwen/qwen3.8-27b Finally I’ve spent a lot of time on this project, so thanks for reading! Feedback, issues, and pull requests are always welcome - good luck with your own projects too!", "repo": "https://github.com/Nahida4479/NevAI-Bot", "demo": "https://discord.com/oauth2/authorize?client_id=1544417524613910628&permissions=17179995200&integration_type=0&scope=bot"}]...
|
[{"post_id": 77885, "ts": "202 [{"post_id": 77885, "ts": "2026-10-08T17:25:01Z", "hours": 3.1164, "text": "Devlog 14 New Added Anthropic as an AI provider Added the Claude Haiku 5.5 model Adapted the web search tool for Anthropic models Added input validation to setup_env.sh Added a “How to use” section to the /help command Added ANTHROPIC_API to env.example Added a section about Anthropic models to README.md The console now shows input and output token counts for Anthropic models Important Anthropic is an optional provider (NevAI requires at least one of the AI providers listed on GitHub). The bot keeps working with free APIs alone, and Anthropic is used only if you add an ANTHROPIC_API key."}, {"post_id": 76226, "ts": "2026-10-02T19:07:42Z", "hours": 3.4753, "text": "Devlog 13 New New method for installing a Docker image ( install.sh ) Auto update (Watchtower install if you use install.sh ) The bot can see the message a user is replying to The bot can respond on multiple channels through changes to the data.json logic install.sh automatically Installs Docker (if not installed) Installs docker-compose.yml from my GitHub Creates data.json and .env files Asks for API keys for .env Runs the Docker image"}, {"post_id": 70129, "ts": "2026-09-18T15:00:52Z", "hours": 1.7522, "text": "Devlog 12 New pull request Fixed Exa image response issues Changed model qwen/qwen3-32b -> google/gemini-3-flash-preview (for faster response times) The model now also returns sources (a safeguard against model hallucinations) Updated link and added a note in README.md Exa Doubled response speed (when using Exa ) by changing the model and limiting the data returned by Exa . Planned I plan to re-ship this project."}, {"post_id": 68864, "ts": "2026-09-15T22:15:16Z", "hours": 5.6136, "text": "Devlog 11 New pull request Exa.ai now returns images Limited Exa.ai API calls per model Added an error embed to the /logs command Split model messages (when message length > 1990) Added a “How to use?” section to README.md Dynamic bot username in the default prompt Prohibited Markdown tables and HTML tags Handled the tool_use_failed error with the Groq provider Shortened the returned Exa results Exa returns images Exa searches for images based on the queries the AI model makes using the tool (e.g. The model wants to search:, current temperature Poland 2026-09-15 ). Planned I plan to improve the /logs system and the processing of data returned by Exa.ai so that the model doesn’t make things up."}, {"post_id": 68256, "ts": "2026-09-14T19:48:52Z", "hours": 4.4719, "text": "Devlog 10 New pull request Added Exa.ai for AI models to search the internet Added internet search information to /logs Added support for TXT files Added AI response time tracking Added information about Node version and system Exa.ai response system The model decides for itself whether it wants to use Exa.ai . When the model uses Exa.ai , information from the internet is returned. The model uses this information to respond in the Discord chat. When the model decides it doesn’t need to use Exa.ai , it won’t. If you don’t add an EXA_API token, the bot will continue to function, but it will not search for information on the web. Exa supported on the following providers: Groq HackClub OpenRouter Gemini (coming soon) Planned I plan to add another Exa integration, based on the HackClub API for redundancy . I also plan to add information about Exa.ai to README.md ."}, {"post_id": 66070, "ts": "2026-09-11T17:16:18Z", "hours": 3.1428, "text": "Devlog 9 New Started working on a debugging system with a .log file. Added colorful console output to make errors easier to understand. Added a new .env option, DEBUG_MODE , with true / false values (when true , logs are saved to debug.log ). Planned I plan to continuously improve the logging and debugging system."}, {"post_id": 64793, "ts": "2026-09-09T13:36:00Z", "hours": 1.425, "text": "Devlog 8 New Added OpenRouter free models API support The AI can use the Discord server’s custom emojis in its responses (emojis from the Discord cache) Models (reminder) All AI models are free and use free API keys ( Groq , Gemini , HackClub , OpenRouter ). const geminiModels = ['gemini-2.5-flash', 'gemini-2.5-flash-lite'] const groqModels = [\"openai/gpt-oss-120b\", \"openai/gpt-oss-20b\", \"qwen/qwen3.6-27b\"] const HackClubModels = ['meta-llama/llama-3.3-70b-instruct'] const visionModel = [\"qwen/qwen3.6-27b\", \"qwen/qwen3.8-27b\"] const openroute = [\"openrouter/free\"] Planned I plan to continuously develop and improve this project."}, {"post_id": 63182, "ts": "2026-09-06T20:55:06Z", "hours": 1.7508, "text": "Devlog 7 New Added CONTRIBUTING.md (how to add your language) New /help command with a description of all commands Finalized README.md with features, how to run it, etc. Added /logs command with live bot logs (question and AI model) Planned I plan to ship this project."}, {"post_id": 62551, "ts": "2026-09-06T00:18:52Z", "hours": 1.9828, "text": "Devlog 6 New Added image support (vision, Qwen models) Added AI response error handling Added validation for Add custom AI reaction emoji (supports Discord emoji format) Added .env example in README.md Added MIT LICENSE on GitHub Added base AI prompt with a character limit (1500 characters) Planned I plan to add a /logs command."}, {"post_id": 61885, "ts": "2026-09-05T01:35:57Z", "hours": 2.0914, "text": "Devlog 5 New New settings image Changed /ai_settings panel design Created 2 new bot emojis (success and failure) Added Discord emoji format support in the Add custom AI reaction emoji panel Added bot_name typing... indicator Planned I plan to add an embed AI response with an on/off option in /ai_settings ."}, {"post_id": 61116, "ts": "2026-09-03T21:01:26Z", "hours": 1.5242, "text": "Devlog 4 New Created the bot’s profile image Added the AI response system (with 15-message context history) Created the /ai_settings panel with custom prompt and thinking emoji options Extended the language files with new translation keys Planned I’m planning to add support for Discord’s custom emoji format in /ai_settings , and start working on a logs system showing the question asked and which AI model responded."}, {"post_id": 60478, "ts": "2026-09-02T20:33:23Z", "hours": 2.0381, "text": "Devlog 3 New Added multi-language support Created /ai_settings panel Added English and Polish language support Added mention detection - the bot now checks if it was mentioned on the configured AI channel Planned I’m planning to connect the AI system to the bot’s replies and finish the custom prompt settings (via the modal opened from /ai_settings )."}, {"post_id": 59841, "ts": "2026-09-01T20:21:35Z", "hours": 1.1839, "text": "Devlog 2 New Created the Dockerfile and .dockerignore Set up a pre-built Docker image (built automatically via GitHub Actions) Created the /ai slash command Created save_data.js and a save system for the AI channel Planned I’m planning to create the bot’s profile picture and start working on getting AI responses inside Discord."}, {"post_id": 59643, "ts": "2026-09-01T15:47:53Z", "hours": 1.5842, "text": "Devlog 1 New Added 3 AI providers: Groq , Gemini , HackClub Added 6 LLM models across those providers Tested the connection with each provider LLM models Gemini API gemini-2.5-flash , gemini-2.5-flash-lite Groq API openai/gpt-oss-120b , openai/gpt-oss-20b , qwen/qwen3.6-27b HackClub API meta-llama/llama-3.3-70b-instruct Planned I’m planning to integrate these models with the Discord bot"}]...
|
Title: NevAI by @Nahida4479 | Stardance
Devlogs:
Title: NevAI by @Nahida4479 | Stardance
Devlogs:
Devlog 1 New Added 3 AI providers: Groq , Gemini , HackClub Added 6 LLM models across those providers Tested the connection with each provider LLM models Gemini API gemini-2.5-flash , gemini-2.5-flash-lite Groq API openai/gpt-oss-120b , openai/gpt-oss-20b , qwen/qwen3.6-27b HackClub API meta-llama/llama-3.3-70b-instruct Planned I’m planning to integrate these models with the Discord bot
Devlog 2 New Created the Dockerfile and .dockerignore Set up a pre-built Docker image (built automatically via GitHub Actions) Created the /ai slash command Created save_data.js and a save system for the AI channel Planned I’m planning to create the bot’s profile picture and start working on getting AI responses inside Discord.
Devlog 3 New Added multi-language support Created /ai_settings panel Added English and Polish language support Added mention detection - the bot now checks if it was mentioned on the configured AI channel Planned I’m planning to connect the AI system to the bot’s replies and finish the custom prompt settings (via the modal opened from /ai_settings ).
Devlog 4 New Created the bot’s profile image Added the AI response system (with 15-message context history) Created the /ai_settings panel with custom prompt and thinking emoji options Extended the language files with new translation keys Planned I’m planning to add support for Discord’s custom emoji format in /ai_settings , and start working on a logs system showing the question asked and which AI model responded.
Devlog 5 New New settings image Changed /ai_settings panel design Created 2 new bot emojis (success and failure) Added Discord emoji format support in the Add custom AI reaction emoji panel Added bot_name typing... indicator Planned I plan to add an embed AI response with an on/off option in /ai_settings .
Devlog 6 New Added image support (vision, Qwen models) Added AI response error handling Added validation for Add custom AI reaction emoji (supports Discord emoji format) Added .env example in README.md Added MIT LICENSE on GitHub Added base AI prompt with a character limit (1500 characters) Planned I plan to add a /logs command.
Devlog 7 New Added CONTRIBUTING.md (how to add your language) New /help command with a description of all commands Finalized README.md with features, how to run it, etc. Added /logs command with live bot logs (question and AI model) Planned I plan to ship this project.
Devlog 8 New Added OpenRouter free models API support The AI can use the Discord server’s custom emojis in its responses (emojis from the Discord cache) Models (reminder) All AI models are free and use free API keys ( Groq , Gemini , HackClub , OpenRouter ). const geminiModels = ['gemini-2.5-flash', 'gemini-2.5-flash-lite'] const groqModels = ["openai/gpt-oss-120b", "openai/gpt-oss-20b", "qwen/qwen3.6-27b"] const HackClubModels = ['meta-llama/llama-3.3-70b-instruct'] const visionModel = ["qwen/qwen3.6-27b", "qwen/qwen3.8-27b"] const openroute = ["openrouter/free"] Planned I plan to continuously develop and improve this project.
Devlog 9 New Started working on a debugging system with a .log file. Added colorful console output to make errors easier to understand. Added a new .env option, DEBUG_MODE , with true / false values (when true , logs are saved to debug.log ). Planned I plan to continuously improve the logging and debugging system.
Devlog 10 New pull request Added Exa.ai for AI models to search the internet Added internet search information to /logs Added support for TXT files Added AI response time tracking Added information about Node version and system Exa.ai response system The model decides for itself whether it wants to use Exa.ai . When the model uses Exa.ai , information from the internet is returned. The model uses this information to respond in the Discord chat. When the model decides it doesn’t need to use Exa.ai , it won’t. If you don’t add an EXA_API token, the bot will continue to function, but it will not search for information on the web. Exa supported on the following providers: Groq HackClub OpenRouter Gemini (coming soon) Planned I plan to add another Exa integration, based on the HackClub API for redundancy . I also plan to add information about Exa.ai to README.md .
Devlog 11 New pull request Exa.ai now returns images Limited Exa.ai API calls per model Added an error embed to the /logs command Split model messages (when message length > 1990) Added a “How to use?” section to README.md Dynamic bot username in the default prompt Prohibited Markdown tables and HTML tags Handled the tool_use_failed error with the Groq provider Shortened the returned Exa results Exa returns images Exa searches for images based on the queries the AI model makes using the tool (e.g. The model wants to search:, current temperature Poland 2026-09-15 ). Planned I plan to improve the /logs system and the processing of data returned by Exa.ai so that the model doesn’t make things up.
Devlog 12 New pull request Fixed Exa image response issues Changed model qwen/qwen3-32b -> google/gemini-3-flash-preview (for faster response times) The model now also returns sources (a safeguard against model hallucinations) Updated link and added a note in README.md Exa Doubled response speed (when using Exa ) by changing the model and limiting the data returned by Exa . Planned I plan to re-ship this project.
Devlog 13 New New method for installing a Docker image ( install.sh ) Auto update (Watchtower install if you use install.sh ) The bot can see the message a user is replying to The bot can respond on multiple channels through changes to the data.json logic install.sh automatically Installs Docker (if not installed) Installs docker-compose.yml from my GitHub Creates data.json and .env files Asks for API keys for .env Runs the Docker image
Devlog 14 New Added Anthropic as an AI provider Added the Claude Haiku 5.5 model Adapted the web search tool for Anthropic models Added input validation to setup_env.sh Added a “How to use” section to the /help command Added ANTHROPIC_API to env.example Added a section about Anthropic models to README.md The console now shows input and output token counts for Anthropic models Important Anthropic is an optional provider (NevAI requires at least one of the AI providers listed on GitHub). The bot keeps working with free APIs alone, and Anthropic is used only if you add an ANTHROPIC_API key.
Ships:
NevAI - Discord AI Bot Hello everyone, I’ve finally finished my open-source Discord AI bot with some unique mechanics! Features Only the Discord server administrator can use /ai , /ai_settings , /language , and /logs . The bot responds using the AI models listed below. The bot supports vision models (image understanding). Responses are limited to 1500 characters. Pre-built Docker image available. Custom success and error emoji. The bot reacts with an emoji when responding in a Discord chat. The server administrator can set a custom AI prompt. Multi-language support (add your own language more info CONTRIBUTING.md)). The bot saves the last 15 messages for chat context. Live logs support ( /logs command). How to use? You can try it on my Discord server: https://discord.gg/3BqyZMQ85V Or run it locally (recommended if you plan to use it daily, since free AI APIs have rate limits). Docker (pre-built image) Create a .env file docker pull ghcr.io/nahida4479/nevai:latest docker run --env-file .env ghcr.io/nahida4479/nevai:latest AI models list Gemini gemini-2.5-flash gemini-2.5-flash-lite Groq openai/gpt-oss-120b openai/gpt-oss-20b HackClub meta-llama/llama-3.3-70b-instruct Vision models Groq qwen/qwen3.6-27b qwen/qwen3.8-27b Finally I’ve spent a lot of time on this project, so thanks for reading! Feedback, issues, and pull requests are always welcome - good luck with your own projects too!
NevAI - Discord AI Bot Hi, I re-shipped my project because I added new features. New features Exa.ai system - the bot now responds using real web data NevAI returns images found by Exa I adjusted the model so it can’t lie and actually utilizes the available data The bot can use custom Discord server emojis I added more detailed logs returned by the /logs command on Discord I added a debugging system that can be enabled by adding the entry DEBUG_MODE=true to the .env file. This writes detailed logs to debug.log Changed model qwen/qwen3-32b -> google/gemini-3-flash-preview IMPORTANT! How to use? I’ve come across comments saying you don’t know how to use the bot. There are detailed instructions in the README.md , but I’m also posting them here: Add the bot and set the AI channel using the /ai command. Mention the bot, then ask your question. You can customize the bot options using administrator commands (server administrator only, more info on GitHub). You can also run the bot locally: docker pull ghcr.io/nahida4479/nevai:latest docker run –env-file .env ghcr.io/nahida4479/nevai:latest Planned I plan to continue developing this project, so if you encounter any bugs, please report them as issues on GitHub. You can also add your own translation for the bot (see CONTRIBUTING.md on GitHub). Thanks for reading, and good luck with your projects! :)
NevAI New features New install.sh script for easy installation Editing the custom prompt on Discord ( /ai_settings ) now loads your current prompt so you can modify it, instead of overwriting it with a new one Added Watchtower for automatic updates (downloads and runs the new Docker image) Changed model gemini-3-flash-preview → GPT-6-Luna Added env-example file Updated README.md (information about install.sh , the new AI model, and how to run the Docker image manually) Planned I plan to keep developing my project by adding new features and fixing bugs. If you want to report a bug or add your language, feel free to open an issue/pull request on GitHub.
NevAI New features Added Anthropic as an AI provider Added the Claude Haiku 5.5 model Adapted the web search tool for Anthropic models Added input validation to setup_env.sh Added a “How to use” section to the /help command Added ANTHROPIC_API to env.example Added a section about Anthropic models to README.md The console now shows input and output token counts for Anthropic models Updated the AI usage disclosure Changed the permissions in the bot invitation link Important Anthropic is an optional provider (NevAI requires at least one of the AI providers listed on GitHub). The bot keeps working with free APIs alone, and Anthropic is used only if you add an ANTHROPIC_API key. How to use Many people mention in project reviews that they don’t know how to use NevAI. Detailed information can be found in the README.md on GitHub and via the /help command. Planned I plan to continue developing the project. If you would like to add your language, please read CONTRIBUTING.md on GitHub. If you find a bug, please report it via GitHub Issues. Good luck with your projects! :)...
|
1792972048.150143
|
1793058448.150143
|