|
252
|
Momentum by @glitch_purge | Stardance
|
glitch_purge
|
0
|
3.64
|
0
|
[]
|
[{"post_id": 22888, "ts": "202 [{"post_id": 22888, "ts": "2026-07-05T15:01:40Z", "hours": 1.0428, "text": "Momentum Devlog 4 - Upcoming Assignments, and bug fixes So I’ve started work on the upcoming assignments part of the dashboard and it looks good. The assignments I’ve put are just random stuff I made up and I spent quite a while trying to get good sizing for mobile and it went well to say the least. As before, nothing is dynamic (aka work with real values and the user) but I think I will start work on that after I finish the calendar on the side that I want to add & after I finish the Assignments tab. I like how its coming out so far and I’ve reduced the AI mockup usage a lot so the mockup and my website are wayyy different now!"}, {"post_id": 15177, "ts": "2026-06-24T17:36:24Z", "hours": 1.3464, "text": "Momentum Devlog 3 - Topbar, hamburger sidebar, 4/4 cards I added the topbar in detail like the hello, date and time text and the quick utilities buttons + user logo. Started on the cards info system so 4 cards that give you info on your current stats. Finsihed all 4. There is a hamburger menu when u go on smaller devices but I did that using Claude. Hear me out - I’m lazy to do that and I just didn’t want to break my whole system for that T-T. I will add quotes next devlog, and soon enough will start linking everything into a dynamic website using JS!"}, {"post_id": 14226, "ts": "2026-06-23T07:32:30Z", "hours": 0.5975, "text": "Momentum Devlog 2 - Built this sidebar for the app. Changed the style to be a bit more modern and sleek. Used AI to generate a mockup and building using that. The mockup messed up a bit so some features are not where I want them but that gives me a lot of creativity to add my own stuff. Idea was mine, mockup was chatgpt’s and I’m only using the mockup for dashboard. Rest all pages will be made using that."}, {"post_id": 13775, "ts": "2026-06-22T16:04:40Z", "hours": 0.6492, "text": "Devlog 01 - Sidebar and topbar Worked on the sidebar and topbar after spending 2+ hours designing a mockup in figma. Haven’t done HTML & CSS in a long time so this was a bit of a struggle but relatively easy. Building every component static rn, will use only JS (normal JS) to build the proper website with information. Tryna store every data on cookies"}]...
|
Title: Momentum by @glitch_purge | Stardance
Devl Title: Momentum by @glitch_purge | Stardance
Devlogs:
Devlog 01 - Sidebar and topbar Worked on the sidebar and topbar after spending 2+ hours designing a mockup in figma. Haven’t done HTML & CSS in a long time so this was a bit of a struggle but relatively easy. Building every component static rn, will use only JS (normal JS) to build the proper website with information. Tryna store every data on cookies
Momentum Devlog 2 - Built this sidebar for the app. Changed the style to be a bit more modern and sleek. Used AI to generate a mockup and building using that. The mockup messed up a bit so some features are not where I want them but that gives me a lot of creativity to add my own stuff. Idea was mine, mockup was chatgpt’s and I’m only using the mockup for dashboard. Rest all pages will be made using that.
Momentum Devlog 3 - Topbar, hamburger sidebar, 4/4 cards I added the topbar in detail like the hello, date and time text and the quick utilities buttons + user logo. Started on the cards info system so 4 cards that give you info on your current stats. Finsihed all 4. There is a hamburger menu when u go on smaller devices but I did that using Claude. Hear me out - I’m lazy to do that and I just didn’t want to break my whole system for that T-T. I will add quotes next devlog, and soon enough will start linking everything into a dynamic website using JS!
Momentum Devlog 4 - Upcoming Assignments, and bug fixes So I’ve started work on the upcoming assignments part of the dashboard and it looks good. The assignments I’ve put are just random stuff I made up and I spent quite a while trying to get good sizing for mobile and it went well to say the least. As before, nothing is dynamic (aka work with real values and the user) but I think I will start work on that after I finish the calendar on the side that I want to add & after I finish the Assignments tab. I like how its coming out so far and I’ve reduced the AI mockup usage a lot so the mockup and my website are wayyy different now!...
|
1793350625.9578204
|
1793955425.9578204
|
|
7792
|
Undertakes Chess Engine by @shreeyans_vichare | St Undertakes Chess Engine by @shreeyans_vichare | Stardance...
|
shreeyans_vichare
|
0
|
0.52
|
0
|
[]
|
[{"post_id": 7298, "ts": "2026 [{"post_id": 7298, "ts": "2026-06-12T05:11:05Z", "hours": 0.5175, "text": "Finally got a basic chess board representation using Bitboards. Understanding bitboards has been challenging and it’s a little difficult. No matter what it’s kinda intuitive so I hope I can implement piece movement soon!! Wish me luck because this seems insanely difficult to implement. Thank you for your time!!"}]...
|
Title: Undertakes Chess Engine by @shreeyans_vicha Title: Undertakes Chess Engine by @shreeyans_vichare | Stardance
Devlogs:
Finally got a basic chess board representation using Bitboards. Understanding bitboards has been challenging and it’s a little difficult. No matter what it’s kinda intuitive so I hope I can implement piece movement soon!! Wish me luck because this seems insanely difficult to implement. Thank you for your time!!...
|
1793350627.1678338
|
1793955427.1678338
|
|
58819
|
Tab Rot VS Code by @madushankarajapaksha999 | Star Tab Rot VS Code by @madushankarajapaksha999 | Stardance...
|
madushankarajapaksha999
|
1
|
15.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T05:23:53Z", "hours": 15.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built Tab Rot, a VS Code extension that makes your files visually decay if you ignore them. The most annoying part was mocking the VS Code API to write unit tests, plus fixing a random Node js crash when I tried to publish. Im super proud of the actual visual rot effect and that the state save even if you restart VS Code. If you wanna test it, just drop the decay timer in the setting to like 1 minute, otherwise you’ll be waiting an hour to see it work.", "repo": "https://github.com/MadushankaRajapaksha/Tab-Rot-VS-Code", "demo": "https://github.com/MadushankaRajapaksha/Tab-Rot-VS-Code/releases/tag/v1.0.1"}]...
|
[{"post_id": 74312, "ts": "202 [{"post_id": 74312, "ts": "2026-09-27T05:12:52Z", "hours": 1.1833, "text": "deployed manually with vsce publish instead. Wrote a full README with install guide, all settings, presets, and troubleshooting. Extension is live on the Repo Releases.."}, {"post_id": 73902, "ts": "2026-09-26T09:16:51Z", "hours": 0.7158, "text": "Fixedd command registration, compilation paths, settings panel display, and database state persistence acrosssrc/extension.ts`, src/settingsPanel.ts, and src/tabTracker.ts"}, {"post_id": 73863, "ts": "2026-09-26T06:49:16Z", "hours": 2.0989, "text": "I built a proper settings webview panel for Tab Rot because asking users to edit raw JSON for threhold values felt hostile. Made a settingsPanel.ts that opens a dedicated webview tab with a clean form — three number inputs for the decay thresholds (stage 1, 2, 3 in minute), three toggle switches for decorations, status bar, and notifications. The whole thing uses VS Code’s CSS variables so it automatically matches the user’s theme — dark mode, light mode, high contrast, whatever. It looks native.The panel is a singleton — if you already have it open, running the command again just focuses the existing panel instead of spawning duplicates. The HTML is inline because it’s small enough that a separate file feels like overkill, but it’s structured with proper labels, hints explaining what each value means, and a little visual preview of the three decay stages as colored badges. The toggles are custom CSS switches that feels nicer than raw checkboxes."}, {"post_id": 73539, "ts": "2026-09-25T10:57:58Z", "hours": 1.6992, "text": "Testing today I finally sat down to write unit tests for tabTracker.ts. I’ve been putting this off becaus, honestly, testing feels like homework when you just want to see the thing work. But I knew if I didn’t write tests now, Id never catch the bug s hiding in the decay logic."}, {"post_id": 72968, "ts": "2026-09-24T04:05:08Z", "hours": 2.2619, "text": "built the sidebar tree view for Tab Rot. Made a decayView.ts with a DecayTreeProvider that implements VS Code s TreeDataProvider interface. It pulls all decayed tabs from the tracker, sorts them by stage with the worst rot first, and renders each one as a DecayItem with the filename as the label, a stage emoji + name as the description (like “🍂 Faded” or “💀 Cracked”), and a tooltip showing how long it’s been since the file was last visited. Each item gets a stage-specific SVG icon and clicking it’s opens the file in the editor.I also created four littl SVG leaf icons in resources/icons/ — a green one for fresh tabs, orange-yellow for faded, brown with dots for grainy, and a dark cracked one for stage 3. They’re just simple leaf shapes but the color coding makes the sidebar immediately scannable.Wired the tree provider into extension.ts and registered it under the view ID tabRot.decayedTabs in package.json. The view lives in the Explorer sidebar and only shows up when there are actually decayed tabs, thanks to a context key tabRot.hasDecayedTabs that I set on every refresh. So if all your tabs are fresh, the sidebar section disappears completely instead of sitting there empty and sad.Added a tabRot.openDecayedTab command that the tree items use to open files when clicked. Since opening the file triggers onDidChangeActiveTextEditor, the tab gets touched and restored automatically, complete with the green flash animation from Phase 5. So the flow is: see rotting tab in sidebar → click it → file opens → green flash → tab is fresh again. Very satisfying.I also updated all the refresh calls so the sidebar stays in sync — it refreshes after every tab touch, close, restore command, and interval tick. And the showDecayedTabs command from Phase 4 now actually works because the view is registered, so that unhandled rejection error is gone."}, {"post_id": 69019, "ts": "2026-09-16T07:07:50Z", "hours": 0.6325, "text": "I builts the restoration flash animation today because instantly snapping from cracked stage-3 to pristine stage-0 felt robotic. I wanted a little “healing” moment — like the file is literally coming back to life. Added a flashRestore() method to tabDecorator.ts that chains two temporary decoration flashes: a bright green pulse at 0ms, a softer second pulse at 300ms, then clear at 600ms. The tab breathes green for a second and then settles into its clean state. I also added a “✨ Tab restored!” info message because I’m a sucker for positive feedback.I wired the flash into two places: when you actively switch to a decayed tab (it detects the old stage was > 0, touches it, then flashes), and when you run the restoreTab comand manually. So whether you click into a rotting file or hit the command palette, you get the dopamine hit.I also added an optional decay notification system. Every 60 seconds during the interval tick, it checks if any tab crossed into a higher decay stage. If tabRot.showNotifications is enabled, it pops a toast like “📉 utils.ts reached stage 2 (unvisited for 1440 minutes)”. I defaulted it to false because getting spammed every minute that your tabs are dying would make people uninstall immediatey. But for accountability masochists, its there."}, {"post_id": 68591, "ts": "2026-09-15T11:16:32Z", "hours": 1.4983, "text": "I built the status bar and command layer for Tab Rot. Made a statusBar.ts that creates a StatusBarItem shoved over to the right side of the bar at priority 100. It shows a little 🍂 leaf emoji followed by how many tabs are rotting — like “🍂 3 rotting” — but only when there’s actually something decaying. When the count hits zero it hides itself completely so it’s not sitting there being useless and cluttering the bar. Clicking it is supposed to focus the sidebar view later, but since I haven’t built the sidebar yet, it’s basically a button that promises something it can’t deliver. I also gated it behind the tabRot.enableStatusBar config so people can kill it if they want.Registered three commands in package.json — tabRot.restoreTab to freshen up whatever file I’m currently staring at, tabRot.restoreAllTabs to reset every tracked tab back to stage 0, and tabRot.showDecayedTabs which is supposed to focus the sidebar. I wired all the handlers in extension.ts. restoreTab grabs the active editor URI, calls tracker.restoreTab(), then immediately refreshes the decorations and status bar so the rot vanishes right away. restoreAllTabs does the same thing but for everything and pops up a little info message saying “✨ All tabs restored!” because I wanted it to feel satisfying. showDecayedTabs tries to execute tabRot.decayedTabs.focus which is a VS Code auto-generated command for tree views.I also added a context menu to contributes.menus.editor/title/context so when you right-click in the editor area you get “Restore Tab” and “Restore All Tabs” right there without having to open the Command Palette. I grouped them under 9_tabRot so they sit in their own little section instead of getting drowned in the giant VS Code right-click menu."}, {"post_id": 65256, "ts": "2026-09-10T08:09:52Z", "hours": 1.3453, "text": "Implimented Visual Decay Decorations I built the entire visual decay layer for Tab Rot over the past two days. Created tabDecorator.ts with three TextEditorDecorationTyp instances one for each decay stage. Stage 1 is a slight washout with opacity: 0.75 and a warm background tint. Stage 2 gets heavier with opacity: 0.55, a dashed brown border, and a darker background. Stage 3 is the nasty one — opacity: 0.4, solid border, wavy strikethrough, and a dark background that makes the code genuinely look abandoned. The updateDecorations() method loops through all visibleTextEditors, grabs the decay stage from the tracker, clears any previous decorations (super important so they dont stack), and applies a full-document Range if the stage is above zero. I register all decoration types in context.subscriptions so VS Code cleans them up on deactivate. I also registered custom theme colors in package.json under contributes.colors — background tints and overview ruler colors for all three stages, with separate defaults for dark, light, and high-contrast themes. Then I swapped out all the hardcoded rgba() values in the decorator for new vscode.ThemeColor(…) so user can customize the palette in their settings.json if they want. Wired everything into extension.ts — updateDecorations() gets called after activation, after every onDidChangeActiveTextEditor (so visiting a tab instantly removes the rot), after onDidCloseTextDocument (cleanup), inside the 60-second interval (so decay progresses live), and on onDidChangeVisibleTextEditors (for split views)."}, {"post_id": 64655, "ts": "2026-09-09T07:04:21Z", "hours": 0.8492, "text": "Wiring the Engine + Config Schema I wired up the TabTracker into the actual extension entry point today. Made an extension.ts that instantiates the trackr when VS Code activates the extension, then immediately scans all already-open text documents and registers them with touchTab() so nothing gets lost if the user already has files open. I hooked into onDidChangeActiveTextEditr to call touchTab() every time the user switches tabs, and onDidCloseTextDocument to remove tabs when files close. I also set up a setInterval that fires every 60 second to call updateAllStages() so the decay actually progresses in real time without waiting for someone to interact.I also completely redid the configuration schem in package.json. Instead of the array-based thresholds I had before, I switched to individual keys : tabRot.stage1Threshold, stage2Threshold, and stage3Threshold with defaults of 60, 1440, and 10080 minutes respectively. That maps to 1 hour, 1 day, and 1 week which feels way more intuitive than the old array. I also added two boolean flags — enableDecorations and enableStatusBar — so users can toggle the UI features later without digging through code.I updated tabTracker.ts to read from the individual config key instead of the array, and kept the hot-reload listener so if someone edits their settings the thresholds update live. I peppered console.log everywhere for debugging — activation messages, tab touch events, removals, and a periodic log of how many decayed tabs exist."}, {"post_id": 63613, "ts": "2026-09-07T15:18:58Z", "hours": 1.4383, "text": "Core State Engine — tabTracker.ts I finally started the actual VS Code extension part of Tab Rot after planning everything out. Today’s goal was just the core state engine — basically tracking when each file was last visited and making sure it survives if you close and reopen VS Code. I made a tabTracker.ts file that has a TabState interface and a TabTracker class. The interface is super strict with the decay stages locked to 0 | 1 | 2 | 3 which felt like good TypeScript practice but also kind of a pain later.The tracker uses a Map to hold everything in memory, but it loads from and saves to context.workspaceState so the data persists across restarts. I added all the main methods — touchTab() to mark something as visited right now, removeTab() when a file closes, getDecayStage() to figure out how rotten a tab is based on the time thresholds, and getDecayedTabs() to spit out everything that’s stage 1 or higher sorted by how dead it is. I also threw in restoreTab() and restoreAllTabs() for when you want to pretend you never abandoned that file.I set it up to read the decay thresholds from VS Code settings (tabRot.decayThresholds) and even made it hot-reload when you change the config without restarting the whole editor. Oh and I added a debounced save because I realized it would be stupid to write to disk every single time you switch tab"}, {"post_id": 63394, "ts": "2026-09-07T06:24:47Z", "hours": 0.5092, "text": "Planned the Tab Root Project Today, I planned the development roadmap for my Tab Root VS Code extension. After finishing the initial project setup, I broke the project into smaller tasks and subtasks so I can develop the extenssion step by step.I created a task list covering the main parts of the project, including tab tracking, the decay system, tab activity detection, visual tab changes, restore functionality, user configuration, testing, documentation, and the final release.Breaking the project into small tasks should make it easier to track my progress and understand what I need to work on next. I also organized the tasks into diffarent phase so I can focus on building the core functionality before moving on to the UI and release."}, {"post_id": 62927, "ts": "2026-09-06T13:53:50Z", "hours": 0.7317, "text": "Implemented Project Structure What I worked on:Today, I started working on my first VS Code extension, called Tab Root. I initialized the project and set up Git for version control. I also created the basic file and folder structure for the extension and configured the project to use TypeScript.After setting everything up, I created my first working VS Code extension. I added a basic VS Code command and tested it successfully inside VS Code. This was my first time creating and running an extension, so getting the basic setup working was an important first step for the project."}]...
|
Title: Tab Rot VS Code by @madushankarajapaksha999 Title: Tab Rot VS Code by @madushankarajapaksha999 | Stardance
Devlogs:
Implemented Project Structure What I worked on:Today, I started working on my first VS Code extension, called Tab Root. I initialized the project and set up Git for version control. I also created the basic file and folder structure for the extension and configured the project to use TypeScript.After setting everything up, I created my first working VS Code extension. I added a basic VS Code command and tested it successfully inside VS Code. This was my first time creating and running an extension, so getting the basic setup working was an important first step for the project.
Planned the Tab Root Project Today, I planned the development roadmap for my Tab Root VS Code extension. After finishing the initial project setup, I broke the project into smaller tasks and subtasks so I can develop the extenssion step by step.I created a task list covering the main parts of the project, including tab tracking, the decay system, tab activity detection, visual tab changes, restore functionality, user configuration, testing, documentation, and the final release.Breaking the project into small tasks should make it easier to track my progress and understand what I need to work on next. I also organized the tasks into diffarent phase so I can focus on building the core functionality before moving on to the UI and release.
Core State Engine — tabTracker.ts I finally started the actual VS Code extension part of Tab Rot after planning everything out. Today’s goal was just the core state engine — basically tracking when each file was last visited and making sure it survives if you close and reopen VS Code. I made a tabTracker.ts file that has a TabState interface and a TabTracker class. The interface is super strict with the decay stages locked to 0 | 1 | 2 | 3 which felt like good TypeScript practice but also kind of a pain later.The tracker uses a Map to hold everything in memory, but it loads from and saves to context.workspaceState so the data persists across restarts. I added all the main methods — touchTab() to mark something as visited right now, removeTab() when a file closes, getDecayStage() to figure out how rotten a tab is based on the time thresholds, and getDecayedTabs() to spit out everything that’s stage 1 or higher sorted by how dead it is. I also threw in restoreTab() and restoreAllTabs() for when you want to pretend you never abandoned that file.I set it up to read the decay thresholds from VS Code settings (tabRot.decayThresholds) and even made it hot-reload when you change the config without restarting the whole editor. Oh and I added a debounced save because I realized it would be stupid to write to disk every single time you switch tab
Wiring the Engine + Config Schema I wired up the TabTracker into the actual extension entry point today. Made an extension.ts that instantiates the trackr when VS Code activates the extension, then immediately scans all already-open text documents and registers them with touchTab() so nothing gets lost if the user already has files open. I hooked into onDidChangeActiveTextEditr to call touchTab() every time the user switches tabs, and onDidCloseTextDocument to remove tabs when files close. I also set up a setInterval that fires every 60 second to call updateAllStages() so the decay actually progresses in real time without waiting for someone to interact.I also completely redid the configuration schem in package.json. Instead of the array-based thresholds I had before, I switched to individual keys : tabRot.stage1Threshold, stage2Threshold, and stage3Threshold with defaults of 60, 1440, and 10080 minutes respectively. That maps to 1 hour, 1 day, and 1 week which feels way more intuitive than the old array. I also added two boolean flags — enableDecorations and enableStatusBar — so users can toggle the UI features later without digging through code.I updated tabTracker.ts to read from the individual config key instead of the array, and kept the hot-reload listener so if someone edits their settings the thresholds update live. I peppered console.log everywhere for debugging — activation messages, tab touch events, removals, and a periodic log of how many decayed tabs exist.
Implimented Visual Decay Decorations I built the entire visual decay layer for Tab Rot over the past two days. Created tabDecorator.ts with three TextEditorDecorationTyp instances one for each decay stage. Stage 1 is a slight washout with opacity: 0.75 and a warm background tint. Stage 2 gets heavier with opacity: 0.55, a dashed brown border, and a darker background. Stage 3 is the nasty one — opacity: 0.4, solid border, wavy strikethrough, and a dark background that makes the code genuinely look abandoned. The updateDecorations() method loops through all visibleTextEditors, grabs the decay stage from the tracker, clears any previous decorations (super important so they dont stack), and applies a full-document Range if the stage is above zero. I register all decoration types in context.subscriptions so VS Code cleans them up on deactivate. I also registered custom theme colors in package.json under contributes.colors — background tints and overview ruler colors for all three stages, with separate defaults for dark, light, and high-contrast themes. Then I swapped out all the hardcoded rgba() values in the decorator for new vscode.ThemeColor(…) so user can customize the palette in their settings.json if they want. Wired everything into extension.ts — updateDecorations() gets called after activation, after every onDidChangeActiveTextEditor (so visiting a tab instantly removes the rot), after onDidCloseTextDocument (cleanup), inside the 60-second interval (so decay progresses live), and on onDidChangeVisibleTextEditors (for split views).
I built the status bar and command layer for Tab Rot. Made a statusBar.ts that creates a StatusBarItem shoved over to the right side of the bar at priority 100. It shows a little 🍂 leaf emoji followed by how many tabs are rotting — like “🍂 3 rotting” — but only when there’s actually something decaying. When the count hits zero it hides itself completely so it’s not sitting there being useless and cluttering the bar. Clicking it is supposed to focus the sidebar view later, but since I haven’t built the sidebar yet, it’s basically a button that promises something it can’t deliver. I also gated it behind the tabRot.enableStatusBar config so people can kill it if they want.Registered three commands in package.json — tabRot.restoreTab to freshen up whatever file I’m currently staring at, tabRot.restoreAllTabs to reset every tracked tab back to stage 0, and tabRot.showDecayedTabs which is supposed to focus the sidebar. I wired all the handlers in extension.ts. restoreTab grabs the active editor URI, calls tracker.restoreTab(), then immediately refreshes the decorations and status bar so the rot vanishes right away. restoreAllTabs does the same thing but for everything and pops up a little info message saying “✨ All tabs restored!” because I wanted it to feel satisfying. showDecayedTabs tries to execute tabRot.decayedTabs.focus which is a VS Code auto-generated command for tree views.I also added a context menu to contributes.menus.editor/title/context so when you right-click in the editor area you get “Restore Tab” and “Restore All Tabs” right there without having to open the Command Palette. I grouped them under 9_tabRot so they sit in their own little section instead of getting drowned in the giant VS Code right-click menu.
I builts the restoration flash animation today because instantly snapping from cracked stage-3 to pristine stage-0 felt robotic. I wanted a little “healing” moment — like the file is literally coming back to life. Added a flashRestore() method to tabDecorator.ts that chains two temporary decoration flashes: a bright green pulse at 0ms, a softer second pulse at 300ms, then clear at 600ms. The tab breathes green for a second and then settles into its clean state. I also added a “✨ Tab restored!” info message because I’m a sucker for positive feedback.I wired the flash into two places: when you actively switch to a decayed tab (it detects the old stage was > 0, touches it, then flashes), and when you run the restoreTab comand manually. So whether you click into a rotting file or hit the command palette, you get the dopamine hit.I also added an optional decay notification system. Every 60 seconds during the interval tick, it checks if any tab crossed into a higher decay stage. If tabRot.showNotifications is enabled, it pops a toast like “📉 utils.ts reached stage 2 (unvisited for 1440 minutes)”. I defaulted it to false because getting spammed every minute that your tabs are dying would make people uninstall immediatey. But for accountability masochists, its there.
built the sidebar tree view for Tab Rot. Made a decayView.ts with a DecayTreeProvider that implements VS Code s TreeDataProvider interface. It pulls all decayed tabs from the tracker, sorts them by stage with the worst rot first, and renders each one as a DecayItem with the filename as the label, a stage emoji + name as the description (like “🍂 Faded” or “💀 Cracked”), and a tooltip showing how long it’s been since the file was last visited. Each item gets a stage-specific SVG icon and clicking it’s opens the file in the editor.I also created four littl SVG leaf icons in resources/icons/ — a green one for fresh tabs, orange-yellow for faded, brown with dots for grainy, and a dark cracked one for stage 3. They’re just simple leaf shapes but the color coding makes the sidebar immediately scannable.Wired the tree provider into extension.ts and registered it under the view ID tabRot.decayedTabs in package.json. The view lives in the Explorer sidebar and only shows up when there are actually decayed tabs, thanks to a context key tabRot.hasDecayedTabs that I set on every refresh. So if all your tabs are fresh, the sidebar section disappears completely instead of sitting there empty and sad.Added a tabRot.openDecayedTab command that the tree items use to open files when clicked. Since opening the file triggers onDidChangeActiveTextEditor, the tab gets touched and restored automatically, complete with the green flash animation from Phase 5. So the flow is: see rotting tab in sidebar → click it → file opens → green flash → tab is fresh again. Very satisfying.I also updated all the refresh calls so the sidebar stays in sync — it refreshes after every tab touch, close, restore command, and interval tick. And the showDecayedTabs command from Phase 4 now actually works because the view is registered, so that unhandled rejection error is gone.
Testing today I finally sat down to write unit tests for tabTracker.ts. I’ve been putting this off becaus, honestly, testing feels like homework when you just want to see the thing work. But I knew if I didn’t write tests now, Id never catch the bug s hiding in the decay logic.
I built a proper settings webview panel for Tab Rot because asking users to edit raw JSON for threhold values felt hostile. Made a settingsPanel.ts that opens a dedicated webview tab with a clean form — three number inputs for the decay thresholds (stage 1, 2, 3 in minute), three toggle switches for decorations, status bar, and notifications. The whole thing uses VS Code’s CSS variables so it automatically matches the user’s theme — dark mode, light mode, high contrast, whatever. It looks native.The panel is a singleton — if you already have it open, running the command again just focuses the existing panel instead of spawning duplicates. The HTML is inline because it’s small enough that a separate file feels like overkill, but it’s structured with proper labels, hints explaining what each value means, and a little visual preview of the three decay stages as colored badges. The toggles are custom CSS switches that feels nicer than raw checkboxes.
Fixedd command registration, compilation paths, settings panel display, and database state persistence acrosssrc/extension.ts`, src/settingsPanel.ts, and src/tabTracker.ts
deployed manually with vsce publish instead. Wrote a full README with install guide, all settings, presets, and troubleshooting. Extension is live on the Repo Releases..
Ships:
I built Tab Rot, a VS Code extension that makes your files visually decay if you ignore them. The most annoying part was mocking the VS Code API to write unit tests, plus fixing a random Node js crash when I tried to publish. Im super proud of the actual visual rot effect and that the state save even if you restart VS Code. If you wanna test it, just drop the decay timer in the setting to like 1 minute, otherwise you’ll be waiting an hour to see it work....
|
1793350628.0937822
|
1793437028.0937822
|
|
34329
|
Untitled project by @amsa | Stardance
|
amsa
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @amsa | Stardance
|
1793350629.5718768
|
1793955429.5718768
|
|
11115
|
Self Balancing Robot by @arjpeg | Stardance
|
arjpeg
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Self Balancing Robot by @arjpeg | Stardance
|
1793350633.2303317
|
1793955433.2303317
|
|
39921
|
Untitled project by @Sheryar | Stardance
|
Sheryar
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Sheryar | Stardance
|
1793350634.1797688
|
1793955434.1797688
|
|
55800
|
My awesome macropad! by @gradisniknejc | Stardance
|
gradisniknejc
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @gradisniknejc | St Title: My awesome macropad! by @gradisniknejc | Stardance...
|
1793350635.066254
|
1793955435.066254
|
|
55801
|
WEBOS1-Project by @caesium | Stardance
|
caesium
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: WEBOS1-Project by @caesium | Stardance
|
1793350636.0273454
|
1793955436.0273454
|
|
53979
|
Tetr.AI by @caleb_welch | Stardance
|
caleb_welch
|
1
|
25.41
|
401
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-20T04:54:20Z", "hours": 23.0, "multiplier": 17.26, "payout": 401, "blessing": "neutral", "text": "Tetr.AI This is the first release of Tetr.AI, my first ever reinforcement-learning project built for the Hack Club Stardance YSWS. Tetr.AI includes: A custom built Tetris environment built with PyGame which allows you to train and run your own models as well as just play Tetris A PyTorch neural network Deep-Q-learning Model checkpoint saving and loading Saving of training statistics into a CSV file A graphing script to allow you to visualize how well your model trained Windows and Linux setup scripts Model status The training pipeline is completely functional, but due to time constraints this release won’t contain a model which can play Tetris well. I completed two long duration training experiments during development which revealed problems with reward shaping, epsilon, and sparse rewards. Everything on this is documented in the README. Training and experimentation will continue after stardance", "repo": "https://github.com/sourcream1012/Tetr.AI", "demo": "https://github.com/sourcream1012/Tetr.AI/releases/tag/v1.0.1-stardance"}]...
|
[{"post_id": 74121, "ts": "202 [{"post_id": 74121, "ts": "2026-09-26T18:31:12Z", "hours": 2.4075, "text": "Not to big of a devlog but I added executable files for easy running for this project. Also added a training_config json file to easily change training values."}, {"post_id": 70969, "ts": "2026-09-20T04:09:44Z", "hours": 2.9878, "text": "DEVLOG 8: I think I may ship soon… Ok so I’ve hit a road block. Stardance ends soon which means I don’t really have much time left. My project is a completely working reinforcement learning AI which can play Tetris but not well. Originally I wanted to perfect a model and then ship the project but due to Stardance ending soon I may change that. Recent additions Added the ability to resume training on a model you made at your most recent checkpoint Added setup automation scripts for windows and linux Refined README with a getting started section and more detail in the Model History section to give the project more story Because I’m essentially prepped for shipping and it is a completely working project I will probably ship soon. Wish me luck. The screenshots shown are the results from training Tetr.AI-V2"}, {"post_id": 69842, "ts": "2026-09-17T21:48:57Z", "hours": 4.3036, "text": "DEVLOG 7: more AI training (hint: FAILED) This graph shows the results of my first training session of my AI showing how well the AI does over time through the reward. In total it lasted ~17 hours and its obviously not nearly enough time. The reward is supposed to go up over time, which it is. But not fast enough. Overall it only seems to increase in reward over time just by VERY little. Moving onto the other graph which shows the rows cleared over time. As you can see it never really increases on average. This shows that: MY AI SUCKSSSSSSS My AI is dumb Overall my AI can’t learn and I need to just keep on adjusting numbers over and over again."}, {"post_id": 63361, "ts": "2026-09-07T04:24:31Z", "hours": 2.3192, "text": "DEVLOG 6: actual learning Wow two devlogs in pretty much a day… I need to touch grass… But that is not the point. IT IS FINALLY LEARNING (just very inefficiently) Currently it only learns from two things: How many rows it cleared on a single run Whether or not it sold the game Now pretty much the rest of this project will just be tweaking and experimenting with things. Before I ship I do want to train and release a demo model that you can test locally on your PC ( and I may want to test if it would work on android phones too ) that will come with the project. I also want to make it to where you can create and train your own models and potentially share them with other people. CAN’T WAIT FOR EVERYTHING TO BE DONE!!!!!!"}, {"post_id": 63183, "ts": "2026-09-06T21:02:14Z", "hours": 1.6347, "text": "DEVLOG 5: Random movements An update from my previous devlog where I started learning pytorch. I have not learned pytorch to the point to where I can explain everything down to its finest details but enough to make my “AI” do some random junk with no direction. Pretty much I’m just initializing random weights and letting it go. I have 200 input neurons for my 20x10 board. The video I attached below shows the AI just doing some random stuff like rotating non stop and moving left and right."}, {"post_id": 61233, "ts": "2026-09-04T02:07:36Z", "hours": 3.1531, "text": "DEVLOG 4: The beginning of learning PyTorch & Working AI-Tetris-Environment Pretty much the title sums up what I’ve been doing for the past 3h and 9m of this. I have some prior knowledge of the basics of machine learning ( from The Nature Of Code by Daniel Shiffman awesome book about coding would recommend ) by making a single layer perceptron ( basically a single neuron algorithm ) that can separate linearly separable data. I attempted to make a multi layered perceptron which actually puts the network in neural network. But I got stuck on back propagation. I don’t really know what to put as the picture for this devlog so I’ll just show a visualization of a neural network."}, {"post_id": 58338, "ts": "2026-08-30T18:37:11Z", "hours": 2.1031, "text": "DEVLOG 3: TETRIS ✅ THE TETRIS GAME IS PRETTY MUCH COMPLETE (besides some finishing touches) the game is completely playable with: Moving pieces with arrow keys Rotating pieces Deleting rows And the game restarts after there is no more valid places to go So pretty much complete. Now it is time to dive into the deep waters that is… NEURAL NETWORKS Oh boy this is going to be fun (and hard). I already know that the kind of training that I have to do for this is reinforcement learning . Which basically is like giving dopamine to your artificial brain when it does something good and giving it a slap in the neck when it does something bad. Which in return it changes its weights based on its previous performance. But for the first thing I got to do is set up all of the mumbo jumbo that will actually allow the neural network to see. And I think I have a rough understanding on how I’m going to implement that. Stay tuned on this awesome journey of making an AI play Tetris!"}, {"post_id": 57362, "ts": "2026-08-29T14:21:46Z", "hours": 1.8567, "text": "DEVLOG 2 Ok it’s been a couple days but I’ve added key presses where: - Left Arrow = Piece moves to the left - Right Arrow = Piece moves to the right - Down Arrow = Piece soft drops. - Space Bar = Piece hard drops. Overall it wasn’t that hard to implement but I had this bug where after soft dropping it saves that position to the locked pieces array. Which in return kind of broke the whole game. Here is the broken code block: if event . type == pygame . KEYDOWN : if event . key == pygame . K_LEFT : self . currentPiece . x -= 1 if not validSpace ( self . currentPiece , self . grid ): self . currentPiece . x += 1 lockPiece ( self . currentPiece , self . locked_pos ) The problem was the last line where it says lockPiece ( self . currentPiece , self . locked_pos ) So all I had to do was remove that and it works perfectly. Now I need to make the game rules where if you finish a row it deletes it and then the hardest part… ROTATION."}, {"post_id": 55349, "ts": "2026-08-27T04:09:15Z", "hours": 4.8822, "text": "DEVLOG 1: Basic foundations It took me way longer than it should have but I finally did it. I learned how to use PyGame and now I’m on my way to remaking Tetris. I set up a function that puts a random Tetris shape onto the 2D array that is essentially the one source of truth in Tetris at least that’s how I think of it. With PyGame I then update every frame what it should display based on that 2D array. The picture below shows me spinning up 3 instances of this code working. Currently the blocks don’t do much but I’ll start working on that tomorrow. Plus I really want to get the Tetris remake done quick so I can start building and training the neural network to actually play the game for me."}]...
|
Title: Tetr.AI by @caleb_welch | Stardance
Devlog Title: Tetr.AI by @caleb_welch | Stardance
Devlogs:
DEVLOG 1: Basic foundations It took me way longer than it should have but I finally did it. I learned how to use PyGame and now I’m on my way to remaking Tetris. I set up a function that puts a random Tetris shape onto the 2D array that is essentially the one source of truth in Tetris at least that’s how I think of it. With PyGame I then update every frame what it should display based on that 2D array. The picture below shows me spinning up 3 instances of this code working. Currently the blocks don’t do much but I’ll start working on that tomorrow. Plus I really want to get the Tetris remake done quick so I can start building and training the neural network to actually play the game for me.
DEVLOG 2 Ok it’s been a couple days but I’ve added key presses where: - Left Arrow = Piece moves to the left - Right Arrow = Piece moves to the right - Down Arrow = Piece soft drops. - Space Bar = Piece hard drops. Overall it wasn’t that hard to implement but I had this bug where after soft dropping it saves that position to the locked pieces array. Which in return kind of broke the whole game. Here is the broken code block: if event . type == pygame . KEYDOWN : if event . key == pygame . K_LEFT : self . currentPiece . x -= 1 if not validSpace ( self . currentPiece , self . grid ): self . currentPiece . x += 1 lockPiece ( self . currentPiece , self . locked_pos ) The problem was the last line where it says lockPiece ( self . currentPiece , self . locked_pos ) So all I had to do was remove that and it works perfectly. Now I need to make the game rules where if you finish a row it deletes it and then the hardest part… ROTATION.
DEVLOG 3: TETRIS ✅ THE TETRIS GAME IS PRETTY MUCH COMPLETE (besides some finishing touches) the game is completely playable with: Moving pieces with arrow keys Rotating pieces Deleting rows And the game restarts after there is no more valid places to go So pretty much complete. Now it is time to dive into the deep waters that is… NEURAL NETWORKS Oh boy this is going to be fun (and hard). I already know that the kind of training that I have to do for this is reinforcement learning . Which basically is like giving dopamine to your artificial brain when it does something good and giving it a slap in the neck when it does something bad. Which in return it changes its weights based on its previous performance. But for the first thing I got to do is set up all of the mumbo jumbo that will actually allow the neural network to see. And I think I have a rough understanding on how I’m going to implement that. Stay tuned on this awesome journey of making an AI play Tetris!
DEVLOG 4: The beginning of learning PyTorch & Working AI-Tetris-Environment Pretty much the title sums up what I’ve been doing for the past 3h and 9m of this. I have some prior knowledge of the basics of machine learning ( from The Nature Of Code by Daniel Shiffman awesome book about coding would recommend ) by making a single layer perceptron ( basically a single neuron algorithm ) that can separate linearly separable data. I attempted to make a multi layered perceptron which actually puts the network in neural network. But I got stuck on back propagation. I don’t really know what to put as the picture for this devlog so I’ll just show a visualization of a neural network.
DEVLOG 5: Random movements An update from my previous devlog where I started learning pytorch. I have not learned pytorch to the point to where I can explain everything down to its finest details but enough to make my “AI” do some random junk with no direction. Pretty much I’m just initializing random weights and letting it go. I have 200 input neurons for my 20x10 board. The video I attached below shows the AI just doing some random stuff like rotating non stop and moving left and right.
DEVLOG 6: actual learning Wow two devlogs in pretty much a day… I need to touch grass… But that is not the point. IT IS FINALLY LEARNING (just very inefficiently) Currently it only learns from two things: How many rows it cleared on a single run Whether or not it sold the game Now pretty much the rest of this project will just be tweaking and experimenting with things. Before I ship I do want to train and release a demo model that you can test locally on your PC ( and I may want to test if it would work on android phones too ) that will come with the project. I also want to make it to where you can create and train your own models and potentially share them with other people. CAN’T WAIT FOR EVERYTHING TO BE DONE!!!!!!
DEVLOG 7: more AI training (hint: FAILED) This graph shows the results of my first training session of my AI showing how well the AI does over time through the reward. In total it lasted ~17 hours and its obviously not nearly enough time. The reward is supposed to go up over time, which it is. But not fast enough. Overall it only seems to increase in reward over time just by VERY little. Moving onto the other graph which shows the rows cleared over time. As you can see it never really increases on average. This shows that: MY AI SUCKSSSSSSS My AI is dumb Overall my AI can’t learn and I need to just keep on adjusting numbers over and over again.
DEVLOG 8: I think I may ship soon… Ok so I’ve hit a road block. Stardance ends soon which means I don’t really have much time left. My project is a completely working reinforcement learning AI which can play Tetris but not well. Originally I wanted to perfect a model and then ship the project but due to Stardance ending soon I may change that. Recent additions Added the ability to resume training on a model you made at your most recent checkpoint Added setup automation scripts for windows and linux Refined README with a getting started section and more detail in the Model History section to give the project more story Because I’m essentially prepped for shipping and it is a completely working project I will probably ship soon. Wish me luck. The screenshots shown are the results from training Tetr.AI-V2
Not to big of a devlog but I added executable files for easy running for this project. Also added a training_config json file to easily change training values.
Ships:
Tetr.AI This is the first release of Tetr.AI, my first ever reinforcement-learning project built for the Hack Club Stardance YSWS. Tetr.AI includes: A custom built Tetris environment built with PyGame which allows you to train and run your own models as well as just play Tetris A PyTorch neural network Deep-Q-learning Model checkpoint saving and loading Saving of training statistics into a CSV file A graphing script to allow you to visualize how well your model trained Windows and Linux setup scripts Model status The training pipeline is completely functional, but due to time constraints this release won’t contain a model which can play Tetris well. I completed two long duration training experiments during development which revealed problems with reward shaping, epsilon, and sparse rewards. Everything on this is documented in the README. Training and experimentation will continue after stardance...
|
1793350636.9596145
|
1793437036.9596145
|
|
55802
|
AeroSense by @Parikshit________________verma | Sta AeroSense by @Parikshit________________verma | Stardance...
|
Parikshit________________verma
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: AeroSense by @Parikshit________________verm Title: AeroSense by @Parikshit________________verma | Stardance...
|
1793350638.413523
|
1793955438.413523
|
|
53985
|
Charlie's Terminal Game Compendium by @Charlie Charlie's Terminal Game Compendium by @Charlie_Coder | Stardance...
|
Charlie_Coder
|
1
|
14.29
|
20
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-20T05:41:25Z", "hours": 14.0, "multiplier": 1.38, "payout": 20, "blessing": "neutral", "text": "I have made a simple game compendium which runs in the terminal and is text based. It is a python based compendium, which stores data in text files, and is installed using pip (instructions on the pypi project). There are three games: Connect 4, Tic Tac Toe, and Number Guesser. These games challenged my abilities in coding, as this was a very challenging game to code. I have only very basic knowledge of python coding. However, number guesser was noticeably easier as it was single lines, rather than me trying to invent a way to store the data of where various tokens were positioned. Overall, I put a lot of effort and time into this game compendium. While I am a beginner coder, and while it is only text based, I am proud of what I have managed to create, and that it can now be installed with pip. I hope you enjoy this game :)", "repo": "https://github.com/CharlieLindsay/charlie-s-game-compendium", "demo": "https://pypi.org/project/charlie-game-compendium/"}]...
|
[{"post_id": 77179, "ts": "202 [{"post_id": 77179, "ts": "2026-10-05T23:02:53Z", "hours": 0.2889, "text": "My last shipment failed because I was getting the user to manually state when they win. While this was intentional, as in real life, part of Connect 4 and Tic Tac Toe (noughts and crosses) is keeping track. However, I like the suggestion, and the 2 games that didn’t have win detection now do. Now I believe I am ready to ship. This project was supposed to be a small code I was writing for me to learn Python skills, but it has turned out much bigger than I expected, and now I am proud of that implementation, so I am going to ship again :)"}, {"post_id": 70994, "ts": "2026-09-20T05:35:19Z", "hours": 0.5897, "text": "Hopefully time to ship! I have done some of the final touches, and I got it on pypi, so it can now be installed using pip command: pip install charlie-game-compendium and run using: charlie-games"}, {"post_id": 69773, "ts": "2026-09-17T19:19:40Z", "hours": 1.5142, "text": "I have completed the tic tac toe game and leaderboard. The overall shell of the game is complete :)"}, {"post_id": 69023, "ts": "2026-09-16T07:36:00Z", "hours": 2.2769, "text": "I have fixed lots of the problems with the game failing on bad values, and have started the Tic Tac Toe game (and the number guesser which is very easy compared to the others), which works in a similar way to the Connect 4 game."}, {"post_id": 68480, "ts": "2026-09-15T06:10:56Z", "hours": 8.4733, "text": "I completely forgot to do development logs!! So frustrated but I will try to name my progress over the 8 hours of work. I have recorded what the game does now, it doesn’t work on most boundary cases and there are a lot of ways to break it, such as saying a number too high in Connect 4 creates an uncaught IndexError. However, I am just proud to get a Connect 4 board that renders the positions of the tokens, and makes sure they fall to the bottom. It also stores the leaderboard in a text file in a slightly weird looking syntax I created. Also, the user name is saved."}, {"post_id": 59888, "ts": "2026-09-01T21:32:29Z", "hours": 1.4994, "text": "I’ve got the basics sorted, a laid out plan and have started the menu. My main highlight so far has been getting the file checking working, so it greets the user by it’s name if they have it stored in the user data file and otherwise it catches it rather than crashing on FileNotFoundError."}]...
|
Title: Charlie's Terminal Game Compendium by @ Title: Charlie's Terminal Game Compendium by @Charlie_Coder | Stardance
Devlogs:
I’ve got the basics sorted, a laid out plan and have started the menu. My main highlight so far has been getting the file checking working, so it greets the user by it’s name if they have it stored in the user data file and otherwise it catches it rather than crashing on FileNotFoundError.
I completely forgot to do development logs!! So frustrated but I will try to name my progress over the 8 hours of work. I have recorded what the game does now, it doesn’t work on most boundary cases and there are a lot of ways to break it, such as saying a number too high in Connect 4 creates an uncaught IndexError. However, I am just proud to get a Connect 4 board that renders the positions of the tokens, and makes sure they fall to the bottom. It also stores the leaderboard in a text file in a slightly weird looking syntax I created. Also, the user name is saved.
I have fixed lots of the problems with the game failing on bad values, and have started the Tic Tac Toe game (and the number guesser which is very easy compared to the others), which works in a similar way to the Connect 4 game.
I have completed the tic tac toe game and leaderboard. The overall shell of the game is complete :)
Hopefully time to ship! I have done some of the final touches, and I got it on pypi, so it can now be installed using pip command: pip install charlie-game-compendium and run using: charlie-games
My last shipment failed because I was getting the user to manually state when they win. While this was intentional, as in real life, part of Connect 4 and Tic Tac Toe (noughts and crosses) is keeping track. However, I like the suggestion, and the 2 games that didn’t have win detection now do. Now I believe I am ready to ship. This project was supposed to be a small code I was writing for me to learn Python skills, but it has turned out much bigger than I expected, and now I am proud of that implementation, so I am going to ship again :)
Ships:
I have made a simple game compendium which runs in the terminal and is text based. It is a python based compendium, which stores data in text files, and is installed using pip (instructions on the pypi project). There are three games: Connect 4, Tic Tac Toe, and Number Guesser. These games challenged my abilities in coding, as this was a very challenging game to code. I have only very basic knowledge of python coding. However, number guesser was noticeably easier as it was single lines, rather than me trying to invent a way to store the data of where various tokens were positioned. Overall, I put a lot of effort and time into this game compendium. While I am a beginner coder, and while it is only text based, I am proud of what I have managed to create, and that it can now be installed with pip. I hope you enjoy this game :)...
|
1793350639.3479812
|
1793437039.3479812
|
|
53994
|
Godot - Froken by @martycat111 | Stardance
|
martycat111
|
1
|
23.0
|
143
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-03T20:07:34Z", "hours": 23.0, "multiplier": 6.22, "payout": 143, "blessing": "neutral", "text": "A silly Godot game. I made it to learn Godot. Signals are hard when instantiating. Physics are annoying. It was fun.", "repo": "https://github.com/Martycat111/Froken", "demo": "https://martycat111.itch.io/froken"}]...
|
[{"post_id": 76518, "ts": "202 [{"post_id": 76518, "ts": "2026-10-03T19:55:11Z", "hours": 4.9028, "text": "Final build, will ship unless i find bugs. Improved tutorial, transitions, and gameplay tweaks. Check out my itch. :)"}, {"post_id": 75482, "ts": "2026-09-30T07:06:36Z", "hours": 8.635, "text": "Huge Updates - Title screen, art, terrain, and so, so much more…"}, {"post_id": 74309, "ts": "2026-09-27T05:06:09Z", "hours": 6.7633, "text": "Fixed most aspects of my game. Its not a 1/10 anymore."}, {"post_id": 58552, "ts": "2026-08-31T00:12:15Z", "hours": 2.6772, "text": "Godot game chicken flies"}]...
|
Title: Godot - Froken by @martycat111 | Stardance
Title: Godot - Froken by @martycat111 | Stardance
Devlogs:
Godot game chicken flies
Fixed most aspects of my game. Its not a 1/10 anymore.
Huge Updates - Title screen, art, terrain, and so, so much more…
Final build, will ship unless i find bugs. Improved tutorial, transitions, and gameplay tweaks. Check out my itch. :)
Ships:
A silly Godot game. I made it to learn Godot. Signals are hard when instantiating. Physics are annoying. It was fun....
|
1793350640.5698042
|
1793437040.5698042
|
|
16571
|
mocha by @Glitchy | Stardance
|
Glitchy
|
1
|
101.0
|
1806
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-13T18:57:02Z", "hours": 101.0, "multiplier": 17.94, "payout": 1806, "blessing": "neutral", "text": "I made a package manager for Windows, which is somewhat backwards compatible with scoop packages. To be honest there’s still a lot of work that I want to do, but I have exams and college application coming up soon so I can’t. That’s not to say I’m not happy with the state of the ship. At the very least it has all the core features that a package manager should have, but there are still a lot of bugs which is why this is only v0.0.1. The biggest challenge by far was trying to figure out how Scoop does things internally. A lot of stuff just doesn’t have documentation, so you have to dig through the really messy PowerShell source code.", "repo": "https://github.com/Protract-123/mocha", "demo": "https://github.com/Protract-123/mocha/releases/latest"}]...
|
[{"post_id": 67579, "ts": "202 [{"post_id": 67579, "ts": "2026-09-13T18:33:17Z", "hours": 1.7761, "text": "So I wrote a README, added a license (MIT of course) and setup CI/CD so that releases are automatically built and deployed. Honestly I forgot how hard it is to write a good README. You need to get a lot of information through without it looking like a wall of text."}, {"post_id": 67267, "ts": "2026-09-13T10:36:48Z", "hours": 5.8047, "text": "I forgot to make a devlog in between so this will be like 2 bigger devlogs. I parallelized bucket updates, which speeds it up quite a bit. This also allowed me to try out parallelism even more, which I plan to apply throughout the CLI later on. I also added configuration options for the runners which mocha shim will use to run certain file types. For example, you can set the python-runner to select the python version that’ll be used to run python scripts that are shimmed. Downloads now have a progress bar, so you don’t need to wonder whether something is happening or not during a long download. Finally env_set is fully supported since I added the relevant variable parsing. This was pretty much just me cleaning out the TODO list before I ship. I also did a lot of smaller bug fixes and refactors as seen below. fix(commands): prevent app installation if already installed (cb27d07) fix(commands): fix config opening with “start” (74f3679) fix(commands): correctly handle non-apps when upgrading (f7419f6) fix: make LogOutput go to Stdout not Stderr (bc10357) fix: handle empty versions correctly (2287da9) fix(pkg): remove correct temp dir (33189b6) fix(shim): warn for unknown shim extension (622c2b4) fix: skip downloads with no hash by default (69d4e35) fix: use correct timeout for downloads (44e527b) fix: drop unnecessary return value from GetExecutableEntries (9fd845c) fix(config): remove unused option (1339971) fix(commands): don’t error for valid results (87c4d6c) refactor(config): rename variables/functions (f253d9d) fix: use unique temp directories (a159e23) refactor: use fmt.Fprintln directly (d2d54bf)"}, {"post_id": 65401, "ts": "2026-09-10T14:55:22Z", "hours": 2.5386, "text": "Lots of small bug fixes and changes, I’ll just list them out: feat(cmd): allow removal of multiple shims in one execution (f2fae3f) fix(manifest): correctly ignore invalid shortcut entries (6a08478) fix(fileops): use correct registry type (5d5d796) fix(config): seed config with defaults (9dfaaff) fix(cmd): use correct release sources (a2a9ba1) fix(cmd): use bucket from install info (5a9109b) I also added support for more file types being shimmed, which helps a lot with compatibility. The file types are .py , .bat , .cmd , .jar and .ps1 ."}, {"post_id": 52474, "ts": "2026-08-22T16:37:15Z", "hours": 4.6758, "text": "Lot of time going into this devlog, but it makes sense since I did do a lot. I did this sweeping refactor of the entire commands module which moved around a lot of code. Essentially each command now gets it’s own directory under the commands module that represents it’s children/parents. For example commands/shim/remove/cmd.go contains code for the mocha shim remove command. Each cmd.go contains a Command struct that has the relevant fields and functions attached to it. This structure just makes things more organized and also means adding test files will be a bit easier since functionality is now isolated. I also sorted out the shim binary. So essentially https://github.com/ScoopInstaller/Shim offers different version of the shim binary which can be installed. Previously I hard coded the code to install cpp v0.1.0 but now users can run mocha shim binary releases to see the options and mocha shim binary setup to install their chosen binary. This also means we actually get the latest releases from GitHub."}, {"post_id": 51141, "ts": "2026-08-20T17:11:51Z", "hours": 3.6722, "text": "Finally got a bit of time to do a bit of development. First thing I did was remove a field from install.json to match scoop . This means that mocha should be a drop in replacement for existing scoop installs. Then I added partial support for env_set and env_add_path . The main thing I need to do to complete the feature is parse variables and replace them with the appropriate paths. These 2 fields are some of the last manifest fields I need to support besides pre/post (un)install hooks."}, {"post_id": 34596, "ts": "2026-07-25T13:39:02Z", "hours": 2.5778, "text": "My summer break has ended so development is going to be a lot slower from now. I added mocha outdated so you can list outdated apps before upgrading them to a newer version. Besides that I tweaked a lot of stuff related to CLI output. For example I changed search to output one table, and simply outputting exact matches at the top of that table. I also changed a lot of messages which were using LogOutput to LogInfo so they use the correct color and output to stderr and not stdout ."}, {"post_id": 31801, "ts": "2026-07-20T14:04:04Z", "hours": 1.5481, "text": "Not sure why I didn’t do this earlier, but I’ve added success messages to commands where it makes sense. Also added a success color to the config so you can change what the success color is. I do still need to improve CLI output quite a bit, but it’s slowly getting there."}, {"post_id": 30693, "ts": "2026-07-18T14:02:54Z", "hours": 2.1922, "text": "I’m writing this one right before F1 Qualifying at Spa! Continuing with the trend of some of my recent work, I improved what table outputs look like to be a little bit more readable. We now use proper separators in the form of Unicode Box Drawing Characters . I also made column alignment configurable, which improves legibility for some commands like mocha bucket list and mocha cache show . I’ve attached an image of the scoop and mocha versions of bucket list so you can compare for yourself."}, {"post_id": 30286, "ts": "2026-07-17T18:51:34Z", "hours": 3.4797, "text": "I love refactoring!!!! I’ll probably end up spending another 20 hours just on refactoring because it’s so fun!!!! This time around I wanted to refactor the code so that our commands orchestrate stuff instead of the helper functions. For example, pkg.Install would first download a package, then install it, and then link it through shims and shortcuts all by itself. This causes issues because it means error messages become slightly worse, and it creates a class of bugs due to edge cases where we don’t necessarily want this order of orchestration. Hence I did a lot of refactoring in the pkg module. I also ended up adding a way to skip verification of downloads when downloading, installing or updating a package through --skip-verify . It’s a useful option in situations where there is a malformed manifest or simply no hash to begin with."}, {"post_id": 30054, "ts": "2026-07-17T10:28:53Z", "hours": 4.6269, "text": "mocha now supports a user defined theme for output colors. In the process I ended up doing a lot of stuff related to the config. First thing I did was swap to fatih/color for colored output, since it handles stuff like colors in command prompt and removing color when output is piped. Then I refactored the config module. Earlier I would pass around a MochaConfiguration object through every function. Now I use a config singleton that’s accessible from any function. Why? Because it means I don’t need to pass the object every time I want to log information. Also means I don’t need to pass mochaDir through almost every function in the codebase. Getting user defined themes was a bit complicated because I needed a good way to handle a default theme so output doesn’t look bad if parsing fails. I handled this by only using the configured theme if every color resolves properly. Otherwise output falls back to the already loaded default theme. Due to this you still get colored output even if there are errors or warning before the configuration and theme is loaded."}, {"post_id": 29066, "ts": "2026-07-15T18:30:47Z", "hours": 4.7214, "text": "So I’ve been doing a bit of refactoring, a bit of bug fixing and a bit of optimization. Essentially just polishing mocha before I work on the next feature. Here’s some of the stuff I did: created tests for ParseRefString to validate behavior cache manifest json between info calls since I/O is really slow bumped dependency versions refactored manifest/info.go Besides that I fixed the uninstall flow since it was really bugged after the latest changes. Essentially mocha would uninstall apps with incorrect info. It would also try to remove shims/shortcuts for apps which don’t have any active shims/shortcuts. I then added a bit of logging since the uninstall command didn’t give any user output for whatever reason (i forgot to earlier)."}, {"post_id": 27086, "ts": "2026-07-12T10:29:45Z", "hours": 6.4975, "text": "This is going to be the equivalent of 2 devlogs since I thought I made one earlier for persists but I didn’t. New feature! We now handle persist items in order to store data between versions. These are files which are persisted between versions of an app. Lets take git as an example to explain why persist exists. Say you want to make sure your git config isn’t deleted every time you update. The issue with this is that the config file is saved in the version specfic directory. To resolve this we can keep the config in $MOCHA_DIR/persist and then symlink the config to where it needs to be, which is essentially what persist tells us to do. Since we handled persist items last time we can now implement mocha upgrade to update apps. The way scoop handles updates is by first removing anything that references the app, like shortcuts or shims . Then we just follow the install process from scratch. This leaves the old version available in case a user wants to revert versions due to a bug, while also updating to the latest available version. This can be seen in the video below, which shows me updating llama.cpp-hip-radeon ."}, {"post_id": 23572, "ts": "2026-07-06T16:39:13Z", "hours": 3.53, "text": "We now create shortcuts! This means any GUI apps should show up properly in the start menu, just like they do when you install with scoop . All I really had to do was a bit of orchestration since I decided to vendor in an implementation from https://github.com/jxeng/shortcut Besides that I expanded the number of apps that are supported by implementing a bit of code that handle architecture specific bin fields, along with bin fields which store 2D arrays. I also cleared up some of the TODO items. I swapped the junction implementation to an implementation from https://github.com/nyaosorg/go-windows-junction since we were previously shelling out to CLI. That and I added a bit more zip bomb protection For the purposes of the video below I changed the location which shortcuts get put to my desktop. It’ll probably be configurable, and match scoop by putting shortcuts in the startup menu by default"}, {"post_id": 22839, "ts": "2026-07-05T13:36:18Z", "hours": 3.3089, "text": "As I mentioned in the previous devlog I added good help information to every bit of the CLI. It’s surprisingly difficult to write good help messages which explains everything to users in a few words I also changed the behaviour of the mocha cache clear command to not clear all cache by default. That’s now gated behind the --all flag in order to match scoop a bit more"}, {"post_id": 21420, "ts": "2026-07-03T11:02:24Z", "hours": 1.0722, "text": "Typically I don’t want to make devlogs for small stuff like this, but this is something I found really cool. So I was working on help messages for all the commands when I realized that mocha bucket list felt a bit slower than pretty much every other command. This is because we need to shell out to git 2 times per bucket, and I had 4 buckets added. While 8 git commands might not sound like a lot, it was enough to make mocha bucket list feel slow. So what I did is I parallelized the metadata fetching through an errgroup . Instead of fetching the metadata for each bucket in order, we fetch the metadata for all 4 buckets simultaneously. This led to a big performance uplift. About 3 times faster than the old version of mocha , and just over 12 times faster than scoop for this operation. See the video below."}, {"post_id": 21386, "ts": "2026-07-03T09:17:07Z", "hours": 2.2464, "text": "I finished up mocha uninstall and mocha list , which means you can actually manage installed apps instead of manually deleting them. There’s not much that goes into mocha uninstall . You just need to remove the relevant shims and app directories since the apps that mocha supports are all portable. mocha list is similarly simple. It’s just loops over the directories in $MOCHA_DIR/apps and looks for apps along with the versions installed for each app."}, {"post_id": 19910, "ts": "2026-07-01T10:53:02Z", "hours": 5.4625, "text": "So I added support for more apps by implementing more extractors. This means in theory any apps which don’t need a pre-install or post-install should work. To be more specific, I handle a few more properties on manifests. Those being extract_dir and innosetup , which inform how an app needs to be installed. I also implement 7zip and innounp as extractors to support more file formats which applications are distributed in. Of course there’s still a lot of work before I consider this ready for public use. I need to create commands for some basic operations like uninstalling, updating and listing apps. I also need to handle shortcuts otherwise GUI apps can’t be accessed from the start menu. Besides that I need to improve the user experience. As you can see in the video below mocha just sort of dumps everything to the console even if it’s not relevant. Help menus are also critical to get working properly."}, {"post_id": 18238, "ts": "2026-06-29T09:51:16Z", "hours": 3.7839, "text": "Finished up the code cleanup in commands , fileops and manifests . I did catch a few edge cases and some incorrect behavior in the process, which is why I always spend so much time reviewing code. I did use AI to assist with code review because I think it’s an area where AI shines. AI is really good at finding small errors or inconsistencies in the codebase which I probably wouldn’t notice. For example, it identified that the ManifestReferences argument was not a required argument for the download command, which meant no help message was displayed on incorrect usage like the other commands. One big thing I will work on eventually is console output. Right now errors are well formatted but a lot of the time commands just run stuff without providing a lot of insight into what actions they are taking which isn’t great. Even the help menu is pretty useless right now (see the image below). Extra context: A manifest reference is a pointer to an app (e.g. main/ [email protected] )"}, {"post_id": 17027, "ts": "2026-06-27T17:10:53Z", "hours": 5.3025, "text": "Before working on more features and expanding the amount of apps mocha actually supports I wanted to go through the codebase and do a lot of cleanup since the codebase is quite messy. There are silly mistakes in some files and bad implementations in others. Hence the time I spent during this period was focused on moving code to where it should be and cleaning up some edge cases, specifically related to the bucket , config and shim modules. A good example of this is moving the code to get the active config to the config module instead of leaving it in main.go . Next up will be refactoring the commands , fileops , and manifest modules. I don’t have much to show so I figured I would present a feature I added but didn’t show earlier: the ability to skip cache hits with the --force flag when installing or downloading an app. Some context I forgot to add initially: I renamed the app module to manifest since I felt it was more accurate to what it actually handles scope wise."}, {"post_id": 15814, "ts": "2026-06-25T18:17:50Z", "hours": 2.5558, "text": "Huge milestone!!! I’ve gotten mocha install working for very basic apps! This means the entire process of downloading a file, then extracting it, then creating a junction and finally creating a shim now works for basic pieces of software! So in terms of what I actually did this devlog, I added cache hits to the download command since it’s relevant to the install command. I then implemented the aforementioned .zip extraction and junction creation. Then all that was left was a bit of orchestration, getting everything to work together properly. See a working install of innounp using mocha install below!"}, {"post_id": 15668, "ts": "2026-06-25T14:03:10Z", "hours": 0.7572, "text": "mocha update is another command which does very little but is very important. All it does is update the known_buckets file, and run git pull on all added buckets to update them. It can also update just the buckets you specify if you pass in an argument. I do need to improve the output of the command since it outputs raw git right now, but at least it’s functional. See the demo below."}, {"post_id": 14392, "ts": "2026-06-23T14:41:51Z", "hours": 6.9436, "text": "Spent a bit longer between devlogs this time, but it was worth it. So I realized the error messages were really bad. I was pretty much just passing errors up the call stack without adding any context, which isn’t great since it means our error messages will be useless to people reading them I therefore went through every single file of the codebase and wrote good error messages which add a bit of context every time we pass it up the call stack. I also did a bit of refactoring where I thought it would be worth it. For example in the shim module I now set the PE subsystem of the shim binary while it’s in memory instead of writing to disk twice. A few good examples of what the new error messages look like can be seen in the video below."}, {"post_id": 13054, "ts": "2026-06-21T10:47:05Z", "hours": 3.4069, "text": "Shims are simple in concept, complicated in reality. So essentially a shim in mocha is just an executable which calls another executable. It’s similar to a shortcut in that sense, except it shows up in $PATH Thankfully the scoop project already has a repository with 4 different implementations for the shim binary, so I can just have mocha shim download one of those binaries. The complicated part was the PE Subsystem. The PE subsystem is basically a bit of info in each binary which tells Windows whether it’s a console application, or a GUI application. We need to set the PE subsystem of the shim exe to the PE subsystem of the binary we are calling for Windows to execute the binary properly. Hence I need to read and write raw binary data. All of this is just the implementation for exe shims. Scoop itself contains implementations for .bat/.cmd , .ps1 , .jar , .py and linux binaries , all of which have wildly different implementations compared to .exe shims. The video below shows the working set of mocha shim commands (those being add , remove and list )."}, {"post_id": 12032, "ts": "2026-06-19T16:57:37Z", "hours": 1.8778, "text": "mocha cache is a simple command. It shows you what files are currently in $MOCHA_DIR/cache directory and it clears them out. One thing I noticed was that scoop cache show actually displays raw bytes instead of human readable file sizes for each cache entry, which is a bit odd since the total they display is human readable. Therefore I made my implementation mocha cache list display human readable sizes since that’s a more reasonable default."}, {"post_id": 11234, "ts": "2026-06-18T11:50:44Z", "hours": 2.2589, "text": "Fuzzy search is really really good. While implementing mocha search I noticed the results returned by scoop search were in alphabetical order, which doesn’t make a lot of sense. If I do scoop search git the first result should probably be git As a result my implementation of search uses github.com/sahilm/fuzzy which is a small library which provides a fuzzy search implementation. Scoop also checks for binary name matches, e.g. package biodiff can provide a binary called git-biodiff and show up in search results. I decided to remove this for now, since I personally find it a bit unnecessary. scoop search also lists all search results, which is okay when results are sorted alphabetically but doesn’t make sense when searches are relevance based. Therefore, by default mocha search will list exact matches plus the 20 most relevant search results. This can be overridden by the --count argument, where setting it to 0 displays all results. A demonstration of mocha search vs scoop search can be seen in the video below."}, {"post_id": 10748, "ts": "2026-06-17T17:14:41Z", "hours": 2.1597, "text": "I finished up mocha download , which surprisingly does a bit more than simply downloading files. The first thing it does is well… download the file. This is a bit more complicated than it seems though, since we need to identify the right file to download based on cpu architecture. Hence the very cursed JSON parsing I had to create. After downloading a file, we also do a hash check. We support the 4 types of file hashes which scoop support, those being sha256 , sha512 , md5 and sha1 . Currently files get downloaded to the $MOCHA_DIR/cache directory like in scoop, however we don’t actually check if there’s anything cached which can lead to repeated downloads. That’s something I’ll need to fix later on"}, {"post_id": 10131, "ts": "2026-06-16T18:54:22Z", "hours": 1.4081, "text": "I was working on the mocha download command so I can sort out fetching files, and during it I realized my current app format makes things a bit weird. mocha cat previously took in a flag for bucket through -b and a name. Scoop on the other hand uses an application reference in the format bucket/name@version . Scoop’s format is really important for downloads and installs, so it didn’t make sense to not standardize it between mocha download and mocha cat . Hence this shorter devlog! See the video below for the new usage (version numbers are ignored for mocha cat )."}, {"post_id": 10004, "ts": "2026-06-16T15:21:57Z", "hours": 2.9753, "text": "I did a bit of refactoring to split the core functionality from the command files. This means that the code for downloading and deleting buckets is separated from the code for the various commands. I’m doing this primarily for better code organization, and also to prevent import cycles. I also finished up the config system I mentioned last time. It’ll be one of the bigger improvements over scoop, which has a basic set of configuration options. TOML was the obvious choice for the config format since it is really easy to read and write. I made sure that you can put it in any of the standard locations, such as %APPDATA% and .config or in $MOCHA_DIR . Running mocha config will open the configuration in your preferred app, and also generate the default config if a configuration hasn’t been detected in any of the valid locations. Currently the configuration can be used to make mocha cat run an external program for printing manifests to stdout . See the video below for an example using bat"}, {"post_id": 8826, "ts": "2026-06-14T17:52:54Z", "hours": 2.6147, "text": "So this is a spot where I think the improvements over scoop start becoming really apparent. The scoop cat command simply prints an app’s manifest to console. However due to the long startup time of PowerShell scripts (scoop is written in PowerShell) basic stuff like scoop cat takes a second. mocha cat on the other hand is nearly instantaneous since it’s a compiled binary with almost 0 startup time. You can see how this plays out in real usage in the video below. I also half baked a config system, but it’s not finished so I’ll talk about that in the next devlog."}, {"post_id": 8586, "ts": "2026-06-14T08:48:35Z", "hours": 2.85, "text": "I finished off the remaining mocha bucket subcommands, those being add , rm and list . These commands manage “buckets” which are pretty much just package sources. mocha bucket add uses git to clone the relevant bucket into the [MOCHA_DIR]/buckets directory. By default MOCHA_DIR is [USER]/mocha mocha bucket list simply loops over the [MOCHA_DIR]/buckets directory and gets relevant info for each bucket. mocha bucket rm removes a bucket by just deleting the folder containing the bucket. For example, removing the main bucket deletes [MOCHA_DIR]/buckets/main"}, {"post_id": 8208, "ts": "2026-06-13T17:32:25Z", "hours": 2.0261, "text": "I started off with something a bit simple: mocha bucket known The known bucket list in scoop is a list of buckets which are known by the package manager in advance. These buckets don’t require the full URL to be used when using scoop bucket sub-commands. For example instead of running scoop bucket add https://github.com/ScoopInstaller/Main you can instead run scoop bucket add main As seen in the video below, mocha bucket known doesn’t do much. First it downloads buckets.json if it doesn’t exist. Then it parses the json and outputs it to console."}]...
|
Title: mocha by @Glitchy | Stardance
Devlogs:
I s Title: mocha by @Glitchy | Stardance
Devlogs:
I started off with something a bit simple: mocha bucket known The known bucket list in scoop is a list of buckets which are known by the package manager in advance. These buckets don’t require the full URL to be used when using scoop bucket sub-commands. For example instead of running scoop bucket add https://github.com/ScoopInstaller/Main you can instead run scoop bucket add main As seen in the video below, mocha bucket known doesn’t do much. First it downloads buckets.json if it doesn’t exist. Then it parses the json and outputs it to console.
I finished off the remaining mocha bucket subcommands, those being add , rm and list . These commands manage “buckets” which are pretty much just package sources. mocha bucket add uses git to clone the relevant bucket into the [MOCHA_DIR]/buckets directory. By default MOCHA_DIR is [USER]/mocha mocha bucket list simply loops over the [MOCHA_DIR]/buckets directory and gets relevant info for each bucket. mocha bucket rm removes a bucket by just deleting the folder containing the bucket. For example, removing the main bucket deletes [MOCHA_DIR]/buckets/main
So this is a spot where I think the improvements over scoop start becoming really apparent. The scoop cat command simply prints an app’s manifest to console. However due to the long startup time of PowerShell scripts (scoop is written in PowerShell) basic stuff like scoop cat takes a second. mocha cat on the other hand is nearly instantaneous since it’s a compiled binary with almost 0 startup time. You can see how this plays out in real usage in the video below. I also half baked a config system, but it’s not finished so I’ll talk about that in the next devlog.
I did a bit of refactoring to split the core functionality from the command files. This means that the code for downloading and deleting buckets is separated from the code for the various commands. I’m doing this primarily for better code organization, and also to prevent import cycles. I also finished up the config system I mentioned last time. It’ll be one of the bigger improvements over scoop, which has a basic set of configuration options. TOML was the obvious choice for the config format since it is really easy to read and write. I made sure that you can put it in any of the standard locations, such as %APPDATA% and .config or in $MOCHA_DIR . Running mocha config will open the configuration in your preferred app, and also generate the default config if a configuration hasn’t been detected in any of the valid locations. Currently the configuration can be used to make mocha cat run an external program for printing manifests to stdout . See the video below for an example using bat
I was working on the mocha download command so I can sort out fetching files, and during it I realized my current app format makes things a bit weird. mocha cat previously took in a flag for bucket through -b and a name. Scoop on the other hand uses an application reference in the format bucket/name@version . Scoop’s format is really important for downloads and installs, so it didn’t make sense to not standardize it between mocha download and mocha cat . Hence this shorter devlog! See the video below for the new usage (version numbers are ignored for mocha cat ).
I finished up mocha download , which surprisingly does a bit more than simply downloading files. The first thing it does is well… download the file. This is a bit more complicated than it seems though, since we need to identify the right file to download based on cpu architecture. Hence the very cursed JSON parsing I had to create. After downloading a file, we also do a hash check. We support the 4 types of file hashes which scoop support, those being sha256 , sha512 , md5 and sha1 . Currently files get downloaded to the $MOCHA_DIR/cache directory like in scoop, however we don’t actually check if there’s anything cached which can lead to repeated downloads. That’s something I’ll need to fix later on
Fuzzy search is really really good. While implementing mocha search I noticed the results returned by scoop search were in alphabetical order, which doesn’t make a lot of sense. If I do scoop search git the first result should probably be git As a result my implementation of search uses github.com/sahilm/fuzzy which is a small library which provides a fuzzy search implementation. Scoop also checks for binary name matches, e.g. package biodiff can provide a binary called git-biodiff and show up in search results. I decided to remove this for now, since I personally find it a bit unnecessary. scoop search also lists all search results, which is okay when results are sorted alphabetically but doesn’t make sense when searches are relevance based. Therefore, by default mocha search will list exact matches plus the 20 most relevant search results. This can be overridden by the --count argument, where setting it to 0 displays all results. A demonstration of mocha search vs scoop search can be seen in the video below.
mocha cache is a simple command. It shows you what files are currently in $MOCHA_DIR/cache directory and it clears them out. One thing I noticed was that scoop cache show actually displays raw bytes instead of human readable file sizes for each cache entry, which is a bit odd since the total they display is human readable. Therefore I made my implementation mocha cache list display human readable sizes since that’s a more reasonable default.
Shims are simple in concept, complicated in reality. So essentially a shim in mocha is just an executable which calls another executable. It’s similar to a shortcut in that sense, except it shows up in $PATH Thankfully the scoop project already has a repository with 4 different implementations for the shim binary, so I can just have mocha shim download one of those binaries. The complicated part was the PE Subsystem. The PE subsystem is basically a bit of info in each binary which tells Windows whether it’s a console application, or a GUI application. We need to set the PE subsystem of the shim exe to the PE subsystem of the binary we are calling for Windows to execute the binary properly. Hence I need to read and write raw binary data. All of this is just the implementation for exe shims. Scoop itself contains implementations for .bat/.cmd , .ps1 , .jar , .py and linux binaries , all of which have wildly different implementations compared to .exe shims. The video below shows the working set of mocha shim commands (those being add , remove and list ).
Spent a bit longer between devlogs this time, but it was worth it. So I realized the error messages were really bad. I was pretty much just passing errors up the call stack without adding any context, which isn’t great since it means our error messages will be useless to people reading them I therefore went through every single file of the codebase and wrote good error messages which add a bit of context every time we pass it up the call stack. I also did a bit of refactoring where I thought it would be worth it. For example in the shim module I now set the PE subsystem of the shim binary while it’s in memory instead of writing to disk twice. A few good examples of what the new error messages look like can be seen in the video below.
mocha update is another command which does very little but is very important. All it does is update the known_buckets file, and run git pull on all added buckets to update them. It can also update just the buckets you specify if you pass in an argument. I do need to improve the output of the command since it outputs raw git right now, but at least it’s functional. See the demo below.
Huge milestone!!! I’ve gotten mocha install working for very basic apps! This means the entire process of downloading a file, then extracting it, then creating a junction and finally creating a shim now works for basic pieces of software! So in terms of what I actually did this devlog, I added cache hits to the download command since it’s relevant to the install command. I then implemented the aforementioned .zip extraction and junction creation. Then all that was left was a bit of orchestration, getting everything to work together properly. See a working install of innounp using mocha install below!
Before working on more features and expanding the amount of apps mocha actually supports I wanted to go through the codebase and do a lot of cleanup since the codebase is quite messy. There are silly mistakes in some files and bad implementations in others. Hence the time I spent during this period was focused on moving code to where it should be and cleaning up some edge cases, specifically related to the bucket , config and shim modules. A good example of this is moving the code to get the active config to the config module instead of leaving it in main.go . Next up will be refactoring the commands , fileops , and manifest modules. I don’t have much to show so I figured I would present a feature I added but didn’t show earlier: the ability to skip cache hits with the --force flag when installing or downloading an app. Some context I forgot to add initially: I renamed the app module to manifest since I felt it was more accurate to what it actually handles scope wise.
Finished up the code cleanup in commands , fileops and manifests . I did catch a few edge cases and some incorrect behavior in the process, which is why I always spend so much time reviewing code. I did use AI to assist with code review because I think it’s an area where AI shines. AI is really good at finding small errors or inconsistencies in the codebase which I probably wouldn’t notice. For example, it identified that the ManifestReferences argument was not a required argument for the download command, which meant no help message was displayed on incorrect usage like the other commands. One big thing I will work on eventually is console output. Right now errors are well formatted but a lot of the time commands just run stuff without providing a lot of insight into what actions they are taking which isn’t great. Even the help menu is pretty useless right now (see the image below). Extra context: A manifest reference is a pointer to an app (e.g. main/ [email protected] )
So I added support for more apps by implementing more extractors. This means in theory any apps which don’t need a pre-install or post-install should work. To be more specific, I handle a few more properties on manifests. Those being extract_dir and innosetup , which inform how an app needs to be installed. I also implement 7zip and innounp as extractors to support more file formats which applications are distributed in. Of course there’s still a lot of work before I consider this ready for public use. I need to create commands for some basic operations like uninstalling, updating and listing apps. I also need to handle shortcuts otherwise GUI apps can’t be accessed from the start menu. Besides that I need to improve the user experience. As you can see in the video below mocha just sort of dumps everything to the console even if it’s not relevant. Help menus are also critical to get working properly.
I finished up mocha uninstall and mocha list , which means you can actually manage installed apps instead of manually deleting them. There’s not much that goes into mocha uninstall . You just need to remove the relevant shims and app directories since the apps that mocha supports are all portable. mocha list is similarly simple. It’s just loops over the directories in $MOCHA_DIR/apps and looks for apps along with the versions installed for each app.
Typically I don’t want to make devlogs for small stuff like this, but this is something I found really cool. So I was working on help messages for all the commands when I realized that mocha bucket list felt a bit slower than pretty much every other command. This is because we need to shell out to git 2 times per bucket, and I had 4 buckets added. While 8 git commands might not sound like a lot, it was enough to make mocha bucket list feel slow. So what I did is I parallelized the metadata fetching through an errgroup . Instead of fetching the metadata for each bucket in order, we fetch the metadata for all 4 buckets simultaneously. This led to a big performance uplift. About 3 times faster than the old version of mocha , and just over 12 times faster than scoop for this operation. See the video below.
As I mentioned in the previous devlog I added good help information to every bit of the CLI. It’s surprisingly difficult to write good help messages which explains everything to users in a few words I also changed the behaviour of the mocha cache clear command to not clear all cache by default. That’s now gated behind the --all flag in order to match scoop a bit more
We now create shortcuts! This means any GUI apps should show up properly in the start menu, just like they do when you install with scoop . All I really had to do was a bit of orchestration since I decided to vendor in an implementation from https://github.com/jxeng/shortcut Besides that I expanded the number of apps that are supported by implementing a bit of code that handle architecture specific bin fields, along with bin fields which store 2D arrays. I also cleared up some of the TODO items. I swapped the junction implementation to an implementation from https://github.com/nyaosorg/go-windows-junction since we were previously shelling out to CLI. That and I added a bit more zip bomb protection For the purposes of the video below I changed the location which shortcuts get put to my desktop. It’ll probably be configurable, and match scoop by putting shortcuts in the startup menu by default
This is going to be the equivalent of 2 devlogs since I thought I made one earlier for persists but I didn’t. New feature! We now handle persist items in order to store data between versions. These are files which are persisted between versions of an app. Lets take git as an example to explain why persist exists. Say you want to make sure your git config isn’t deleted every time you update. The issue with this is that the config file is saved in the version specfic directory. To resolve this we can keep the config in $MOCHA_DIR/persist and then symlink the config to where it needs to be, which is essentially what persist tells us to do. Since we handled persist items last time we can now implement mocha upgrade to update apps. The way scoop handles updates is by first removing anything that references the app, like shortcuts or shims . Then we just follow the install process from scratch. This leaves the old version available in case a user wants to revert versions due to a bug, while also updating to the latest available version. This can be seen in the video below, which shows me updating llama.cpp-hip-radeon .
So I’ve been doing a bit of refactoring, a bit of bug fixing and a bit of optimization. Essentially just polishing mocha before I work on the next feature. Here’s some of the stuff I did: created tests for ParseRefString to validate behavior cache manifest json between info calls since I/O is really slow bumped dependency versions refactored manifest/info.go Besides that I fixed the uninstall flow since it was really bugged after the latest changes. Essentially mocha would uninstall apps with incorrect info. It would also try to remove shims/shortcuts for apps which don’t have any active shims/shortcuts. I then added a bit of logging since the uninstall command didn’t give any user output for whatever reason (i forgot to earlier).
mocha now supports a user defined theme for output colors. In the process I ended up doing a lot of stuff related to the config. First thing I did was swap to fatih/color for colored output, since it handles stuff like colors in command prompt and removing color when output is piped. Then I refactored the config module. Earlier I would pass around a MochaConfiguration object through every function. Now I use a config singleton that’s accessible from any function. Why? Because it means I don’t need to pass the object every time I want to log information. Also means I don’t need to pass mochaDir through almost every function in the codebase. Getting user defined themes was a bit complicated because I needed a good way to handle a default theme so output doesn’t look bad if parsing fails. I handled this by only using the configured theme if every color resolves properly. Otherwise output falls back to the already loaded default theme. Due to this you still get colored output even if there are errors or warning before the configuration and theme is loaded.
I love refactoring!!!! I’ll probably end up spending another 20 hours just on refactoring because it’s so fun!!!! This time around I wanted to refactor the code so that our commands orchestrate stuff instead of the helper functions. For example, pkg.Install would first download a package, then install it, and then link it through shims and shortcuts all by itself. This causes issues because it means error messages become slightly worse, and it creates a class of bugs due to edge cases where we don’t necessarily want this order of orchestration. Hence I did a lot of refactoring in the pkg module. I also ended up adding a way to skip verification of downloads when downloading, installing or updating a package through --skip-verify . It’s a useful option in situations where there is a malformed manifest or simply no hash to begin with.
I’m writing this one right before F1 Qualifying at Spa! Continuing with the trend of some of my recent work, I improved what table outputs look like to be a little bit more readable. We now use proper separators in the form of Unicode Box Drawing Characters . I also made column alignment configurable, which improves legibility for some commands like mocha bucket list and mocha cache show . I’ve attached an image of the scoop and mocha versions of bucket list so you can compare for yourself.
Not sure why I didn’t do this earlier, but I’ve added success messages to commands where it makes sense. Also added a success color to the config so you can change what the success color is. I do still need to improve CLI output quite a bit, but it’s slowly getting there.
My summer break has ended so development is going to be a lot slower from now. I added mocha outdated so you can list outdated apps before upgrading them to a newer version. Besides that I tweaked a lot of stuff related to CLI output. For example I changed search to output one table, and simply outputting exact matches at the top of that table. I also changed a lot of messages which were using LogOutput to LogInfo so they use the correct color and output to stderr and not stdout .
Finally got a bit of time to do a bit of development. First thing I did was remove a field from install.json to match scoop . This means that mocha should be a drop in replacement for existing scoop installs. Then I added partial support for env_set and env_add_path . The main thing I need to do to complete the feature is parse variables and replace them with the appropriate paths. These 2 fields are some of the last manifest fields I need to support besides pre/post (un)install hooks.
Lot of time going into this devlog, but it makes sense since I did do a lot. I did this sweeping refactor of the entire commands module which moved around a lot of code. Essentially each command now gets it’s own directory under the commands module that represents it’s children/parents. For example commands/shim/remove/cmd.go contains code for the mocha shim remove command. Each cmd.go contains a Command struct that has the relevant fields and functions attached to it. This structure just makes things more organized and also means adding test files will be a bit easier since functionality is now isolated. I also sorted out the shim binary. So essentially https://github.com/ScoopInstaller/Shim offers different version of the shim binary which can be installed. Previously I hard coded the code to install cpp v0.1.0 but now users can run mocha shim binary releases to see the options and mocha shim binary setup to install their chosen binary. This also means we actually get the latest releases from GitHub.
Lots of small bug fixes and changes, I’ll just list them out: feat(cmd): allow removal of multiple shims in one execution (f2fae3f) fix(manifest): correctly ignore invalid shortcut entries (6a08478) fix(fileops): use correct registry type (5d5d796) fix(config): seed config with defaults (9dfaaff) fix(cmd): use correct release sources (a2a9ba1) fix(cmd): use bucket from install info (5a9109b) I also added support for more file types being shimmed, which helps a lot with compatibility. The file types are .py , .bat , .cmd , .jar and .ps1 .
I forgot to make a devlog in between so this will be like 2 bigger devlogs. I parallelized bucket updates, which speeds it up quite a bit. This also allowed me to try out parallelism even more, which I plan to apply throughout the CLI later on. I also added configuration options for the runners which mocha shim will use to run certain file types. For example, you can set the python-runner to select the python version that’ll be used to run python scripts that are shimmed. Downloads now have a progress bar, so you don’t need to wonder whether something is happening or not during a long download. Finally env_set is fully supported since I added the relevant variable parsing. This was pretty much just me cleaning out the TODO list before I ship. I also did a lot of smaller bug fixes and refactors as seen below. fix(commands): prevent app installation if already installed (cb27d07) fix(commands): fix config opening with “start” (74f3679) fix(commands): correctly handle non-apps when upgrading (f7419f6) fix: make LogOutput go to Stdout not Stderr (bc10357) fix: handle empty versions correctly (2287da9) fix(pkg): remove correct temp dir (33189b6) fix(shim): warn for unknown shim extension (622c2b4) fix: skip downloads with no hash by default (69d4e35) fix: use correct timeout for downloads (44e527b) fix: drop unnecessary return value from GetExecutableEntries (9fd845c) fix(config): remove unused option (1339971) fix(commands): don’t error for valid results (87c4d6c) refactor(config): rename variables/functions (f253d9d) fix: use unique temp directories (a159e23) refactor: use fmt.Fprintln directly (d2d54bf)
So I wrote a README, added a license (MIT of course) and setup CI/CD so that releases are automatically built and deployed. Honestly I forgot how hard it is to write a good README. You need to get a lot of information through without it looking like a wall of text.
Ships:
I made a package manager for Windows, which is somewhat backwards compatible with scoop packages. To be honest there’s still a lot of work that I want to do, but I have exams and college application coming up soon so I can’t. That’s not to say I’m not happy with the state of the ship. At the very least it has all the core features that a package manager should have, but there are still a lot of bugs which is why this is only v0.0.1. The biggest challenge by far was trying to figure out how Scoop does things internally. A lot of stuff just doesn’t have documentation, so you have to dig through the really messy PowerShell source code....
|
1793350641.8101447
|
1793437041.8101447
|
|
58854
|
pixeli by @Zephyr | Stardance
|
Zephyr
|
1
|
50.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-07T16:33:10Z", "hours": 50.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I added a GUI to pixeli! currently, it only supports grid merge, but it fully works and is up and running (runs on port 3000). Make beautiful image mosaics, now outside of your terminal! Make sure to check out the beta release for the latest version of everything, as this is a beta release and not available on the main branch :) it’s on the “pixeli-gui” branch. Hope yall enjoy this last project from me!", "repo": "https://github.com/pakdad-mousavi/pixeli/tree/pixeli-gui", "demo": "https://www.npmjs.com/package/pixeli/v/1.0.6-beta.3"}]...
|
[{"post_id": 77604, "ts": "202 [{"post_id": 77604, "ts": "2026-10-07T16:30:25Z", "hours": 5.0356, "text": "Final devlog… forever (turning 19 tomorrow, so this is the last devlog :D) I finally released the beta!!! We got the GUI running (only for grid merge so far) but it works! I added state management inside of local storage so changes dont keep disappearing, and I also added the export button functionality! Have fun!"}, {"post_id": 74358, "ts": "2026-09-27T07:21:57Z", "hours": 9.205, "text": "LADIES AND GENTLEMEN, GUESS WHAT TIME IT IS. (devlog time ) First of all, I added a summary and continue section in the sidebar on the right to provide a more “guided” user experience I guess you could say. :> Then, I also, changed the left sidebar to make things simpler; there will only be a single page for all merges now. :D And the rest? I’ve just been adding fields in the merge page for all the different settings the user can mess around with (there’s a LOT). Once I finish with that, I’ll be actually rendering the final product to the user so they can see what they get once they export!"}, {"post_id": 72996, "ts": "2026-09-24T05:54:31Z", "hours": 9.8092, "text": "DEVLOG! Okay SO. Image selection is now complete: users can choose which images they want to proceed with. I also added shift-clicking, so users can select multiple images more easily (see the video!). Next: Responsiveness ✨ I made the main sidebar responsive so far, so the layout of the page seems to be working fine, at least up until around the sm / md breakpoints. I’ll also have to handle making the secondary sidebar responsive in mobile screens. Finally: Light mode and dark mode! FINALLY, I added a button to toggle between the two, should be much easier to design either theme now :> Next step is to add a bar on the bottom of the screen which helps guide the user’s next step. Then we can start with the merge pages!"}, {"post_id": 71045, "ts": "2026-09-20T07:40:21Z", "hours": 9.9878, "text": "NEW DEVLOG! Alright ladies and gentlemen, I’ve made a layout for the images, where the user can choose either a compact layout or a normal (slot-like) layout. I’m using animejs for the smooth, snappy animations, in case anyone out there was curious :> Now, I need to allow the user to select which images they want, then, I’d also like to add some sort of utility bar on the top/bottom. Then, I’ll use those images to make the merge pages! wish me luck :>"}, {"post_id": 66402, "ts": "2026-09-12T06:48:35Z", "hours": 5.9064, "text": "OKAY. Some progress (and some setbacks :>) So I’ve worked on the uploaded design, as well as the backend that was meant to write the file to the /tmp directory. The problem I needed to solve was to figure out a way to store the files on the backend that didn’t involve writing duplicates to the user’s disk. This is a very difficult task, because I can’t get file paths from the input field in the frontend, only the filename and file content (and some other unrelated details). Solution? Implement a different system that DOESN’T involve file uploads :D If I just use the directory im in when the user runs the command to start the loopback GUI, I can define a “project scope” in a sense, where I only try to use images in that directory. This way, it’s up to the user to choose which folder they want to use as their project. :> So now I need to refactor BOTH my design and backend to support this HA. Awesome"}, {"post_id": 64620, "ts": "2026-09-09T04:51:06Z", "hours": 9.5767, "text": "Initial Devlog! Okay so: I’m back. :> I’ve started working on a project I’ve been meaning to do for a while, called “Pixeli”, a CLI for merging images together! I actually already made this project before, and now I’m adding a GUI to it. Currently, I’m working on the file upload and rendering mechanisms. :D Will also be doing dark mode :0"}]...
|
Title: pixeli by @Zephyr | Stardance
Devlogs:
Ini Title: pixeli by @Zephyr | Stardance
Devlogs:
Initial Devlog! Okay so: I’m back. :> I’ve started working on a project I’ve been meaning to do for a while, called “Pixeli”, a CLI for merging images together! I actually already made this project before, and now I’m adding a GUI to it. Currently, I’m working on the file upload and rendering mechanisms. :D Will also be doing dark mode :0
OKAY. Some progress (and some setbacks :>) So I’ve worked on the uploaded design, as well as the backend that was meant to write the file to the /tmp directory. The problem I needed to solve was to figure out a way to store the files on the backend that didn’t involve writing duplicates to the user’s disk. This is a very difficult task, because I can’t get file paths from the input field in the frontend, only the filename and file content (and some other unrelated details). Solution? Implement a different system that DOESN’T involve file uploads :D If I just use the directory im in when the user runs the command to start the loopback GUI, I can define a “project scope” in a sense, where I only try to use images in that directory. This way, it’s up to the user to choose which folder they want to use as their project. :> So now I need to refactor BOTH my design and backend to support this HA. Awesome
NEW DEVLOG! Alright ladies and gentlemen, I’ve made a layout for the images, where the user can choose either a compact layout or a normal (slot-like) layout. I’m using animejs for the smooth, snappy animations, in case anyone out there was curious :> Now, I need to allow the user to select which images they want, then, I’d also like to add some sort of utility bar on the top/bottom. Then, I’ll use those images to make the merge pages! wish me luck :>
DEVLOG! Okay SO. Image selection is now complete: users can choose which images they want to proceed with. I also added shift-clicking, so users can select multiple images more easily (see the video!). Next: Responsiveness ✨ I made the main sidebar responsive so far, so the layout of the page seems to be working fine, at least up until around the sm / md breakpoints. I’ll also have to handle making the secondary sidebar responsive in mobile screens. Finally: Light mode and dark mode! FINALLY, I added a button to toggle between the two, should be much easier to design either theme now :> Next step is to add a bar on the bottom of the screen which helps guide the user’s next step. Then we can start with the merge pages!
LADIES AND GENTLEMEN, GUESS WHAT TIME IT IS. (devlog time ) First of all, I added a summary and continue section in the sidebar on the right to provide a more “guided” user experience I guess you could say. :> Then, I also, changed the left sidebar to make things simpler; there will only be a single page for all merges now. :D And the rest? I’ve just been adding fields in the merge page for all the different settings the user can mess around with (there’s a LOT). Once I finish with that, I’ll be actually rendering the final product to the user so they can see what they get once they export!
Final devlog… forever (turning 19 tomorrow, so this is the last devlog :D) I finally released the beta!!! We got the GUI running (only for grid merge so far) but it works! I added state management inside of local storage so changes dont keep disappearing, and I also added the export button functionality! Have fun!
Ships:
I added a GUI to pixeli! currently, it only supports grid merge, but it fully works and is up and running (runs on port 3000). Make beautiful image mosaics, now outside of your terminal! Make sure to check out the beta release for the latest version of everything, as this is a beta release and not available on the main branch :) it’s on the “pixeli-gui” branch. Hope yall enjoy this last project from me!...
|
1793350643.1895719
|
1793437043.1895719
|
|
40695
|
Agamemnon Armor From The Odyssey by @nejenabinupa Agamemnon Armor From The Odyssey by @nejenabinupa | Stardance...
|
nejenabinupa
|
1
|
46.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-05T22:14:49Z", "hours": 46.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "my Agamemnon Armor From The Odyssey that i make in 3d, all of the details are in the readme", "repo": "https://github.com/binupax6699/AGEMENMNON-ARMOR-3D-MODLE", "demo": "https://sketchfab.com/3d-models/agemenmnon-armor-3d-modle-ddb5b8fa0023412498e85a3ae109d622"}]...
|
[{"post_id": 75331, "ts": "202 [{"post_id": 75331, "ts": "2026-09-29T19:24:31Z", "hours": 3.1283, "text": "Finsh up the stuff and it’s good to go"}, {"post_id": 43114, "ts": "2026-08-08T06:24:45Z", "hours": 1.4717, "text": "Remake the textures with depth and more realistic colors,next will be baking the textures"}, {"post_id": 41351, "ts": "2026-08-05T14:41:59Z", "hours": 4.1028, "text": "I added a Sword to the armor set and make sum tweaks to the rig and now it’s good for animation"}, {"post_id": 38695, "ts": "2026-08-01T06:46:28Z", "hours": 10.6783, "text": "It took around 15h my addon got deactivated for no reason and that 5h got lost 😞, but i completed the armor and the rigging part fully need to add sum normal maps to give it sum small details for everything."}, {"post_id": 37106, "ts": "2026-07-29T16:12:54Z", "hours": 10.58, "text": "After long long time make thing much progress on making the body, now just need to clone up sum polygons Make the face from sculpting because of that there’s around 400k + faces and vertices but make the body light and have only 8.5 K faces and vertices"}, {"post_id": 36401, "ts": "2026-07-28T14:18:30Z", "hours": 9.4525, "text": "Agamemnon Helmet Cleaned up the helmet topology and cheek guards, Added the vertebrae spine, I optimization hair without a particle hair but with a custom alpha png images to make it fast And I Applied the final satin black metal, gold filigree trim. Now moving to the body and armor"}, {"post_id": 35922, "ts": "2026-07-27T17:52:20Z", "hours": 6.6144, "text": "Agamemnon Helmet Complete Base Mesh modeling for the Agamemnon helmet. "}]...
|
Title: Agamemnon Armor From The Odyssey by @nejena Title: Agamemnon Armor From The Odyssey by @nejenabinupa | Stardance
Devlogs:
Agamemnon Helmet Complete Base Mesh modeling for the Agamemnon helmet.
Agamemnon Helmet Cleaned up the helmet topology and cheek guards, Added the vertebrae spine, I optimization hair without a particle hair but with a custom alpha png images to make it fast And I Applied the final satin black metal, gold filigree trim. Now moving to the body and armor
After long long time make thing much progress on making the body, now just need to clone up sum polygons Make the face from sculpting because of that there’s around 400k + faces and vertices but make the body light and have only 8.5 K faces and vertices
It took around 15h my addon got deactivated for no reason and that 5h got lost 😞, but i completed the armor and the rigging part fully need to add sum normal maps to give it sum small details for everything.
I added a Sword to the armor set and make sum tweaks to the rig and now it’s good for animation
Remake the textures with depth and more realistic colors,next will be baking the textures
Finsh up the stuff and it’s good to go
Ships:
my Agamemnon Armor From The Odyssey that i make in 3d, all of the details are in the readme...
|
1793350644.4892883
|
1793437044.4892883
|
|
21103
|
Ritualia by @gabriel_ferreira | Stardance
|
gabriel_ferreira
|
1
|
148.7
|
2310
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-23T23:45:29Z", "hours": 148.0, "multiplier": 18.45, "payout": 2310, "blessing": "neutral", "text": "What did i made I made an complete music play system that will help users to learn while listening to musics! I used youtube, flask, python, mysql, js and hope to make this! What else Solved a lot of painful bugs that were stopping the project from working Finished and made the music queue work Added music description labels Improved a lot the performance Made the website responsive Added a keyboard based navigation Fixed so much errors at the cover-flow that now i forgot how many Added bug checks before the play of each video on the player Created an toast component to show errors or infos Added 54 musics to choose and listen Challenges The most painful code was the player and the cover-flow, they were with a lot of hidden bugs that i had to figure out, feats that i had to make and pain to suffer! Now i figured out that i love and HATE making a website responsive! What im proud of MutationObserver: An observer that loads / hides an image based on its position at the cover-flow, this system took a while and worked very well. Error checks at player: The system can handle the error that happen and dont crash! Keyboard navigation: Everyone can use the keyboard to navigate now! Oracle VM: For the first time i used an ssh and hosted an website in my own machine (oracle, not mine)! How to test Access http://ritualia.duckdns.org/ , when you join and the page loads you will find a screen to choose an genre, select which one you want, after you will see an emotion selector, select the emotion that you wanna feel! You will see the player screen and an audio explaining the music (The audio is in portuguese), after the audio the music will play. Notice: The github and the website are in portuguese, please use your browser built-in translator or any that you want to use the software properly! Follow the installation guides at github if you want to install", "repo": "https://github.com/GF-Silva/Ritualia", "demo": "https://ritualia.hackclub.app"}]...
|
[{"post_id": 73067, "ts": "202 [{"post_id": 73067, "ts": "2026-09-24T09:47:16Z", "hours": 0.6983, "text": "Added english readme I created an english readme, api and install Guide, so it will be easier to read and more accessible for worl-wide users"}, {"post_id": 72881, "ts": "2026-09-23T22:36:56Z", "hours": 0.3906, "text": "It is time to ship! Now the system is working perfectly fine running at a vm in oracle cloud with a public domain, and a dns with duckdns at http://ritualia.duckdns.org/ Warning: It is just HTTP!"}, {"post_id": 72810, "ts": "2026-09-23T19:36:13Z", "hours": 1.3461, "text": "Configuring an ssh server! I configured an oracle cloud vm with ubuntu to host my website 24/7, that was because nest wasnt working in a while. Im running it at a local IP with http only, i will configure https today and maybe an domain, the IP is http://164.152.55.252 , notice that some browsers may block you from accessing and http website. UPDATE AFTER THE DEVLOG: I put an domain using duck dns: http://ritualia.duckdns.org Hardwork I had absolutely not a single knowledge about oracle cloud vm, so configuring it was an hell. Sometime my internet stopped working so i had to use my smartphone, this lead me to configuring an invalid ssh key and i had do configure everything from scratch, i spent 5 hours configuring everything, but that was ssh and wasnt tracked. But now everything is working fine. Thx oracle This vm is a 24/7 entire OS (Virtual Machine) that has some good free plans, without any cold start. Thx stardance Stardance now will have one more mount!!!!!! I still has roughly 40 hours of deep development to do after this ship, i will love to finish that in stardance!"}, {"post_id": 70936, "ts": "2026-09-20T02:22:48Z", "hours": 2.9706, "text": "Added install guides Now there is guides to help the user install for ubuntu, arch and windows. Notice that im a linux user and my pc is weak, so i could not test it on another operational system. Also the guide is in portuguese (all of them), please use your browser built-in translator or any of them to read if u dont understands portuguese I could test it on another linux distro, but i would have to go through all the install steps. Also i cannot try installing windows because it normally wipe out another OS installed on the same disc (i know that it just replaces the bootloader) and using a VM was not possible due to the amount of RAM and the processor that i have."}, {"post_id": 69913, "ts": "2026-09-18T01:53:38Z", "hours": 0.3256, "text": "All done, it is time to ship Every metric at lighthouse it nearly perfect, im so exited to ship it!"}, {"post_id": 69904, "ts": "2026-09-18T01:19:42Z", "hours": 4.9561, "text": "The accessibility workings is done Features Now the system has a new navigation system that allow users to navigate with just the keyboard! (The video was with just the keyboard) Why Why not? It was meant to improve the accessibility for users without mouse, or any another problem and because i was tired of having to use the mouse to debug something. How it was made Again with a lot of pain, the feature itself was easy but i had to fix some errors that went unnoticed, so it took more time. The feature detects when the user press a key and do an action based on wich key was. The accessibility was easy to get 100, but the metrics at lighthouse dont give all what the users will need, i had to think about the website usage and how would be the easiest way for the user. Results The accessibility went from nearly 69 to 100! What next Now i will work on the best practices! Update after the devlog: Nearly every metric is already maxed out lol, i will ship it very soon!"}, {"post_id": 69444, "ts": "2026-09-17T02:13:13Z", "hours": 1.6906, "text": "The performance workings is finished and bug fix Fixes Now the logo z-index is lower, that is because the logo was ‘eating’ the click in more important elements. Also i did a small change at the cover-flow, that change fix the bug of the scroll at the element sudently stoping when at a certain position. The copa script had some old references to images that were leading to bugs, i changed it. Performance I already finished it in the past devlog, i was just checking if there was anything worth improving, but everything is working fine and now is time to improve acessibility. Most of the logged time was me trying to improve more some metrics at the lighthouse, but the work was too much for anything that is already good, so i decided to stop before i started focusing too much in it."}, {"post_id": 69395, "ts": "2026-09-16T23:43:00Z", "hours": 1.505, "text": "Fixing an error at the youtubeHelper Now the youtubeHelpers checks if the youtube API is ready before sending commands. Why Sometimes the API maybe is not finished yet, that was leaving an untreated error that was braking the entire website. How was made With a lot of pain and suffer. I thought “Oh hey, that will be a 15 minutes fix” - i spent 1 HOUR FIGHTING with the iframe itself, nothing was working and at some point i started thinking that even the API of YOUTUBE wasnt working, even the most basic function that should be triggered when the youtube finished the loading wasnt beeing activated, even the console.log(“Api READY!”) wasnt working, even when it worked it wasnt working well, the variable of the player was a promise and not the result. At the end i shut down my PC, defeated, without any energy left, with just hope that in the next day (this) that would be fixed (if not i was planning to ignore and make it a feature “Easter egg, if u dont join the website for a while it will not load!”. The problem here was just the position were the iframe api was in the HTML, it was being loaded before the helper script, so the helper was not there to check if it the iframe was ready or not, the fix was just move it a little down. Architecture It was just an promise, if the function checks that the iframe isnt available it await for it to be available. The check if it was available use the onYoutubeIframeAPIReady, easy easy (except for all the suffer that i went into)."}, {"post_id": 68896, "ts": "2026-09-15T23:59:43Z", "hours": 1.1389, "text": "The loading is done and working! Fix I fixed the error that were happening when the cover had a certain amount of elements. Problems The fix itself was very easy to do, but doing it in a readable or without using 10 lines of code (i want things concise) was way harder than i expected. So i spent this entire time trying different ways to do it, each of them making everything worse. Reasoning The bug were with less than 14 elements, the script were calculating the first and last element index, it happened that these elements were behind the screen focus. Why? Because the values that the system was using were leaving these values, so i had to fix the way it was calculating things."}, {"post_id": 68865, "ts": "2026-09-15T22:15:27Z", "hours": 1.3303, "text": "The loading is done Features Now the loading at the mutationObserver is finished, it finally loads or unloads the images that should be (or not) loaded! The new observer is way faster, because it can detect the image way before it enters the screen, loading it before and having more time to do it. Also the system loads just a maximum of images (with the configs that i put it is 13), so it will not fry an cellphone. Problems The loading part was easy to do, i already done it before in the past observer (intersectionObserver), so i just had to pass the old code to the new part. But when the cover-flow element dont got atleast 13 elements the mutationObserver code breaks completely! Im still pondering how to solve it, when i do i will post about! Results The performance went from 78 to 100! The system is way faster! The user does not see a blank image anymore! Why The old method was slow even with a good internet connection, because it was loading the images just when the element was already in the screen, leaving to a perceptive delay for the user and a blank image to the user. Also i thought about creating an observer from scratch (maybe i was a little off my ideas, because that was insane), but the browser already had exactly what i wanted (the mutationObserver) Videos The new features The performance of the new feats The old features Reasoning While i was trying to sleep i thought about a system that fill the cover-flow with a maximum of images (like 10, or 13, or the code decides) at the DOM, using less memory to run. That system will free a lot of memory based on how many cards the cover-flow have. But that will have noticeable effects just with a lot of elements and probably would be hard to develop, maybe i will do in next updates. What next Im leading to the shipping, so i will improve metrics about the lighthouse, improve the readme and post it."}, {"post_id": 68449, "ts": "2026-09-15T04:25:35Z", "hours": 7.2278, "text": "Adding a mutationObserver Now, instead of an intersectionObserver, the system use a mutationObserver that monitors the angle of the cylinder itself. With that the loading of the images will be insanely better, faster and user-friendly. Now the changes in the cover-flow is observed at the cylinder angle, not at each card. There was some problems in the journey like, for some reason, unexpected cards being loaded or not, the loading script at the observer dont triggering at all (that was caused by the speed of the observer) and an insane amount of cards being triggered at the same time (i still did not figured out why, but that isnt ‘harmful’). But man, i had to be creative here and remember about some concepts like concurrent programming, buffer / queue and apply some delays (because the mutationObserver is insanely fast and can trigger every millisecond). That all was meant to decrease the speed of the mutationObserver, because it was triggering with the most small change in the cylinder, so i made it trigger just when an expected amount of movement was made. The red/yellow collor is for me to visualize the loading state, it is just for debug The code isnt finished, i still need to implement the loading part, for now i just implemented the observer and basics of the loading part"}, {"post_id": 67841, "ts": "2026-09-14T03:19:48Z", "hours": 4.2825, "text": "The observer is finished (nearly) Now the cover-flow has an observer that checks the position of the images and changes it styles based on that, so the images that the user is seeing is loaded while the others is hide. It still has some bugs and space for improvements that im still figuring out how to solve, like the image loading too late on the screen or, in slow internet connections, the image takes too long to load. Most of these bugs are because the observer (an intersectionObserver ) was designed for 2d contexts, not 3d (that were and still is an giant problem to solve). For this reason i was thinking about creating an observer from scratch in C++ that can work better in my 3d element, but the overhead would be high so im trying to solve in other ways before that. The feature was made using fetchPriority, contentVisibility and src (the system add the source just when the image is near the screen). OBS: I found about MutationObserver after this post, maybe i will use that instead of insersectionObserver. Oh man, at least if had found about this before… Aaaaaahhhhh i spent 9 hours in that, but at least a Lot of the new logic will be used. Anyway, lets cook"}, {"post_id": 67151, "ts": "2026-09-13T06:53:12Z", "hours": 5.4219, "text": "Adding an observer Now the script observe the card elements at the cover-flow component, classify their position and changes it visibility based on that. Im using an IntersectionObserver to observe every card, but it was designed to observe the position of 2d elements, so i had to figure out how to make it work well in an 3d element. The way it works is when the observe activates (it basically means that some card is in the range to load) it get the card info (like position and angle) and changes it visibility state based on that. Simple, right? No, it was a headache for the start to the top, nearly 4 hours of what i did was to fix the fact that it was meant for 2d. The observer were activating for cards that were in the back of the element, so i had to classify the card position into back or front by using its angle. But if i tried to use the card angle without anything else the script would broke (and did for 3 hours until i realized how to fix), so i had to use an second angle which is 360 - cardAngle (the 360 is the angle of an circle), so this new angle is based on the circle end while the other is based on the circle start. But the system still broke, because at some point one of these values would become negative and makes the if that classify the elements fail. The fix was using the absolute value in the if (it took 1 hour until i figured that; oh i were so happy when it worked). Why To improve the performance, so the browser will just load what is really important and not 50 images that the user cant even see. What else All that work definitely improved a lot my logic thinking and for the first time i used the truth table well. Now i just need to use the new code to change more the style of the images that are not in the screen. I did not deleted the code that i wrote in the past devlog, it was used in the new code to select how many images should be loaded in the same time. ** The first video is the result, the others is some problems that i had **"}, {"post_id": 66316, "ts": "2026-09-12T02:31:12Z", "hours": 4.5481, "text": "Improving the loading performance Now the system selects some images that needs to be shown faster than the others and making them load with priority. It was made by selecting the images that the user is seeing and defining some params like fetchPriority = \"high\" and decoding=\"sync\" , the other images have the params: decoding=\"async\"; loading=\"lazy\"; contentVisibility=\"auto\"; . With that config the LCP went from 2.4s to 0.5s . Also it loads the image in the start and dont change that config again, so the browser will be lazy while downloading these images. The problem is: only the first images are chosen as high priority, but their positions will be changed while the configs stays the same, that makes the browser lazy while loading them and makes the runtime performance became worse. To fix that i found about IntersectionObserver, that are meant to solve the problem of updating the images position fast. It was not applied yet, i found about it like 1 hour ago. What else Now the perspective of the emotionDrum is based on the elements that it have, before it was based just in the screen and would broke if something changes. I did a little change in the way that the script checks for clicks in the screen, now it has more accuracy (I changed the round system)."}, {"post_id": 64533, "ts": "2026-09-09T00:41:52Z", "hours": 7.6869, "text": "Improving the LCP (Largest content paint) performance I am improving the way that the website create and downloads the images, the main reason is to make the user see something faster. Before the system were doing 2 main things: Go trough the entire list of images, creating the elements and placing them into the page. Position them. But the position of the items were being done after the creation of the images, in another function. Now they are in the same function: it create the element, position it and add it to the page. That does not seem like much, but the code got way faster with that, probably because it dont need to go item by item in an list twice just to create an element. I tested the time to load the first element and it went from 8.63s to 6.43s , the test was made with 2200 elements (Yeah ik, it is a lot and normally it isnt that much, but i had to see how they were holding with more than 22 items). Also i fixed a bug that passed unnoticed while improving the responsiveness: At some point of images the visibility of the elements broke, that was because the perspective (what makes the 3D perspective of the component, and makes it visible with 3D effects) was based on the screen size, not the elements itself. What was the problem in that: Each element takes a size in the screen ‘makes the circle that shows the element be more and more near of our point of view’ (i cant explain it any better, search what is ‘perspective in an 3d element at HTML’ ). While it was approaching our point of view (POV), our POV were exactly at the same position (based on the screen size), so at some point the circle perspective would pass the POV and we would be unable of seeing it well. Now it is based on the elements: The 3d elements were basically a circle, i just used the diameter to change the perspective based on it. TODO: Maybe i lowered the image quality too much… I will fix it in the next updates. Also i were trying to improve the font settings to improve the performance, but that wast working so i decided to move on to this because it was more critical (took a while for me to jump to this, maybe like 2 hours trying and trying values in the font settings). i am also working in a way to load the images in parallel, with that it will take way less time (I didnt known about LCP before so i spent a while figuring out the way it works)."}, {"post_id": 63656, "ts": "2026-09-07T16:11:33Z", "hours": 2.6633, "text": "Improving the performance After finishing the improvements in the responsiveness, now i decided to improve the performance. I used lighthouse to get insights (i learned about it in an tiktok video) and figured out that the images size were too high (were an png of 1280x1280px), so i saw more about that in the page: https://developer.chrome.com/docs/performance/insights/image-delivery (an link that google lighthouse gave). With that i saw how to decrease the size while staying with quality, i reached up to the sharp-cli tool, that makes the work of resize, convert and compress the image for me. The command used was that: npx sharp-cli -i * .png -o ./output resize 320 -f avif -q 50 --effort 6 --smartDeblock --preset photo The 320 is the size that i want it to be at the end, i got that value by seeing what was the computed value (the value that is being used in the website) in an high resolution pc (not the most higher one, the high but normal pc) with the resolution of 2500x1714px . With this simple changing the image went from 2mb to 40Kb! Nearly 100% decrease, and take in mind that there is more than one img, so the change were even higher. Also i created 5 different images: 320px, 480px, 640px, 960px e 1280px. With them the browser can choose which one is better for each device. With these changes i went from 35 points of performance to 59."}, {"post_id": 63459, "ts": "2026-09-07T10:10:31Z", "hours": 0.8717, "text": "The home is now fully responsive Ah that took a while, but finally it is fully responsive. Now the description at the player UI resizes based on the screen size and active a scroll behaviour when need, also i did some minor change at the emotionDrum perspective to make it show more emotions at the same time, removed the padding in the arrows at the emotionDrum so they will have more space and fixed an error in the genre drum that was making it perspective broke. After all these devlogs i improved how i make a code responsive."}, {"post_id": 63436, "ts": "2026-09-07T08:55:04Z", "hours": 2.5378, "text": "The emotionDrum is now responsive! Now the buttons that you use to select the emotion are in the same side as the div that displays the emotion, so they dont fight for space anymore. This change is meant to fix the low size of the items in screens that are too small, in the new way we have more free space to display the emotions, there is not much to say. What else I did some minor changes in the size of some items at the player area, now they are easier to read! (I increased the size of some items)"}, {"post_id": 63379, "ts": "2026-09-07T05:17:01Z", "hours": 6.6125, "text": "Im nearly finishing the workings on the responsiveness. Now the entire player screen is responsive and do not breaks the texts anymore (except for the description area), also the buttons that show you the next screen (the ones that displays ‘player’ and ‘generos’) are responsive too, the music queue is working perfectly fine, and the area that is used to select an emotion is nearly responsive too, it just needs some adjusts in the two buttons that change the current emotion because they become too small and uses a lot of space when the screen is too small, after that this screen will be finished. It is taking a really long time, the fact of how many different screen sizes exists makes it harder to finish, but now there is times that i even cannot see if i changed the resolution in some areas, because the system looks the same. I spent quite a while testing different resolutions and combinations of size, i didnt even noticed that i where 6 hours here, but now ik more about css (things like container-type + container based sizes and more ways to set the size of an text) The video shows how it is now, if u want to see the before just checks the past devlog."}, {"post_id": 62723, "ts": "2026-09-06T06:59:19Z", "hours": 0.7094, "text": "Finished the correction of the errors at the perspective and click in the cover-flow component. Now the perspective stays the same 150vw value (that is based on the screen width) and stays normal, with everything working. Oh man, that needed a lot of logic and out of box thinking finding another ways to check where the user clicked without using an normal click event listener (for those who lost the past devlog or didnt understood, i cannot use a normal eventListener in that because the clicks is detected in another element or in nothing, even with z-index or more in css, so the solution should be done entirely on javascript logic). The first video is the new way, the second is how it was before all changes in it"}, {"post_id": 62679, "ts": "2026-09-06T05:10:34Z", "hours": 5.5194, "text": "i finished the workings on the section of the home page that i where doing before, now has a good responsiveness for pc and a decent one for mobile. Now im working on the main area of the home page, the one where the user selects the desired genre for the music (second img). It may looks completely fine, but that same element already was a headache before and is here again. The given area is the cover-flow component, before i already fixed it (or so i thought), but it was looking bad (the 3d perspective where a bit strange) and would probably broken if i added new genres. I were trying to figure out a way to listen to the clicks in the card without any problems, that seems easy at first glance, but the 3d perspective in the element make other elements eat the click from one another, make the clicks dont be listened and so many problems that i nearly decided to erase it and write from scratch. I already found a way to do it by using the mouse position, the center of the screen and the card width (the genre img) to transform it in an value that can be used to select the exact card without any dependencies on the doom selector. It basically uses just some values, put in some calcs and get the difference between the current card (genre) index and the clicked. Im nearly finishing it, but i still need to figure out some values and more."}, {"post_id": 61879, "ts": "2026-09-05T01:17:53Z", "hours": 1.1772, "text": "Im improving the responsiveness at the home page (before was the player page), but for some reason that idk the emotion selection div is having a strange behavior, i will update what it is after i fix it. Take a look: (the item in the center should be centered)"}, {"post_id": 61218, "ts": "2026-09-04T01:30:11Z", "hours": 0.725, "text": "Hi again! Like said in the past devlog, im improving the responsiveness of the website, specifically in the player part. But it had some problems and where distorting when playing an video, now it resizes based on the screen size in a way that it stays ¨normal¨. The first video is the new way, the second is the old way. It still needs a lot of improvements, but it is going!"}, {"post_id": 60619, "ts": "2026-09-03T02:22:12Z", "hours": 1.4631, "text": "Making the website responsive Hi again! Like i said in some devlog, the website dont have support for mobile, that was because it was designed to be at kiosk mode and work just in desktops. but i decided to change that. First of all: the site where using a lot of absolute values of dimensions, so it where braking even in the desktops (it wasnt responsive at all). But i spent a while changing it, it is isnt ready and has some problems, but is better than before. (The mobile is still strange, i did not started fixing it yet). Credits: https://css-tricks.com/snippets/css/fluid-typography/ - This website shows about a way to make the texts become responsive for the screen using some calcs, it is worth seeing. The first video is how it was before, the second is how it is now"}, {"post_id": 60559, "ts": "2026-09-02T23:48:07Z", "hours": 0.7944, "text": "Creating a new helper Context: There was an class called youtubeFrameControls , this class basically where designed as an structure to help using the youtube iframe API, but with the time this class where becoming basically to hold just an function (and in a very inefficient way), because the methods that it had before (like the one that runs when the iframe is loaded) had to have more and more specific logic in the codes that used it, so they where useless (because the codes that where using it where rewriting it). What i did: I picked the only function that where being used and transformed it in an helpers (that can easily be customized). This function was the one that creates the player of the musics, and the function where called createPlayer . Also i removed the old class (youtubeFrameControls) and replaced it for this helper in every place that used it. It now is way more simple than before and can me more customized."}, {"post_id": 60001, "ts": "2026-09-02T02:58:53Z", "hours": 2.1603, "text": "Refactoring the copa script I where placing some scripts in a class. These scripts are related with the player functions of the copa script, so i pick all of them and placed in the same class. I did it to follow best practices, but i confess that i still got some doubts about when to create an class and when the variable or method should be static or private (#property), i will search and learn more about because maybe i will have to refactor some parts of the code following these rules of best practices. That was all for now, see ya!"}, {"post_id": 59339, "ts": "2026-09-01T02:28:57Z", "hours": 2.4744, "text": "Adding more bug checks I added some checks in the player class at the startExplication function that checks if the src (the url for the audio) is valid or not by doing an fetch with the HEAD method and checking if the return is an valid audio before trying anything in this function. Also i solved this error in the same function: Uncaught (in promise) AbortError: The play() request was interrupted because the media was removed from the document. https://goo.gl/LdLk22 This error was because the startExplication function where trying to play the audio before it was loaded, i solved it by making it play the audio just after it was load with the event listener canplaythrough . There was another error at the playMusic function where the code where trying to play the youtube video before it was loaded, i solved it by making it wait until it was CUED (Where the video isnt playing, but is loaded and showed). (The website was not created to be in mobile and dont has a lot of support, the video where recorded in my smartphone because i had to record the audio and the audio on my pc dont work. In the Future i Will add mobile suport, but right now im finishing the bugs and etc)"}, {"post_id": 58653, "ts": "2026-08-31T04:27:35Z", "hours": 2.7947, "text": "Adding a new description feature So basically there was an place where was designed to have the description about an music, but that was empty and where only finished today What it do It is petty simple, it just show an text about the music that is currently playing, also there is an audio that plays before the music starts playing, but this audios is played just one time before the music so if someone loses it or didnt listen well there was not a second chance to listen for that audio. Now there is this place that holds the same content, but in the format of an text that can be read whenever they want while the music is being played, that was what i added. Also that text can be hidden, so it will not stay using half of the screen every time (in the screenshot it is active) What this audios do This audio / text is part of the main purpose of the website, they give some fun facts about the music that may be useful someday in some kind of quiz or essay. Also the audio is played before the music and the music plays just after the audio finishes. That is to make whoever is listening listen to the entire audio before having what he (or she) wants, so they will not listen to the music and skip the audio."}, {"post_id": 58526, "ts": "2026-08-30T23:20:27Z", "hours": 1.3911, "text": "Studing about cache So basically i where studing about cache, the main ideia was to implement it in the sistem, but then i realized something: Theres is nearly no difference between cache and a normal request in an localhost project, adding the cache would not improve anything, sometimes it maybe even slow the website, because the page would need load more code. I realized it afther a while studing about it, but anyway lets focus on another thing. Also i where studing with google for devs: https://developer.chrome.com/docs/workbox/caching-strategies-overview"}, {"post_id": 56374, "ts": "2026-08-28T03:45:15Z", "hours": 1.0169, "text": "Toast applied and tested The toast notification component is now being used at the player class, i did some tests and it is working very nice, hopefully the user will not see it very often (because that would be a problem, the user must not see it unless there is an error playing the music). But why did i make it? It is used to show more about what is going on for the user, so they will not become anxious if it something is working or not. Why not use another notification system? Each notification system has its own use cases, the others would be very painful for the user. Imagine every time a simple error (that is simple for me) like the music fail to play there was an error that interrupt the use of the app with an popup or alert, that would be painful, dont it? That is why i used an toast notification, because it is temporary (disappears after some seconds) and dont stop the use of the website. Also there is a feature that i implemented for the same reason a few devlogs ago that add a fallback in the music search, so it wont show a message at every single combination. Lets calculate how many combinations we have: there is around 50 musics in the database, 22 genres and around 40 emotions, multiplying the genres and the music 880 combinations that the user can make. Now lets see how many musics we can get: each music have around 1.2 emotions and 1.2 genres, so we get 72 combinations that lead to an music . With that in mind, we can see that from 880 combinations, just 72 of them are useful combinations, so we get a 8.18% for getting a music, and 91,12% of not getting one. Consider that each failed attempt shows an error that stop the use flow of the website, but that was before the past devlog, now it tries again and again and only afther failing everything it shows an error, at that point it must really show an error. Thats all, sorry for the long boring text and thanks everyone that read, see yall later"}, {"post_id": 56331, "ts": "2026-08-28T01:58:42Z", "hours": 3.1336, "text": "The toast notification is finished So i finished it, it is a component that u adds in the code that u wants to use. I added 2 icons, 1 for infos and another for warnings. What i used and did The element that holds it all is an dialog , the icons are svg , the text is a span and the element that shows the time left is an progress . To update the time left i used an setInterval that runs at a 10ms delay and deduce 0.01 of the dialog value, so it will be smooth to see. Also there is an if inside that destroy the element and clear the interval when the value of the dialog reaches zero or less (In the past devlog i said about not using an if, but considering how low the cost for an if in that time is i decided to use it anyway). The function that creates the toast receives some params that will let it be customized by whoever is calling it: const icons = Object . freeze ({ INFO : infoIcon (), WARNING : warningIcon () }); function createToast ({ message , time = 5 , styles , icon = icons . INFO }) // the `message` is the displayed message // the `time` is the time until close // the `styles` is custom css styles for the element, it uses the dictionary format {} // the `icon` is the svg icon What else? I will apply it in some elements and post about. See you later!"}, {"post_id": 56188, "ts": "2026-08-27T20:27:52Z", "hours": 1.5956, "text": "Creating a toast notification system So rn im creating what i said in the past devlog about a toast navigation. This isnt finished yet, im still figuring out an way to check the end of the timer, i found some ways to do it, like using an simple if inside the countdown. I didnt comment but i am using an setInterval to decrease the time and an <progress> tag to show the value but that is a bad ideia, imagine doing 1 if every 50 ms? that dont cost a lot of processing power, but i still will search for other ways to do it just to check, if yall got any hints or ideas leave a comment. Also i will improve the design, the design is petty poor."}, {"post_id": 55334, "ts": "2026-08-27T02:23:29Z", "hours": 4.2383, "text": "Fixing errors and adding bug checks Hi everyone, so i were fixing some bugs that i saw that may broke the app, i fixed all of them (for now), here they are: There was a logic bug that a class (the one that controls the youtube iframe) where doing stuff that it wasnt supposed to do (not an unexpected behavior, but a logic that should be outside of it), it was an easy fix. There was a bug at the player class that when the provided sourceId (for the youtube iframe) where wrong or unable to use it crash and stopped doing anything else (like playing another musics). I tryied solving it in various ways, one was beffore the changes that i did in my last devlog, but i failed because the class that holds the player where hard to fix, this devlog fix it. I fixed it by adding some bug checks and, when some error ocurred, it play the next music. There was also a bug at the player class and youtube-iframe-controls class, that for a couple seconds in the start of the website it would broke if u tried to play a music. It was because in the start of the program the youtube API where unable to be used. To fix it i just made it wait until the API where ready using an ASYNC function. There was also a bug that, afther the past devlog, it was doing and request at the /api/songs with params at the wrong format. Afther the past devlog the API started using the params genre_id and emotion_id , but the frontend where passing with the incorrect name (genre, emotion). Something that i implemented I upgraded the mysql query that where being used to get more infos about the music, before it where just returning infos like name, author, sourceId, etc, but now it also returns the genre and emotion from that given music. I added a bug check at the player class, now if it fails it pass to the next music. Something that i want implement I want to implement a simple toast notification system that will apear when something fails, like the playing of some music. Others The youtube docs for the iframe where very helpful for this changes, check it out: https://developers.google.com/youtube/iframe_api_reference?hl=pt-br"}, {"post_id": 54690, "ts": "2026-08-25T19:06:05Z", "hours": 3.2633, "text": "Optimizating some piece of code So there was a certain part of the code responsible for the songs queue in the main route, that piece is a core function but where running a while true loop for no reason , here is the part: async start () { while ( true ) { // { emotion, genre, author, name, sourceId } const musicData = await this . #musicQueue . get (); this . createPlayer ( musicData [ ' sourceId ' ], null ); this . #showMusicInfos ( musicData [ ' name ' ], musicData [ ' author ' ]); this . #queueList . removeChild ( this . #queueList . children [ 0 ]); await this . #startExplication ( `/storage/ ${ musicData [ ' explicationSource ' ]} ` ); this . player . playVideo (); await this . #musicFinished . when ( true ); this . #musicFinished . set ( false ); } } Basically the code were calling it at the start and running it forever, but that code where a nightmare to maintain / implement, i tried to implement a safe check here for over 2 hours, but wasnt possible. I replaced it for a more efficient approach that do a loop in a different way, here it is: when adding a music, it checks if it is already playing, if no starts to play. when start to play it checks if there is a music in the queue for it to play, if no it stops playing, if yes it get it and play. When the music that is playing ends, it call the play function (from the above topic). That is just it, no while or constant loops, no overhead, it works by basically connecting all the codes in a way that they work together to maintain (or stop) the loop (notice how i said loop, it uses a loop but isnt a while or for loop, it connects the end of one code and the start of another, like a chain . I made it in the pull request #2, check it out: here"}, {"post_id": 54151, "ts": "2026-08-24T23:51:28Z", "hours": 5.8114, "text": "Fixing some forgoten code and more So at this devlog i were fixing some bugs in a specific ui / route called ¨copa¨, this is a special route added because a teacher asked our team to create them to use at some football games in our school. But since it was a hiddend route and mostly like a easter egg it hasnt been updated in a while and wasnt working anymore. What i fixed i was following a pattern where most of the images that each route used should be in a special foulder of storage (literally called /storage), but this mode (copa) where created before it and was following the old way Also there was some errors ocurred afther i changed the entire folder structure, so the copa mode where completely broken, i fixed it too. What i added I had a class about PHP + Laravel | API | Controlers in my course, afther that class i realized that the way the API (copa) where searching for data based on ID where wrong (was doing copa?id=…), i changed it to /copa/id There is a function that show the teams to the user to select one that he wants, but the teams list where hard coded and wasnt synced with the database. I made it use the database data instead of a hardcoded value ** That where all for that mode, but i didnt spent 5 hours just on it, i made more: ** Fixing (or making) some other bugs There is a script that controls the database that where holding and infinite single connection with the database, something like this conn = mysql . connector . connect ( ** configs ) cursor = conn . cursor ( Dictionary = True ) But all the codes where using the same connection and cursor, so i decided to apply a connecton pool and make each database call get a connection and a new cursor. Also i added some functions to abstrac the connection and query part: def __get_connection ( self ): conn = self . db_pool . get_connection () conn . ping ( reconnect = True , attempts = 3 , delay = 1 ) return conn def __execute_query ( self , query : str , params : list | None = None , dictionary = True , query_type : QueryTypes = QueryTypes . ALL ): conn = self . __get_connection () try : with conn . cursor ( dictionary = dictionary ) as cursor : cursor . execute ( query , ( params ) or ()) match query_type : case QueryTypes . ALL : return cursor . fetchall () case QueryTypes . ONE : return cursor . fetchone () case QueryTypes . EXECUTE : cursor . commit () return cursor . lastrowid or cursor . rowcount case _ : raise ValueError ( f \" Tipo de consulta não suportado: { query_type } \" ) If yall want to see it check here at my repo That was also the first time that i used a Enum (on code) and branchs (on github, but i didnt used them properly) Others There was also some other changes, check the repo GF-Silva/Ritualia What next Now i will add some bug checks on a piece of code that handle the video display using an youtube iframe."}, {"post_id": 52754, "ts": "2026-08-23T03:00:03Z", "hours": 4.8206, "text": "Changing some values to be relative I spent a while (more than i expected) changing some strange values that control some settings of a component called cover-flow (this component create and control the images that are displayed in the home screen). I spent more time figuring out what where each variable and lhe logic behind than acually writing.Before it had some hardcoded values that would probably broke if anything changes, i saw it and solved. I wasnt here for it, i was fixing another bug and fixed it before it broke. I also used some basic math of circles like angle of an arc. That is all for today"}, {"post_id": 52465, "ts": "2026-08-22T16:18:22Z", "hours": 3.1097, "text": "I spent some time correcting errors and logic problems, here they are: Error Correction Music playback would freeze when the music queue ended : This problem would break the app until you restarted it, but it was very simple to solve. I had simply made it remove the first instance of music from the HTML twice, which caused it to try to remove an element that didn’t exist, thus freezing the app. Removed an unnecessary loop : In the player section, there was a loop that iterated through all the elements (emotions) in a list to toggle the state of ONLY 1 ELEMENT. With the few elements it had (there were 3), this was minimal, but adding more could be detrimental to functionality. It only did this to toggle the state of the PREVIOUS element from active to inactive. I solved this simply by making it save the index of the last element and use that to access it. It took a while to work because javascript was treating 0 (the first indice / old indice when u start) as false in the if, but afther i figured out why it was simple to solve (if oldIndice != null) Implementations / Changes I separated the API/WEB routes : Previously, the routes exposed by the backend (such as /songs) were in the same file. This wasn’t a problem before, but with the addition of new functions, it could become difficult to maintain and prone to various errors, as the routes weren’t separated (a name could be the same). Therefore, I separated them into: /api (backend API codes) and / (frontend web codes). I put the genres in the database : Previously, the genres were in the frontend, and to add a new one, I would have to update both the backend and the frontend. To solve this, I simply added a route that retrieves the current genres (from the database) and uses the data (name / location) to load them into the frontend. I added the emotions to the database : The emotions had the same problem; although both (they and the genres) were in the database, the frontend wasn’t based on that data, so I did the same thing I did with the genres. I changed the name of where the music explanations were saved : I must have mentioned in a devlog that the folder inside storage was called /explication_source, and I also mentioned that the name was incorrect (because the audio source wasn’t there, nor would it be; the audio files themselves are there), so I changed it to /explication_audios"}, {"post_id": 48602, "ts": "2026-08-17T02:01:56Z", "hours": 3.6708, "text": "Updating the README I saw a post about how to structure a README, how to make it clear and etc. Afther i realized how wrong the old README was (it was confusing, and also was months out of date). So I chose some topics that would be interesting to include in and filled in a skeleton, spending some time learning what to do and what not to do. I also didn’t fill in some fields because they aren’t ready yet (they now are stored in my memory to add later). How it was before: https://github.com/GF-Silva/RitualIa/blob/9a2a7756c777a7042eca28309924e5a408bd561f/README.md How it is now: https://github.com/GF-Silva/RitualIa/blob/2dea5f80266f06e8633af1aa3c9430065cde9231/README.md There is a huge difference. Also i did some bugs and noticed how bad my commits are"}, {"post_id": 47776, "ts": "2026-08-15T22:55:35Z", "hours": 32.5314, "text": "After a development pause, here are the various changes made. Also, I never mentioned it, but this project was made by students focused on the school environment. (This time I finally got around to writing the devlog myself): Structure Moved main.py to the root Replaced mysql-connector with the official version : The added library was a version I didn’t recognize; I added the official one instead. Cleanup Removed some Code that wasnt being used. Backend Change the return value of the SQL cursor : Previously, the cursor returned an array, but for code readability and security, I opted to change it to an array. Structured Error 404 : The backend used abort in certain parts, but it returns HTML and certain parts of the frontend expected JSON, so I formatted the abort to JSON. This caused a headache, I hadn’t tested it (again lol) and when I saw it, it was time to present the project at school and I was having this error. frontend Fixed the CoverFlow component : An error went unnoticed in the creation of the component, this made the size and spacing of the images look strange, it was fixed to a certain extent. I implemented a new playback policy : The text about it got so long that I decided to open an extra topic. Playback Policy Now it search for the requested emotion + genre that the user choose, If It fails It search Just for the genre, if It fails again it search for anything. Now it falls into a fallback: This policy change was motivated by having to find a song to show in a presentation and failing. I reflected that if it was annoying for me, it would be for the end user (students) as well. Database Added new songs : I added 50 extras and their respective genres/emotions. (Also i wrote some helpers in python to help me categorize and search for the musics in youtube and get and structured sql output, that took quite a while) Saved the songs locally : Topic local saving Local saving But why would saving the songs in the cloud be a problem? Nothing comes for free, the server we were using to host the music had a monthly access limit, which was a silent problem that, thankfully, was noticed before it happened. My mistake, I didn’t even think about the possibility of saving locally and went straight to saving in the cloud, it must have been due to haste and inattention (always plan well what you are going to do before you do it, weigh the risks and benefits). Now, how it works The audios are saved inside the /storage folder. The database still saves the location, but this time it saves the relative path (e.g., /explication_audiis/fun_audio.extension). Why save the folder path as well? Won’t the audios always be there? Yes, but at some point the path might change (e.g., explication_source/youtube/audio_legal.extension). Future plans I’m going to improve my devlogs lol, this one got huge"}, {"post_id": 12818, "ts": "2026-06-20T23:46:13Z", "hours": 5.5386, "text": "RitualIa in Evolution: Refactoring, Optimization, and New Features 🎶 Hey everyone! I’m back with a cool update on what’s been happening here at RitualIa. After that commit where we transformed some scripts into helpers, things have evolved quite a bit. We’ve been doing a heavy refactoring of the project, focusing on organization, performance, and better code architecture . What’s changed: Structure & Organization: I removed legacy folders that weren’t being used, did a mega merge bringing everything from /frontend (the folder that where holding ALL the frontend logics) to the project root (with that the frontend and backend are in the same folder), and switched from FastAPI to Flask on the backend. Why the change of FastAPI to Flask: Because my supervisor or mentor (something like this) said and said again to, because there was other guys in the project (still is, but im the main developer, the others stopped doing anything like mounths Ago, and even while they where doing something i still was the main dev), these other guys where total starters and could not hold the learning curve of FastAPI (even with the fact that was Just me that where using It, because it was at the backend and i was the only developing at back). Code Quality: We made several methods private in the PlayerControls class, making the API cleaner and more secure. We also fixed the “enclosing class errors” that appeared. These small fixes make a huge difference in code reliability. UI/UX Improvements: We created a new CoverFlow component to replace GenreCylinder on the homepage – it’s much smoother and prettier now. We added support for async onClick, grab + touch in CoverFlow, and adjusted visual positioning to keep everything aligned. Oh, and we removed that unnecessary playerText that was cluttering the interface. New Features: A really cool feature that was added was the checking for duplicate songs in the queue . Nothing worse than accidentally playing the same song twice, right? Now that doesn’t happen anymore. Maintenance & Updates: We updated the fetches to call the new routes, moved the favicon to assets (because everything has its place), and focused on the details. What’s coming next: We are in a consolidation phase, laying a solid foundation for the upcoming features. The focus now is on ensuring that each component is doing exactly what it needs to do, nothing more, nothing less. Thanks for following along!"}, {"post_id": 11702, "ts": "2026-06-19T02:03:07Z", "hours": 1.0236, "text": "I’m transforming some duplicate code into helpers so they can be more easily used in new code."}, {"post_id": 11412, "ts": "2026-06-18T17:53:37Z", "hours": 1.2881, "text": "Introducing: The ‘Ritualia’ project is a project developed by me and some colleagues with the help of the school. In it, we have done and continue to do research and assembly with the aim of impacting the daily lives of students in our school and (in the future) other schools. It is an open-source project with an article soon to be published detailing the foundations used, etc. The readme is currently outdated because I am redoing part of the current architecture, but I will update it later to include information on how to assemble and create your own version. The project is divided into hardware and software. I, along with other members, am responsible for the software (which is usable on most computers), and the hardware is relatively simple (it only depends on a display + sound + a controller with an OS + the preparations for installation)."}]...
|
Title: Ritualia by @gabriel_ferreira | Stardance
Title: Ritualia by @gabriel_ferreira | Stardance
Devlogs:
Introducing: The ‘Ritualia’ project is a project developed by me and some colleagues with the help of the school. In it, we have done and continue to do research and assembly with the aim of impacting the daily lives of students in our school and (in the future) other schools. It is an open-source project with an article soon to be published detailing the foundations used, etc. The readme is currently outdated because I am redoing part of the current architecture, but I will update it later to include information on how to assemble and create your own version. The project is divided into hardware and software. I, along with other members, am responsible for the software (which is usable on most computers), and the hardware is relatively simple (it only depends on a display + sound + a controller with an OS + the preparations for installation).
I’m transforming some duplicate code into helpers so they can be more easily used in new code.
RitualIa in Evolution: Refactoring, Optimization, and New Features 🎶 Hey everyone! I’m back with a cool update on what’s been happening here at RitualIa. After that commit where we transformed some scripts into helpers, things have evolved quite a bit. We’ve been doing a heavy refactoring of the project, focusing on organization, performance, and better code architecture . What’s changed: Structure & Organization: I removed legacy folders that weren’t being used, did a mega merge bringing everything from /frontend (the folder that where holding ALL the frontend logics) to the project root (with that the frontend and backend are in the same folder), and switched from FastAPI to Flask on the backend. Why the change of FastAPI to Flask: Because my supervisor or mentor (something like this) said and said again to, because there was other guys in the project (still is, but im the main developer, the others stopped doing anything like mounths Ago, and even while they where doing something i still was the main dev), these other guys where total starters and could not hold the learning curve of FastAPI (even with the fact that was Just me that where using It, because it was at the backend and i was the only developing at back). Code Quality: We made several methods private in the PlayerControls class, making the API cleaner and more secure. We also fixed the “enclosing class errors” that appeared. These small fixes make a huge difference in code reliability. UI/UX Improvements: We created a new CoverFlow component to replace GenreCylinder on the homepage – it’s much smoother and prettier now. We added support for async onClick, grab + touch in CoverFlow, and adjusted visual positioning to keep everything aligned. Oh, and we removed that unnecessary playerText that was cluttering the interface. New Features: A really cool feature that was added was the checking for duplicate songs in the queue . Nothing worse than accidentally playing the same song twice, right? Now that doesn’t happen anymore. Maintenance & Updates: We updated the fetches to call the new routes, moved the favicon to assets (because everything has its place), and focused on the details. What’s coming next: We are in a consolidation phase, laying a solid foundation for the upcoming features. The focus now is on ensuring that each component is doing exactly what it needs to do, nothing more, nothing less. Thanks for following along!
After a development pause, here are the various changes made. Also, I never mentioned it, but this project was made by students focused on the school environment. (This time I finally got around to writing the devlog myself): Structure Moved main.py to the root Replaced mysql-connector with the official version : The added library was a version I didn’t recognize; I added the official one instead. Cleanup Removed some Code that wasnt being used. Backend Change the return value of the SQL cursor : Previously, the cursor returned an array, but for code readability and security, I opted to change it to an array. Structured Error 404 : The backend used abort in certain parts, but it returns HTML and certain parts of the frontend expected JSON, so I formatted the abort to JSON. This caused a headache, I hadn’t tested it (again lol) and when I saw it, it was time to present the project at school and I was having this error. frontend Fixed the CoverFlow component : An error went unnoticed in the creation of the component, this made the size and spacing of the images look strange, it was fixed to a certain extent. I implemented a new playback policy : The text about it got so long that I decided to open an extra topic. Playback Policy Now it search for the requested emotion + genre that the user choose, If It fails It search Just for the genre, if It fails again it search for anything. Now it falls into a fallback: This policy change was motivated by having to find a song to show in a presentation and failing. I reflected that if it was annoying for me, it would be for the end user (students) as well. Database Added new songs : I added 50 extras and their respective genres/emotions. (Also i wrote some helpers in python to help me categorize and search for the musics in youtube and get and structured sql output, that took quite a while) Saved the songs locally : Topic local saving Local saving But why would saving the songs in the cloud be a problem? Nothing comes for free, the server we were using to host the music had a monthly access limit, which was a silent problem that, thankfully, was noticed before it happened. My mistake, I didn’t even think about the possibility of saving locally and went straight to saving in the cloud, it must have been due to haste and inattention (always plan well what you are going to do before you do it, weigh the risks and benefits). Now, how it works The audios are saved inside the /storage folder. The database still saves the location, but this time it saves the relative path (e.g., /explication_audiis/fun_audio.extension). Why save the folder path as well? Won’t the audios always be there? Yes, but at some point the path might change (e.g., explication_source/youtube/audio_legal.extension). Future plans I’m going to improve my devlogs lol, this one got huge
Updating the README I saw a post about how to structure a README, how to make it clear and etc. Afther i realized how wrong the old README was (it was confusing, and also was months out of date). So I chose some topics that would be interesting to include in and filled in a skeleton, spending some time learning what to do and what not to do. I also didn’t fill in some fields because they aren’t ready yet (they now are stored in my memory to add later). How it was before: https://github.com/GF-Silva/RitualIa/blob/9a2a7756c777a7042eca28309924e5a408bd561f/README.md How it is now: https://github.com/GF-Silva/RitualIa/blob/2dea5f80266f06e8633af1aa3c9430065cde9231/README.md There is a huge difference. Also i did some bugs and noticed how bad my commits are
I spent some time correcting errors and logic problems, here they are: Error Correction Music playback would freeze when the music queue ended : This problem would break the app until you restarted it, but it was very simple to solve. I had simply made it remove the first instance of music from the HTML twice, which caused it to try to remove an element that didn’t exist, thus freezing the app. Removed an unnecessary loop : In the player section, there was a loop that iterated through all the elements (emotions) in a list to toggle the state of ONLY 1 ELEMENT. With the few elements it had (there were 3), this was minimal, but adding more could be detrimental to functionality. It only did this to toggle the state of the PREVIOUS element from active to inactive. I solved this simply by making it save the index of the last element and use that to access it. It took a while to work because javascript was treating 0 (the first indice / old indice when u start) as false in the if, but afther i figured out why it was simple to solve (if oldIndice != null) Implementations / Changes I separated the API/WEB routes : Previously, the routes exposed by the backend (such as /songs) were in the same file. This wasn’t a problem before, but with the addition of new functions, it could become difficult to maintain and prone to various errors, as the routes weren’t separated (a name could be the same). Therefore, I separated them into: /api (backend API codes) and / (frontend web codes). I put the genres in the database : Previously, the genres were in the frontend, and to add a new one, I would have to update both the backend and the frontend. To solve this, I simply added a route that retrieves the current genres (from the database) and uses the data (name / location) to load them into the frontend. I added the emotions to the database : The emotions had the same problem; although both (they and the genres) were in the database, the frontend wasn’t based on that data, so I did the same thing I did with the genres. I changed the name of where the music explanations were saved : I must have mentioned in a devlog that the folder inside storage was called /explication_source, and I also mentioned that the name was incorrect (because the audio source wasn’t there, nor would it be; the audio files themselves are there), so I changed it to /explication_audios
Changing some values to be relative I spent a while (more than i expected) changing some strange values that control some settings of a component called cover-flow (this component create and control the images that are displayed in the home screen). I spent more time figuring out what where each variable and lhe logic behind than acually writing.Before it had some hardcoded values that would probably broke if anything changes, i saw it and solved. I wasnt here for it, i was fixing another bug and fixed it before it broke. I also used some basic math of circles like angle of an arc. That is all for today
Fixing some forgoten code and more So at this devlog i were fixing some bugs in a specific ui / route called ¨copa¨, this is a special route added because a teacher asked our team to create them to use at some football games in our school. But since it was a hiddend route and mostly like a easter egg it hasnt been updated in a while and wasnt working anymore. What i fixed i was following a pattern where most of the images that each route used should be in a special foulder of storage (literally called /storage), but this mode (copa) where created before it and was following the old way Also there was some errors ocurred afther i changed the entire folder structure, so the copa mode where completely broken, i fixed it too. What i added I had a class about PHP + Laravel | API | Controlers in my course, afther that class i realized that the way the API (copa) where searching for data based on ID where wrong (was doing copa?id=…), i changed it to /copa/id There is a function that show the teams to the user to select one that he wants, but the teams list where hard coded and wasnt synced with the database. I made it use the database data instead of a hardcoded value ** That where all for that mode, but i didnt spent 5 hours just on it, i made more: ** Fixing (or making) some other bugs There is a script that controls the database that where holding and infinite single connection with the database, something like this conn = mysql . connector . connect ( ** configs ) cursor = conn . cursor ( Dictionary = True ) But all the codes where using the same connection and cursor, so i decided to apply a connecton pool and make each database call get a connection and a new cursor. Also i added some functions to abstrac the connection and query part: def __get_connection ( self ): conn = self . db_pool . get_connection () conn . ping ( reconnect = True , attempts = 3 , delay = 1 ) return conn def __execute_query ( self , query : str , params : list | None = None , dictionary = True , query_type : QueryTypes = QueryTypes . ALL ): conn = self . __get_connection () try : with conn . cursor ( dictionary = dictionary ) as cursor : cursor . execute ( query , ( params ) or ()) match query_type : case QueryTypes . ALL : return cursor . fetchall () case QueryTypes . ONE : return cursor . fetchone () case QueryTypes . EXECUTE : cursor . commit () return cursor . lastrowid or cursor . rowcount case _ : raise ValueError ( f " Tipo de consulta não suportado: { query_type } " ) If yall want to see it check here at my repo That was also the first time that i used a Enum (on code) and branchs (on github, but i didnt used them properly) Others There was also some other changes, check the repo GF-Silva/Ritualia What next Now i will add some bug checks on a piece of code that handle the video display using an youtube iframe.
Optimizating some piece of code So there was a certain part of the code responsible for the songs queue in the main route, that piece is a core function but where running a while true loop for no reason , here is the part: async start () { while ( true ) { // { emotion, genre, author, name, sourceId } const musicData = await this . #musicQueue . get (); this . createPlayer ( musicData [ ' sourceId ' ], null ); this . #showMusicInfos ( musicData [ ' name ' ], musicData [ ' author ' ]); this . #queueList . removeChild ( this . #queueList . children [ 0 ]); await this . #startExplication ( `/storage/ ${ musicData [ ' explicationSource ' ]} ` ); this . player . playVideo (); await this . #musicFinished . when ( true ); this . #musicFinished . set ( false ); } } Basically the code were calling it at the start and running it forever, but that code where a nightmare to maintain / implement, i tried to implement a safe check here for over 2 hours, but wasnt possible. I replaced it for a more efficient approach that do a loop in a different way, here it is: when adding a music, it checks if it is already playing, if no starts to play. when start to play it checks if there is a music in the queue for it to play, if no it stops playing, if yes it get it and play. When the music that is playing ends, it call the play function (from the above topic). That is just it, no while or constant loops, no overhead, it works by basically connecting all the codes in a way that they work together to maintain (or stop) the loop (notice how i said loop, it uses a loop but isnt a while or for loop, it connects the end of one code and the start of another, like a chain . I made it in the pull request #2, check it out: here
Fixing errors and adding bug checks Hi everyone, so i were fixing some bugs that i saw that may broke the app, i fixed all of them (for now), here they are: There was a logic bug that a class (the one that controls the youtube iframe) where doing stuff that it wasnt supposed to do (not an unexpected behavior, but a logic that should be outside of it), it was an easy fix. There was a bug at the player class that when the provided sourceId (for the youtube iframe) where wrong or unable to use it crash and stopped doing anything else (like playing another musics). I tryied solving it in various ways, one was beffore the changes that i did in my last devlog, but i failed because the class that holds the player where hard to fix, this devlog fix it. I fixed it by adding some bug checks and, when some error ocurred, it play the next music. There was also a bug at the player class and youtube-iframe-controls class, that for a couple seconds in the start of the website it would broke if u tried to play a music. It was because in the start of the program the youtube API where unable to be used. To fix it i just made it wait until the API where ready using an ASYNC function. There was also a bug that, afther the past devlog, it was doing and request at the /api/songs with params at the wrong format. Afther the past devlog the API started using the params genre_id and emotion_id , but the frontend where passing with the incorrect name (genre, emotion). Something that i implemented I upgraded the mysql query that where being used to get more infos about the music, before it where just returning infos like name, author, sourceId, etc, but now it also returns the genre and emotion from that given music. I added a bug check at the player class, now if it fails it pass to the next music. Something that i want implement I want to implement a simple toast notification system that will apear when something fails, like the playing of some music. Others The youtube docs for the iframe where very helpful for this changes, check it out: https://developers.google.com/youtube/iframe_api_reference?hl=pt-br
Creating a toast notification system So rn im creating what i said in the past devlog about a toast navigation. This isnt finished yet, im still figuring out an way to check the end of the timer, i found some ways to do it, like using an simple if inside the countdown. I didnt comment but i am using an setInterval to decrease the time and an <progress> tag to show the value but that is a bad ideia, imagine doing 1 if every 50 ms? that dont cost a lot of processing power, but i still will search for other ways to do it just to check, if yall got any hints or ideas leave a comment. Also i will improve the design, the design is petty poor.
The toast notification is finished So i finished it, it is a component that u adds in the code that u wants to use. I added 2 icons, 1 for infos and another for warnings. What i used and did The element that holds it all is an dialog , the icons are svg , the text is a span and the element that shows the time left is an progress . To update the time left i used an setInterval that runs at a 10ms delay and deduce 0.01 of the dialog value, so it will be smooth to see. Also there is an if inside that destroy the element and clear the interval when the value of the dialog reaches zero or less (In the past devlog i said about not using an if, but considering how low the cost for an if in that time is i decided to use it anyway). The function that creates the toast receives some params that will let it be customized by whoever is calling it: const icons = Object . freeze ({ INFO : infoIcon (), WARNING : warningIcon () }); function createToast ({ message , time = 5 , styles , icon = icons . INFO }) // the `message` is the displayed message // the `time` is the time until close // the `styles` is custom css styles for the element, it uses the dictionary format {} // the `icon` is the svg icon What else? I will apply it in some elements and post about. See you later!
Toast applied and tested The toast notification component is now being used at the player class, i did some tests and it is working very nice, hopefully the user will not see it very often (because that would be a problem, the user must not see it unless there is an error playing the music). But why did i make it? It is used to show more about what is going on for the user, so they will not become anxious if it something is working or not. Why not use another notification system? Each notification system has its own use cases, the others would be very painful for the user. Imagine every time a simple error (that is simple for me) like the music fail to play there was an error that interrupt the use of the app with an popup or alert, that would be painful, dont it? That is why i used an toast notification, because it is temporary (disappears after some seconds) and dont stop the use of the website. Also there is a feature that i implemented for the same reason a few devlogs ago that add a fallback in the music search, so it wont show a message at every single combination. Lets calculate how many combinations we have: there is around 50 musics in the database, 22 genres and around 40 emotions, multiplying the genres and the music 880 combinations that the user can make. Now lets see how many musics we can get: each music have around 1.2 emotions and 1.2 genres, so we get 72 combinations that lead to an music . With that in mind, we can see that from 880 combinations, just 72 of them are useful combinations, so we get a 8.18% for getting a music, and 91,12% of not getting one. Consider that each failed attempt shows an error that stop the use flow of the website, but that was before the past devlog, now it tries again and again and only afther failing everything it shows an error, at that point it must really show an error. Thats all, sorry for the long boring text and thanks everyone that read, see yall later
Studing about cache So basically i where studing about cache, the main ideia was to implement it in the sistem, but then i realized something: Theres is nearly no difference between cache and a normal request in an localhost project, adding the cache would not improve anything, sometimes it maybe even slow the website, because the page would need load more code. I realized it afther a while studing about it, but anyway lets focus on another thing. Also i where studing with google for devs: https://developer.chrome.com/docs/workbox/caching-strategies-overview
Adding a new description feature So basically there was an place where was designed to have the description about an music, but that was empty and where only finished today What it do It is petty simple, it just show an text about the music that is currently playing, also there is an audio that plays before the music starts playing, but this audios is played just one time before the music so if someone loses it or didnt listen well there was not a second chance to listen for that audio. Now there is this place that holds the same content, but in the format of an text that can be read whenever they want while the music is being played, that was what i added. Also that text can be hidden, so it will not stay using half of the screen every time (in the screenshot it is active) What this audios do This audio / text is part of the main purpose of the website, they give some fun facts about the music that may be useful someday in some kind of quiz or essay. Also the audio is played before the music and the music plays just after the audio finishes. That is to make whoever is listening listen to the entire audio before having what he (or she) wants, so they will not listen to the music and skip the audio.
Adding more bug checks I added some checks in the player class at the startExplication function that checks if the src (the url for the audio) is valid or not by doing an fetch with the HEAD method and checking if the return is an valid audio before trying anything in this function. Also i solved this error in the same function: Uncaught (in promise) AbortError: The play() request was interrupted because the media was removed from the document. https://goo.gl/LdLk22 This error was because the startExplication function where trying to play the audio before it was loaded, i solved it by making it play the audio just after it was load with the event listener canplaythrough . There was another error at the playMusic function where the code where trying to play the youtube video before it was loaded, i solved it by making it wait until it was CUED (Where the video isnt playing, but is loaded and showed). (The website was not created to be in mobile and dont has a lot of support, the video where recorded in my smartphone because i had to record the audio and the audio on my pc dont work. In the Future i Will add mobile suport, but right now im finishing the bugs and etc)
Refactoring the copa script I where placing some scripts in a class. These scripts are related with the player functions of the copa script, so i pick all of them and placed in the same class. I did it to follow best practices, but i confess that i still got some doubts about when to create an class and when the variable or method should be static or private (#property), i will search and learn more about because maybe i will have to refactor some parts of the code following these rules of best practices. That was all for now, see ya!
Creating a new helper Context: There was an class called youtubeFrameControls , this class basically where designed as an structure to help using the youtube iframe API, but with the time this class where becoming basically to hold just an function (and in a very inefficient way), because the methods that it had before (like the one that runs when the iframe is loaded) had to have more and more specific logic in the codes that used it, so they where useless (because the codes that where using it where rewriting it). What i did: I picked the only function that where being used and transformed it in an helpers (that can easily be customized). This function was the one that creates the player of the musics, and the function where called createPlayer . Also i removed the old class (youtubeFrameControls) and replaced it for this helper in every place that used it. It now is way more simple than before and can me more customized.
Making the website responsive Hi again! Like i said in some devlog, the website dont have support for mobile, that was because it was designed to be at kiosk mode and work just in desktops. but i decided to change that. First of all: the site where using a lot of absolute values of dimensions, so it where braking even in the desktops (it wasnt responsive at all). But i spent a while changing it, it is isnt ready and has some problems, but is better than before. (The mobile is still strange, i did not started fixing it yet). Credits: https://css-tricks.com/snippets/css/fluid-typography/ - This website shows about a way to make the texts become responsive for the screen using some calcs, it is worth seeing. The first video is how it was before, the second is how it is now
Hi again! Like said in the past devlog, im improving the responsiveness of the website, specifically in the player part. But it had some problems and where distorting when playing an video, now it resizes based on the screen size in a way that it stays ¨normal¨. The first video is the new way, the second is the old way. It still needs a lot of improvements, but it is going!
Im improving the responsiveness at the home page (before was the player page), but for some reason that idk the emotion selection div is having a strange behavior, i will update what it is after i fix it. Take a look: (the item in the center should be centered)
i finished the workings on the section of the home page that i where doing before, now has a good responsiveness for pc and a decent one for mobile. Now im working on the main area of the home page, the one where the user selects the desired genre for the music (second img). It may looks completely fine, but that same element already was a headache before and is here again. The given area is the cover-flow component, before i already fixed it (or so i thought), but it was looking bad (the 3d perspective where a bit strange) and would probably broken if i added new genres. I were trying to figure out a way to listen to the clicks in the card without any problems, that seems easy at first glance, but the 3d perspective in the element make other elements eat the click from one another, make the clicks dont be listened and so many problems that i nearly decided to erase it and write from scratch. I already found a way to do it by using the mouse position, the center of the screen and the card width (the genre img) to transform it in an value that can be used to select the exact card without any dependencies on the doom selector. It basically uses just some values, put in some calcs and get the difference between the current card (genre) index and the clicked. Im nearly finishing it, but i still need to figure out some values and more.
Finished the correction of the errors at the perspective and click in the cover-flow component. Now the perspective stays the same 150vw value (that is based on the screen width) and stays normal, with everything working. Oh man, that needed a lot of logic and out of box thinking finding another ways to check where the user clicked without using an normal click event listener (for those who lost the past devlog or didnt understood, i cannot use a normal eventListener in that because the clicks is detected in another element or in nothing, even with z-index or more in css, so the solution should be done entirely on javascript logic). The first video is the new way, the second is how it was before all changes in it
Im nearly finishing the workings on the responsiveness. Now the entire player screen is responsive and do not breaks the texts anymore (except for the description area), also the buttons that show you the next screen (the ones that displays ‘player’ and ‘generos’) are responsive too, the music queue is working perfectly fine, and the area that is used to select an emotion is nearly responsive too, it just needs some adjusts in the two buttons that change the current emotion because they become too small and uses a lot of space when the screen is too small, after that this screen will be finished. It is taking a really long time, the fact of how many different screen sizes exists makes it harder to finish, but now there is times that i even cannot see if i changed the resolution in some areas, because the system looks the same. I spent quite a while testing different resolutions and combinations of size, i didnt even noticed that i where 6 hours here, but now ik more about css (things like container-type + container based sizes and more ways to set the size of an text) The video shows how it is now, if u want to see the before just checks the past devlog.
The emotionDrum is now responsive! Now the buttons that you use to select the emotion are in the same side as the div that displays the emotion, so they dont fight for space anymore. This change is meant to fix the low size of the items in screens that are too small, in the new way we have more free space to display the emotions, there is not much to say. What else I did some minor changes in the size of some items at the player area, now they are easier to read! (I increased the size of some items)
The home is now fully responsive Ah that took a while, but finally it is fully responsive. Now the description at the player UI resizes based on the screen size and active a scroll behaviour when need, also i did some minor change at the emotionDrum perspective to make it show more emotions at the same time, removed the padding in the arrows at the emotionDrum so they will have more space and fixed an error in the genre drum that was making it perspective broke. After all these devlogs i improved how i make a code responsive.
Improving the performance After finishing the improvements in the responsiveness, now i decided to improve the performance. I used lighthouse to get insights (i learned about it in an tiktok video) and figured out that the images size were too high (were an png of 1280x1280px), so i saw more about that in the page: https://developer.chrome.com/docs/performance/insights/image-delivery (an link that google lighthouse gave). With that i saw how to decrease the size while staying with quality, i reached up to the sharp-cli tool, that makes the work of resize, convert and compress the image for me. The command used was that: npx sharp-cli -i * .png -o ./output resize 320 -f avif -q 50 --effort 6 --smartDeblock --preset photo The 320 is the size that i want it to be at the end, i got that value by seeing what was the computed value (the value that is being used in the website) in an high resolution pc (not the most higher one, the high but normal pc) with the resolution of 2500x1714px . With this simple changing the image went from 2mb to 40Kb! Nearly 100% decrease, and take in mind that there is more than one img, so the change were even higher. Also i created 5 different images: 320px, 480px, 640px, 960px e 1280px. With them the browser can choose which one is better for each device. With these changes i went from 35 points of performance to 59.
Improving the LCP (Largest content paint) performance I am improving the way that the website create and downloads the images, the main reason is to make the user see something faster. Before the system were doing 2 main things: Go trough the entire list of images, creating the elements and placing them into the page. Position them. But the position of the items were being done after the creation of the images, in another function. Now they are in the same function: it create the element, position it and add it to the page. That does not seem like much, but the code got way faster with that, probably because it dont need to go item by item in an list twice just to create an element. I tested the time to load the first element and it went from 8.63s to 6.43s , the test was made with 2200 elements (Yeah ik, it is a lot and normally it isnt that much, but i had to see how they were holding with more than 22 items). Also i fixed a bug that passed unnoticed while improving the responsiveness: At some point of images the visibility of the elements broke, that was because the perspective (what makes the 3D perspective of the component, and makes it visible with 3D effects) was based on the screen size, not the elements itself. What was the problem in that: Each element takes a size in the screen ‘makes the circle that shows the element be more and more near of our point of view’ (i cant explain it any better, search what is ‘perspective in an 3d element at HTML’ ). While it was approaching our point of view (POV), our POV were exactly at the same position (based on the screen size), so at some point the circle perspective would pass the POV and we would be unable of seeing it well. Now it is based on the elements: The 3d elements were basically a circle, i just used the diameter to change the perspective based on it. TODO: Maybe i lowered the image quality too much… I will fix it in the next updates. Also i were trying to improve the font settings to improve the performance, but that wast working so i decided to move on to this because it was more critical (took a while for me to jump to this, maybe like 2 hours trying and trying values in the font settings). i am also working in a way to load the images in parallel, with that it will take way less time (I didnt known about LCP before so i spent a while figuring out the way it works).
Improving the loading performance Now the system selects some images that needs to be shown faster than the others and making them load with priority. It was made by selecting the images that the user is seeing and defining some params like fetchPriority = "high" and decoding="sync" , the other images have the params: decoding="async"; loading="lazy"; contentVisibility="auto"; . With that config the LCP went from 2.4s to 0.5s . Also it loads the image in the start and dont change that config again, so the browser will be lazy while downloading these images. The problem is: only the first images are chosen as high priority, but their positions will be changed while the configs stays the same, that makes the browser lazy while loading them and makes the runtime performance became worse. To fix that i found about IntersectionObserver, that are meant to solve the problem of updating the images position fast. It was not applied yet, i found about it like 1 hour ago. What else Now the perspective of the emotionDrum is based on the elements that it have, before it was based just in the screen and would broke if something changes. I did a little change in the way that the script checks for clicks in the screen, now it has more accuracy (I changed the round system).
Adding an observer Now the script observe the card elements at the cover-flow component, classify their position and changes it visibility based on that. Im using an IntersectionObserver to observe every card, but it was designed to observe the position of 2d elements, so i had to figure out how to make it work well in an 3d element. The way it works is when the observe activates (it basically means that some card is in the range to load) it get the card info (like position and angle) and changes it visibility state based on that. Simple, right? No, it was a headache for the start to the top, nearly 4 hours of what i did was to fix the fact that it was meant for 2d. The observer were activating for cards that were in the back of the element, so i had to classify the card position into back or front by using its angle. But if i tried to use the card angle without anything else the script would broke (and did for 3 hours until i realized how to fix), so i had to use an second angle which is 360 - cardAngle (the 360 is the angle of an circle), so this new angle is based on the circle end while the other is based on the circle start. But the system still broke, because at some point one of these values would become negative and makes the if that classify the elements fail. The fix was using the absolute value in the if (it took 1 hour until i figured that; oh i were so happy when it worked). Why To improve the performance, so the browser will just load what is really important and not 50 images that the user cant even see. What else All that work definitely improved a lot my logic thinking and for the first time i used the truth table well. Now i just need to use the new code to change more the style of the images that are not in the screen. I did not deleted the code that i wrote in the past devlog, it was used in the new code to select how many images should be loaded in the same time. ** The first video is the result, the others is some problems that i had **
The observer is finished (nearly) Now the cover-flow has an observer that checks the position of the images and changes it styles based on that, so the images that the user is seeing is loaded while the others is hide. It still has some bugs and space for improvements that im still figuring out how to solve, like the image loading too late on the screen or, in slow internet connections, the image takes too long to load. Most of these bugs are because the observer (an intersectionObserver ) was designed for 2d contexts, not 3d (that were and still is an giant problem to solve). For this reason i was thinking about creating an observer from scratch in C++ that can work better in my 3d element, but the overhead would be high so im trying to solve in other ways before that. The feature was made using fetchPriority, contentVisibility and src (the system add the source just when the image is near the screen). OBS: I found about MutationObserver after this post, maybe i will use that instead of insersectionObserver. Oh man, at least if had found about this before… Aaaaaahhhhh i spent 9 hours in that, but at least a Lot of the new logic will be used. Anyway, lets cook
Adding a mutationObserver Now, instead of an intersectionObserver, the system use a mutationObserver that monitors the angle of the cylinder itself. With that the loading of the images will be insanely better, faster and user-friendly. Now the changes in the cover-flow is observed at the cylinder angle, not at each card. There was some problems in the journey like, for some reason, unexpected cards being loaded or not, the loading script at the observer dont triggering at all (that was caused by the speed of the observer) and an insane amount of cards being triggered at the same time (i still did not figured out why, but that isnt ‘harmful’). But man, i had to be creative here and remember about some concepts like concurrent programming, buffer / queue and apply some delays (because the mutationObserver is insanely fast and can trigger every millisecond). That all was meant to decrease the speed of the mutationObserver, because it was triggering with the most small change in the cylinder, so i made it trigger just when an expected amount of movement was made. The red/yellow collor is for me to visualize the loading state, it is just for debug The code isnt finished, i still need to implement the loading part, for now i just implemented the observer and basics of the loading part
The loading is done Features Now the loading at the mutationObserver is finished, it finally loads or unloads the images that should be (or not) loaded! The new observer is way faster, because it can detect the image way before it enters the screen, loading it before and having more time to do it. Also the system loads just a maximum of images (with the configs that i put it is 13), so it will not fry an cellphone. Problems The loading part was easy to do, i already done it before in the past observer (intersectionObserver), so i just had to pass the old code to the new part. But when the cover-flow element dont got atleast 13 elements the mutationObserver code breaks completely! Im still pondering how to solve it, when i do i will post about! Results The performance went from 78 to 100! The system is way faster! The user does not see a blank image anymore! Why The old method was slow even with a good internet connection, because it was loading the images just when the element was already in the screen, leaving to a perceptive delay for the user and a blank image to the user. Also i thought about creating an observer from scratch (maybe i was a little off my ideas, because that was insane), but the browser already had exactly what i wanted (the mutationObserver) Videos The new features The performance of the new feats The old features Reasoning While i was trying to sleep i thought about a system that fill the cover-flow with a maximum of images (like 10, or 13, or the code decides) at the DOM, using less memory to run. That system will free a lot of memory based on how many cards the cover-flow have. But that will have noticeable effects just with a lot of elements and probably would be hard to develop, maybe i will do in next updates. What next Im leading to the shipping, so i will improve metrics about the lighthouse, improve the readme and post it.
The loading is done and working! Fix I fixed the error that were happening when the cover had a certain amount of elements. Problems The fix itself was very easy to do, but doing it in a readable or without using 10 lines of code (i want things concise) was way harder than i expected. So i spent this entire time trying different ways to do it, each of them making everything worse. Reasoning The bug were with less than 14 elements, the script were calculating the first and last element index, it happened that these elements were behind the screen focus. Why? Because the values that the system was using were leaving these values, so i had to fix the way it was calculating things.
Fixing an error at the youtubeHelper Now the youtubeHelpers checks if the youtube API is ready before sending commands. Why Sometimes the API maybe is not finished yet, that was leaving an untreated error that was braking the entire website. How was made With a lot of pain and suffer. I thought “Oh hey, that will be a 15 minutes fix” - i spent 1 HOUR FIGHTING with the iframe itself, nothing was working and at some point i started thinking that even the API of YOUTUBE wasnt working, even the most basic function that should be triggered when the youtube finished the loading wasnt beeing activated, even the console.log(“Api READY!”) wasnt working, even when it worked it wasnt working well, the variable of the player was a promise and not the result. At the end i shut down my PC, defeated, without any energy left, with just hope that in the next day (this) that would be fixed (if not i was planning to ignore and make it a feature “Easter egg, if u dont join the website for a while it will not load!”. The problem here was just the position were the iframe api was in the HTML, it was being loaded before the helper script, so the helper was not there to check if it the iframe was ready or not, the fix was just move it a little down. Architecture It was just an promise, if the function checks that the iframe isnt available it await for it to be available. The check if it was available use the onYoutubeIframeAPIReady, easy easy (except for all the suffer that i went into).
The performance workings is finished and bug fix Fixes Now the logo z-index is lower, that is because the logo was ‘eating’ the click in more important elements. Also i did a small change at the cover-flow, that change fix the bug of the scroll at the element sudently stoping when at a certain position. The copa script had some old references to images that were leading to bugs, i changed it. Performance I already finished it in the past devlog, i was just checking if there was anything worth improving, but everything is working fine and now is time to improve acessibility. Most of the logged time was me trying to improve more some metrics at the lighthouse, but the work was too much for anything that is already good, so i decided to stop before i started focusing too much in it.
The accessibility workings is done Features Now the system has a new navigation system that allow users to navigate with just the keyboard! (The video was with just the keyboard) Why Why not? It was meant to improve the accessibility for users without mouse, or any another problem and because i was tired of having to use the mouse to debug something. How it was made Again with a lot of pain, the feature itself was easy but i had to fix some errors that went unnoticed, so it took more time. The feature detects when the user press a key and do an action based on wich key was. The accessibility was easy to get 100, but the metrics at lighthouse dont give all what the users will need, i had to think about the website usage and how would be the easiest way for the user. Results The accessibility went from nearly 69 to 100! What next Now i will work on the best practices! Update after the devlog: Nearly every metric is already maxed out lol, i will ship it very soon!
All done, it is time to ship Every metric at lighthouse it nearly perfect, im so exited to ship it!
Added install guides Now there is guides to help the user install for ubuntu, arch and windows. Notice that im a linux user and my pc is weak, so i could not test it on another operational system. Also the guide is in portuguese (all of them), please use your browser built-in translator or any of them to read if u dont understands portuguese I could test it on another linux distro, but i would have to go through all the install steps. Also i cannot try installing windows because it normally wipe out another OS installed on the same disc (i know that it just replaces the bootloader) and using a VM was not possible due to the amount of RAM and the processor that i have.
Configuring an ssh server! I configured an oracle cloud vm with ubuntu to host my website 24/7, that was because nest wasnt working in a while. Im running it at a local IP with http only, i will configure https today and maybe an domain, the IP is http://164.152.55.252 , notice that some browsers may block you from accessing and http website. UPDATE AFTER THE DEVLOG: I put an domain using duck dns: http://ritualia.duckdns.org Hardwork I had absolutely not a single knowledge about oracle cloud vm, so configuring it was an hell. Sometime my internet stopped working so i had to use my smartphone, this lead me to configuring an invalid ssh key and i had do configure everything from scratch, i spent 5 hours configuring everything, but that was ssh and wasnt tracked. But now everything is working fine. Thx oracle This vm is a 24/7 entire OS (Virtual Machine) that has some good free plans, without any cold start. Thx stardance Stardance now will have one more mount!!!!!! I still has roughly 40 hours of deep development to do after this ship, i will love to finish that in stardance!
It is time to ship! Now the system is working perfectly fine running at a vm in oracle cloud with a public domain, and a dns with duckdns at http://ritualia.duckdns.org/ Warning: It is just HTTP!
Added english readme I created an english readme, api and install Guide, so it will be easier to read and more accessible for worl-wide users
Ships:
What did i made I made an complete music play system that will help users to learn while listening to musics! I used youtube, flask, python, mysql, js and hope to make this! What else Solved a lot of painful bugs that were stopping the project from working Finished and made the music queue work Added music description labels Improved a lot the performance Made the website responsive Added a keyboard based navigation Fixed so much errors at the cover-flow that now i forgot how many Added bug checks before the play of each video on the player Created an toast component to show errors or infos Added 54 musics to choose and listen Challenges The most painful code was the player and the cover-flow, they were with a lot of hidden bugs that i had to figure out, feats that i had to make and pain to suffer! Now i figured out that i love and HATE making a website responsive! What im proud of MutationObserver: An observer that loads / hides an image based on its position at the cover-flow, this system took a while and worked very well. Error checks at player: The system can handle the error that happen and dont crash! Keyboard navigation: Everyone can use the keyboard to navigate now! Oracle VM: For the first time i used an ssh and hosted an website in my own machine (oracle, not mine)! How to test Access http://ritualia.duckdns.org/ , when you join and the page loads you will find a screen to choose an genre, select which one you want, after you will see an emotion selector, select the emotion that you wanna feel! You will see the player screen and an audio explaining the music (The audio is in portuguese), after the audio the music will play. Notice: The github and the website are in portuguese, please use your browser built-in translator or any that you want to use the software properly! Follow the installation guides at github if you want to install...
|
1793350645.729271
|
1793437045.729271
|
|
27008
|
Cascade by @sheepex_ | Stardance
|
sheepex_
|
3
|
50.0
|
312
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-25T19:13:23Z", "hours": 23.0, "multiplier": 18.99, "payout": 201, "blessing": "neutral", "text": "It’s been a pretty busy couple of weeks working on Cascade, so here’s a recap of what’s changed. One of the biggest additions has been the social system. Cascade now has proper user profiles with osu! stats, badges, beatmaps and mapping activity. You can search for other mappers, add friends, see who’s online and send private messages. I’ve also added replies, reactions, GIFs, notifications and privacy settings. Another thing I’ve been working on is mapping statistics. Cascade now tracks how much time you actually spend mapping, including individual maps and difficulties, playtesting, and other editing activity. There’s also an activity calendar on your profile. More recently, I’ve been focusing on making Cascade feel more like a proper desktop application. The main menu has been redesigned around osu!lazer, including new animations, a new logo, intro/outro sequences and improved scaling. There’s also a new Graphics tab with fullscreen, borderless and windowed modes, as well as FPS limiting. The editor has received some improvements too: A floating map overview inspired by Malody A dedicated playtest button Better audio time-stretching when slowing down songs Customizable export locations Settings search and shortcut conflict detection Various UI improvements and fixes I’ve also spent quite a bit of time on performance and stability, especially with larger map libraries, collaborative editing and the desktop app. There’s still a lot I want to improve, but I’m pretty happy with how Cascade has been progressing lately. Thanks to everyone who’s been trying it out and giving feedback!", "repo": "https://github.com/sheepexx/cascade", "demo": "https://cascade.sheepex.net/"}, {"ship_num": 2, "ts": "2026-09-28T11:54:50Z", "hours": 2.0, "multiplier": 12.33, "payout": 25, "blessing": "neutral", "text": "This update is all about making Cascade feel more polished and consistent. I unified every dropdown across the app, added new settings for original map metadata, hold-to-confirm timing and background parallax, and improved the HUD editor with a timeline scrubber and more reliable previews. The desktop app also now asks before closing.", "repo": "https://github.com/sheepexx/cascade", "demo": "https://cascade.sheepex.net/"}, {"ship_num": 3, "ts": "2026-09-26T18:42:10Z", "hours": 25.0, "multiplier": 8.56, "payout": 86, "blessing": "neutral", "text": "This update is mostly about making playtesting feel like the real game and making it easier to share your maps. The biggest change is the playtest. I rebuilt it on osu!mania’s actual rules, so hold note tails, note lock, timing and offsets now behave the way they do in osu!. On top of that there’s a new HUD editor: your map plays on autoplay while you click and drag anything on screen to move or resize it. Scroll speed and audio offset moved in there too, so the playtest settings are a lot less cluttered now. I also added Map Cards. With one click you get a clean image of your map with its MSD, skillsets, BPM, length and note stats, ready to post on Discord or anywhere else. There’s also a skillset graph under the timeline now that shows which skillset makes each part of the song hard, so you can see where a map spikes without playing it. There are a bunch of smaller changes too: Malody charts can be opened and exported, hitsounds can be copied onto every difficulty at once, there’s a colourblind-friendly lane colour option, keybinds work like osu!stable so you just type your keys in order, and the whole editor is now translated into German, Russian, Portuguese and Chinese. You can try it here: https://cascade.sheepex.net", "repo": "https://github.com/sheepexx/cascade", "demo": "https://cascade.sheepex.net/"}]...
|
[{"post_id": 82756, "ts": "202 [{"post_id": 82756, "ts": "2026-10-25T19:02:32Z", "hours": 9.1194, "text": "Been working on quite a few things lately, especially the overall look and feel of Cascade. The main menu has been reworked to feel more like osu!lazer, with new animations, an intro/outro and a new logo. I’ve also added fullscreen support for dekstop versions, graphics settings and customizable export locations. The editor now has a better map overview, a playtest button and improved audio stretching. There’s also a settings search, better messaging with GIFs and reactions, and a bunch of performance improvements and bug fixes. Still plenty more to work on!"}, {"post_id": 79533, "ts": "2026-10-14T14:21:22Z", "hours": 2.03, "text": "I changed the design language, to a more professional, simpler one. It using less system resources and its better for lower end devices."}, {"post_id": 79371, "ts": "2026-10-13T18:05:26Z", "hours": 12.2481, "text": "I worked on making new Social features, like profiles a messaging system and friend system."}, {"post_id": 74822, "ts": "2026-09-28T11:41:53Z", "hours": 1.9969, "text": "This update is mostly about polishing the interface and giving you more control over how Cascade looks and feels. One of the bigger changes is that every dropdown in Cascade now uses the same custom menu instead of mixing Cascade’s UI with native operating system selects. This affected quite a few places: dan ladders and keymodes, skins, Discord presence, collaborator roles, pack creation, batch timing, audio output, shared map difficulties and even the admin sorting menus. The dropdown component itself also got more capable. Menus can now have grouped sections, which is used to separate built-in playtest skin presets from your saved skins, and options can be shown as unavailable without completely hiding them. For example, an unsupported exclusive audio mode can still be displayed so you know the option exists, just without being able to select it. Dropdowns also behave better inside panels now. Some menus, especially ones opened from the HUD editor, could previously end up rendering underneath the panel they belonged to and look like an empty menu. They now use the proper UI layer, so menus always appear above panels while still staying underneath things like the command palette. There are three new interface settings as well. You can now tell Cascade to prefer a map’s original title and artist instead of the romanised metadata. If an osu! map contains both versions, Cascade will use the original script in the editor header, project list, now playing card and Discord Rich Presence. Maps that only have one version of their metadata behave exactly as before, and this doesn’t change anything stored in or exported with the map. The hold-to-confirm duration is customizable now too. Destructive actions previously always required holding for 750ms; you can now choose anything from 200ms up to 3 seconds depending on how quickly or carefully you want those controls to react. There’s also a new parallax strength setting for Cascade’s backgrounds. 100% gives you the movement Cascade had before, while 0% keeps the background completely still. You can also choose anything in between if you like the effect but want it to be more subtle. The HUD editor got another small usability upgrade with a proper timeline scrubber. You can drag through the song and quickly preview the HUD at any point in the map instead of having to wait for the autoplay to reach it. Seeking also keeps the full chart context intact, so things like the density graph and note count don’t suddenly change just because you’ve jumped further into the song. The HUD preview itself is more predictable now as well. Its autoplay always runs perfectly regardless of your normal humanized autoplay settings, impossible autoplay situations are ignored instead of being counted as misses, and combo and accuracy stop changing while you’re actively moving HUD elements around. And finally, the desktop app now asks before closing. Both the Exit button on the start screen and the Exit action in the command palette show the same confirmation dialog Cascade already uses for other destructive actions. Confirming still uses the normal fade-out and menu music transition, but an accidental click can’t immediately close the app anymore. You can try it here: https://cascade.sheepex.net"}, {"post_id": 74124, "ts": "2026-09-26T18:33:33Z", "hours": 24.71, "text": "Hello! I worked on Cascade a lot, mostly on playtesting and on sharing maps. The biggest change is the playtest. I rebuilt it on osu!mania’s actual rules, so hold note tails, note lock and timing now behave like in the real game. I also added a HUD editor: the map plays on autoplay and you click and drag anything on screen to move or resize it. Scroll speed and offsets live there now too, which cleaned up the settings a lot. I also made “Map Cards”. You get an image of your map with its MSD, skillsets, BPM and other stats that you can post anywhere. There’s also a skillset graph under the timeline now, so you can see which skillset makes each part of the song hard. Smaller stuff: Malody charts can be opened and exported hitsounds can be copied onto every difficulty at once a colourblind-friendly lane colour option keybinds work like osu!stable, so you just type your keys in order the whole editor is translated into German, Russian, Portuguese and Chinese Try it here: https://cascade.sheepex.net"}]...
|
Title: Cascade by @sheepex_ | Stardance
Devlogs:
Title: Cascade by @sheepex_ | Stardance
Devlogs:
Hello! I worked on Cascade a lot, mostly on playtesting and on sharing maps. The biggest change is the playtest. I rebuilt it on osu!mania’s actual rules, so hold note tails, note lock and timing now behave like in the real game. I also added a HUD editor: the map plays on autoplay and you click and drag anything on screen to move or resize it. Scroll speed and offsets live there now too, which cleaned up the settings a lot. I also made “Map Cards”. You get an image of your map with its MSD, skillsets, BPM and other stats that you can post anywhere. There’s also a skillset graph under the timeline now, so you can see which skillset makes each part of the song hard. Smaller stuff: Malody charts can be opened and exported hitsounds can be copied onto every difficulty at once a colourblind-friendly lane colour option keybinds work like osu!stable, so you just type your keys in order the whole editor is translated into German, Russian, Portuguese and Chinese Try it here: https://cascade.sheepex.net
This update is mostly about polishing the interface and giving you more control over how Cascade looks and feels. One of the bigger changes is that every dropdown in Cascade now uses the same custom menu instead of mixing Cascade’s UI with native operating system selects. This affected quite a few places: dan ladders and keymodes, skins, Discord presence, collaborator roles, pack creation, batch timing, audio output, shared map difficulties and even the admin sorting menus. The dropdown component itself also got more capable. Menus can now have grouped sections, which is used to separate built-in playtest skin presets from your saved skins, and options can be shown as unavailable without completely hiding them. For example, an unsupported exclusive audio mode can still be displayed so you know the option exists, just without being able to select it. Dropdowns also behave better inside panels now. Some menus, especially ones opened from the HUD editor, could previously end up rendering underneath the panel they belonged to and look like an empty menu. They now use the proper UI layer, so menus always appear above panels while still staying underneath things like the command palette. There are three new interface settings as well. You can now tell Cascade to prefer a map’s original title and artist instead of the romanised metadata. If an osu! map contains both versions, Cascade will use the original script in the editor header, project list, now playing card and Discord Rich Presence. Maps that only have one version of their metadata behave exactly as before, and this doesn’t change anything stored in or exported with the map. The hold-to-confirm duration is customizable now too. Destructive actions previously always required holding for 750ms; you can now choose anything from 200ms up to 3 seconds depending on how quickly or carefully you want those controls to react. There’s also a new parallax strength setting for Cascade’s backgrounds. 100% gives you the movement Cascade had before, while 0% keeps the background completely still. You can also choose anything in between if you like the effect but want it to be more subtle. The HUD editor got another small usability upgrade with a proper timeline scrubber. You can drag through the song and quickly preview the HUD at any point in the map instead of having to wait for the autoplay to reach it. Seeking also keeps the full chart context intact, so things like the density graph and note count don’t suddenly change just because you’ve jumped further into the song. The HUD preview itself is more predictable now as well. Its autoplay always runs perfectly regardless of your normal humanized autoplay settings, impossible autoplay situations are ignored instead of being counted as misses, and combo and accuracy stop changing while you’re actively moving HUD elements around. And finally, the desktop app now asks before closing. Both the Exit button on the start screen and the Exit action in the command palette show the same confirmation dialog Cascade already uses for other destructive actions. Confirming still uses the normal fade-out and menu music transition, but an accidental click can’t immediately close the app anymore. You can try it here: https://cascade.sheepex.net
I worked on making new Social features, like profiles a messaging system and friend system.
I changed the design language, to a more professional, simpler one. It using less system resources and its better for lower end devices.
Been working on quite a few things lately, especially the overall look and feel of Cascade. The main menu has been reworked to feel more like osu!lazer, with new animations, an intro/outro and a new logo. I’ve also added fullscreen support for dekstop versions, graphics settings and customizable export locations. The editor now has a better map overview, a playtest button and improved audio stretching. There’s also a settings search, better messaging with GIFs and reactions, and a bunch of performance improvements and bug fixes. Still plenty more to work on!
Ships:
This update is mostly about making playtesting feel like the real game and making it easier to share your maps. The biggest change is the playtest. I rebuilt it on osu!mania’s actual rules, so hold note tails, note lock, timing and offsets now behave the way they do in osu!. On top of that there’s a new HUD editor: your map plays on autoplay while you click and drag anything on screen to move or resize it. Scroll speed and audio offset moved in there too, so the playtest settings are a lot less cluttered now. I also added Map Cards. With one click you get a clean image of your map with its MSD, skillsets, BPM, length and note stats, ready to post on Discord or anywhere else. There’s also a skillset graph under the timeline now that shows which skillset makes each part of the song hard, so you can see where a map spikes without playing it. There are a bunch of smaller changes too: Malody charts can be opened and exported, hitsounds can be copied onto every difficulty at once, there’s a colourblind-friendly lane colour option, keybinds work like osu!stable so you just type your keys in order, and the whole editor is now translated into German, Russian, Portuguese and Chinese. You can try it here: https://cascade.sheepex.net
This update is all about making Cascade feel more polished and consistent. I unified every dropdown across the app, added new settings for original map metadata, hold-to-confirm timing and background parallax, and improved the HUD editor with a timeline scrubber and more reliable previews. The desktop app also now asks before closing.
It’s been a pretty busy couple of weeks working on Cascade, so here’s a recap of what’s changed. One of the biggest additions has been the social system. Cascade now has proper user profiles with osu! stats, badges, beatmaps and mapping activity. You can search for other mappers, add friends, see who’s online and send private messages. I’ve also added replies, reactions, GIFs, notifications and privacy settings. Another thing I’ve been working on is mapping statistics. Cascade now tracks how much time you actually spend mapping, including individual maps and difficulties, playtesting, and other editing activity. There’s also an activity calendar on your profile. More recently, I’ve been focusing on making Cascade feel more like a proper desktop application. The main menu has been redesigned around osu!lazer, including new animations, a new logo, intro/outro sequences and improved scaling. There’s also a new Graphics tab with fullscreen, borderless and windowed modes, as well as FPS limiting. The editor has received some improvements too: A floating map overview inspired by Malody A dedicated playtest button Better audio time-stretching when slowing down songs Customizable export locations Settings search and shortcut conflict detection Various UI improvements and fixes I’ve also spent quite a bit of time on performance and stability, especially with larger map libraries, collaborative editing and the desktop app. There’s still a lot I want to improve, but I’m pretty happy with how Cascade has been progressing lately. Thanks to everyone who’s been trying it out and giving feedback!...
|
1793350647.4517915
|
1793437047.4517915
|
|
54063
|
TermTab by @bhlcusd | Stardance
|
bhlcusd
|
1
|
15.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-11T23:29:27Z", "hours": 15.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "TermTab GUIs are boring; try a terminal window instead! Quick Start Explore TermTab: Try It Now! Features Clean & Modern Design - Dynamic scaling with dark mode support inspired by Apple Terminal’s Basic theme. Search the Web - use goto and search to navigate to a website or search with your favorite search engine, respectively. Get Info - use loc and info to fetch info about your current IP address or US zip code or information about your session, respectively. Check the Weather - use weather (and any subsequent flags) to fetch the current and forecasted weather for your estimated location or US zip code. Technicals Built on Svelte - Chosen for its highly interactive design, Svelte helps remove the tedious DOM manipulation that comes with basic JavaScript and HTML. With its direct implementation of TypeScript, Svelte made it easy to develop the website without the HTML and CSS getting in the way. TailwindCSS - TailwindCSS was chosen for most of the styling because it provided and easy, plug-and-play solution for this simple application. It streamlined the codebase by removing verbose CSS. Custom TypeScript - The most substantial aspects of this project is the custom TypeScript implementation to abstract the terminal-DOM manipulations from the commands. Using Vite’s import.meta.glob , the website dynamically fetches the commands from $lib/terminal/commands , making it easy for new commands to be created or altered. However, much of the work was dedicated to developing the Terminal class outlined in the next section. The Terminal Seperating the Frontend and Backend - The bulk of the terminal’s logic resides in the Terminal class. It provides functions for commands to “print” to the console (appends the information as unique “lines” in a list), acting similar to any other terminal I/O program. Using TypeScript - One of the most useful features that comes with TypeScript is the ability to describe how objects can behave relative to each other. For example, a Command class is created as the “blueprint” for any terminal command and has methods for executing and providing help. By not hard-coding the commands directly in the terminal, users can create commands to supplement the default commands. Commands Vary in Complexity - Although most of the commands are quite straightforward, some are more complex and use the user’s computer to complete its task. Take for example the weather command. It uses OpenMeteo’s API to fetch the weather, but that API requires longitude and latitude coordinates. To resolve this issue, the loc command was created to use the user’s estimated location fetched from freeipapi.com or, using a US zip code, zippopotam.us . Then, the information is converted into a user-friendly output, with the number of forecasted days being controlled by the user. All Local - Notably, TermTab does not have any centeralized server to phone home to. Instead, the entire website is run “locally” by the user’s browser. Since there is no need to host a centeralized database, TermTab is shipped like any other static webpage (just with some JS/TS on top). Acknowledgements Svelte & SvelteKit Documentation - Assisted in the setup process and converting it into a static webpage using adapter-static and information about dynamically importing TypeScript files. TailwindCSS Documentation - Assisted in finding corresponding CSS tags", "repo": "https://github.com/brandonfglx/TermTab", "demo": "https://brandonfglx.github.io/TermTab/"}]...
|
[{"post_id": 66007, "ts": "202 [{"post_id": 66007, "ts": "2026-09-11T15:00:13Z", "hours": 0.3653, "text": "Devlog 5: Get Those Minutes Whoops, I didn’t configure Svelte’s adapter-static correctly and Hack Club is punishing me for it! Apparently, the website detector requires it to be completely static with an index.html . The only fix was this one line:"}, {"post_id": 65767, "ts": "2026-09-11T03:57:24Z", "hours": 1.605, "text": "Devlog 4: The Final Touches After a little more refinement (and an embarassingly long time for a README), I finally got TermTab in a polished enough state for a ship! Here’s a GIF demo-ing TermTab:"}, {"post_id": 65210, "ts": "2026-09-10T05:41:07Z", "hours": 5.0369, "text": "Devlog 3: Wrapping Things Up After a few more hours, I finally integrated a stable production-ready API to TermTab. Right now, there are two new commands: loc and weather . Loc uses the user’s local IP address (from freeipapi.com) or a provided US zip code (uses zippopotam.us) to find coordinates, city, state, and country name (and IP address, if applicable). I also rewrote the search command to allow the user to use their preferred search engine (and incorporated the ask command into it). Now, you can search YouTube, Wikipedia, and DuckDuckGo! I am considering on shipping TermTab as it is after finishing up on the rest of the project (like README.md)."}, {"post_id": 63849, "ts": "2026-09-07T20:35:26Z", "hours": 4.1411, "text": "Devlog 2: What Makes a Terminal a Terminal? After a few hours of work, I was able to rewrite how commands work for TermTab. Before, commands were hardcoded into the execute() method in the Terminal class, which itself was integrated as part of the Terminal component. Now, the Terminal class is its own svelte.ts file and commands are fetched dynamically using Vite’s import.meta.glob() . I also added/modified a few commands including: time , info , and help . help now uses a dynamic fetching system, with each command managing its own help menu with command parameters as a string[] . As before, if you have any suggestions, feel free to comment!"}, {"post_id": 62622, "ts": "2026-09-06T02:51:22Z", "hours": 3.7725, "text": "Devlog 1: Making Something Familiar Just began on my second project for Stardance. I started very late, but I want to complete this and the basic OS missions before Stardance is over. Currently, I created a class in TypeScript to manage input and output and implemented a few programs. The input is directly taken from DOM listeners instead of an element because some functionality, like ctrl+c wouldn’t work with basic input. Besides, the custom code wasn’t a lot, with most of it dedicated to parse() which uses a simple switch statement. Currently, there isn’t much in the way of interactivity, but I plan on implementing a few programs: weather (fetches current weather based on IP address or inputed zip code/city) calc (currently similar to eval(), but likely a custom dual stack calculator) snake (what can I even say?) If you have another ideas for programs, feel free to share/comment."}]...
|
Title: TermTab by @bhlcusd | Stardance
Devlogs:
D Title: TermTab by @bhlcusd | Stardance
Devlogs:
Devlog 1: Making Something Familiar Just began on my second project for Stardance. I started very late, but I want to complete this and the basic OS missions before Stardance is over. Currently, I created a class in TypeScript to manage input and output and implemented a few programs. The input is directly taken from DOM listeners instead of an element because some functionality, like ctrl+c wouldn’t work with basic input. Besides, the custom code wasn’t a lot, with most of it dedicated to parse() which uses a simple switch statement. Currently, there isn’t much in the way of interactivity, but I plan on implementing a few programs: weather (fetches current weather based on IP address or inputed zip code/city) calc (currently similar to eval(), but likely a custom dual stack calculator) snake (what can I even say?) If you have another ideas for programs, feel free to share/comment.
Devlog 2: What Makes a Terminal a Terminal? After a few hours of work, I was able to rewrite how commands work for TermTab. Before, commands were hardcoded into the execute() method in the Terminal class, which itself was integrated as part of the Terminal component. Now, the Terminal class is its own svelte.ts file and commands are fetched dynamically using Vite’s import.meta.glob() . I also added/modified a few commands including: time , info , and help . help now uses a dynamic fetching system, with each command managing its own help menu with command parameters as a string[] . As before, if you have any suggestions, feel free to comment!
Devlog 3: Wrapping Things Up After a few more hours, I finally integrated a stable production-ready API to TermTab. Right now, there are two new commands: loc and weather . Loc uses the user’s local IP address (from freeipapi.com) or a provided US zip code (uses zippopotam.us) to find coordinates, city, state, and country name (and IP address, if applicable). I also rewrote the search command to allow the user to use their preferred search engine (and incorporated the ask command into it). Now, you can search YouTube, Wikipedia, and DuckDuckGo! I am considering on shipping TermTab as it is after finishing up on the rest of the project (like README.md).
Devlog 4: The Final Touches After a little more refinement (and an embarassingly long time for a README), I finally got TermTab in a polished enough state for a ship! Here’s a GIF demo-ing TermTab:
Devlog 5: Get Those Minutes Whoops, I didn’t configure Svelte’s adapter-static correctly and Hack Club is punishing me for it! Apparently, the website detector requires it to be completely static with an index.html . The only fix was this one line:
Ships:
TermTab GUIs are boring; try a terminal window instead! Quick Start Explore TermTab: Try It Now! Features Clean & Modern Design - Dynamic scaling with dark mode support inspired by Apple Terminal’s Basic theme. Search the Web - use goto and search to navigate to a website or search with your favorite search engine, respectively. Get Info - use loc and info to fetch info about your current IP address or US zip code or information about your session, respectively. Check the Weather - use weather (and any subsequent flags) to fetch the current and forecasted weather for your estimated location or US zip code. Technicals Built on Svelte - Chosen for its highly interactive design, Svelte helps remove the tedious DOM manipulation that comes with basic JavaScript and HTML. With its direct implementation of TypeScript, Svelte made it easy to develop the website without the HTML and CSS getting in the way. TailwindCSS - TailwindCSS was chosen for most of the styling because it provided and easy, plug-and-play solution for this simple application. It streamlined the codebase by removing verbose CSS. Custom TypeScript - The most substantial aspects of this project is the custom TypeScript implementation to abstract the terminal-DOM manipulations from the commands. Using Vite’s import.meta.glob , the website dynamically fetches the commands from $lib/terminal/commands , making it easy for new commands to be created or altered. However, much of the work was dedicated to developing the Terminal class outlined in the next section. The Terminal Seperating the Frontend and Backend - The bulk of the terminal’s logic resides in the Terminal class. It provides functions for commands to “print” to the console (appends the information as unique “lines” in a list), acting similar to any other terminal I/O program. Using TypeScript - One of the most useful features that comes with TypeScript is the ability to describe how objects can behave relative to each other. For example, a Command class is created as the “blueprint” for any terminal command and has methods for executing and providing help. By not hard-coding the commands directly in the terminal, users can create commands to supplement the default commands. Commands Vary in Complexity - Although most of the commands are quite straightforward, some are more complex and use the user’s computer to complete its task. Take for example the weather command. It uses OpenMeteo’s API to fetch the weather, but that API requires longitude and latitude coordinates. To resolve this issue, the loc command was created to use the user’s estimated location fetched from freeipapi.com or, using a US zip code, zippopotam.us . Then, the information is converted into a user-friendly output, with the number of forecasted days being controlled by the user. All Local - Notably, TermTab does not have any centeralized server to phone home to. Instead, the entire website is run “locally” by the user’s browser. Since there is no need to host a centeralized database, TermTab is shipped like any other static webpage (just with some JS/TS on top). Acknowledgements Svelte & SvelteKit Documentation - Assisted in the setup process and converting it into a static webpage using adapter-static and information about dynamically importing TypeScript files. TailwindCSS Documentation - Assisted in finding corresponding CSS tags...
|
1793350648.7337568
|
1793437048.7337568
|
|
54069
|
My personal site :) by @Abis-Aman | Stardance
|
Abis-Aman
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-19T10:50:10Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "this is my first every that is made with my taste i am thinking that my web eventhough all in one web it has all the requirmants like my web is has the home about and projects that all and the when clicked the page moves to the destination with a smooth glid", "repo": "https://github.com/AbisAman-Dev/My-Personal-Site", "demo": "https://abisaman-dev.github.io/My-Personal-Site/"}]...
|
[{"post_id": 70547, "ts": "202 [{"post_id": 70547, "ts": "2026-09-19T10:47:47Z", "hours": 0.8708, "text": "**Dev log:**so after 2 hours of codding i thought of ending the project as i would only have this lap for two days"}, {"post_id": 70192, "ts": "2026-09-18T17:43:57Z", "hours": 1.1756, "text": "#Devlog-1 so i started doing the html and now only the css part is left and some little html"}]...
|
Title: My personal site :) by @Abis-Aman | Stardan Title: My personal site :) by @Abis-Aman | Stardance
Devlogs:
#Devlog-1 so i started doing the html and now only the css part is left and some little html
**Dev log:**so after 2 hours of codding i thought of ending the project as i would only have this lap for two days
Ships:
this is my first every that is made with my taste i am thinking that my web eventhough all in one web it has all the requirmants like my web is has the home about and projects that all and the when clicked the page moves to the destination with a smooth glid...
|
1793350649.9694085
|
1793437049.9694085
|
|
2879
|
productive home by @Tony1292 | Stardance
|
Tony1292
|
1
|
10.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T01:07:48Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I have made a website that solves most of my family problems. The point is that you don’t forget anything and the whole family works together. This website will help your family. This was such a helpful project becasue it shows that coding and being on the computer in not a waste of time as my family says but can solve real promblems.", "repo": "https://github.com/tonymurilloambriz-bit/My-personal-webiste", "demo": "https://hom22.oneapp.dev/"}]...
|
[{"post_id": 74694, "ts": "202 [{"post_id": 74694, "ts": "2026-09-28T00:42:32Z", "hours": 0.5506, "text": "I have finished my project I have finished the chores and the shopping list section of the website. I have really enjoyed this project."}, {"post_id": 47188, "ts": "2026-08-14T22:20:39Z", "hours": 1.1003, "text": "I have made some more changes on the colors but it will be hard to make the chores list an shopping list. Since I decided to make all the apps. The reason why it took so long was that I did not save the code and will big brain me lost the code."}, {"post_id": 7218, "ts": "2026-06-12T01:33:32Z", "hours": 1.3825, "text": "I was able to make the website look more modern and overall better looking. Before I did this I accidentally deleted the tab where I had my code and I did not save the code."}, {"post_id": 5160, "ts": "2026-06-08T20:54:21Z", "hours": 2.7561, "text": "I made the chore app with Lovable.AI and put it into the html file so know when you click on the chore menu it takes you there. The next step is to add a button in the Lovable app so you can go back to the main menu."}, {"post_id": 4532, "ts": "2026-06-07T21:29:51Z", "hours": 1.1172, "text": "So I made the main home page with html but the apps inside the website where made by me using lovable.AI. So the main website is all most ready."}, {"post_id": 3751, "ts": "2026-06-06T20:00:00Z", "hours": 1.0525, "text": "I got the button to work for one of the menu icons. But now I know how to do the rest. So now when you click on the chores word, it brings you to the chores page."}, {"post_id": 3205, "ts": "2026-06-06T01:11:34Z", "hours": 1.3958, "text": "I got the the buttons to work so when you click the button it brings you to another page."}, {"post_id": 2978, "ts": "2026-06-05T22:02:21Z", "hours": 1.0089, "text": "So I am making a website where the user lists what is needed in the house like food or basic supplies. So when the user runs out of the supplies they will mark it as needed. there will also be a section for chores so you can add the family and each person has chores they have to complete before the day ends."}]...
|
Title: productive home by @Tony1292 | Stardance
D Title: productive home by @Tony1292 | Stardance
Devlogs:
So I am making a website where the user lists what is needed in the house like food or basic supplies. So when the user runs out of the supplies they will mark it as needed. there will also be a section for chores so you can add the family and each person has chores they have to complete before the day ends.
I got the the buttons to work so when you click the button it brings you to another page.
I got the button to work for one of the menu icons. But now I know how to do the rest. So now when you click on the chores word, it brings you to the chores page.
So I made the main home page with html but the apps inside the website where made by me using lovable.AI. So the main website is all most ready.
I made the chore app with Lovable.AI and put it into the html file so know when you click on the chore menu it takes you there. The next step is to add a button in the Lovable app so you can go back to the main menu.
I was able to make the website look more modern and overall better looking. Before I did this I accidentally deleted the tab where I had my code and I did not save the code.
I have made some more changes on the colors but it will be hard to make the chores list an shopping list. Since I decided to make all the apps. The reason why it took so long was that I did not save the code and will big brain me lost the code.
I have finished my project I have finished the chores and the shopping list section of the website. I have really enjoyed this project.
Ships:
I have made a website that solves most of my family problems. The point is that you don’t forget anything and the whole family works together. This website will help your family. This was such a helpful project becasue it shows that coding and being on the computer in not a waste of time as my family says but can solve real promblems....
|
1793350651.1314094
|
1793437051.1314094
|
|
40776
|
Generic Functional Programming Language by @Yoyodo Generic Functional Programming Language by @Yoyodotpy | Stardance...
|
Yoyodotpy
|
1
|
17.51
|
274
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-12T20:18:20Z", "hours": 17.0, "multiplier": 15.69, "payout": 274, "blessing": "neutral", "text": "This is a simple interpretted functional programming language. Originally, I intended for it to be compiled, but after dealing with llvm for a few days I gave up on this and just made it be interpretted. I struggled a lot with making the language not look incredibly ugly as I was designing it, but in the end I managed to make it look half decent. It also only works in the cli and has no options beyond just putting the file path to run a program. Despite all that, I think that this went pretty well. It was my first time trying to make a language, and I learnt a whole lot about the backend and design of programming languages (and gained a couple more strong opinions about programming syntax). It ended up being functional in both ways, and capable of making and running simple programs. I’ll probably try to make a new language in the future, with everything I’ve learnt.", "repo": "https://github.com/Yoyodotpy/programming-language", "demo": "https://github.com/Yoyodotpy/programming-language/releases/latest"}]...
|
[{"post_id": 67443, "ts": "202 [{"post_id": 67443, "ts": "2026-09-13T15:32:25Z", "hours": 0.5092, "text": "I added help text and changed the demo folder to be called examples."}, {"post_id": 66866, "ts": "2026-09-12T20:04:18Z", "hours": 1.7833, "text": "I got this ready to ship because I lost interest in this, but i might make another project in the remaining time in Stardance. Either way, i finished the README.md, added a release with prebuilt binaries, and made a demo using asciinema."}, {"post_id": 40916, "ts": "2026-08-04T19:04:54Z", "hours": 2.2236, "text": "llvm is pain it compiles but it doesnt work i might just pivot and make it interpretted only, maybe have it transpile to scheme instead."}, {"post_id": 39809, "ts": "2026-08-03T01:30:00Z", "hours": 3.8047, "text": "I got started on making the compiler convert my language to LLVM IR code, and it genuinely sucks. I basically need to make my language un-functional itself into a primitive language, and I need to deal with the limits of my own language, golang, and C at the same time and it’s torture. I’m powering through though and I’m almost at a point where it’ll actually manage to compile my language."}, {"post_id": 38588, "ts": "2026-08-01T02:06:56Z", "hours": 3.6814, "text": "This is now technically a usable programming language! It can interpret code, and I even made a Fibonacci program. I spent most of the day making some basic primitives, alongside starting the standard library with things like true, false, or, and, not, nil, print, addition, multiplication, subtraction, division and more! Tomorrow I’ll set it up with LLVM and try my best to get it to actually compile. Wish me luck! Also, if any of you have ideas for how I can make the code less ugly, I would appreciate some advice."}, {"post_id": 37999, "ts": "2026-07-31T03:30:44Z", "hours": 3.1147, "text": "I pretty much finished the AST and I’m basically ready to start working on the interpretter."}, {"post_id": 37267, "ts": "2026-07-29T20:48:55Z", "hours": 2.8633, "text": "I finalized the lexer and I’m almost done with generating the AST, so nearly done with the boring bit! I also made some very basic test programs."}]...
|
Title: Generic Functional Programming Language by Title: Generic Functional Programming Language by @Yoyodotpy | Stardance
Devlogs:
I finalized the lexer and I’m almost done with generating the AST, so nearly done with the boring bit! I also made some very basic test programs.
I pretty much finished the AST and I’m basically ready to start working on the interpretter.
This is now technically a usable programming language! It can interpret code, and I even made a Fibonacci program. I spent most of the day making some basic primitives, alongside starting the standard library with things like true, false, or, and, not, nil, print, addition, multiplication, subtraction, division and more! Tomorrow I’ll set it up with LLVM and try my best to get it to actually compile. Wish me luck! Also, if any of you have ideas for how I can make the code less ugly, I would appreciate some advice.
I got started on making the compiler convert my language to LLVM IR code, and it genuinely sucks. I basically need to make my language un-functional itself into a primitive language, and I need to deal with the limits of my own language, golang, and C at the same time and it’s torture. I’m powering through though and I’m almost at a point where it’ll actually manage to compile my language.
llvm is pain it compiles but it doesnt work i might just pivot and make it interpretted only, maybe have it transpile to scheme instead.
I got this ready to ship because I lost interest in this, but i might make another project in the remaining time in Stardance. Either way, i finished the README.md, added a release with prebuilt binaries, and made a demo using asciinema.
I added help text and changed the demo folder to be called examples.
Ships:
This is a simple interpretted functional programming language. Originally, I intended for it to be compiled, but after dealing with llvm for a few days I gave up on this and just made it be interpretted. I struggled a lot with making the language not look incredibly ugly as I was designing it, but in the end I managed to make it look half decent. It also only works in the cli and has no options beyond just putting the file path to run a program. Despite all that, I think that this went pretty well. It was my first time trying to make a language, and I learnt a whole lot about the backend and design of programming languages (and gained a couple more strong opinions about programming syntax). It ended up being functional in both ways, and capable of making and running simple programs. I’ll probably try to make a new language in the future, with everything I’ve learnt....
|
1793350652.3425076
|
1793437052.3425076
|
|
54108
|
Pantry_Scanner by @theodora | Stardance
|
theodora
|
1
|
20.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-13T17:11:38Z", "hours": 20.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Finally, I finished my first version of my pantry scanner. Due to camera quality, sometimes it can read the expiry date; sometimes it can’t, but I already tried my best to make it work What I actually built –Firmware on ESP32-CAM: press a button, it captures a photo and uploads it over WI-Fi – A local Python backend that reads the photo, tries OCR for the expiry date, attempts barcode decoding using an external API and saves everything to a database – A web dashboard showing every scanned item sorted by soonest-expiring first, with edit and remove buttons for fixing up anything the camera couldn’t capture The hard part The hardest part is to get the camera to read text and turn it into the dashboard. I went through extensive debugging, more than I have recorded in the devlog. Fixing the lens, dealing with blur, and looking at the barcode-decoding problem, it turned out the camera quality is the major issue. Next Step – Use a dedicated barcode scanner instead of relying on the camera –Create a fixed scanning stand using 3D printing for more consistent capture quality than hand positioning. – Attach a macro lens attachment for the camera to improve small print in OCR", "repo": "https://github.com/theodora-sin/pantry_scanner", "demo": ""}]...
|
[{"post_id": 67514, "ts": "202 [{"post_id": 67514, "ts": "2026-09-13T17:08:53Z", "hours": 3.7453, "text": "Devlog 5: Finally, I finish my first version of my pantry scanner, due to camera quality, sometime it can read the expiry date, sometime it can’t, but I already try my best to make it work. I can’t film the whole process, but I try to snip a bit of how this camera actually work in screenshot and a video"}, {"post_id": 65995, "ts": "2026-09-11T14:43:02Z", "hours": 1.2389, "text": "Devlog 4: Today, I connected the front and back end; however, the camera quality wasn’t as good as I expected, and it couldn’t scan the barcode to retrieve the data. Now, I am rethinking how to retrieve the data and what the next step should be."}, {"post_id": 64241, "ts": "2026-09-08T14:30:46Z", "hours": 9.4747, "text": "Devlog3: ##Working on front end My front end is using Python as the main language, alongside html and css, the website look plain as I just built the basic version Next step: connect front end and back end"}, {"post_id": 59594, "ts": "2026-09-01T14:40:45Z", "hours": 1.7883, "text": "Devlog 2: This devlog, it records how the front end works. I use arduino IDE with coding language C+ to make the ESP32 Camera work, It can capture 1600x1200px, which is useful for the backend. The backend is used to store the captured picture and analyse the expiry date of the food."}, {"post_id": 57898, "ts": "2026-08-30T07:12:02Z", "hours": 3.9806, "text": "#Devlog 1: Hi, welcome to a hardware project devlog. In this project, I am creating a pantry scanner. I have drawn my schematic board and am soldering the PCB. I forgot to record my soldering part, but here is the overview of the project."}]...
|
Title: Pantry_Scanner by @theodora | Stardance
De Title: Pantry_Scanner by @theodora | Stardance
Devlogs:
#Devlog 1: Hi, welcome to a hardware project devlog. In this project, I am creating a pantry scanner. I have drawn my schematic board and am soldering the PCB. I forgot to record my soldering part, but here is the overview of the project.
Devlog 2: This devlog, it records how the front end works. I use arduino IDE with coding language C+ to make the ESP32 Camera work, It can capture 1600x1200px, which is useful for the backend. The backend is used to store the captured picture and analyse the expiry date of the food.
Devlog3: ##Working on front end My front end is using Python as the main language, alongside html and css, the website look plain as I just built the basic version Next step: connect front end and back end
Devlog 4: Today, I connected the front and back end; however, the camera quality wasn’t as good as I expected, and it couldn’t scan the barcode to retrieve the data. Now, I am rethinking how to retrieve the data and what the next step should be.
Devlog 5: Finally, I finish my first version of my pantry scanner, due to camera quality, sometime it can read the expiry date, sometime it can’t, but I already try my best to make it work. I can’t film the whole process, but I try to snip a bit of how this camera actually work in screenshot and a video
Ships:
Finally, I finished my first version of my pantry scanner. Due to camera quality, sometimes it can read the expiry date; sometimes it can’t, but I already tried my best to make it work What I actually built –Firmware on ESP32-CAM: press a button, it captures a photo and uploads it over WI-Fi – A local Python backend that reads the photo, tries OCR for the expiry date, attempts barcode decoding using an external API and saves everything to a database – A web dashboard showing every scanned item sorted by soonest-expiring first, with edit and remove buttons for fixing up anything the camera couldn’t capture The hard part The hardest part is to get the camera to read text and turn it into the dashboard. I went through extensive debugging, more than I have recorded in the devlog. Fixing the lens, dealing with blur, and looking at the barcode-decoding problem, it turned out the camera quality is the major issue. Next Step – Use a dedicated barcode scanner instead of relying on the camera –Create a fixed scanning stand using 3D printing for more consistent capture quality than hand positioning. – Attach a macro lens attachment for the camera to improve small print in OCR...
|
1793350653.5898037
|
1793437053.5898037
|
|
58952
|
My own site! by @kajamaniyograj | Stardance
|
kajamaniyograj
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-11T14:00:05Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i used ai but i tryed my best to complete this project", "repo": "https://github.com/kajamaniyograj-cyber/personal-site", "demo": "https://kajamaniyograj-cyber.github.io/personal-site"}]...
|
[{"post_id": 65448, "ts": "202 [{"post_id": 65448, "ts": "2026-09-10T16:15:50Z", "hours": 0.4186, "text": "added standoffs to hold the display in place. With this the project is finally complete(atleast i hope so:)"}]...
|
Title: My own site! by @kajamaniyograj | Stardance Title: My own site! by @kajamaniyograj | Stardance
Devlogs:
added standoffs to hold the display in place. With this the project is finally complete(atleast i hope so:)
Ships:
i used ai but i tryed my best to complete this project...
|
1793350657.4205222
|
1793437057.4205222
|
|
54137
|
Telegram assistent bot by @kdenis | Stardance
|
kdenis
|
1
|
18.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-24T14:27:28Z", "hours": 18.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? I built a simple Telegram bot that helps users track their daily activities (like sleep, workouts, or study time) and generates visual weekly charts using matplotlib to track progress over time. What was challenging? The most challenging part was understanding how to implement multi-step input flows using conversation handlers (like chaining prompts for logging data) and structuring the memory logic to track user activities dynamically over a week without needing a heavy database setup. What are you proud of? I am proud that I successfully learned Python from scratch while building this project! I used AI purely as a tutor—to explain concepts and guide me—rather than writing the code for me, meaning I wrote and understood every line myself. I am also proud to have mastered building fully functional Telegram bots, dynamic chart rendering, and asynchronous handling. What should people know so they can test your project? Simply open Telegram, search for @MySimpleAssistentBot (or use the link https://t.me/MySimpleAssistentBot ( https://t.me/MySimpleAssistentBot?utm_source=gemini )), and hit /start . You can use /log to record activities, /getstatistic to view your weekly graph, and /help for a list of all commands.", "repo": "https://github.com/deniska-design/telegram-bot", "demo": "https://t.me/MySimpleAssistentBot"}]...
|
[{"post_id": 69656, "ts": "202 [{"post_id": 69656, "ts": "2026-09-17T14:50:21Z", "hours": 7.7464, "text": "Devlog #4: Bot Architecture Cleanup, Persistence & Statistical Charts Hey everyone! Here’s an update on what I’ve been working on for my project over the past few days. 1. Weekly Activity Charts & Statistics The biggest new feature is visual weekly statistics! Now users can see a chart/graph of their activity over the course of the week. The Challenge: Storing data per user, per specific activity, and across each day of the week. The Solution: Kept it clean and simple using user_data . Persistence: Added persistent storage so data isn’t lost on restart. Honestly, I was mind-blown by how powerful Python persistence is—enabling this took literally just a couple of lines of code! 2. Refactoring & Modularizing Code I decided it was time to break up my codebase into multiple modules/files: Separation of Concerns: Initially, my architecture felt a bit messy—files knew too much about each other’s internal logic and were tightly coupled. I refactored the project so that each file and module is more autonomous and encapsulated. Troubleshooting: Splitting the code broke a few things at first, but after a bit of debugging, everything is working smoothly now. 3. User Experience & Input Validation I made several quality-of-life improvements to make the bot feel much more robust: Daily Log Reminders: Added a daily reminder prompting users to log their data for the day. (Note: Users just need to run /start once to initialize reminders and resets). Strict Input Validation: Added input filters. If a step requires a number, invalid text is rejected; if it asks to pick an activity, custom inputs are blocked. Python vs C++ appreciation: Coming from a C++ background, it constantly amazes me how complex user interactions and data handling can be written in just a few lines of Python! What’s Next? Writing a solid README.md Submitting the project!"}, {"post_id": 60747, "ts": "2026-09-03T09:55:40Z", "hours": 3.9458, "text": "Devlog #3: Changes In this update, I focused on refining the user metrics and implementing the automated weekly reset mechanism. Metric Adjustments: Removed water intake tracking from the list of monitored metrics. Simply put, I personally don’t track my daily water intake, so I decided to streamline the bot’s focus. Automated Weekly Reset: Spent most of my development time implementing a scheduled automated reset system that triggers every Saturday at 12:00 PM . While the underlying logic isn’t overly complex, working through it while learning Python took more time than expected. As shown in the screenshot, where test data entered before 11:31 AM was automatically cleared upon trigger. Learnings Logging ( logger.info ): Discovered how extremely valuable logger.info is for debugging scheduled jobs and tracking state transitions. Without proper logging, diagnosing automated execution bugs would have been significantly harder. Next Steps End-of-Week Summary Reporting: Implement logic to show results right before the automated reset occurs. Weekly Analytics & Graphs: Add visual statistics showing daily progress over the past week"}, {"post_id": 56574, "ts": "2026-08-28T11:53:37Z", "hours": 4.8633, "text": "DevLog #2: Switching Libraries Initially, I started building this bot using another library. However, I decided to rewrite the codebase using python-telegram-bot Why? python-telegram-bot is much more practical and scalable for complex, multi-step projects. Since I plan to build bigger features in the future, I figured it was best to learn and adopt a solid framework right now. I spent about an hour migrating my previous logic to PTB, and it was definitely worth it! New Features I added core bot commands and integrated custom reply keyboards: /help : Shows available commands. /log : Prompts you to pick an activity via a custom reply keyboard and log your stats. /analytic : Allows you to select an activity and view your current recorded progress. The trickiest part: was figuring out how to handle sequential user inputs : First function: Catches the initial command (e.g., /log ). Second function: Receives the chosen activity (e.g., Sport ), asks a follow-up question (e.g., “How long have you been doing this?” ) Third function: Takes the entered number/value and saves it to the selected activity state. fix-it list: Custom Prompts per Activity: Currently, selecting “Water” asks “How long have you been doing this?” instead of “How much water did you drink?” . I need to customize questions based on the activity type. Data Accumulation: Right now, logging a value overwrites context.user_data[activity] instead of adding to it. I will fix this so values accumulate properly over time. Weekly Reset: I need to implement an automated mechanism to reset tracking data every Saturday. Since fixing these remaining issues won’t take too much time, I’ll soon be ready to add new features. So let me know if you got any ideas in the comments below"}, {"post_id": 54384, "ts": "2026-08-25T11:25:35Z", "hours": 1.6775, "text": "DevLog #1: Learning Python Through Practice This is my first Python project. Instead of just memorizing syntax from tutorials, I decided to learn the language through hands-on practice. To test this approach, I’m building a simple Telegram Bot designed to track daily health habits. The Core Concept The bot will allow users to quickly log their daily metrics: Sleep duration Water intake Physical activity / workouts It stores this data and, upon clicking a button, generates a weekly summary analysis to track progress. Current Progress So far, I have: Created and structured the GitHub repository. Added essential initial files ( .gitignore , dependencies, configuration). Developed a basic, functional Telegram bot prototype. The Experiment This project isn’t meant to be a full-scale commercial application; it’s a personal challenge: Can I effectively master Python by building functional, real-world projects from scratch?"}]...
|
Title: Telegram assistent bot by @kdenis | Stardan Title: Telegram assistent bot by @kdenis | Stardance
Devlogs:
DevLog #1: Learning Python Through Practice This is my first Python project. Instead of just memorizing syntax from tutorials, I decided to learn the language through hands-on practice. To test this approach, I’m building a simple Telegram Bot designed to track daily health habits. The Core Concept The bot will allow users to quickly log their daily metrics: Sleep duration Water intake Physical activity / workouts It stores this data and, upon clicking a button, generates a weekly summary analysis to track progress. Current Progress So far, I have: Created and structured the GitHub repository. Added essential initial files ( .gitignore , dependencies, configuration). Developed a basic, functional Telegram bot prototype. The Experiment This project isn’t meant to be a full-scale commercial application; it’s a personal challenge: Can I effectively master Python by building functional, real-world projects from scratch?
DevLog #2: Switching Libraries Initially, I started building this bot using another library. However, I decided to rewrite the codebase using python-telegram-bot Why? python-telegram-bot is much more practical and scalable for complex, multi-step projects. Since I plan to build bigger features in the future, I figured it was best to learn and adopt a solid framework right now. I spent about an hour migrating my previous logic to PTB, and it was definitely worth it! New Features I added core bot commands and integrated custom reply keyboards: /help : Shows available commands. /log : Prompts you to pick an activity via a custom reply keyboard and log your stats. /analytic : Allows you to select an activity and view your current recorded progress. The trickiest part: was figuring out how to handle sequential user inputs : First function: Catches the initial command (e.g., /log ). Second function: Receives the chosen activity (e.g., Sport ), asks a follow-up question (e.g., “How long have you been doing this?” ) Third function: Takes the entered number/value and saves it to the selected activity state. fix-it list: Custom Prompts per Activity: Currently, selecting “Water” asks “How long have you been doing this?” instead of “How much water did you drink?” . I need to customize questions based on the activity type. Data Accumulation: Right now, logging a value overwrites context.user_data[activity] instead of adding to it. I will fix this so values accumulate properly over time. Weekly Reset: I need to implement an automated mechanism to reset tracking data every Saturday. Since fixing these remaining issues won’t take too much time, I’ll soon be ready to add new features. So let me know if you got any ideas in the comments below
Devlog #3: Changes In this update, I focused on refining the user metrics and implementing the automated weekly reset mechanism. Metric Adjustments: Removed water intake tracking from the list of monitored metrics. Simply put, I personally don’t track my daily water intake, so I decided to streamline the bot’s focus. Automated Weekly Reset: Spent most of my development time implementing a scheduled automated reset system that triggers every Saturday at 12:00 PM . While the underlying logic isn’t overly complex, working through it while learning Python took more time than expected. As shown in the screenshot, where test data entered before 11:31 AM was automatically cleared upon trigger. Learnings Logging ( logger.info ): Discovered how extremely valuable logger.info is for debugging scheduled jobs and tracking state transitions. Without proper logging, diagnosing automated execution bugs would have been significantly harder. Next Steps End-of-Week Summary Reporting: Implement logic to show results right before the automated reset occurs. Weekly Analytics & Graphs: Add visual statistics showing daily progress over the past week
Devlog #4: Bot Architecture Cleanup, Persistence & Statistical Charts Hey everyone! Here’s an update on what I’ve been working on for my project over the past few days. 1. Weekly Activity Charts & Statistics The biggest new feature is visual weekly statistics! Now users can see a chart/graph of their activity over the course of the week. The Challenge: Storing data per user, per specific activity, and across each day of the week. The Solution: Kept it clean and simple using user_data . Persistence: Added persistent storage so data isn’t lost on restart. Honestly, I was mind-blown by how powerful Python persistence is—enabling this took literally just a couple of lines of code! 2. Refactoring & Modularizing Code I decided it was time to break up my codebase into multiple modules/files: Separation of Concerns: Initially, my architecture felt a bit messy—files knew too much about each other’s internal logic and were tightly coupled. I refactored the project so that each file and module is more autonomous and encapsulated. Troubleshooting: Splitting the code broke a few things at first, but after a bit of debugging, everything is working smoothly now. 3. User Experience & Input Validation I made several quality-of-life improvements to make the bot feel much more robust: Daily Log Reminders: Added a daily reminder prompting users to log their data for the day. (Note: Users just need to run /start once to initialize reminders and resets). Strict Input Validation: Added input filters. If a step requires a number, invalid text is rejected; if it asks to pick an activity, custom inputs are blocked. Python vs C++ appreciation: Coming from a C++ background, it constantly amazes me how complex user interactions and data handling can be written in just a few lines of Python! What’s Next? Writing a solid README.md Submitting the project!
Ships:
What did you make? I built a simple Telegram bot that helps users track their daily activities (like sleep, workouts, or study time) and generates visual weekly charts using matplotlib to track progress over time. What was challenging? The most challenging part was understanding how to implement multi-step input flows using conversation handlers (like chaining prompts for logging data) and structuring the memory logic to track user activities dynamically over a week without needing a heavy database setup. What are you proud of? I am proud that I successfully learned Python from scratch while building this project! I used AI purely as a tutor—to explain concepts and guide me—rather than writing the code for me, meaning I wrote and understood every line myself. I am also proud to have mastered building fully functional Telegram bots, dynamic chart rendering, and asynchronous handling. What should people know so they can test your project? Simply open Telegram, search for @MySimpleAssistentBot (or use the link https://t.me/MySimpleAssistentBot ( https://t.me/MySimpleAssistentBot?utm_source=gemini )), and hit /start . You can use /log to record activities, /getstatistic to view your weekly graph, and /help for a list of all commands....
|
1793350659.4368124
|
1793437059.4368124
|
|
58974
|
Terminator by @Hamzacross100 | Stardance
|
Hamzacross100
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-13T11:53:21Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Its Done After 2 Weeks", "repo": "https://github.com/Hamzacross/Terminator", "demo": "https://www.hamzacross100.online/projects/terminator"}]...
|
[{"post_id": 63603, "ts": "202 [{"post_id": 63603, "ts": "2026-09-07T15:09:21Z", "hours": 0.7156, "text": "Working On V1.0 The Main Working Version"}]...
|
Title: Terminator by @Hamzacross100 | Stardance
D Title: Terminator by @Hamzacross100 | Stardance
Devlogs:
Working On V1.0 The Main Working Version
Ships:
Its Done After 2 Weeks...
|
1793350660.8440263
|
1793437060.8440263
|
|
58991
|
HEY GUYS LOOK AT MY DOG by @fish-in-a-puddle | Sta HEY GUYS LOOK AT MY DOG by @fish-in-a-puddle | Stardance...
|
fish-in-a-puddle
|
1
|
7.0
|
44
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-12T23:54:00Z", "hours": 7.0, "multiplier": 6.45, "payout": 44, "blessing": "neutral", "text": "I have spent the past couple weeks, I have made a website where you can look at pictures of my dog. That’s it. Just my dog. I wanted the site to be pretty simple, as a fun practice project, and I’m very happy with how it’s turned out. One of 55 images is chosen with Javascript when the page loads and the corresponding caption is shown as well. The function repeats any time the “New Image” button is clicked. The “Share” button copies the URL of the site to the visitor’s clipboard. The hardest part of this project was probably getting the random image generation to work. I started by making a CSS class setting the background of an empty div as well as its height and width, but this did not work at all. I don’t know why, but I replaced the div with an image element and used Javascript to change the SRC of the element depending on the result of a random number generated in a variable. Most of the other elements were pretty easy to work with, though. I hope that someone enjoys this fun little project and the pictures of my dog!", "repo": "https://github.com/fish-in-a-puddle/heyguyslookatmydog", "demo": "https://fish-in-a-puddle.github.io/heyguyslookatmydog/"}]...
|
[{"post_id": 66251, "ts": "202 [{"post_id": 66251, "ts": "2026-09-11T23:34:31Z", "hours": 0.6711, "text": "Devlog 5 - Fixed a few formatting issues, added a custom paw print cursor and made a share button that copies the (currently nonexistent) URL to the visitor’s keyboard. I’m very happy with how this site is turning out, so this is probably the last devlog for the actual coding. Next I need to do some shipping prep - writing a README and making a demo page - but that’s probably only about half an hour of work, tops."}, {"post_id": 65582, "ts": "2026-09-10T20:24:54Z", "hours": 1.2819, "text": "Devlog 4 - Finished writing the JS for the image generating and added a “New Image” button so you don’t have to reload the page to see another picture. The project is getting close to done, but there’s one more thing I want to add - a paw print custom cursor. Last time I tried to add that on another project it didn’t work, but I’m hoping I’ll be able to figure it out."}, {"post_id": 65024, "ts": "2026-09-09T20:34:56Z", "hours": 1.8703, "text": "Devlog 3 - Ok, so all that time writing out the CSS classes may have been pointless…. After trying a lot of different stuff, I found that the only way I could get the image to show was by turning the original div into an img element and changing the src to match different files in Javascript. Oh well, live and learn and all that. I’m back in buisness with the old copy paste for now, though, as I use a switch() function to check the variable that stores the random number and the case/break parts are all very similar (save the src, caption and, you know, the number it checks for). I’m feeling fairly confident that this will work out, though. After I finish this part, I’ll add a button to change the picture and caption so you don’t have to reload the page every time."}, {"post_id": 64392, "ts": "2026-09-08T18:38:21Z", "hours": 0.6322, "text": "Devlog 2 - Hooray, I finished making the CSS classes. It was very boring as I had to copy paste basically the same thing fifty times and check and change the dimensions of the image each time but it’s finally done. Now that all the images exist for the website to choose from, I have to venture into Javascript to make the images change. Time to look up a random number generator tutorial and distort it beyond recognition"}, {"post_id": 63206, "ts": "2026-09-06T21:37:26Z", "hours": 2.3839, "text": "Devlog 1 - Today I started a project I’ve been thinking about for a while - a website to show the viewer pictures of my dog. When it’s done, it will show an image of my dog picked randomly with a corresponding caption. So far I have resized 56 photos to fit the page (which took about an hour) and created 14 of the 56 classes in CSS. Each class includes the image and dimensions to the image doesn’t get stretched. The idea is that the script will pick a random number and using a switch/case function will set the class of the image div as well as the appropriate caption depending on the number. I have basically no experience coding in Javascript except for the couple of hours I spent working on it for the WebOS challenge, so this project will be a good way to get some practice."}]...
|
Title: HEY GUYS LOOK AT MY DOG by @fish-in-a-puddl Title: HEY GUYS LOOK AT MY DOG by @fish-in-a-puddle | Stardance
Devlogs:
Devlog 1 - Today I started a project I’ve been thinking about for a while - a website to show the viewer pictures of my dog. When it’s done, it will show an image of my dog picked randomly with a corresponding caption. So far I have resized 56 photos to fit the page (which took about an hour) and created 14 of the 56 classes in CSS. Each class includes the image and dimensions to the image doesn’t get stretched. The idea is that the script will pick a random number and using a switch/case function will set the class of the image div as well as the appropriate caption depending on the number. I have basically no experience coding in Javascript except for the couple of hours I spent working on it for the WebOS challenge, so this project will be a good way to get some practice.
Devlog 2 - Hooray, I finished making the CSS classes. It was very boring as I had to copy paste basically the same thing fifty times and check and change the dimensions of the image each time but it’s finally done. Now that all the images exist for the website to choose from, I have to venture into Javascript to make the images change. Time to look up a random number generator tutorial and distort it beyond recognition
Devlog 3 - Ok, so all that time writing out the CSS classes may have been pointless…. After trying a lot of different stuff, I found that the only way I could get the image to show was by turning the original div into an img element and changing the src to match different files in Javascript. Oh well, live and learn and all that. I’m back in buisness with the old copy paste for now, though, as I use a switch() function to check the variable that stores the random number and the case/break parts are all very similar (save the src, caption and, you know, the number it checks for). I’m feeling fairly confident that this will work out, though. After I finish this part, I’ll add a button to change the picture and caption so you don’t have to reload the page every time.
Devlog 4 - Finished writing the JS for the image generating and added a “New Image” button so you don’t have to reload the page to see another picture. The project is getting close to done, but there’s one more thing I want to add - a paw print custom cursor. Last time I tried to add that on another project it didn’t work, but I’m hoping I’ll be able to figure it out.
Devlog 5 - Fixed a few formatting issues, added a custom paw print cursor and made a share button that copies the (currently nonexistent) URL to the visitor’s keyboard. I’m very happy with how this site is turning out, so this is probably the last devlog for the actual coding. Next I need to do some shipping prep - writing a README and making a demo page - but that’s probably only about half an hour of work, tops.
Ships:
I have spent the past couple weeks, I have made a website where you can look at pictures of my dog. That’s it. Just my dog. I wanted the site to be pretty simple, as a fun practice project, and I’m very happy with how it’s turned out. One of 55 images is chosen with Javascript when the page loads and the corresponding caption is shown as well. The function repeats any time the “New Image” button is clicked. The “Share” button copies the URL of the site to the visitor’s clipboard. The hardest part of this project was probably getting the random image generation to work. I started by making a CSS class setting the background of an empty div as well as its height and width, but this did not work at all. I don’t know why, but I replaced the div with an image element and used Javascript to change the SRC of the element depending on the result of a random number generated in a variable. Most of the other elements were pretty easy to work with, though. I hope that someone enjoys this fun little project and the pictures of my dog!...
|
1793350661.7770388
|
1793437061.7770388
|
|
15394
|
Unbound Bionix by @araadh3111 | Stardance
|
araadh3111
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-26T17:55:51Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Bionix, A prosthetic hand that works from design to circuit everything", "repo": "https://github.com/Araadh3111/Bionix", "demo": ""}]...
|
[{"post_id": 74099, "ts": "202 [{"post_id": 74099, "ts": "2026-09-26T17:55:03Z", "hours": 1.3017, "text": "I could not make the full project but Now I am going to submit the design and I have made some changes in code which I will be commiting in a day"}, {"post_id": 40846, "ts": "2026-08-04T17:06:55Z", "hours": 9.9639, "text": "OH MY DAYS! I MOVED A SERVO FROM MY MUSCLE SIGNALS! this is definetely my lifes greatest achievement ok so I used electrodes and muscle sensor and wrote some basic code to move the servo based on muscle sensors output! I printed bionix a lot of times reiterated designs added arches in fingers for thread routing curled the index finger too! too much achieved im proud of myself! ### Lets Keep Rocking!"}, {"post_id": 26118, "ts": "2026-07-10T18:29:39Z", "hours": 4.9028, "text": "Update on Bionix I am finished with my basic hand structure i printed it irl and saw some errors and then fixed it in CAD next is to work on the thread routing channels!! keep following and checking out my github"}, {"post_id": 11544, "ts": "2026-06-18T20:49:08Z", "hours": 5.1958, "text": "Devlog: Final Engineering Push – Kinematics, Power Architecture, and Assembly Readiness Date: June 19, 2026 Status: Design Locked / Fabrication Ready The past several intensive engineering sessions have brought Bionix from a conceptual CAD model to a fully robust, physically viable electro-mechanical prototype. With the core palm and phalange geometry finalized, power distribution mapped out, and the bill of materials optimized, the project is officially ready for the physical fabrication and assembly phase. ⚙️ Mechanical Engineering & Kinematics The primary mechanical challenge for a tendon-driven bionic hand is managing friction and preventing catastrophic mechanical failure during repeated flexion cycles. We entirely overhauled the internal routing and joint mechanisms to achieve competition-grade reliability. Frictionless Revolute Joints: We stripped out the threaded M2 screws from the phalange joints. The joints have been re-engineered to accept smooth 2.2mm solid brass dowel pins , providing a low-friction, high-strength pivot point that ensures fluid finger movement. Optimized Flexion Routing (The Active Grip): To eliminate the “bowstring” effect, we redesigned the entry tunnels on the palm. The four main finger tension lines now enter the palm cavity via perfectly aligned tunnels featuring a -10° downward draft angle . This forces the high-tensile braided line flush against the joint grooves, maximizing servo leverage. All sharp 90-degree channel exits were filleted into smooth “trumpet flares” to prevent the threads from shearing under load. Antagonistic Elastic Extension (Passive Return): For the fingers to snap back open instantaneously when the servos release, we implemented an external elastic extensor system. We modeled a Unified Wrist Anchor block at the base of the palm. 1mm shock cord anchors at the fingertips, routes seamlessly over the knuckles, and ties off securely at the base of the palm, providing the exact passive tension required for a lifelike, snappy release. Removable Maintenance Hatch: The palm features a custom-traced, screw-mounted top plate with a generous cutout for full thumb articulation. This protects the internal servo array while allowing rapid access for tension-line adjustments. ⚡ Electronics & Power Architecture Running five high-torque micro servos simultaneously while reading delicate analog muscle signals requires isolating the high-current demands of the actuators from the logic board. Main Controller: The system is governed by a Raspberry Pi Pico (RP2040), chosen for its robust hardware PWM processing capabilities. Power Distribution: A 7.4V 2S Li-ion battery serves as the primary power source. This is routed through a high-efficiency 5V Buck Converter (rated for ≥3 Amps) directly to the servo power rails. The Pico is powered safely without having to sink the massive stall currents generated when the hand grips an object. A 1000uF decoupling capacitor bridges the 5V rail to smooth out transient voltage spikes. Biometric Input: We integrated the MyoWare 2.0 muscle sensor, passing raw electromyography (EMG) signals directly to the Pico’s ADC0 (GPIO26) pin."}, {"post_id": 9357, "ts": "2026-06-15T18:12:24Z", "hours": 1.1767, "text": "devlog 5 or 4 i honestly dont remember lol: I am done with the Palm!!!! and I also assembled the fingers to check !!! yes lets goo!! Printing the index finger tomorrow"}, {"post_id": 8851, "ts": "2026-06-14T18:37:40Z", "hours": 0.7619, "text": "Devlog 4: I was already done with 2 fingers earlier, I made the 3rd one today and I used Ai to build the pinky and thumb finger as it was just copying the dimensions editing the sketch and fixing the hole problem What I set out to build : I wanted to complete the fingers in this session which I did achieve + I am done with palm’s basic layout and structure planning, In next session I will be improving and finalising the palm assembling all of it together for once to check it all fits then work on the forearm"}, {"post_id": 8053, "ts": "2026-06-13T13:09:17Z", "hours": 0.4603, "text": "Devlog 3 : Bionix Ring finger design has been done and assembled in a sepearate folder I did not face any problems while making this design, Only pinky finger and thumb are left then I will start with palm and forearm respectively!"}, {"post_id": 8034, "ts": "2026-06-13T12:08:26Z", "hours": 1.7147, "text": "Devlog2 : Unbound bionix, Update: last devlog I was finished with the index finger dimensions well I just printed index finger to confirm movement and it’s moving as expected, I also Made the middle finger design by editing sketch of index finger but fixing the hole sliding issue, failures: I encountered multiple failures planning the design of index finger, but I did make it work and I am really happy for that, what is left? designing all fingers and thumb according to their dimensions and then designing the palm and forearm respectively and then moving on to the electronics part session pic: here is one session pic where I show the assembled middle finger design, for the middle finger the proximal phalange is 5 cm long, the distal phalange is 2 cm and the middle phalange is 3 cm!"}, {"post_id": 6780, "ts": "2026-06-11T11:08:36Z", "hours": 2.8783, "text": "Everyday tasks such as holding a bottle, typing on a keyboard, opening a door, or picking up a pen are actions most of us perform without thinking. For millions of people living with upper-limb loss, these simple activities can become significant challenges that affect independence, confidence, and quality of life. While modern prosthetic technology has advanced considerably, many solutions remain prohibitively expensive, difficult to customize, or inaccessible to students, researchers, and people in developing regions. Devices that offer advanced functionality often cost thousands of dollars, creating a gap between innovation and accessibility. Prosthetic Arm V1 is an attempt to bridge that gap. The goal of this project is to design a lightweight, modular, and affordable prosthetic arm that can be manufactured using 3D printing and standard electronic components. Rather than focusing solely on appearance, the design prioritizes practical functionality, durability, and ease of maintenance. Current Objectives Design an anatomically inspired finger and joint mechanism. Develop smooth and reliable tendon-driven motion. Create a modular structure that allows individual parts to be replaced or upgraded. Keep manufacturing costs as low as possible without sacrificing functionality. Build a foundation for future versions with improved dexterity and sensor integration. Progress Today, I completed the initial CAD model for one of the fingers and started testing the joint geometry. The focus is on achieving a balance between strength, range of motion, and ease of assembly before moving on to full-hand integration. This is only Version 1, and there is still a long way to go, but every iteration brings the project one step closer to creating an accessible prosthetic solution that anyone can build, improve, and use. Next milestone: Complete the middle finger and begin integrating the tendon routing system."}]...
|
Title: Unbound Bionix by @araadh3111 | Stardance
Title: Unbound Bionix by @araadh3111 | Stardance
Devlogs:
Everyday tasks such as holding a bottle, typing on a keyboard, opening a door, or picking up a pen are actions most of us perform without thinking. For millions of people living with upper-limb loss, these simple activities can become significant challenges that affect independence, confidence, and quality of life. While modern prosthetic technology has advanced considerably, many solutions remain prohibitively expensive, difficult to customize, or inaccessible to students, researchers, and people in developing regions. Devices that offer advanced functionality often cost thousands of dollars, creating a gap between innovation and accessibility. Prosthetic Arm V1 is an attempt to bridge that gap. The goal of this project is to design a lightweight, modular, and affordable prosthetic arm that can be manufactured using 3D printing and standard electronic components. Rather than focusing solely on appearance, the design prioritizes practical functionality, durability, and ease of maintenance. Current Objectives Design an anatomically inspired finger and joint mechanism. Develop smooth and reliable tendon-driven motion. Create a modular structure that allows individual parts to be replaced or upgraded. Keep manufacturing costs as low as possible without sacrificing functionality. Build a foundation for future versions with improved dexterity and sensor integration. Progress Today, I completed the initial CAD model for one of the fingers and started testing the joint geometry. The focus is on achieving a balance between strength, range of motion, and ease of assembly before moving on to full-hand integration. This is only Version 1, and there is still a long way to go, but every iteration brings the project one step closer to creating an accessible prosthetic solution that anyone can build, improve, and use. Next milestone: Complete the middle finger and begin integrating the tendon routing system.
Devlog2 : Unbound bionix, Update: last devlog I was finished with the index finger dimensions well I just printed index finger to confirm movement and it’s moving as expected, I also Made the middle finger design by editing sketch of index finger but fixing the hole sliding issue, failures: I encountered multiple failures planning the design of index finger, but I did make it work and I am really happy for that, what is left? designing all fingers and thumb according to their dimensions and then designing the palm and forearm respectively and then moving on to the electronics part session pic: here is one session pic where I show the assembled middle finger design, for the middle finger the proximal phalange is 5 cm long, the distal phalange is 2 cm and the middle phalange is 3 cm!
Devlog 3 : Bionix Ring finger design has been done and assembled in a sepearate folder I did not face any problems while making this design, Only pinky finger and thumb are left then I will start with palm and forearm respectively!
Devlog 4: I was already done with 2 fingers earlier, I made the 3rd one today and I used Ai to build the pinky and thumb finger as it was just copying the dimensions editing the sketch and fixing the hole problem What I set out to build : I wanted to complete the fingers in this session which I did achieve + I am done with palm’s basic layout and structure planning, In next session I will be improving and finalising the palm assembling all of it together for once to check it all fits then work on the forearm
devlog 5 or 4 i honestly dont remember lol: I am done with the Palm!!!! and I also assembled the fingers to check !!! yes lets goo!! Printing the index finger tomorrow
Devlog: Final Engineering Push – Kinematics, Power Architecture, and Assembly Readiness Date: June 19, 2026 Status: Design Locked / Fabrication Ready The past several intensive engineering sessions have brought Bionix from a conceptual CAD model to a fully robust, physically viable electro-mechanical prototype. With the core palm and phalange geometry finalized, power distribution mapped out, and the bill of materials optimized, the project is officially ready for the physical fabrication and assembly phase. ⚙️ Mechanical Engineering & Kinematics The primary mechanical challenge for a tendon-driven bionic hand is managing friction and preventing catastrophic mechanical failure during repeated flexion cycles. We entirely overhauled the internal routing and joint mechanisms to achieve competition-grade reliability. Frictionless Revolute Joints: We stripped out the threaded M2 screws from the phalange joints. The joints have been re-engineered to accept smooth 2.2mm solid brass dowel pins , providing a low-friction, high-strength pivot point that ensures fluid finger movement. Optimized Flexion Routing (The Active Grip): To eliminate the “bowstring” effect, we redesigned the entry tunnels on the palm. The four main finger tension lines now enter the palm cavity via perfectly aligned tunnels featuring a -10° downward draft angle . This forces the high-tensile braided line flush against the joint grooves, maximizing servo leverage. All sharp 90-degree channel exits were filleted into smooth “trumpet flares” to prevent the threads from shearing under load. Antagonistic Elastic Extension (Passive Return): For the fingers to snap back open instantaneously when the servos release, we implemented an external elastic extensor system. We modeled a Unified Wrist Anchor block at the base of the palm. 1mm shock cord anchors at the fingertips, routes seamlessly over the knuckles, and ties off securely at the base of the palm, providing the exact passive tension required for a lifelike, snappy release. Removable Maintenance Hatch: The palm features a custom-traced, screw-mounted top plate with a generous cutout for full thumb articulation. This protects the internal servo array while allowing rapid access for tension-line adjustments. ⚡ Electronics & Power Architecture Running five high-torque micro servos simultaneously while reading delicate analog muscle signals requires isolating the high-current demands of the actuators from the logic board. Main Controller: The system is governed by a Raspberry Pi Pico (RP2040), chosen for its robust hardware PWM processing capabilities. Power Distribution: A 7.4V 2S Li-ion battery serves as the primary power source. This is routed through a high-efficiency 5V Buck Converter (rated for ≥3 Amps) directly to the servo power rails. The Pico is powered safely without having to sink the massive stall currents generated when the hand grips an object. A 1000uF decoupling capacitor bridges the 5V rail to smooth out transient voltage spikes. Biometric Input: We integrated the MyoWare 2.0 muscle sensor, passing raw electromyography (EMG) signals directly to the Pico’s ADC0 (GPIO26) pin.
Update on Bionix I am finished with my basic hand structure i printed it irl and saw some errors and then fixed it in CAD next is to work on the thread routing channels!! keep following and checking out my github
OH MY DAYS! I MOVED A SERVO FROM MY MUSCLE SIGNALS! this is definetely my lifes greatest achievement ok so I used electrodes and muscle sensor and wrote some basic code to move the servo based on muscle sensors output! I printed bionix a lot of times reiterated designs added arches in fingers for thread routing curled the index finger too! too much achieved im proud of myself! ### Lets Keep Rocking!
I could not make the full project but Now I am going to submit the design and I have made some changes in code which I will be commiting in a day
Ships:
Bionix, A prosthetic hand that works from design to circuit everything...
|
1793350662.9865575
|
1793437062.9865575
|
|
54181
|
LifeCalc by @nameer | Stardance
|
nameer
|
1
|
11.41
|
30
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-20T16:05:18Z", "hours": 11.0, "multiplier": 2.83, "payout": 30, "blessing": "neutral", "text": "Ok so I made a web based calculator that makes life easier and smoother its called LifeCalc. It has age calculator, date calculator, BMI calculator, tip calculator, percentage calculator, discount calculator, unit converter and interest calculator. The difficulties I faced was mainly the unfamiliarity with Github. Hopefully this will make life easier.", "repo": "https://github.com/nameerhassannhr-glitch/lifecalc", "demo": "https://nameerhassannhr-glitch.github.io/lifecalc/"}]...
|
[{"post_id": 72114, "ts": "202 [{"post_id": 72114, "ts": "2026-09-22T06:10:37Z", "hours": 0.415, "text": "I fixed the broken readme that was being flagged and fixed the picture error i have been getting"}, {"post_id": 71270, "ts": "2026-09-20T15:37:39Z", "hours": 0.7178, "text": "ok so as Iam was in the last step of the lifecalc i tested out all 8 of the calculators fixed a issue in the unit converter that was lead by an extra gap what an idiot iam so after it i finished the markdown file aded the screenshot made the website live and fixed a few other calculation bug"}, {"post_id": 70159, "ts": "2026-09-18T16:24:22Z", "hours": 10.0422, "text": "ok so ever since the last devlog things have changed i was in a science camp recently so after i came from the science camp i changed the calc style added the new calculators, fixed bugs, checked things and now its almost over"}]...
|
Title: LifeCalc by @nameer | Stardance
Devlogs:
o Title: LifeCalc by @nameer | Stardance
Devlogs:
ok so ever since the last devlog things have changed i was in a science camp recently so after i came from the science camp i changed the calc style added the new calculators, fixed bugs, checked things and now its almost over
ok so as Iam was in the last step of the lifecalc i tested out all 8 of the calculators fixed a issue in the unit converter that was lead by an extra gap what an idiot iam so after it i finished the markdown file aded the screenshot made the website live and fixed a few other calculation bug
I fixed the broken readme that was being flagged and fixed the picture error i have been getting
Ships:
Ok so I made a web based calculator that makes life easier and smoother its called LifeCalc. It has age calculator, date calculator, BMI calculator, tip calculator, percentage calculator, discount calculator, unit converter and interest calculator. The difficulties I faced was mainly the unfamiliarity with Github. Hopefully this will make life easier....
|
1793350666.5467694
|
1793437066.5467694
|
|
32480
|
Pac-Man by @raslanyossif | Stardance
|
raslanyossif
|
1
|
95.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T04:21:15Z", "hours": 95.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Pac-man but with power ups and more ghosts as you proceed to level up. challenging part was making the maze I struggled a lot. I’m proud that I was able to complete such a project. When you get one of the power ups which is Shield your Pac-man becomes blue, so the ghosts can’t eat you and you can’t eat them. It isn’t a bug I made it that way.", "repo": "https://github.com/Yossifraslan/Pac-Man", "demo": "https://yossifraslan.github.io/Pac-Man/"}]...
|
[{"post_id": 74295, "ts": "202 [{"post_id": 74295, "ts": "2026-09-27T04:15:28Z", "hours": 9.2853, "text": "It’s DEVLOG TIME:» Just pushed a much-needed update to the project! First up, I finally tracked down and killed a frustrating maze error in Level 10 that was completely breaking the game right near the finish line—so the final levels are officially working and playable now. While I was at it, I also took the time to write a proper README. It covers everything from setup instructions to gameplay mechanics, making the codebase a lot more welcoming and less of a black box for anyone who wants to test it out or contribute. Next up is getting some feedback and seeing how quickly people can break it! Also, when you are shielded for the power up, you can’t eat the ghosts."}, {"post_id": 49457, "ts": "2026-08-18T09:45:17Z", "hours": 9.5264, "text": "IT’S DEVLOG TIMEE :»> It’s been a tough few days trying to figure out how to fix the MAZE, but I finally figured out how to do it through A* pathfinding. Fixed all the maps. Which took me so longggg. Also, Fixed speed inconsistency bugs and collision detection to eliminate Pac-Man getting stuck at maze tiles - movement now uses tile-based physics that checks every frame with no edge-case stalls, plus input buffering lets players queue moves ahead for responsive controls. Implemented proper ghost freeze behavior where frozen ghosts stop completely for 5 seconds, stay visible, and remain killable while frozen. Made the Extra Life now work on the screen when you get an Extra life it will update in the UI top middle and see a new Pac-man face get added. On the side of the Maps you can see there is no wall blocking, because now I made it a teleport to the other side."}, {"post_id": 46650, "ts": "2026-08-14T01:56:32Z", "hours": 9.1808, "text": "Fixed all six power-up behaviours this session. Speed boost and double points were already working. The main rework was on shield, freeze, and slow. Shield now stays active until a ghost physically touches the player, when that happens, the ghost turns scared/blue instead of the player dying, and the shield remains active for future hits on a 15-second timer. Freeze keeps ghosts in their normal colour but completely stops their movement for 3 seconds - they’re still killable while frozen. Slow keeps ghosts at their normal appearance but skips movement every other frame, effectively halving their speed for 5 seconds. Also implemented proper ghost spawn behavior. Ghosts now spawn at the center of the maze (on or near the ghost house tiles) and release one by one first ghost after 2 seconds, then one every 3 seconds. While waiting to release they bob up and down inside the house. After death, the release sequence resets so ghosts trickle out again rather than all rushing at once. Pac-Man now spawns at a random open tile at least a third of the maze width away from the centre, so every life and every game starts from a different position. Maze connectivity fix was attempted this session but not completed - some maps still have corridors that can trap the player. Carrying this into the next session"}, {"post_id": 43330, "ts": "2026-08-08T15:07:17Z", "hours": 9.7428, "text": "I fixed up my previous issues with lives resetting to 3 for each level completed as well as start Game taking you back to level 1 rather than starting at the highest level you’ve unlocked. The ghost speed has been halved (from 2px to 1px/frame) which makes everything seem much more balanced with me running around at 60fps! I’ve added a proper pause menu overlay along with options to toggle Music & SFX - I had previously run into an issue where if you paused the game then played again the menu music would keep playing. To fix this I’m keeping track of all active WebAudio Oscillators and automatically stop them whenever we begin gameplay. We’ve added some really nice little touches too! For example, when you die Pac-Man will close his mouth, spin twice and slowly shrink away over 80 frames before disappearing completely. You’ll also get a sweet animation when you spawn growing up from 0 to full size over 40 frames. We originally couldn’t get the death animation working because we’d set our global variable gameActive = false during dying which turned off the entire update loop so I’ve updated Pac-Man’s update method to continue updating even when he’s dying / spawning. Finally, I made sure to make Pac-Man disappear once he dies to ensure no weird visuals happen after respawning. We added a yellow flash on finishing a level. Floating score popups show up every time you eat a ghost. Now there’s an animated HUD that shows your current score. Previously, canvas animations were off due to transform translation applied twice (once during animation and once more when drawing). Now we translate to our sprite’s center before applying any additional transformation."}, {"post_id": 40526, "ts": "2026-08-04T03:32:16Z", "hours": 9.2125, "text": "DEVLOG TIME:> During this session, I incorporated complete mobile compatibility. The directional pad appears automatically on touch devices through (pointer:coarse) through CSS thus eliminating the need for any device detection as it will be shown as soon as the browser detects a device with touch input. Each button utilizes touchstart instead of click , so there is no 300ms tap delay that would make the controls slow or laggy. I also introduced swipe detection on the canvas as a substitute for the directional pad. The minimum distance for swipe detection is 30px, filtering unintended touches and also utilizing the main axis (horizontal or vertical) in order to identify the direction even in case of diagonal swipes. I added responsive CSS for screens smaller than 480px thus allowing the fonts, buttons, and HUD to resize, so no overflowing occurs on small screens. I verified this by checking the local network IP through my mobile, as both devices were connected to the same Wi-Fi network. The InputManager is now capable of working with three types of input in one place - keyboard, touch directional pad, and swipe, all of them leading to a single nextDirection property, which is accessed by the main game loop."}, {"post_id": 39312, "ts": "2026-08-02T06:34:55Z", "hours": 9.3164, "text": "Added an audio system using the WebAudio API. No external sound files everything is generated programmatically using oscillators and gain nodes. Each game event has its sound: a short square wave blip for eating dots a sawtooth drop for eating pellets, a triangle tone for eating ghosts a descending three-note jingle for death and a rising three-note fanfare for level complete. The main menu has a looping chiptune melody. 25 Notes scheduled ahead of time using ctx.currentTime, which avoids timing drift that would happen with repeated setTimeout calls. It loops by scheduling the playthrough when the current one ends. The trickiest part was the browser autoplay policy. Browsers block AudioContext from making sound until the user interacts with the page. The fix was checking ctx.state === suspended on the click and calling ctx.resume() before trying to play anything. Finished power-up effects. Freeze and slow work via frame timers (_frozenTimer _slowTimer) set directly on each monster. The monster update method checks these at the top before doing anything effectively pausing or slowing it without touching core movement logic. Known issue: menu music doesn’t stop immediately when the game starts. There’s a 1-2 overlap before it cuts out. Will fix session along with, in-game sound effects not always triggering. Investigating AudioContext state management across the menu-> game transition."}, {"post_id": 33922, "ts": "2026-07-24T07:11:48Z", "hours": 9.5589, "text": "DEVLOG TIME!!! Added ghosts to the game this session. The ghost AI has 4 behavior types - chaser, ambusher, predictor, and patroller, targeting player based on various positions. Also added A* path finding to have the ghosts go around walls instead of choosing adjacent tiles that are closer to them. Majority of time in this session was spent debugging the movement. It turned out to be a floating-point problem where, when the ghost speed is not divisible by the tile size (20 px), the pixelX % tileSize is never equal to 0 and therefore the alignment function is never called resulting in the ghost moving for 2 px per frame. Fixed this by making the ghost speed fixed at an integer value (2) that is divisible by 20. Eating the power pellet causes the ghost to go into the frighten state which makes the ghost turn blue and move randomly. The player receives 200 points and the respawn timer starts when a ghost in the frighten state is eaten."}, {"post_id": 31207, "ts": "2026-07-19T12:53:56Z", "hours": 9.6542, "text": "WHAT’s NEW:> Devlog Time!!! Got Pac-Man actually moving through the maze this session. Built the Player class with grid-based movement - Pac-Man only changes direction when pixel position is exactly aligned to a tile, which prevents clipping through walls. Added direction queuing so if you press a turn slightly early it still registers when the next tile is reached, making controls feel responsive instead of stiff. Also split out InputManager , CollisionSystem , and UIManager into their own modules. Dot collection works - eating a dot removes it from the array, updates the grid, and increments score. Level completes when all dots and pellets are cleared, with a 500 x level bonus. One thing worth noting from Devlog 2 - the maze connectivity issue. After designing all 10 maze layouts, levels 3-10 had isolated sections where dots were completely unreachable. Wrote a flood-fill validator that BFS traverses from the first dot and counts how many dots are reachable. Then wrote an auto-fixer that finds disconnected sections and carves the shortest Manhattan path between them. All 10 levels now pass with 100% dots reachable."}, {"post_id": 29256, "ts": "2026-07-16T01:45:12Z", "hours": 9.4397, "text": "DEVLOG TIME:> !! I have improved the maze system used in my game, Pac-Man. Originally, I thought of not only using one maze and having a full leveling system. In this, I calculated and created 10 mazes with different sizes, difficulties, and complexity levels. In addition, I modified the class MazeManager in such a way that our game automatically changes levels without requiring a manual change of the mazes. In testing new mazes, I introduced a checking mechanism so that we will know whether our mazes have any unreachable dots. For some reason, it turned out that some parts of the maze were blocked. Maze validation: 195/218 dots reachable Blocked sections were identified. Some of the dots can’t be accessed. Interestingly, the maze looked perfectly okay visually, but the navigation test indicated that some of the areas of my maze were not accessible. At the moment, I plan on fixing the blocked paths and test out each level. I might also change some things later once the game is fully playable and I can properly test the difficulty, such as: maze layouts ghost difficulty level progression number of ghosts/speed scaling Right now the goal is getting the core gameplay working first, then balancing everything afterwards."}, {"post_id": 26506, "ts": "2026-07-11T10:41:25Z", "hours": 9.9617, "text": "I’ve been really busy but here is the first DEVLOG for Pac-man:> I’m planning on doing unique things in this Pac-man it won’t be a normal Pac-man. What I did: Built all 5 screens for the game - main menu, level select, how to play, game screen and game over. No gameplay yet, just the full UI shell. Screen switching works by toggling a single. active class, all screens live in the DOM simultaneously. Biggest challenge was the SVG ghosts. Drew them in pure SVG using and so the shape is defined once and reused everywhere with different colors via a CSS variable –gc. Also styled elements in the How to Play screen to look like actual keyboard keys. Ghost bobbing animation on the menu uses staggered animation-delay so they move in a wave instead of all at once."}]...
|
Title: Pac-Man by @raslanyossif | Stardance
Devlo Title: Pac-Man by @raslanyossif | Stardance
Devlogs:
I’ve been really busy but here is the first DEVLOG for Pac-man:> I’m planning on doing unique things in this Pac-man it won’t be a normal Pac-man. What I did: Built all 5 screens for the game - main menu, level select, how to play, game screen and game over. No gameplay yet, just the full UI shell. Screen switching works by toggling a single. active class, all screens live in the DOM simultaneously. Biggest challenge was the SVG ghosts. Drew them in pure SVG using and so the shape is defined once and reused everywhere with different colors via a CSS variable –gc. Also styled elements in the How to Play screen to look like actual keyboard keys. Ghost bobbing animation on the menu uses staggered animation-delay so they move in a wave instead of all at once.
DEVLOG TIME:> !! I have improved the maze system used in my game, Pac-Man. Originally, I thought of not only using one maze and having a full leveling system. In this, I calculated and created 10 mazes with different sizes, difficulties, and complexity levels. In addition, I modified the class MazeManager in such a way that our game automatically changes levels without requiring a manual change of the mazes. In testing new mazes, I introduced a checking mechanism so that we will know whether our mazes have any unreachable dots. For some reason, it turned out that some parts of the maze were blocked. Maze validation: 195/218 dots reachable Blocked sections were identified. Some of the dots can’t be accessed. Interestingly, the maze looked perfectly okay visually, but the navigation test indicated that some of the areas of my maze were not accessible. At the moment, I plan on fixing the blocked paths and test out each level. I might also change some things later once the game is fully playable and I can properly test the difficulty, such as: maze layouts ghost difficulty level progression number of ghosts/speed scaling Right now the goal is getting the core gameplay working first, then balancing everything afterwards.
WHAT’s NEW:> Devlog Time!!! Got Pac-Man actually moving through the maze this session. Built the Player class with grid-based movement - Pac-Man only changes direction when pixel position is exactly aligned to a tile, which prevents clipping through walls. Added direction queuing so if you press a turn slightly early it still registers when the next tile is reached, making controls feel responsive instead of stiff. Also split out InputManager , CollisionSystem , and UIManager into their own modules. Dot collection works - eating a dot removes it from the array, updates the grid, and increments score. Level completes when all dots and pellets are cleared, with a 500 x level bonus. One thing worth noting from Devlog 2 - the maze connectivity issue. After designing all 10 maze layouts, levels 3-10 had isolated sections where dots were completely unreachable. Wrote a flood-fill validator that BFS traverses from the first dot and counts how many dots are reachable. Then wrote an auto-fixer that finds disconnected sections and carves the shortest Manhattan path between them. All 10 levels now pass with 100% dots reachable.
DEVLOG TIME!!! Added ghosts to the game this session. The ghost AI has 4 behavior types - chaser, ambusher, predictor, and patroller, targeting player based on various positions. Also added A* path finding to have the ghosts go around walls instead of choosing adjacent tiles that are closer to them. Majority of time in this session was spent debugging the movement. It turned out to be a floating-point problem where, when the ghost speed is not divisible by the tile size (20 px), the pixelX % tileSize is never equal to 0 and therefore the alignment function is never called resulting in the ghost moving for 2 px per frame. Fixed this by making the ghost speed fixed at an integer value (2) that is divisible by 20. Eating the power pellet causes the ghost to go into the frighten state which makes the ghost turn blue and move randomly. The player receives 200 points and the respawn timer starts when a ghost in the frighten state is eaten.
Added an audio system using the WebAudio API. No external sound files everything is generated programmatically using oscillators and gain nodes. Each game event has its sound: a short square wave blip for eating dots a sawtooth drop for eating pellets, a triangle tone for eating ghosts a descending three-note jingle for death and a rising three-note fanfare for level complete. The main menu has a looping chiptune melody. 25 Notes scheduled ahead of time using ctx.currentTime, which avoids timing drift that would happen with repeated setTimeout calls. It loops by scheduling the playthrough when the current one ends. The trickiest part was the browser autoplay policy. Browsers block AudioContext from making sound until the user interacts with the page. The fix was checking ctx.state === suspended on the click and calling ctx.resume() before trying to play anything. Finished power-up effects. Freeze and slow work via frame timers (_frozenTimer _slowTimer) set directly on each monster. The monster update method checks these at the top before doing anything effectively pausing or slowing it without touching core movement logic. Known issue: menu music doesn’t stop immediately when the game starts. There’s a 1-2 overlap before it cuts out. Will fix session along with, in-game sound effects not always triggering. Investigating AudioContext state management across the menu-> game transition.
DEVLOG TIME:> During this session, I incorporated complete mobile compatibility. The directional pad appears automatically on touch devices through (pointer:coarse) through CSS thus eliminating the need for any device detection as it will be shown as soon as the browser detects a device with touch input. Each button utilizes touchstart instead of click , so there is no 300ms tap delay that would make the controls slow or laggy. I also introduced swipe detection on the canvas as a substitute for the directional pad. The minimum distance for swipe detection is 30px, filtering unintended touches and also utilizing the main axis (horizontal or vertical) in order to identify the direction even in case of diagonal swipes. I added responsive CSS for screens smaller than 480px thus allowing the fonts, buttons, and HUD to resize, so no overflowing occurs on small screens. I verified this by checking the local network IP through my mobile, as both devices were connected to the same Wi-Fi network. The InputManager is now capable of working with three types of input in one place - keyboard, touch directional pad, and swipe, all of them leading to a single nextDirection property, which is accessed by the main game loop.
I fixed up my previous issues with lives resetting to 3 for each level completed as well as start Game taking you back to level 1 rather than starting at the highest level you’ve unlocked. The ghost speed has been halved (from 2px to 1px/frame) which makes everything seem much more balanced with me running around at 60fps! I’ve added a proper pause menu overlay along with options to toggle Music & SFX - I had previously run into an issue where if you paused the game then played again the menu music would keep playing. To fix this I’m keeping track of all active WebAudio Oscillators and automatically stop them whenever we begin gameplay. We’ve added some really nice little touches too! For example, when you die Pac-Man will close his mouth, spin twice and slowly shrink away over 80 frames before disappearing completely. You’ll also get a sweet animation when you spawn growing up from 0 to full size over 40 frames. We originally couldn’t get the death animation working because we’d set our global variable gameActive = false during dying which turned off the entire update loop so I’ve updated Pac-Man’s update method to continue updating even when he’s dying / spawning. Finally, I made sure to make Pac-Man disappear once he dies to ensure no weird visuals happen after respawning. We added a yellow flash on finishing a level. Floating score popups show up every time you eat a ghost. Now there’s an animated HUD that shows your current score. Previously, canvas animations were off due to transform translation applied twice (once during animation and once more when drawing). Now we translate to our sprite’s center before applying any additional transformation.
Fixed all six power-up behaviours this session. Speed boost and double points were already working. The main rework was on shield, freeze, and slow. Shield now stays active until a ghost physically touches the player, when that happens, the ghost turns scared/blue instead of the player dying, and the shield remains active for future hits on a 15-second timer. Freeze keeps ghosts in their normal colour but completely stops their movement for 3 seconds - they’re still killable while frozen. Slow keeps ghosts at their normal appearance but skips movement every other frame, effectively halving their speed for 5 seconds. Also implemented proper ghost spawn behavior. Ghosts now spawn at the center of the maze (on or near the ghost house tiles) and release one by one first ghost after 2 seconds, then one every 3 seconds. While waiting to release they bob up and down inside the house. After death, the release sequence resets so ghosts trickle out again rather than all rushing at once. Pac-Man now spawns at a random open tile at least a third of the maze width away from the centre, so every life and every game starts from a different position. Maze connectivity fix was attempted this session but not completed - some maps still have corridors that can trap the player. Carrying this into the next session
IT’S DEVLOG TIMEE :»> It’s been a tough few days trying to figure out how to fix the MAZE, but I finally figured out how to do it through A* pathfinding. Fixed all the maps. Which took me so longggg. Also, Fixed speed inconsistency bugs and collision detection to eliminate Pac-Man getting stuck at maze tiles - movement now uses tile-based physics that checks every frame with no edge-case stalls, plus input buffering lets players queue moves ahead for responsive controls. Implemented proper ghost freeze behavior where frozen ghosts stop completely for 5 seconds, stay visible, and remain killable while frozen. Made the Extra Life now work on the screen when you get an Extra life it will update in the UI top middle and see a new Pac-man face get added. On the side of the Maps you can see there is no wall blocking, because now I made it a teleport to the other side.
It’s DEVLOG TIME:» Just pushed a much-needed update to the project! First up, I finally tracked down and killed a frustrating maze error in Level 10 that was completely breaking the game right near the finish line—so the final levels are officially working and playable now. While I was at it, I also took the time to write a proper README. It covers everything from setup instructions to gameplay mechanics, making the codebase a lot more welcoming and less of a black box for anyone who wants to test it out or contribute. Next up is getting some feedback and seeing how quickly people can break it! Also, when you are shielded for the power up, you can’t eat the ghosts.
Ships:
I made a Pac-man but with power ups and more ghosts as you proceed to level up. challenging part was making the maze I struggled a lot. I’m proud that I was able to complete such a project. When you get one of the power ups which is Shield your Pac-man becomes blue, so the ghosts can’t eat you and you can’t eat them. It isn’t a bug I made it that way....
|
1793350667.8028078
|
1793437067.8028078
|
|
28283
|
Robot Arm by @jake18 | Stardance
|
jake18
|
1
|
28.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-21T03:43:04Z", "hours": 28.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built a 5-DOF robotic arm that can move manually or remotely using coordinate control. The arm uses 5 servo motors for the arm and 1 stepper motor for the base to provide movement. Every joint in this arm is controlled through a local web app that I am running on my laptop. All of the controls, calculations, etc., are all on my laptop. The ESP32 only acts as a motor controller, receiving commands through wifi and controlling the motors. The thing that I am most proud of is the code and coordinate control. This was the first time I did a project with this scale of code, and I am proud that it works well. This was also the first time I made a web app and combining it with an ESP32. The most challenging part about this project was definitely the mechanical design. Everything in CAD worked smoothly with no mistakes, but when I printed it out, big and small errors kept showing up that delayed my project by a few weeks. I had to go through many iterations until I got one that worked. FYI the angle processing in the code is tailored to my specific motor angles and position.", "repo": "https://github.com/jakecao18/Robot-Arm", "demo": ""}]...
|
[{"post_id": 70721, "ts": "202 [{"post_id": 70721, "ts": "2026-09-19T17:29:25Z", "hours": 8.8356, "text": "Devlog #6 So i have just finished assembling the arm and making all the gears, motors and joints properly now what I have done: fixed the shoulder joint by removing the belt completely, now it runs on a 1:1.5 spur gear reduction I added the stepper motor so now the arm can rotate by its base, allowing it to move in 3d I redesigned the gripper since the old one (finray style gripper) was too weak and couldn’t pick things up. this new gripper is a rack and pinion gripper that is much stronger I have connected the SMPS power supply and now every motor can run on full power I have connected the website to the esp so now my slider control works and is accurate But there are still some problems: the backlash of all the joints add up, which means the end effector wobbles too much. My coordinate control still isn’t accurate So before shipping this project, I will fix the coordinate control code so that it is now accurate. The backlash is a separate problem that I dont think ill be able to solve in time."}, {"post_id": 47845, "ts": "2026-08-16T02:11:50Z", "hours": 10.0933, "text": "Devlog #5 I have now finished the local web server to control the robot, it includes 6 sliders for the 5 servos and 1 stepper motor and also a coordinate control. for the coordinate control, you simply plug in your x, y, z coordinates it will return j1, j2, j3, and j4 angles to you. on the coding side of that, i just wrote some simple analytical ik, mostly triangle geometry. the website is ran by flask and i am using udp sockets to send the angles to my esp32 via wifi. everything is ran on my computer, so the esp would only have to control the motors with the angles. i also did some cad to redesign the shoulder base to fix the belt problem, will start printing soon."}, {"post_id": 42286, "ts": "2026-08-06T22:24:53Z", "hours": 9.0053, "text": "Devlog #4 So ive finished the CAD for the new parts and assembled the robot arm, but the wrist roll and gripper will be attached later. the elbow and wrist pitch of the robot works smoothly now, no skipping or anything, however. the shoulder belt is still skipping under load, i have now used more teeth but it still skips. I think that this is because the belt itself is not tensioned properly (its a little loose), i will have to return the current belt and buy a new one. if anyone have any suggestions to help prevent skipping please let me know. for now that is the only major problem in this build. I am working on the gripper right now since the old design didnt work. also i have been working on a web app to control the arm from my computer to the esp via wifi. I am almost done the app and soon will be able to send data to the esp. that is all for now but i think more problems will apear later."}, {"post_id": 35021, "ts": "2026-07-26T05:31:37Z", "hours": 9.3075, "text": "Devlog #3 So now i have printed all the parts and assembled the arm up to the wrist, but a few problems prevented the arm from moving properly. The gears at the elbow are slipping when under load and also the shafts supporting them are not stable. I think I can fix this by locking the two shafts together and using wider M2 gears. The belt at the shoulder is also slipping under load. I think that i just need the gears to be bigger so that they can tension the belt better. The elbow joint servo doesnt have enough movement to drive the whole elbow 180 degrees because of the gears. I messed up this part because i was supposed to buy the 270 degree servo not the 180 one. Ill be waiting for the 270 servo to arrive. Aside from those problems I have written code so that I can control the servos by angle and not PWM pulses. The base of the arm works fine, Ill be controlling that as soon as i learn how to control a stepper motor. For now I have redesigned most of the arm to fix these problems, but as i wait for the servo and all the parts to print, ill try to work on a web that can control the arm."}, {"post_id": 27505, "ts": "2026-07-13T04:01:09Z", "hours": 4.1847, "text": "Devlog #2 Finished printing everything and started testing if everything fit together. Some of the components had weak spots or didn’t fit together well. I had to go back and forth between CAD and printing for a while because my tolerances weren’t quite correct. Everything fits nicely now. I also made a GitHub repo and added all the CAD files, BOM, pictures etc. I will update GitHub frequently, and everything needed to recreate this project will be there. I also made a wiring diagram and in the process realized that I needed a few more components to make sure that the arm would work smoothly and safely. I was kinda hard to learn why I needed all these different components but in the end I think it makes sense to me now. The next steps now is probably to buy the components and then assemble the robot. In the meantime though I think I can start writing some code on Inverse Kinematics for the Robot. I want it to be able to move all the servos to the correct angle when given some coordinates."}, {"post_id": 21070, "ts": "2026-07-02T20:57:09Z", "hours": 1.2269, "text": "Devlog #1 Completed the CAD assembly for my robot arm. I plan it to be a 5-DOF arm with 5 motors for movement and 1 motor for the claw. I’m using 5 servos and 1 stepper motor right now but I don’t know if I should change it all into servos. I also made the arm be able to swap grippers pretty easily. Im gonna print everything for this arm, gears, gripper, etc. I can also 3d print the ball bearings but I think its better to buy them. The next step is to start printing everything, buying all the parts and start assembling it. Once Im done assembling Ill start coding it. I plan for the arm to run on a Raspberry Pi and be controlled via an app."}]...
|
Title: Robot Arm by @jake18 | Stardance
Devlogs:
Title: Robot Arm by @jake18 | Stardance
Devlogs:
Devlog #1 Completed the CAD assembly for my robot arm. I plan it to be a 5-DOF arm with 5 motors for movement and 1 motor for the claw. I’m using 5 servos and 1 stepper motor right now but I don’t know if I should change it all into servos. I also made the arm be able to swap grippers pretty easily. Im gonna print everything for this arm, gears, gripper, etc. I can also 3d print the ball bearings but I think its better to buy them. The next step is to start printing everything, buying all the parts and start assembling it. Once Im done assembling Ill start coding it. I plan for the arm to run on a Raspberry Pi and be controlled via an app.
Devlog #2 Finished printing everything and started testing if everything fit together. Some of the components had weak spots or didn’t fit together well. I had to go back and forth between CAD and printing for a while because my tolerances weren’t quite correct. Everything fits nicely now. I also made a GitHub repo and added all the CAD files, BOM, pictures etc. I will update GitHub frequently, and everything needed to recreate this project will be there. I also made a wiring diagram and in the process realized that I needed a few more components to make sure that the arm would work smoothly and safely. I was kinda hard to learn why I needed all these different components but in the end I think it makes sense to me now. The next steps now is probably to buy the components and then assemble the robot. In the meantime though I think I can start writing some code on Inverse Kinematics for the Robot. I want it to be able to move all the servos to the correct angle when given some coordinates.
Devlog #3 So now i have printed all the parts and assembled the arm up to the wrist, but a few problems prevented the arm from moving properly. The gears at the elbow are slipping when under load and also the shafts supporting them are not stable. I think I can fix this by locking the two shafts together and using wider M2 gears. The belt at the shoulder is also slipping under load. I think that i just need the gears to be bigger so that they can tension the belt better. The elbow joint servo doesnt have enough movement to drive the whole elbow 180 degrees because of the gears. I messed up this part because i was supposed to buy the 270 degree servo not the 180 one. Ill be waiting for the 270 servo to arrive. Aside from those problems I have written code so that I can control the servos by angle and not PWM pulses. The base of the arm works fine, Ill be controlling that as soon as i learn how to control a stepper motor. For now I have redesigned most of the arm to fix these problems, but as i wait for the servo and all the parts to print, ill try to work on a web that can control the arm.
Devlog #4 So ive finished the CAD for the new parts and assembled the robot arm, but the wrist roll and gripper will be attached later. the elbow and wrist pitch of the robot works smoothly now, no skipping or anything, however. the shoulder belt is still skipping under load, i have now used more teeth but it still skips. I think that this is because the belt itself is not tensioned properly (its a little loose), i will have to return the current belt and buy a new one. if anyone have any suggestions to help prevent skipping please let me know. for now that is the only major problem in this build. I am working on the gripper right now since the old design didnt work. also i have been working on a web app to control the arm from my computer to the esp via wifi. I am almost done the app and soon will be able to send data to the esp. that is all for now but i think more problems will apear later.
Devlog #5 I have now finished the local web server to control the robot, it includes 6 sliders for the 5 servos and 1 stepper motor and also a coordinate control. for the coordinate control, you simply plug in your x, y, z coordinates it will return j1, j2, j3, and j4 angles to you. on the coding side of that, i just wrote some simple analytical ik, mostly triangle geometry. the website is ran by flask and i am using udp sockets to send the angles to my esp32 via wifi. everything is ran on my computer, so the esp would only have to control the motors with the angles. i also did some cad to redesign the shoulder base to fix the belt problem, will start printing soon.
Devlog #6 So i have just finished assembling the arm and making all the gears, motors and joints properly now what I have done: fixed the shoulder joint by removing the belt completely, now it runs on a 1:1.5 spur gear reduction I added the stepper motor so now the arm can rotate by its base, allowing it to move in 3d I redesigned the gripper since the old one (finray style gripper) was too weak and couldn’t pick things up. this new gripper is a rack and pinion gripper that is much stronger I have connected the SMPS power supply and now every motor can run on full power I have connected the website to the esp so now my slider control works and is accurate But there are still some problems: the backlash of all the joints add up, which means the end effector wobbles too much. My coordinate control still isn’t accurate So before shipping this project, I will fix the coordinate control code so that it is now accurate. The backlash is a separate problem that I dont think ill be able to solve in time.
Ships:
I built a 5-DOF robotic arm that can move manually or remotely using coordinate control. The arm uses 5 servo motors for the arm and 1 stepper motor for the base to provide movement. Every joint in this arm is controlled through a local web app that I am running on my laptop. All of the controls, calculations, etc., are all on my laptop. The ESP32 only acts as a motor controller, receiving commands through wifi and controlling the motors. The thing that I am most proud of is the code and coordinate control. This was the first time I did a project with this scale of code, and I am proud that it works well. This was also the first time I made a web app and combining it with an ESP32. The most challenging part about this project was definitely the mechanical design. Everything in CAD worked smoothly with no mistakes, but when I printed it out, big and small errors kept showing up that delayed my project by a few weeks. I had to go through many iterations until I got one that worked. FYI the angle processing in the code is tailored to my specific motor angles and position....
|
1793350669.166684
|
1793437069.166684
|
|
54220
|
Cognitive Arena by @Qlz | Stardance
|
Qlz
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-14T15:58:19Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A web based cognitive testing suite featuring five interactive benchmarks for reaction speed, aim training, visual memory, number memory, and a wpm test where users can test, track or imrpove their cognitive skills from these tests.Along the way the challenging part was improving the cognitive tests making it accurste enough,refining the test flow with clearer instructions, countdowns, and live wpm test for what the user types over it and getting the code right based on what i intented and accuracy tracking rigs for the grid shot .I still have plenty of ideas to add on to this like a better tracking chart or other accurate tests. Right now, the project feels fast, responsive, and accurate enough to stand on its own as an experience.", "repo": "https://github.com/aqvoz/Cognitive-Arena", "demo": "https://aqvoz.github.io/Cognitive-Arena/"}]...
|
[{"post_id": 68069, "ts": "202 [{"post_id": 68069, "ts": "2026-09-14T13:50:45Z", "hours": 1.4433, "text": "I was able to improve the current five cognitive tests which is the important part of this project, each test has a detailed indroduction upon hovering over it so u can choose swiftly .I was focused on the dialing of the typing test mechanics so that keystrokes feel smooth and responsive, complete with live wpm and accuracy tracking right over an endless stream of text. I spent much time squashing bugs across the visual memory and aim tests, cleaning up performance leaks, and polishing the overall flow of each test especially the wpm test,I overhauled the event listeners and timer logic to eliminate performance leaks, fixed layout shift issues during high-speed clicks, and polished the overall visual flow between transitions Along the way, I refined the test flow with clearer instructions, countdowns, better feedback, and more consistent scoring across each challenge. Paid alot of attention to the smaller details from making the reaction test more precise to keeping the different tests feeling responsive and fair across different setups which makes Cognitive Arena feels less like a collection of mini games but more like a complete cognitive approximated testing experience . There are still plenty of things I could keep tweaking and later on i am planning to update this, but I think it’s finally at a point where it’s ready to be shared before upcoming cool updates like adding more tests or a progression chart to maoe it more challenging but right now its enough as a quick test of your cognitive skills"}, {"post_id": 66793, "ts": "2026-09-12T17:58:03Z", "hours": 0.4992, "text": "Instead of going straight into the test i needed a startup page before users launch a benchmark,so I designed a retro landing screen . Made the whole UI feel much more cleaner before jumping into the actual benchmarks for a startup indroduction and also designed the layout for cogintive tests.i made 5 simple tests so far which needs a rework so next devlog i will be improving my mini cognitive tests that i had made to publish"}, {"post_id": 66431, "ts": "2026-09-12T08:14:00Z", "hours": 2.0428, "text": "Started my new project Cognitive Arena . Set up the core HTML structure and styled the base interface with a clean, modern layout to handle the interactive elements and still adding the benchmarks"}]...
|
Title: Cognitive Arena by @Qlz | Stardance
Devlog Title: Cognitive Arena by @Qlz | Stardance
Devlogs:
Started my new project Cognitive Arena . Set up the core HTML structure and styled the base interface with a clean, modern layout to handle the interactive elements and still adding the benchmarks
Instead of going straight into the test i needed a startup page before users launch a benchmark,so I designed a retro landing screen . Made the whole UI feel much more cleaner before jumping into the actual benchmarks for a startup indroduction and also designed the layout for cogintive tests.i made 5 simple tests so far which needs a rework so next devlog i will be improving my mini cognitive tests that i had made to publish
I was able to improve the current five cognitive tests which is the important part of this project, each test has a detailed indroduction upon hovering over it so u can choose swiftly .I was focused on the dialing of the typing test mechanics so that keystrokes feel smooth and responsive, complete with live wpm and accuracy tracking right over an endless stream of text. I spent much time squashing bugs across the visual memory and aim tests, cleaning up performance leaks, and polishing the overall flow of each test especially the wpm test,I overhauled the event listeners and timer logic to eliminate performance leaks, fixed layout shift issues during high-speed clicks, and polished the overall visual flow between transitions Along the way, I refined the test flow with clearer instructions, countdowns, better feedback, and more consistent scoring across each challenge. Paid alot of attention to the smaller details from making the reaction test more precise to keeping the different tests feeling responsive and fair across different setups which makes Cognitive Arena feels less like a collection of mini games but more like a complete cognitive approximated testing experience . There are still plenty of things I could keep tweaking and later on i am planning to update this, but I think it’s finally at a point where it’s ready to be shared before upcoming cool updates like adding more tests or a progression chart to maoe it more challenging but right now its enough as a quick test of your cognitive skills
Ships:
A web based cognitive testing suite featuring five interactive benchmarks for reaction speed, aim training, visual memory, number memory, and a wpm test where users can test, track or imrpove their cognitive skills from these tests.Along the way the challenging part was improving the cognitive tests making it accurste enough,refining the test flow with clearer instructions, countdowns, and live wpm test for what the user types over it and getting the code right based on what i intented and accuracy tracking rigs for the grid shot .I still have plenty of ideas to add on to this like a better tracking chart or other accurate tests. Right now, the project feels fast, responsive, and accurate enough to stand on its own as an experience....
|
1793350670.4613674
|
1793437070.4613674
|
|
54225
|
YACK by @Definitly-Not-Me | Stardance
|
Definitly-Not-Me
|
1
|
57.5
|
186
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-22T18:45:35Z", "hours": 55.0, "multiplier": 3.44, "payout": 186, "blessing": "neutral", "text": "I tried to build a language model Model. My expectation were not high. I just hoped he would be multilingual (English + French + My Mother tongue) and that I would learn how LLMs works along the way. Overall the experience was pretty rewarding. Except for the Kaggle Part: This one, I hated it with passion. Due to monetary requirement both models are under-trained but they can produce coherent sentences. So I consider it a win. I’m hosting the project on my laptop so whoever review this: Don’t take your time >:( ** Just Kidding ☺️**", "repo": "https://github.com/Definitly-Not-Me/Patrick", "demo": "https://definitlynotme.site"}]...
|
[{"post_id": 75633, "ts": "202 [{"post_id": 75633, "ts": "2026-09-30T16:32:34Z", "hours": 2.0122, "text": "Dear shipwrights I don’t know if you’ll read this but I still feel like writing it since I’ve nothing else to write. In response to the feedback provided, here’s what changed: I deleted some part of my README as well as corrected grammar mistakes since it seemed to “contain” part written by AI. Honestly the grammar mistakes should’ve given me an alibi but … nevermind. I have patched garbage characters generation during inference. I truly hope that was the “ bug ” you mentioned in your review. If it was not, I’m afraid there’s not more I can do without spending ton of time/money on computing to improve my Language Model output (NOT chatbot). Which would be sad. Really sad. For the planet and for me. Detailed AI usage in the project description. I really hope the third time will pay home 🥲"}, {"post_id": 72678, "ts": "2026-09-23T13:59:13Z", "hours": 0.4858, "text": "Dear shipwrights My Cloudflared tunnel went down and I don’t know why. Thus the link in my shipping devlog is now invalid. I looked up if there was any way to get a more lasting url and all solutions I found were either paid services (domain name) or required a credit card. I have neither. I will wait for your message and try to improve networking skills for the next ship. Thanks for reading me. Sadly, @Definitly-Not-Me"}, {"post_id": 72349, "ts": "2026-09-22T18:37:55Z", "hours": 2.0403, "text": "Wait ! shipping require you to post a devlog ? Bad luck on top of bad luck. I found no cloud hosting platform that check all my requirements so for the time being, I’m a cloud provider :) For those who will review my project, I ask for your understanding. Nothing to show for this one. So here is picture of my Language Model mascot. Patrick Star"}, {"post_id": 71936, "ts": "2026-09-21T20:21:38Z", "hours": 10.3194, "text": "Last devlog before shipping: Against my best wishes, none of my models reached a usable state. Even though their best loss is quite low (2.94 and 2.81) I didn’t manage to reach the finetuning stage. To continue training I would have to start pouring money to get more compute power. And I don’t have that…. So that’ll be all. I will finish the UI and deploy locally first until I manage to find a vps before my project get a reviewer."}, {"post_id": 68777, "ts": "2026-09-15T18:51:37Z", "hours": 9.3614, "text": "Premature optimization is the root of all evils I still fell in the trap… I struggled for weeks to produce a model that can generate coherent text. Now all what is left is to ship or perhaps even fine-tune and be done. But nooooo, we need to atleast make PeRfOrmAnt . Ended adding some mods to the original GPT-2. I found that there’s even a whole community around this . I gained a lot from them. Now, the project is a Frankenstein DeepSeek . Time will tell if this was a good idea (-_-) Here’s a picture of the last training round. Things went quite well despite a bug affecting the learning rate."}, {"post_id": 65660, "ts": "2026-09-10T23:05:05Z", "hours": 1.6197, "text": "Updates and Bloopers Even though Kaggle runs on Google Collab, it turn out Collab is much more easier to use than Kaggle. To my grand deception, Collab is not as generous as Kaggle. So I will not change my workflow. I think I also need to change dataset. Also what’s up with Stardance and all those auxiliary events/challenges ?"}, {"post_id": 65020, "ts": "2026-09-09T20:25:25Z", "hours": 8.3361, "text": "Now we’re talking folks Reached a milestone. After nearly 10 hours of training on OpenwebText , the model can now formulate somewhat grammatically correct sentences. It’s not over though. Training was interrupted because apparently kaggle has a time limit for how long a notebook can run (on top on the weekly time limit). Sadly I have no interest in buying cloud compute for that, so I will just look for a richer dataset, reduce the number of epoch and crank up the learning rate."}, {"post_id": 63205, "ts": "2026-09-06T21:31:41Z", "hours": 4.2356, "text": "I’m tired boss Sorry, stardance but for my own good and sanity, I think I will have to give up or half bake this project. I really tried 😞"}, {"post_id": 59298, "ts": "2026-09-01T00:37:38Z", "hours": 3.1833, "text": "Two steps before the throne Finally deployed the training script to Kaggle. Now all there’s to be is wait and hope. A quick list of what’s new: Divided the training loop in many functions to handle dataloading, parsing, logging and more; Managed to find a copy of gutenberg books to serve as dataset; Implemented checkpoints in the training so that I will not lose all progress if I run out of compute; Dataloading is now done using np.memmap ensuring that only a portion of tokens are loaded in memory; Scaled the value of hyprparameters based on configuration of gpt-2 small (my main source is Chatgpt/GLM and a rough guess of number of epochs); Fixed a “ storage leak ” where the best model checkpoints where saved per epoch instead of overwriting previous one (totally my fault) Next: Fix my nonexistant git history while waiting for the training to finish"}, {"post_id": 58245, "ts": "2026-08-30T16:34:58Z", "hours": 7.7647, "text": "Small update on building a Language Model So after getting the architecture down and adding collecting some data, I started the training phase. That was one week ago …. Training is surprisingly (or not ?) actually more than just shoving in more data and expect it to work. Right now I’m struggling with finding sensible hyperparameters and getting the model to output something coherent. What’s new I mainly worked on the training loop and minor optimizations to hidden layers to distract myself while Pytorch was frying my APU. Of course there were also bugs in the code that had to fix on the way. For monitoring the training I decided to use plain TUI built with Rich but I’m currently adding a csv logging for better history tracking. At first I was planning to run the training on my laptop but I understood why billions dollar companies needed so many datacenters. Anyway, I deployed it on Kaggle which also was harder than it should be. Next Take a break, Improve training loop, Deploy on Kaggle Forget about it"}, {"post_id": 54745, "ts": "2026-08-25T20:38:12Z", "hours": 7.6444, "text": "Devlog 0: Build a Large/Small/Whatever LM Overview Hello Stardance! Hello world appetIntern disdainwartsnine . Those were the first words of my Language Model, am feeling so fogging proud right now. I’m trying to get into ML for the next year (not just because of the hype). For my first projects, I tried building a simple perceptron as well as understanding the algorithm behind Tic-Tac-Toe. Nothing grandiose. Why aim so high for my next project since I’m not that knowledgeable ? Because I’m short of time and there are full tutorial available, that’s all. Goal & MVP The MVP goal is to be able to generate coherent text (will probably be gibberish since I’m not a billion dollars corpo) and implement simple RAG to compensate for the lack of intelligence. I plan to upgrade it as I learn more about LLMs and Transformers. The Current State I just got the basic unoptimized architecture down. It tooks so much time to understand the Transformer architecture and all the maths that goes behind it (thanks to 3Blue1Brown it was manageable). Now I need to train & evaluate the “Advanced Autocomplete Machine” so that It can start acting more like GPT2. Picture: Liking my rice ? 😏"}]...
|
Title: YACK by @Definitly-Not-Me | Stardance
Devl Title: YACK by @Definitly-Not-Me | Stardance
Devlogs:
Devlog 0: Build a Large/Small/Whatever LM Overview Hello Stardance! Hello world appetIntern disdainwartsnine . Those were the first words of my Language Model, am feeling so fogging proud right now. I’m trying to get into ML for the next year (not just because of the hype). For my first projects, I tried building a simple perceptron as well as understanding the algorithm behind Tic-Tac-Toe. Nothing grandiose. Why aim so high for my next project since I’m not that knowledgeable ? Because I’m short of time and there are full tutorial available, that’s all. Goal & MVP The MVP goal is to be able to generate coherent text (will probably be gibberish since I’m not a billion dollars corpo) and implement simple RAG to compensate for the lack of intelligence. I plan to upgrade it as I learn more about LLMs and Transformers. The Current State I just got the basic unoptimized architecture down. It tooks so much time to understand the Transformer architecture and all the maths that goes behind it (thanks to 3Blue1Brown it was manageable). Now I need to train & evaluate the “Advanced Autocomplete Machine” so that It can start acting more like GPT2. Picture: Liking my rice ? 😏
Small update on building a Language Model So after getting the architecture down and adding collecting some data, I started the training phase. That was one week ago …. Training is surprisingly (or not ?) actually more than just shoving in more data and expect it to work. Right now I’m struggling with finding sensible hyperparameters and getting the model to output something coherent. What’s new I mainly worked on the training loop and minor optimizations to hidden layers to distract myself while Pytorch was frying my APU. Of course there were also bugs in the code that had to fix on the way. For monitoring the training I decided to use plain TUI built with Rich but I’m currently adding a csv logging for better history tracking. At first I was planning to run the training on my laptop but I understood why billions dollar companies needed so many datacenters. Anyway, I deployed it on Kaggle which also was harder than it should be. Next Take a break, Improve training loop, Deploy on Kaggle Forget about it
Two steps before the throne Finally deployed the training script to Kaggle. Now all there’s to be is wait and hope. A quick list of what’s new: Divided the training loop in many functions to handle dataloading, parsing, logging and more; Managed to find a copy of gutenberg books to serve as dataset; Implemented checkpoints in the training so that I will not lose all progress if I run out of compute; Dataloading is now done using np.memmap ensuring that only a portion of tokens are loaded in memory; Scaled the value of hyprparameters based on configuration of gpt-2 small (my main source is Chatgpt/GLM and a rough guess of number of epochs); Fixed a “ storage leak ” where the best model checkpoints where saved per epoch instead of overwriting previous one (totally my fault) Next: Fix my nonexistant git history while waiting for the training to finish
I’m tired boss Sorry, stardance but for my own good and sanity, I think I will have to give up or half bake this project. I really tried 😞
Now we’re talking folks Reached a milestone. After nearly 10 hours of training on OpenwebText , the model can now formulate somewhat grammatically correct sentences. It’s not over though. Training was interrupted because apparently kaggle has a time limit for how long a notebook can run (on top on the weekly time limit). Sadly I have no interest in buying cloud compute for that, so I will just look for a richer dataset, reduce the number of epoch and crank up the learning rate.
Updates and Bloopers Even though Kaggle runs on Google Collab, it turn out Collab is much more easier to use than Kaggle. To my grand deception, Collab is not as generous as Kaggle. So I will not change my workflow. I think I also need to change dataset. Also what’s up with Stardance and all those auxiliary events/challenges ?
Premature optimization is the root of all evils I still fell in the trap… I struggled for weeks to produce a model that can generate coherent text. Now all what is left is to ship or perhaps even fine-tune and be done. But nooooo, we need to atleast make PeRfOrmAnt . Ended adding some mods to the original GPT-2. I found that there’s even a whole community around this . I gained a lot from them. Now, the project is a Frankenstein DeepSeek . Time will tell if this was a good idea (-_-) Here’s a picture of the last training round. Things went quite well despite a bug affecting the learning rate.
Last devlog before shipping: Against my best wishes, none of my models reached a usable state. Even though their best loss is quite low (2.94 and 2.81) I didn’t manage to reach the finetuning stage. To continue training I would have to start pouring money to get more compute power. And I don’t have that…. So that’ll be all. I will finish the UI and deploy locally first until I manage to find a vps before my project get a reviewer.
Wait ! shipping require you to post a devlog ? Bad luck on top of bad luck. I found no cloud hosting platform that check all my requirements so for the time being, I’m a cloud provider :) For those who will review my project, I ask for your understanding. Nothing to show for this one. So here is picture of my Language Model mascot. Patrick Star
Dear shipwrights My Cloudflared tunnel went down and I don’t know why. Thus the link in my shipping devlog is now invalid. I looked up if there was any way to get a more lasting url and all solutions I found were either paid services (domain name) or required a credit card. I have neither. I will wait for your message and try to improve networking skills for the next ship. Thanks for reading me. Sadly, @Definitly-Not-Me
Dear shipwrights I don’t know if you’ll read this but I still feel like writing it since I’ve nothing else to write. In response to the feedback provided, here’s what changed: I deleted some part of my README as well as corrected grammar mistakes since it seemed to “contain” part written by AI. Honestly the grammar mistakes should’ve given me an alibi but … nevermind. I have patched garbage characters generation during inference. I truly hope that was the “ bug ” you mentioned in your review. If it was not, I’m afraid there’s not more I can do without spending ton of time/money on computing to improve my Language Model output (NOT chatbot). Which would be sad. Really sad. For the planet and for me. Detailed AI usage in the project description. I really hope the third time will pay home 🥲
Ships:
I tried to build a language model Model. My expectation were not high. I just hoped he would be multilingual (English + French + My Mother tongue) and that I would learn how LLMs works along the way. Overall the experience was pretty rewarding. Except for the Kaggle Part: This one, I hated it with passion. Due to monetary requirement both models are under-trained but they can produce coherent sentences. So I consider it a win. I’m hosting the project on my laptop so whoever review this: Don’t take your time >:( ** Just Kidding ☺️**...
|
1793350671.6819494
|
1793437071.6819494
|
|
54232
|
Birthday hunt by @Necry | Stardance
|
Necry
|
1
|
9.62
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-15T14:56:07Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is honestly the hardest project I have ever made but it was fun. I am so ready for the next one(which is already started).", "repo": "https://github.com/necrymere/birthday-treasure-hunt", "demo": "https://necrymere.github.io/birthday-treasure-hunt/"}]...
|
[{"post_id": 73769, "ts": "202 [{"post_id": 73769, "ts": "2026-09-25T22:10:37Z", "hours": 0.2794, "text": "I remade parts of the CSS again. Please I am begging you to accept it this time as I do not want to spend too much on the design, again the game itself is the important part(which I am really proud of) not the design. This is one of the rare times I do not care that much about design but this looks nicer, I have to admit. Please if anything else is the matter tell me exactly what you feel is off(hopefully nothing). Genuinely I have no idea what to change. Also I learned how firebase works which is pretty cool."}, {"post_id": 72316, "ts": "2026-09-22T17:26:05Z", "hours": 0.3375, "text": "I fixed a few things about the README and design but it is quite annoying that they keep rejecting me cause of the design because it was not the focal point, playing the game is and I spent most of the time implementing the game and not focusing on the design. I did delete the border and I think it looks a bit better now. It looking like this is a design choice"}, {"post_id": 67632, "ts": "2026-09-13T19:39:24Z", "hours": 0.7811, "text": "I am so glad I am FINALLY done with the README. Now I can ship this project at last. It was fun but I am happy it is done."}, {"post_id": 67564, "ts": "2026-09-13T18:18:32Z", "hours": 1.3917, "text": "I decided to make my life harder by adding a gallery at the end with the photos of the missions. So many bugs but it was worth it. I started writing the readme and I am so happy I did it."}, {"post_id": 66889, "ts": "2026-09-12T20:45:56Z", "hours": 1.4214, "text": "I am sososo happy with myself. I finally finished after countless problems to link my database with the project for live approval of the photos. I am too happy about this. Oh also I decided to make a wall at the end with all the photos gathered on the mission so I will get to that next."}, {"post_id": 64924, "ts": "2026-09-09T17:22:12Z", "hours": 1.3994, "text": "So I am done with the game(I made the buttons match) and I added a end screen after all the missions are completed. Maybe I will finish this tomorrow."}, {"post_id": 55621, "ts": "2026-08-27T16:15:50Z", "hours": 1.6353, "text": "This was a bit faster and I am done with the game itself(I think) and now only maybe something at the end and also testing. Hopefully it works."}, {"post_id": 54449, "ts": "2026-08-25T13:59:24Z", "hours": 2.1542, "text": "Gosh did I really code that long? Oh well. All this time was spent trying to make a page as a joke. This is a page about the “AI” that is behind the site(actually me verifying all the images in real time). So glad I finished it. It has a minor glitch on the version but I will leave it as is. Call it a “stylistic choice”"}]...
|
Title: Birthday hunt by @Necry | Stardance
Devlog Title: Birthday hunt by @Necry | Stardance
Devlogs:
Gosh did I really code that long? Oh well. All this time was spent trying to make a page as a joke. This is a page about the “AI” that is behind the site(actually me verifying all the images in real time). So glad I finished it. It has a minor glitch on the version but I will leave it as is. Call it a “stylistic choice”
This was a bit faster and I am done with the game itself(I think) and now only maybe something at the end and also testing. Hopefully it works.
So I am done with the game(I made the buttons match) and I added a end screen after all the missions are completed. Maybe I will finish this tomorrow.
I am sososo happy with myself. I finally finished after countless problems to link my database with the project for live approval of the photos. I am too happy about this. Oh also I decided to make a wall at the end with all the photos gathered on the mission so I will get to that next.
I decided to make my life harder by adding a gallery at the end with the photos of the missions. So many bugs but it was worth it. I started writing the readme and I am so happy I did it.
I am so glad I am FINALLY done with the README. Now I can ship this project at last. It was fun but I am happy it is done.
I fixed a few things about the README and design but it is quite annoying that they keep rejecting me cause of the design because it was not the focal point, playing the game is and I spent most of the time implementing the game and not focusing on the design. I did delete the border and I think it looks a bit better now. It looking like this is a design choice
I remade parts of the CSS again. Please I am begging you to accept it this time as I do not want to spend too much on the design, again the game itself is the important part(which I am really proud of) not the design. This is one of the rare times I do not care that much about design but this looks nicer, I have to admit. Please if anything else is the matter tell me exactly what you feel is off(hopefully nothing). Genuinely I have no idea what to change. Also I learned how firebase works which is pretty cool.
Ships:
This is honestly the hardest project I have ever made but it was fun. I am so ready for the next one(which is already started)....
|
1793350672.979402
|
1793437072.979402
|
|
2593
|
Live Space Tracker (working title) by @dspace1015 Live Space Tracker (working title) by @dspace1015 | Stardance...
|
dspace1015
|
1
|
56.82
|
201
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-30T04:46:03Z", "hours": 48.0, "multiplier": 4.22, "payout": 201, "blessing": "neutral", "text": "I made a web app that lets you explore the positions of the planets in the solar system in real time. Change time with (< > /) keys to view the solar system in the past or future. Change your camera with the (c) key to view objects from their own orientation as they rotate around each other. Zoom out and see the positions of stars in our neighborhood. Plug in your home location on the map and you can view your own current night sky. Track the space station in low Earth orbit, and watch when it appears overhead.", "repo": "https://github.com/dspace1015/space", "demo": "https://dspace1015.github.io/space/"}]...
|
[{"post_id": 84723, "ts": "202 [{"post_id": 84723, "ts": "2026-10-30T04:41:02Z", "hours": 6.4967, "text": "Bug fixes, and More Objects! Added the moons of Uranus, and Neptune. Yet to add pluto because each object has so much data for its orbit and physical characteristics. I also added a new text window when you select an object to view different facts about said object. Bug fixes: Fixed the bug that you would get stuck in planets after switching to them Fixed the bug where you could not click on an object that was infront of another Fixed most the bugs that have to do with the ground view I will probably end up doing one more devlog after this before I ship again. The things I wish to add are more information on the display and to make it easier to select your location."}, {"post_id": 76034, "ts": "2026-10-02T04:28:06Z", "hours": 2.3267, "text": "Fixed some bugs that came up after launch Added text that when hovered shows controlls (most asked for feature) Fixed(mostly) the constant pop up bug, you may need to refresh the page once but it should be mostly gone by now"}, {"post_id": 75454, "ts": "2026-09-30T04:32:38Z", "hours": 3.7503, "text": "Final devlog for now, finished map view and added camera information I have added camera controls where you can change to view a planet from its own axis or rotation by pressing (c) to cycle through modes, and you can track objects by pressing (t). Also added more information on the ground view, light time calculation and finally the map view where once opened you can change your position by clicking on it."}, {"post_id": 74746, "ts": "2026-09-28T04:07:38Z", "hours": 8.5467, "text": "Finished all the continents, added saturns rings and and Mars and Jupiter’s moons. I have made decent progress, most of my time was spent debugging and optimizing since I’m only using the cpu to render everything. I also added more camera controls so that when you press (c) you can tilt the camera to match the planets axis tilt, or rotate along with it. The final parts I need to add at this point is a menu where you can choose your location and a information panel for the object that you select."}, {"post_id": 74325, "ts": "2026-09-27T05:34:21Z", "hours": 8.4517, "text": "Added continent outlines and object occlusion After spending way too much time trying to figure out webgl and three.js I decided that it was not worth the extra effort for slightly better graphics. Running out of time, I decided to stick to the system that I already had and decided to just draw the coastlines so you can make out the earths orientation better. Right now I have only added N&S America, Antarctica, and Australia. Ill add the rest later but for now this is what I got. Running out of time to ship this so I’m going to add a location selector and call this good."}, {"post_id": 40892, "ts": "2026-08-04T18:15:05Z", "hours": 2.5356, "text": "Added ground perspective and fixed stars Added a feature where you can select a position on the earth and view from there. You do have to manually add your latitude and longitude but eventually you will be able to select from a map or search for a specific city. (The demo shows London UK’s position so I don’t reveal my own) I also fixed the lag from the stars that was making the site slow, now it can display 3500 stars and all the other objects just fine."}, {"post_id": 11528, "ts": "2026-06-18T20:32:13Z", "hours": 5.48, "text": "Added grid based on your location, and stars from the Henry Draper (HD) catalogue. https://in-the-sky.org/data/catalogue.php?cat=HD&const=1&sort=1&view=1&page=1 Unfortunately now the framerate has dropped a lot, so I’ll need to figure out how to handle all the objects separately and only update the planets. Until then that’s enough programming for me today."}, {"post_id": 8955, "ts": "2026-06-14T22:02:27Z", "hours": 2.1864, "text": "Added TLE support https://en.wikipedia.org/wiki/Two-line_element_set (A common file format for earth orbit satellites). I’ve realized that I might have to switch to using a graphics api like webgl to improve the graphics from here, but for now I will focus on functionality. Better graphics should not matter at the moment from a ground level perspective."}, {"post_id": 7557, "ts": "2026-06-12T17:12:34Z", "hours": 6.3506, "text": "Finally added a way to read separate files into the web app. Objects are now stored in json files with all their orbital parameters and physical characteristics. Next steps for this project will be to start adding detail on the planets and reference frame transformations from your local position to space."}, {"post_id": 5140, "ts": "2026-06-08T20:33:11Z", "hours": 2.9439, "text": "You can now click on objects to select them. Orbits now also accurately precess. The moon’s orbit is now close enough to reality to predict solar eclipses, which is accurate enough for this project. All the inner rocky planet’s procession has been implemented as well according to NASA horizon’s approximation. They should now be reasonably accurate a few hundred yrs into the future. Next steps will be adding more objects like Jovian moons and spacecraft, as well as improving graphics."}, {"post_id": 2510, "ts": "2026-06-05T01:16:11Z", "hours": 3.0403, "text": "Added the main 8 planets in the solar system and a time control feature. You can now speed up, slow down, or reverse time to see the solar system on different dates, or reset to the current time. You can also scroll through the list of planets and watch from their perspective. As far as I can tell I succeeded in making the planets positions accurate (or at least enough for my project)."}, {"post_id": 1200, "ts": "2026-06-03T01:43:11Z", "hours": 0.8872, "text": "Added functionality for objects to orbit other objects. Progress is coming along nicely so far, all orbits of type e<1 are displayable and can be centered around any object. The next steps I plan on taking are plugging in the values for our actual solar system and switching camera controls to be centered on planets, then adding time control and other UI."}, {"post_id": 1103, "ts": "2026-06-02T22:39:41Z", "hours": 1.4622, "text": "I added mouse controls, Kepler’s 2nd law, and a grid that will come in handy for identifying places in the sky. Next I will continue to add features for adding celestial bodies and different spacecraft."}, {"post_id": 963, "ts": "2026-06-02T18:53:07Z", "hours": 0.8086, "text": "Added orbit calculations to the planetarium web app so I can start adding other objects in the display. A few more functions will need to be implemented but very soon I should be able to start plugging in data."}, {"post_id": 621, "ts": "2026-06-02T03:49:47Z", "hours": 1.2097, "text": "Starting the basic foundation of the web app, I plan on using only JavaScript and HTML5’s canvas to draw all the objects, using data from celestrack and NASA horizons to find all the data I need. Screenshot is just of a test of the basic 3d drawing function with axis visible. Because it is just night sky objects no fancy 3d engine will be needed."}]...
|
Title: Live Space Tracker (working title) by @dspa Title: Live Space Tracker (working title) by @dspace1015 | Stardance
Devlogs:
Starting the basic foundation of the web app, I plan on using only JavaScript and HTML5’s canvas to draw all the objects, using data from celestrack and NASA horizons to find all the data I need. Screenshot is just of a test of the basic 3d drawing function with axis visible. Because it is just night sky objects no fancy 3d engine will be needed.
Added orbit calculations to the planetarium web app so I can start adding other objects in the display. A few more functions will need to be implemented but very soon I should be able to start plugging in data.
I added mouse controls, Kepler’s 2nd law, and a grid that will come in handy for identifying places in the sky. Next I will continue to add features for adding celestial bodies and different spacecraft.
Added functionality for objects to orbit other objects. Progress is coming along nicely so far, all orbits of type e<1 are displayable and can be centered around any object. The next steps I plan on taking are plugging in the values for our actual solar system and switching camera controls to be centered on planets, then adding time control and other UI.
Added the main 8 planets in the solar system and a time control feature. You can now speed up, slow down, or reverse time to see the solar system on different dates, or reset to the current time. You can also scroll through the list of planets and watch from their perspective. As far as I can tell I succeeded in making the planets positions accurate (or at least enough for my project).
You can now click on objects to select them. Orbits now also accurately precess. The moon’s orbit is now close enough to reality to predict solar eclipses, which is accurate enough for this project. All the inner rocky planet’s procession has been implemented as well according to NASA horizon’s approximation. They should now be reasonably accurate a few hundred yrs into the future. Next steps will be adding more objects like Jovian moons and spacecraft, as well as improving graphics.
Finally added a way to read separate files into the web app. Objects are now stored in json files with all their orbital parameters and physical characteristics. Next steps for this project will be to start adding detail on the planets and reference frame transformations from your local position to space.
Added TLE support https://en.wikipedia.org/wiki/Two-line_element_set (A common file format for earth orbit satellites). I’ve realized that I might have to switch to using a graphics api like webgl to improve the graphics from here, but for now I will focus on functionality. Better graphics should not matter at the moment from a ground level perspective.
Added grid based on your location, and stars from the Henry Draper (HD) catalogue. https://in-the-sky.org/data/catalogue.php?cat=HD&const=1&sort=1&view=1&page=1 Unfortunately now the framerate has dropped a lot, so I’ll need to figure out how to handle all the objects separately and only update the planets. Until then that’s enough programming for me today.
Added ground perspective and fixed stars Added a feature where you can select a position on the earth and view from there. You do have to manually add your latitude and longitude but eventually you will be able to select from a map or search for a specific city. (The demo shows London UK’s position so I don’t reveal my own) I also fixed the lag from the stars that was making the site slow, now it can display 3500 stars and all the other objects just fine.
Added continent outlines and object occlusion After spending way too much time trying to figure out webgl and three.js I decided that it was not worth the extra effort for slightly better graphics. Running out of time, I decided to stick to the system that I already had and decided to just draw the coastlines so you can make out the earths orientation better. Right now I have only added N&S America, Antarctica, and Australia. Ill add the rest later but for now this is what I got. Running out of time to ship this so I’m going to add a location selector and call this good.
Finished all the continents, added saturns rings and and Mars and Jupiter’s moons. I have made decent progress, most of my time was spent debugging and optimizing since I’m only using the cpu to render everything. I also added more camera controls so that when you press (c) you can tilt the camera to match the planets axis tilt, or rotate along with it. The final parts I need to add at this point is a menu where you can choose your location and a information panel for the object that you select.
Final devlog for now, finished map view and added camera information I have added camera controls where you can change to view a planet from its own axis or rotation by pressing (c) to cycle through modes, and you can track objects by pressing (t). Also added more information on the ground view, light time calculation and finally the map view where once opened you can change your position by clicking on it.
Fixed some bugs that came up after launch Added text that when hovered shows controlls (most asked for feature) Fixed(mostly) the constant pop up bug, you may need to refresh the page once but it should be mostly gone by now
Bug fixes, and More Objects! Added the moons of Uranus, and Neptune. Yet to add pluto because each object has so much data for its orbit and physical characteristics. I also added a new text window when you select an object to view different facts about said object. Bug fixes: Fixed the bug that you would get stuck in planets after switching to them Fixed the bug where you could not click on an object that was infront of another Fixed most the bugs that have to do with the ground view I will probably end up doing one more devlog after this before I ship again. The things I wish to add are more information on the display and to make it easier to select your location.
Ships:
I made a web app that lets you explore the positions of the planets in the solar system in real time. Change time with (< > /) keys to view the solar system in the past or future. Change your camera with the (c) key to view objects from their own orientation as they rotate around each other. Zoom out and see the positions of stars in our neighborhood. Plug in your home location on the map and you can view your own current night sky. Track the space station in low Earth orbit, and watch when it appears overhead....
|
1793350674.2852936
|
1793437074.2852936
|
|
20231
|
Tao - a wearable digital pet by @academicalvin | S Tao - a wearable digital pet by @academicalvin | Stardance...
|
academicalvin
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-24T03:29:03Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I tried replicating this digital pet I’ve seen on the internet and I absolutely love it. It’s not as sensor packed as the real thing but Tao packs an IMU, round LCD screen, haptic motor, and a temperature sensor. When turned on, it has a fun little expressive face that reacts to the world around it. Shake it –> it’ll get dizzy Leave it alone –> it gets sleepy Drop it –> it feels that Move it around –> its eyes moves", "repo": "https://github.com/alvi-n/TaoTheWearableDigitalPet", "demo": ""}]...
|
[{"post_id": 24416, "ts": "202 [{"post_id": 24416, "ts": "2026-07-07T23:22:51Z", "hours": 1.25, "text": "Time skip - I finished all the CAD and code for the project and I think it’s about time to submit! I added a charzard silkscreen design and it looks pretty cool the case has a pretty big back for the battery but I guess it’s not too noticable the main thing i’m not too sure about is the schematic and pcb wiring but hopefully if the design comes back to be for a redo I can do that fast this was a really fun project and I’m suprised myself i was able to remain consistent with this project"}, {"post_id": 22293, "ts": "2026-07-04T18:01:39Z", "hours": 1.9775, "text": "Taking out the NFC, Retracing Everything This took a little too long. Turns out since I didn’t have a LCD screen footprint I didn’t really know where the middle of the screen would be relative to the rest of the PCB. When I put everything into my 3d modeling software (Shapr3d), I realized it would be better if the screen was directly in the middle of the pcb by making it vertical. Which ultimately means I have to retrace almost everything."}, {"post_id": 18122, "ts": "2026-06-29T04:08:06Z", "hours": 3.1003, "text": "Honestly, I do not think I can get past the cut Spent too long trying to figure out how to make my own NFC chip antenna and for the time I’m trying to rush this project I don’t think I can. I think I will end up using a module with header pins for it instead of making it myself, it’s really devastating but for the sake of maintaining my enjoyment throughout this project I’m going to lower my scope."}, {"post_id": 15494, "ts": "2026-06-25T05:55:08Z", "hours": 1.3628, "text": "PCB routing - continued So far I believe I setted up the temperature sensor, motor driver, and accelerometer well and by that, I mean just the capacitors and resistors. I’m planning on putting this esp32 on the back side where I’ll also keep the battery so it doesn’t interfere with the lcd screen. This has been quite fun so far."}, {"post_id": 15364, "ts": "2026-06-24T23:49:22Z", "hours": 0.5, "text": "Outlining my pcb Not much was done in these 30 minutes, just imported a drawing of the shape of the pet."}, {"post_id": 14894, "ts": "2026-06-24T05:50:35Z", "hours": 0.8503, "text": "A little bit of this and a little bit of that. Today I started on my actual PCB design and turns out it’s harder than I thought. My schematic is like a maze, some lines in my schematic going two directions. Figuring out the best way to put everything is definitely a challenge. Tomorrow, I’ll start working on the edge cuts first and try to get 50% of the pcb wired."}, {"post_id": 13558, "ts": "2026-06-22T06:08:19Z", "hours": 2.3167, "text": "Tao Now Has an Accelerometer, NFC Reader, and a Temperature Sensor all powered by the xiao esp-32 s3 I never realized how powerful development boards are. Last session, I took an hour trying to figure out how make a buck converter, battery charger, and an external usb-c connector -> turns out the xiao board does all of that for me. Now instead of focusing my time on the power managing side of my project which was really confusing for me, I could now focus on adding additional fun elements to my project such as a haptic motor and temperature sensor Overall this project has been pretty fun so far, next step is working on the pcb layout and thinking about the shape of my digital pet."}, {"post_id": 10451, "ts": "2026-06-17T05:41:13Z", "hours": 1.0139, "text": "No modules, everything on a PCB. I’ve been seeing these digital pet accessories, similar to a Tamagotchi, on my feed a lot and the company selling these were listing them for ~$300 and I thought “I could definitely make this myself”. These things interact with the environment with some basic sensors which gives the face a signal to change its animation. Turns out its wayy harder than I thought to make myself. considering my only hardware project I’ve made was a macropad. There is a lot of pieces and I obviously haven’t built anything like this ever. Instead of adding modules that hook up to a breadboard, I realized that all of those parts can be added to the PCB itself and it all starts with the chip. I looked for the best chip for each of the different features and looked at the schematic for each. The only chip with a datasheet that actually made sense was for the battery charger, the rest…it took a bit more work. Anyways tomorrow, I’m planning on trying to finish the schematics so make sure to follow!"}]...
|
Title: Tao - a wearable digital pet by @academical Title: Tao - a wearable digital pet by @academicalvin | Stardance
Devlogs:
No modules, everything on a PCB. I’ve been seeing these digital pet accessories, similar to a Tamagotchi, on my feed a lot and the company selling these were listing them for ~$300 and I thought “I could definitely make this myself”. These things interact with the environment with some basic sensors which gives the face a signal to change its animation. Turns out its wayy harder than I thought to make myself. considering my only hardware project I’ve made was a macropad. There is a lot of pieces and I obviously haven’t built anything like this ever. Instead of adding modules that hook up to a breadboard, I realized that all of those parts can be added to the PCB itself and it all starts with the chip. I looked for the best chip for each of the different features and looked at the schematic for each. The only chip with a datasheet that actually made sense was for the battery charger, the rest…it took a bit more work. Anyways tomorrow, I’m planning on trying to finish the schematics so make sure to follow!
Tao Now Has an Accelerometer, NFC Reader, and a Temperature Sensor all powered by the xiao esp-32 s3 I never realized how powerful development boards are. Last session, I took an hour trying to figure out how make a buck converter, battery charger, and an external usb-c connector -> turns out the xiao board does all of that for me. Now instead of focusing my time on the power managing side of my project which was really confusing for me, I could now focus on adding additional fun elements to my project such as a haptic motor and temperature sensor Overall this project has been pretty fun so far, next step is working on the pcb layout and thinking about the shape of my digital pet.
A little bit of this and a little bit of that. Today I started on my actual PCB design and turns out it’s harder than I thought. My schematic is like a maze, some lines in my schematic going two directions. Figuring out the best way to put everything is definitely a challenge. Tomorrow, I’ll start working on the edge cuts first and try to get 50% of the pcb wired.
Outlining my pcb Not much was done in these 30 minutes, just imported a drawing of the shape of the pet.
PCB routing - continued So far I believe I setted up the temperature sensor, motor driver, and accelerometer well and by that, I mean just the capacitors and resistors. I’m planning on putting this esp32 on the back side where I’ll also keep the battery so it doesn’t interfere with the lcd screen. This has been quite fun so far.
Honestly, I do not think I can get past the cut Spent too long trying to figure out how to make my own NFC chip antenna and for the time I’m trying to rush this project I don’t think I can. I think I will end up using a module with header pins for it instead of making it myself, it’s really devastating but for the sake of maintaining my enjoyment throughout this project I’m going to lower my scope.
Taking out the NFC, Retracing Everything This took a little too long. Turns out since I didn’t have a LCD screen footprint I didn’t really know where the middle of the screen would be relative to the rest of the PCB. When I put everything into my 3d modeling software (Shapr3d), I realized it would be better if the screen was directly in the middle of the pcb by making it vertical. Which ultimately means I have to retrace almost everything.
Time skip - I finished all the CAD and code for the project and I think it’s about time to submit! I added a charzard silkscreen design and it looks pretty cool the case has a pretty big back for the battery but I guess it’s not too noticable the main thing i’m not too sure about is the schematic and pcb wiring but hopefully if the design comes back to be for a redo I can do that fast this was a really fun project and I’m suprised myself i was able to remain consistent with this project
Ships:
I tried replicating this digital pet I’ve seen on the internet and I absolutely love it. It’s not as sensor packed as the real thing but Tao packs an IMU, round LCD screen, haptic motor, and a temperature sensor. When turned on, it has a fun little expressive face that reacts to the world around it. Shake it –> it’ll get dizzy Leave it alone –> it gets sleepy Drop it –> it feels that Move it around –> its eyes moves...
|
1793350675.599075
|
1793437075.599075
|
|
59107
|
Start Assistant by @kis904 | Stardance
|
kis904
|
1
|
31.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-23T07:07:24Z", "hours": 31.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "It is a program built in python, can record and perform user’s actions. It was hard to make the app look good and not like an old from the 90s. I’m proud of it as it’s now a working useful app.", "repo": "https://github.com/kis904/Start-Assistant", "demo": "https://github.com/kis904/Start-Assistant/releases/tag/StartAssistantv1"}]...
|
[{"post_id": 66883, "ts": "202 [{"post_id": 66883, "ts": "2026-09-12T20:38:02Z", "hours": 31.4297, "text": "hey everyone, I will copy the more important previous posts from Macondo. If you’re interested all posts are amonf the pictures as screenshots. You can also find plenty of logs on the project’s github page. 29th of July 2026 hey everyone, today I was experimenting a lot with speech recognition with python’s SpeechRecognition library and available Vosk offline engines. I found an example code on a guy’s vlog and modified it to my engine, but all I discovered is just that my laptop is too weak to run it so I guess that’s it. Unfortunately it took another 60 minutes to read github readme-s, the library’s documentation, vlogs, vosk’s official page just get to know that. Screenshots among the attachments. 3rd of July 2026 hey, I have a window a few buttons and a pop up window. My first and only feature yet is that it can change the size of the window based on user input and changes it’s config file that it handles itself. It was a hell a lot of work to make that config text file work… It always had some problem e.g. when it was writing the new settings it wanted string not list, or the \\n that signed a new line stayed there so it didn’t recognize the settings in the conf file or couldn’t apply it. To sum it up, it was a lot of time, but now I will work on its main feature."}]...
|
Title: Start Assistant by @kis904 | Stardance
Dev Title: Start Assistant by @kis904 | Stardance
Devlogs:
hey everyone, I will copy the more important previous posts from Macondo. If you’re interested all posts are amonf the pictures as screenshots. You can also find plenty of logs on the project’s github page. 29th of July 2026 hey everyone, today I was experimenting a lot with speech recognition with python’s SpeechRecognition library and available Vosk offline engines. I found an example code on a guy’s vlog and modified it to my engine, but all I discovered is just that my laptop is too weak to run it so I guess that’s it. Unfortunately it took another 60 minutes to read github readme-s, the library’s documentation, vlogs, vosk’s official page just get to know that. Screenshots among the attachments. 3rd of July 2026 hey, I have a window a few buttons and a pop up window. My first and only feature yet is that it can change the size of the window based on user input and changes it’s config file that it handles itself. It was a hell a lot of work to make that config text file work… It always had some problem e.g. when it was writing the new settings it wanted string not list, or the \n that signed a new line stayed there so it didn’t recognize the settings in the conf file or couldn’t apply it. To sum it up, it was a lot of time, but now I will work on its main feature.
Ships:
It is a program built in python, can record and perform user’s actions. It was hard to make the app look good and not like an old from the 90s. I’m proud of it as it’s now a working useful app....
|
1793350676.9087977
|
1793437076.9087977
|
|
21500
|
HCR2 Setups Guide by @Alloy | Stardance
|
Alloy
|
1
|
63.0
|
846
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-25T11:58:58Z", "hours": 63.0, "multiplier": 13.44, "payout": 846, "blessing": "neutral", "text": "I made a web based information app that shows setups for each vehicle and track combination in the time attack game mode of Hill Climb Racing 2 (HCR2). The hardest thing was all of the queries for specific statistics, and since some of them also filtered by world records I just made a function to make world record queries cleaner and less messy. A second major problem was the filters on the search page, at the start were just simple select elements but they only take one value so the user can’t filter by more than one of each at once, to fix this I wanted to add a checkbox to each option but selects don’t support that so I needed to break my entire css by switching to details elements and restyling them so they stack nicely like the select elements before.", "repo": "https://github.com/Alloy-MVP/HCR2-Setups-Guide", "demo": "https://frenchtoast.pythonanywhere.com/"}]...
|
[{"post_id": 73537, "ts": "202 [{"post_id": 73537, "ts": "2026-09-25T10:57:09Z", "hours": 0.8028, "text": "FINAL DEVLOG: Added the new parts; Echo and Amplifier, added another part slot, increasing it to 4 since all world records use 4 parts now instead of 3. Took 4 hours to insert the world record setups (only all vehicle world records) for all 197 tracks as of 25/9/2026."}, {"post_id": 73425, "ts": "2026-09-25T02:03:28Z", "hours": 4.7644, "text": "Fixed a bug where inserting setups with a negative number were getting through because they are the only inputs not validated by sqlalchemy. Changed the validation to use the database data instead of the lists at the top of the .py, and therefore also added every single vehicle, part, and track to replace it in the db. Installed pylint to help my code look cleaner and changed everything it was complaining about. Also cleared the database so its empty and added all of the in game tracks and vehicles to replace the test data."}, {"post_id": 52034, "ts": "2026-08-22T02:16:53Z", "hours": 2.0461, "text": "Changed the tuning parts on setups and search page to icons, reversed the order of setups on the setups page so recently added ones are shown at the top, added a max time limit (32 bit integer limit). Tons of bug fixes: the search filters now handle more than one value, checking “World Records” doesnt wipe other filters, filters arent wiped when the page reloads after searching for a setup, rows per page defaults to 50, fixed the settings returning the error statement if rows per page is empty."}, {"post_id": 51494, "ts": "2026-08-21T07:31:36Z", "hours": 0.7431, "text": "Small tweak to the backend validation for the settings inputs, database path is now relative instead of absolute, added a second SQLAlchemy error catcher on top of the python ones, removed the .venv so a new one is made when the repository is cloned. (now it should be runable)"}, {"post_id": 51359, "ts": "2026-08-20T23:45:02Z", "hours": 0.8308, "text": "Changed most of the lists to now use list comprehension, made the error handler handle every error code from 400 to 599. Updated the error page to not break the flow. The app is now fully runable (hopefully) with instructions on the readme."}, {"post_id": 50800, "ts": "2026-08-20T06:19:49Z", "hours": 2.0058, "text": "Added a clear filters button to the insert form, added a shadow to the home page title. Changed the backend for time to not allow times > 32 bit int limit, changed the rows per page setting to be able to type custom amounts while still suggesting 5,10,20,30,40,50 with back end validation. Added a small section in information about insert field parameters. The setups table order is now reversed so new inserts are shown at the top. Settings errors are now shown on pages. Cleaned up some backend validation, the error messages now dont show for empty fields, created a requrements.txt and a readme on how to run the app."}, {"post_id": 49273, "ts": "2026-08-17T23:45:16Z", "hours": 0.8703, "text": "Added a 404 error handler and images of tuning parts to replace the text."}, {"post_id": 47929, "ts": "2026-08-16T06:12:15Z", "hours": 3.1731, "text": "Finished most of the home page, added a information section with a video, added 3 containers with quick navigation links, statistics, and fastest times on the home page, also added a background."}, {"post_id": 47790, "ts": "2026-08-15T23:28:52Z", "hours": 1.8481, "text": "Made the button borders brighter to be more visible, changed the content backgrounds to a gradient. Changed the setups table to look identical to search. Added a delete button to the all setups table to easily delete specific setups."}, {"post_id": 47320, "ts": "2026-08-15T06:19:10Z", "hours": 4.9217, "text": "Big Update: Moved links to the right and added a settings menu, added a title, made all inputs and filters have hover effects. Settings menu has a toggle for light/dark theme, and a way to select how many rows are shown in all tables (default is 10). Changed all of the css colors to variables for the settings."}, {"post_id": 46610, "ts": "2026-08-13T23:34:27Z", "hours": 2.1578, "text": "Search bar now fully supports searching for more than one word."}, {"post_id": 45471, "ts": "2026-08-11T23:30:33Z", "hours": 1.6261, "text": "The player, vehicle, and track filters can all take more than one filter so the search page can now show results from multiple players, vehicles, and tracks."}, {"post_id": 43698, "ts": "2026-08-09T03:15:24Z", "hours": 2.5139, "text": "Revamped the css again, the insert and delete forms are being moved to the setups table. No screenshot until the next devlog because its a mess right now."}, {"post_id": 43069, "ts": "2026-08-08T04:14:05Z", "hours": 1.5303, "text": "Added a leaderboard for the most used part setups, Changed how the parts are submitted, they are now sorted so there cant be multiple setups of the same parts combination but different orders, duplicates will just reuse an already existing one."}, {"post_id": 42928, "ts": "2026-08-07T22:11:58Z", "hours": 2.7381, "text": "Added a script that counts how many wrs every single player has and displays on the leaderboard page. Made the player field autoselect a name if you type it with wrong capitalization, for example ndwg will autoswitch to Ndwg."}, {"post_id": 39258, "ts": "2026-08-02T03:35:36Z", "hours": 2.9344, "text": "Completely finished styling the search page, also changed the filters to details instead of select so i can use checkboxes inside."}, {"post_id": 39170, "ts": "2026-08-01T22:55:05Z", "hours": 0.7469, "text": "World records filter is fully finished"}, {"post_id": 38508, "ts": "2026-07-31T22:44:24Z", "hours": 3.4031, "text": "Finished the backend of the wr filter, the fastest time with x vehicle and y track is highlighted in yellow."}, {"post_id": 36188, "ts": "2026-07-28T03:29:06Z", "hours": 1.2111, "text": "Finally found out about back_populates, players that arent currently in a setup now get deleted."}, {"post_id": 35045, "ts": "2026-07-26T06:34:23Z", "hours": 1.4058, "text": "Styled the filters section, added hover styling for links, buttons, and table data."}, {"post_id": 34983, "ts": "2026-07-26T03:54:43Z", "hours": 3.9231, "text": "Completely restarted the css, started styling the search bar filters and navigation bar."}, {"post_id": 29886, "ts": "2026-07-17T01:32:40Z", "hours": 1.055, "text": "Changed the filters to only show players,tracks, and vehicles that actually have a setup. Made the vehicle and track filter setups by time (lowest to highes) so the first time (fastest) is at the top."}, {"post_id": 29282, "ts": "2026-07-16T02:58:34Z", "hours": 0.8175, "text": "Added warnings for invalid filters (changed the values using inspect)"}, {"post_id": 28723, "ts": "2026-07-15T05:01:13Z", "hours": 1.4858, "text": "Made the filter fields functional but are misssing back end validation"}, {"post_id": 26951, "ts": "2026-07-12T01:24:49Z", "hours": 2.71, "text": "Added a stats/search page and moved the search bar there, also added a way to filter by players and vehicles (unfuctional)."}, {"post_id": 21229, "ts": "2026-07-03T02:00:51Z", "hours": 1.4261, "text": "Added a search bar to filter specific setups but still has some bugs (first table is all data, second table is data from the search)"}, {"post_id": 19058, "ts": "2026-06-30T07:43:15Z", "hours": 1.2028, "text": "Made the delete table functional and removes rows from setups but not the sub tables where the individual data is."}, {"post_id": 16718, "ts": "2026-06-27T05:02:23Z", "hours": 2.5661, "text": "Added checks for duplicates, missing fields, and times automatically updates if a time that is faster than the previous for a specific setup is submitted. Automatically adds the data to the setups table and puts the individual field data into their respective tables as well."}, {"post_id": 15998, "ts": "2026-06-25T23:45:29Z", "hours": 2.5778, "text": "Added some back end validation checks and added a list to check if the track field matches what can actually be inserted, also used a jinja loop to make options for each individual track in the list for the form."}, {"post_id": 14169, "ts": "2026-06-23T04:56:34Z", "hours": 2.9508, "text": "Basic input form for the database if every field is filled and correct"}]...
|
Title: HCR2 Setups Guide by @Alloy | Stardance
De Title: HCR2 Setups Guide by @Alloy | Stardance
Devlogs:
Basic input form for the database if every field is filled and correct
Added some back end validation checks and added a list to check if the track field matches what can actually be inserted, also used a jinja loop to make options for each individual track in the list for the form.
Added checks for duplicates, missing fields, and times automatically updates if a time that is faster than the previous for a specific setup is submitted. Automatically adds the data to the setups table and puts the individual field data into their respective tables as well.
Made the delete table functional and removes rows from setups but not the sub tables where the individual data is.
Added a search bar to filter specific setups but still has some bugs (first table is all data, second table is data from the search)
Added a stats/search page and moved the search bar there, also added a way to filter by players and vehicles (unfuctional).
Made the filter fields functional but are misssing back end validation
Added warnings for invalid filters (changed the values using inspect)
Changed the filters to only show players,tracks, and vehicles that actually have a setup. Made the vehicle and track filter setups by time (lowest to highes) so the first time (fastest) is at the top.
Completely restarted the css, started styling the search bar filters and navigation bar.
Styled the filters section, added hover styling for links, buttons, and table data.
Finally found out about back_populates, players that arent currently in a setup now get deleted.
Finished the backend of the wr filter, the fastest time with x vehicle and y track is highlighted in yellow.
World records filter is fully finished
Completely finished styling the search page, also changed the filters to details instead of select so i can use checkboxes inside.
Added a script that counts how many wrs every single player has and displays on the leaderboard page. Made the player field autoselect a name if you type it with wrong capitalization, for example ndwg will autoswitch to Ndwg.
Added a leaderboard for the most used part setups, Changed how the parts are submitted, they are now sorted so there cant be multiple setups of the same parts combination but different orders, duplicates will just reuse an already existing one.
Revamped the css again, the insert and delete forms are being moved to the setups table. No screenshot until the next devlog because its a mess right now.
The player, vehicle, and track filters can all take more than one filter so the search page can now show results from multiple players, vehicles, and tracks.
Search bar now fully supports searching for more than one word.
Big Update: Moved links to the right and added a settings menu, added a title, made all inputs and filters have hover effects. Settings menu has a toggle for light/dark theme, and a way to select how many rows are shown in all tables (default is 10). Changed all of the css colors to variables for the settings.
Made the button borders brighter to be more visible, changed the content backgrounds to a gradient. Changed the setups table to look identical to search. Added a delete button to the all setups table to easily delete specific setups.
Finished most of the home page, added a information section with a video, added 3 containers with quick navigation links, statistics, and fastest times on the home page, also added a background.
Added a 404 error handler and images of tuning parts to replace the text.
Added a clear filters button to the insert form, added a shadow to the home page title. Changed the backend for time to not allow times > 32 bit int limit, changed the rows per page setting to be able to type custom amounts while still suggesting 5,10,20,30,40,50 with back end validation. Added a small section in information about insert field parameters. The setups table order is now reversed so new inserts are shown at the top. Settings errors are now shown on pages. Cleaned up some backend validation, the error messages now dont show for empty fields, created a requrements.txt and a readme on how to run the app.
Changed most of the lists to now use list comprehension, made the error handler handle every error code from 400 to 599. Updated the error page to not break the flow. The app is now fully runable (hopefully) with instructions on the readme.
Small tweak to the backend validation for the settings inputs, database path is now relative instead of absolute, added a second SQLAlchemy error catcher on top of the python ones, removed the .venv so a new one is made when the repository is cloned. (now it should be runable)
Changed the tuning parts on setups and search page to icons, reversed the order of setups on the setups page so recently added ones are shown at the top, added a max time limit (32 bit integer limit). Tons of bug fixes: the search filters now handle more than one value, checking “World Records” doesnt wipe other filters, filters arent wiped when the page reloads after searching for a setup, rows per page defaults to 50, fixed the settings returning the error statement if rows per page is empty.
Fixed a bug where inserting setups with a negative number were getting through because they are the only inputs not validated by sqlalchemy. Changed the validation to use the database data instead of the lists at the top of the .py, and therefore also added every single vehicle, part, and track to replace it in the db. Installed pylint to help my code look cleaner and changed everything it was complaining about. Also cleared the database so its empty and added all of the in game tracks and vehicles to replace the test data.
FINAL DEVLOG: Added the new parts; Echo and Amplifier, added another part slot, increasing it to 4 since all world records use 4 parts now instead of 3. Took 4 hours to insert the world record setups (only all vehicle world records) for all 197 tracks as of 25/9/2026.
Ships:
I made a web based information app that shows setups for each vehicle and track combination in the time attack game mode of Hill Climb Racing 2 (HCR2). The hardest thing was all of the queries for specific statistics, and since some of them also filtered by world records I just made a function to make world record queries cleaner and less messy. A second major problem was the filters on the search page, at the start were just simple select elements but they only take one value so the user can’t filter by more than one of each at once, to fix this I wanted to add a checkbox to each option but selects don’t support that so I needed to break my entire css by switching to details elements and restyling them so they stack nicely like the select elements before....
|
1793350678.1225402
|
1793437078.1225402
|
|
59117
|
Greatest Tab by @Vasilakos | Stardance
|
Vasilakos
|
1
|
3.56
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-12T17:25:21Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Finally finished my Web Tab and I am gonna say I am quite satisfied with everything I did! It’s extremely usable, has a lot of features and it looks good! I would love for people to try it and if you do, don’t be afraid to send me a message even if you hate it because any criticism is good criticism!", "repo": "https://github.com/Vasilakos1821/Greatest-Tab", "demo": "https://vasilakos1821.github.io/Greatest-Tab/"}]...
|
[{"post_id": 67287, "ts": "202 [{"post_id": 67287, "ts": "2026-09-13T11:09:03Z", "hours": 1.5639, "text": "Spent some time changing the front-end because the truth is I relied too much on Gemini and it was visible on the final result so I put some of my own pizzaz and changed a lot of the CSS code to make it more of my own. To be honest I like it way more now just because it looks way more like something that’s real and human."}, {"post_id": 66232, "ts": "2026-09-11T22:39:42Z", "hours": 2.0308, "text": "I spent some actual time on this today and had a nightmare trying to put the Google Calendar Api for seamless google calendar integration but I am gonna currently give up on that and just make it so you export your google calendar as a file and input into the tab. Other than that I think I am very close to achieving my goal on making it very usable and nice so can’t wait to finish this tomorrow!"}, {"post_id": 64349, "ts": "2026-09-08T17:29:08Z", "hours": 0.3197, "text": "Just started on this tab and putting some boilerplate code gonna try to make it real nice and actually usable."}]...
|
Title: Greatest Tab by @Vasilakos | Stardance
Dev Title: Greatest Tab by @Vasilakos | Stardance
Devlogs:
Just started on this tab and putting some boilerplate code gonna try to make it real nice and actually usable.
I spent some actual time on this today and had a nightmare trying to put the Google Calendar Api for seamless google calendar integration but I am gonna currently give up on that and just make it so you export your google calendar as a file and input into the tab. Other than that I think I am very close to achieving my goal on making it very usable and nice so can’t wait to finish this tomorrow!
Spent some time changing the front-end because the truth is I relied too much on Gemini and it was visible on the final result so I put some of my own pizzaz and changed a lot of the CSS code to make it more of my own. To be honest I like it way more now just because it looks way more like something that’s real and human.
Ships:
Finally finished my Web Tab and I am gonna say I am quite satisfied with everything I did! It’s extremely usable, has a lot of features and it looks good! I would love for people to try it and if you do, don’t be afraid to send me a message even if you hate it because any criticism is good criticism!...
|
1793350679.56008
|
1793437079.56008
|
|
1836
|
Thought Galaxy by @Jewelia | Stardance
|
Jewelia
|
1
|
10.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-08T22:53:59Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "We are finally shipping! This summer, I tried making my first website with React! I was really tired of all the ads in diary apps, writing in journals took a long time, and I wanted the aesthetic of a nice diary website rather than a plain google doc. This is my result for now, I will definitely keep developing it when I have more time in the future as it’s quite basic (my first time learning CSS) This is the DIARY FRONTEND ONLY so entries you make will not save on reload. My goal for the future is to be able to make a backend so you can make accounts. The original goal was to also have a place for to-do lists but that hasn’t been developed yet. (I ended up focusing a lot on my collaborative game project which took up most my time; go check it out if you haven’t already!)", "repo": "https://github.com/julia-duck/ThoughtGalaxy", "demo": "https://thoughtgalaxy.onrender.com/"}]...
|
[{"post_id": 70300, "ts": "202 [{"post_id": 70300, "ts": "2026-09-18T21:59:22Z", "hours": 1.2722, "text": "Hello Again! Back with a few tweaks and updates! I fixed the weird bugs where it would change multiple entries and also the bug where there would be a line you could see behind the expanded entry! I made it so that the “discard changes” button only appears when you make changes. (This has to do with the fact that I made it so that you can’t save entries that aren’t titled) I also started on the search function. But it will only give an alert with what you searched for testing purposes; I want to wait until we have a backend to implement that actual functionality. Thanks for reading!! I’m hoping I can ship the frontend of this for you all to test out, although I won’t have time to make the backend until school gets less stressful!"}, {"post_id": 66669, "ts": "2026-09-12T15:10:56Z", "hours": 4.6636, "text": "New Frontend Features! The sticker streak motivated me to keep adding a little bit by bit to my diary project even though school has started. 🥳 So, what’s new? New Entries ! In the past, clicking “New Entry” would just open the old entry. Now it adds a fresh new entry to your list of entries! Entry List As you make new entries, it will show all of your entries in concise boxes for you to scroll through, displaying the title and date. Discard Changes A fancy new button that will close your entry without saving your changes Arrow Buttons The newest addition yet that I’ve been meaning to do: adding arrows that let you click through your entries! Now VSCode will stop bugging me about my unused variables haha So, what’s next? Bug Fixes Unfortunately, the bug where saving an entry causes others to become duplicates of it has arose again and must be smashed Deleting Entries Shouldn’t be too hard, just gotta leave stuff for future me to do Search Function Eventually I want to be able to search for entries at least by title Backend One day I will get to it…so I can finally save my entries on browser reload…"}, {"post_id": 32130, "ts": "2026-07-21T02:43:49Z", "hours": 3.3975, "text": "I’ve gotten started on adding the ability of entries to pre-populate stored text (title and body). Since I haven’t implemented a backend yet (sooo I kinda got a bit carried away working on Boba Cats! And this project hasn’t gotten as much love and attention…but I’m hoping to get it working eventually!), I used a temporary entry variable for testing purposes (you can see it in the code if you take a careful look!) And yes, I shared a screenshot of the code this time instead of the actual site since there’s not much change in the visuals of the site! Next, I’m working on adding a date function (but the element is in the wrong place! So I won’t show until I fix it haha)"}, {"post_id": 362, "ts": "2026-06-01T18:12:12Z", "hours": 0.7664, "text": "Fixed problems so website can be deployed, added functionality to close button for entries For background, I started this project the month before June. It was very basic though, I didn’t get too much done… because most of the time spent was battling the error of the blank screen of death! It had something to do with dependencies not being installed and NavLink (which I was using to have different pages for the main page, diary, and to-do list) acting up. But I figured it out eventually!"}]...
|
Title: Thought Galaxy by @Jewelia | Stardance
Dev Title: Thought Galaxy by @Jewelia | Stardance
Devlogs:
Fixed problems so website can be deployed, added functionality to close button for entries For background, I started this project the month before June. It was very basic though, I didn’t get too much done… because most of the time spent was battling the error of the blank screen of death! It had something to do with dependencies not being installed and NavLink (which I was using to have different pages for the main page, diary, and to-do list) acting up. But I figured it out eventually!
I’ve gotten started on adding the ability of entries to pre-populate stored text (title and body). Since I haven’t implemented a backend yet (sooo I kinda got a bit carried away working on Boba Cats! And this project hasn’t gotten as much love and attention…but I’m hoping to get it working eventually!), I used a temporary entry variable for testing purposes (you can see it in the code if you take a careful look!) And yes, I shared a screenshot of the code this time instead of the actual site since there’s not much change in the visuals of the site! Next, I’m working on adding a date function (but the element is in the wrong place! So I won’t show until I fix it haha)
New Frontend Features! The sticker streak motivated me to keep adding a little bit by bit to my diary project even though school has started. 🥳 So, what’s new? New Entries ! In the past, clicking “New Entry” would just open the old entry. Now it adds a fresh new entry to your list of entries! Entry List As you make new entries, it will show all of your entries in concise boxes for you to scroll through, displaying the title and date. Discard Changes A fancy new button that will close your entry without saving your changes Arrow Buttons The newest addition yet that I’ve been meaning to do: adding arrows that let you click through your entries! Now VSCode will stop bugging me about my unused variables haha So, what’s next? Bug Fixes Unfortunately, the bug where saving an entry causes others to become duplicates of it has arose again and must be smashed Deleting Entries Shouldn’t be too hard, just gotta leave stuff for future me to do Search Function Eventually I want to be able to search for entries at least by title Backend One day I will get to it…so I can finally save my entries on browser reload…
Hello Again! Back with a few tweaks and updates! I fixed the weird bugs where it would change multiple entries and also the bug where there would be a line you could see behind the expanded entry! I made it so that the “discard changes” button only appears when you make changes. (This has to do with the fact that I made it so that you can’t save entries that aren’t titled) I also started on the search function. But it will only give an alert with what you searched for testing purposes; I want to wait until we have a backend to implement that actual functionality. Thanks for reading!! I’m hoping I can ship the frontend of this for you all to test out, although I won’t have time to make the backend until school gets less stressful!
Ships:
We are finally shipping! This summer, I tried making my first website with React! I was really tired of all the ads in diary apps, writing in journals took a long time, and I wanted the aesthetic of a nice diary website rather than a plain google doc. This is my result for now, I will definitely keep developing it when I have more time in the future as it’s quite basic (my first time learning CSS) This is the DIARY FRONTEND ONLY so entries you make will not save on reload. My goal for the future is to be able to make a backend so you can make accounts. The original goal was to also have a place for to-do lists but that hasn’t been developed yet. (I ended up focusing a lot on my collaborative game project which took up most my time; go check it out if you haven’t already!)...
|
1793350680.7768474
|
1793437080.7768474
|
|
59128
|
CHRONO // BLINK by @Ander507 | Stardance
|
Ander507
|
1
|
10.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-15T14:06:21Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What I made CHRONO BLINK is a top-down HTML5 arena where time only flows when you move. Stand still and the world crawls at 0.08×. Start moving and it wakes up. Your only attack is a blink-dash: a short invulnerable lunge. Slice an enemy and the dash refunds. Miss and you sit in 1.2s of lockout. The whole game is one canvas in one index.html . No engine, no build, no install. What was challenging Getting the time scale to feel like a mechanic instead of a pause. A hard stop looks broken. It had to lerp, and combos / dash cooldown still run on real seconds so you cannot hide in slow-mo forever. Phone was the other fight. Glow, scanlines, and chromatic aberration were eating frames, so DPR is capped, scanlines are a 1×4 pattern instead of a fill per row, and the RGB split only composites while the punch is actually on screen. Dash distance is capped so the landing reticle stays on screen. On rotate, resize waits ~120ms because mobile browsers still report the old viewport if you measure on the orientation event. Shop layout had to reflow too: two columns in short landscape, stacked in portrait, or the buttons become un-tappable. What I’m proud of The loop actually clicks. You freeze, the arena goes quiet, you pick a line, you blink through a stalker and the dash comes back. That moment is the whole game. Also that it runs from a local file on desktop and thumbs on a phone, with AZERTY as first-class, not an afterthought. CrazyGames SDK only loads on CrazyGames (or localhost / ?cg=1 ). Everywhere else it just uses localStorage and never fetches it. How to test Clone the repo and open index.html . Double-click is enough. file:// works. Stand still. Time should crawl. Move. The arena should speed up. Blink through something (refund). Miss on purpose (1.2s lockout). Desktop: WASD, ZQSD, or arrows. Blink with Space or right-click toward the reticle. M mutes. X skips the tutorial. Phone: left thumb to move, right-side drag then release to blink. First run has a skippable tutorial. Coins bank into Reach / Recovery / Magnet between deaths. Progress lives in localStorage ( chronoBlink.* ) if you want a fresh start.", "repo": "", "demo": ""}]...
|
[{"post_id": 68653, "ts": "202 [{"post_id": 68653, "ts": "2026-09-15T13:58:58Z", "hours": 2.4931, "text": "Devlog #4 Published to crazy games and to a domain https://chronoblink.xyz/ rn waiting for aproval for"}, {"post_id": 68057, "ts": "2026-09-14T13:21:30Z", "hours": 5.6639, "text": "Devlog #3 Added two gameplay videos this week: landscape and portrait. The covers look fine but they don’t show the actual hook. Time slows down when you stop moving. That’s hard to get from a still image, so I recorded some real runs instead of another screenshot. I did both orientations because the game isn’t the same crop on a phone. Desktop is mouse + WASD (ZQSD works too), blink with space or right click. Phone is left thumb to move and right drag to blink. The HUD and shop reflow with the screen — landscape can split the death screen into two columns, portrait stacks so the buttons stay tappable. One horizontal trailer cropped vertical would just look wrong. The clips are just me playing. I stand still for a second so you can see the slow-mo, blink through a stalker (that refunds the dash), miss one so the 1.2s cooldown is obvious, then some gunners / phantoms, coins, and the shop. I left a bit of the phone tutorial in (hold still, then drag & release) since that’s what you actually need on mobile. That’s the whole update. Videos are on the page if you want to see it moving."}, {"post_id": 67365, "ts": "2026-09-13T13:28:30Z", "hours": 1.1092, "text": "Devlog #2 Made the main menu and a little gameplay (not really good right now very goofy physics) and found the design i wanna use"}, {"post_id": 63145, "ts": "2026-09-06T19:45:32Z", "hours": 0.5339, "text": "Devlog #1 First i started making a mindmap and planing the game out and made the index.html file The other default files does not count and the readme also wont count cause its not a part of the game Goal: Fun Easy to understand Can be published on Crazy Games with ads later"}]...
|
Title: CHRONO // BLINK by @Ander507 | Stardance
D Title: CHRONO // BLINK by @Ander507 | Stardance
Devlogs:
Devlog #1 First i started making a mindmap and planing the game out and made the index.html file The other default files does not count and the readme also wont count cause its not a part of the game Goal: Fun Easy to understand Can be published on Crazy Games with ads later
Devlog #2 Made the main menu and a little gameplay (not really good right now very goofy physics) and found the design i wanna use
Devlog #3 Added two gameplay videos this week: landscape and portrait. The covers look fine but they don’t show the actual hook. Time slows down when you stop moving. That’s hard to get from a still image, so I recorded some real runs instead of another screenshot. I did both orientations because the game isn’t the same crop on a phone. Desktop is mouse + WASD (ZQSD works too), blink with space or right click. Phone is left thumb to move and right drag to blink. The HUD and shop reflow with the screen — landscape can split the death screen into two columns, portrait stacks so the buttons stay tappable. One horizontal trailer cropped vertical would just look wrong. The clips are just me playing. I stand still for a second so you can see the slow-mo, blink through a stalker (that refunds the dash), miss one so the 1.2s cooldown is obvious, then some gunners / phantoms, coins, and the shop. I left a bit of the phone tutorial in (hold still, then drag & release) since that’s what you actually need on mobile. That’s the whole update. Videos are on the page if you want to see it moving.
Devlog #4 Published to crazy games and to a domain https://chronoblink.xyz/ rn waiting for aproval for
Ships:
What I made CHRONO BLINK is a top-down HTML5 arena where time only flows when you move. Stand still and the world crawls at 0.08×. Start moving and it wakes up. Your only attack is a blink-dash: a short invulnerable lunge. Slice an enemy and the dash refunds. Miss and you sit in 1.2s of lockout. The whole game is one canvas in one index.html . No engine, no build, no install. What was challenging Getting the time scale to feel like a mechanic instead of a pause. A hard stop looks broken. It had to lerp, and combos / dash cooldown still run on real seconds so you cannot hide in slow-mo forever. Phone was the other fight. Glow, scanlines, and chromatic aberration were eating frames, so DPR is capped, scanlines are a 1×4 pattern instead of a fill per row, and the RGB split only composites while the punch is actually on screen. Dash distance is capped so the landing reticle stays on screen. On rotate, resize waits ~120ms because mobile browsers still report the old viewport if you measure on the orientation event. Shop layout had to reflow too: two columns in short landscape, stacked in portrait, or the buttons become un-tappable. What I’m proud of The loop actually clicks. You freeze, the arena goes quiet, you pick a line, you blink through a stalker and the dash comes back. That moment is the whole game. Also that it runs from a local file on desktop and thumbs on a phone, with AZERTY as first-class, not an afterthought. CrazyGames SDK only loads on CrazyGames (or localhost / ?cg=1 ). Everywhere else it just uses localStorage and never fetches it. How to test Clone the repo and open index.html . Double-click is enough. file:// works. Stand still. Time should crawl. Move. The arena should speed up. Blink through something (refund). Miss on purpose (1.2s lockout). Desktop: WASD, ZQSD, or arrows. Blink with Space or right-click toward the reticle. M mutes. X skips the tutorial. Phone: left thumb to move, right-side drag then release to blink. First run has a skippable tutorial. Coins bank into Reach / Recovery / Magnet between deaths. Progress lives in localStorage ( chronoBlink.* ) if you want a fresh start....
|
1793350682.0650604
|
1793437082.0650604
|
|
59130
|
ProscemoWare by @ilproscemo | Stardance
|
ilproscemo
|
1
|
5.4
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-15T20:18:33Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "My very own warioWare game called ProscemoWare. It has a touch of Italy being inspired by the cards that are played with in Italy. It has 3 minigames in total: Grab the coins, Click the Cups, and Flappy horse.", "repo": "https://github.com/lavitadei79-blip/ProscemoWare", "demo": "https://ilproscemo.itch.io/proscemoware"}]...
|
[{"post_id": 69285, "ts": "202 [{"post_id": 69285, "ts": "2026-09-16T18:43:09Z", "hours": 0.3989, "text": "made new backgrounds for the minigames. made also the cup game and the flappy game better by randomizing the positions of the cups and clubs"}, {"post_id": 68823, "ts": "2026-09-15T20:14:05Z", "hours": 2.7917, "text": "Finished my game. added the pixel art and made the last minigame."}, {"post_id": 67586, "ts": "2026-09-13T18:48:39Z", "hours": 1.9925, "text": "just finished the tutorial for my WarioWare game “ProscemoWare”. I’ve made only the first 2 minigames that are told in the tutorial and haven’t added my very own assets for the games design. I’ll be working on this next and finishing off with the done screen."}]...
|
Title: ProscemoWare by @ilproscemo | Stardance
De Title: ProscemoWare by @ilproscemo | Stardance
Devlogs:
just finished the tutorial for my WarioWare game “ProscemoWare”. I’ve made only the first 2 minigames that are told in the tutorial and haven’t added my very own assets for the games design. I’ll be working on this next and finishing off with the done screen.
Finished my game. added the pixel art and made the last minigame.
made new backgrounds for the minigames. made also the cup game and the flappy game better by randomizing the positions of the cups and clubs
Ships:
My very own warioWare game called ProscemoWare. It has a touch of Italy being inspired by the cards that are played with in Italy. It has 3 minigames in total: Grab the coins, Click the Cups, and Flappy horse....
|
1793350683.3781154
|
1793437083.3781154
|
|
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!!...
|
1793350684.5493686
|
1793437084.5493686
|
|
54332
|
ziglm by @simonproyt | Stardance
|
simonproyt
|
1
|
52.95
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-20T17:57:15Z", "hours": 51.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "So after achieving the performance goals that i wanted i think i decided that im ready to ship this project but i feel kinda scared because i wrote a lot less devlogs then my previous projects but like this project was a lot more boring debugging heavy so idk if i could have wrote about more stuff but im hoping that ppl are going to like this one as much as my previous project and it was a great learning experience and i learned a lot about the zig programing language and performance optimization and about the inner workings of llms and about writing low level performance critical cuda code Thank you for checking out my project and best of luck finishing your project and getting what you want", "repo": "https://github.com/simonproyt/ziglm", "demo": "https://cdn.hackclub.com/01a0bfeb-6c82-7528-93f3-aae99d703da5/ziglm_demo.mp4"}]...
|
[{"post_id": 75555, "ts": "202 [{"post_id": 75555, "ts": "2026-09-30T12:45:05Z", "hours": 1.9483, "text": "Note to the reviewers/shipwright/fraud squad so i accidentally added my home folder to the hackatime project and and when i contacted the fraud squad they told me to write a note so can you please deduct around 10-15 hours please and i hope that i disclosed this honestly enough because im so scared being banned also i attached a demo video of the benchmark script running for the ppl that dont want to download models and set my project up"}, {"post_id": 71338, "ts": "2026-09-20T17:33:25Z", "hours": 9.8469, "text": "removed multimodal and fixed the performance issue so im writing this devlog the second time because stardance logged me out when i tried to post it and it didnt save it sadly so i have to write it again i guess but as the title said i removed the multimodal code basically because it was a pain to maintain and it broke with every update so i just wanted to focus on just closely matching llama.cpp on text speed as a solo developer project and i think i kinda achieved that because in the generation speed its only a few tokens of difference so i think the project is basically finished now and i maybe add a few small changes to it or ship it now but i dont know yet but i hope that someone will like my project even if it was a bit more boring then my other projects"}, {"post_id": 69690, "ts": "2026-09-17T16:20:51Z", "hours": 10.3528, "text": "Fixed some bugs and improved the performance in my free time so i had some time on the weekend and the days i didnt go to school to fix added a benchmark shell script to compare the performance against ollama and llama.cpp for testing and for generating performance graphs now the vision tensors are run on the gpu too so the model wont get bottle necked by my laptops pci express bus speeds and uses the gpus memory instead so this or maybe another one will be probably the last devlog for this project because it has been super hard to develop this and kinda a pain to maintain and try to get it to the performance levels of modern interference libraries and i dont have much free time anymore because of school maybe i will continue development but idk"}, {"post_id": 64849, "ts": "2026-09-09T15:22:55Z", "hours": 11.8742, "text": "Working cuda and ci pipeline but sadly i cant work on this project anymore because school started So working on this project required quite a beefy and heavy computer and i dont want to carry one so sadly i dont have time to continue on this project in this time so after adding a working cuda gpu backend and a ci pipeline so ppl dont have to compile it from the source code and have nvcc to even try i think this is the end of this project for the current time being and i hope that someone will find this So this is what i added: added a cuda backend with a fatbin kernel so it will work on multiple compute levels a github actions ci pipeline to generate verified releases for the ppl who dont want to compile everything for themselves"}, {"post_id": 57155, "ts": "2026-08-29T08:16:47Z", "hours": 7.4842, "text": "Devlog 2: Finally working multimodal audio and video support So after a lot of trial and error i finally added multimodal audio and video support because they were the only two things missing from a complete cpu engine because i wanted a fully working cpu reference before doing anything with cuda and stuff but i want to get cuda working asap because the smaller models that i have been testing that would run on my cpu with a good speed they kinda have bad multimodal performance Thank you for reading my devlog"}, {"post_id": 54967, "ts": "2026-08-26T12:21:34Z", "hours": 11.2867, "text": "First devlog for this new project So i decided to start this new project while waiting for my other project getting reviewed Why did i do this: I was kinda bored waiting for my other project to be reviewed by ppl and i wanted to try out zig so i thought this is a great toy project idea to play with in zig What models are tested (others might work but i havent tested them): smollm2-360m gemma 4 and its variants with curently only image multimodal working but sound and video might be added in the future Thank you for reading my devlog"}]...
|
Title: ziglm by @simonproyt | Stardance
Devlogs:
Title: ziglm by @simonproyt | Stardance
Devlogs:
First devlog for this new project So i decided to start this new project while waiting for my other project getting reviewed Why did i do this: I was kinda bored waiting for my other project to be reviewed by ppl and i wanted to try out zig so i thought this is a great toy project idea to play with in zig What models are tested (others might work but i havent tested them): smollm2-360m gemma 4 and its variants with curently only image multimodal working but sound and video might be added in the future Thank you for reading my devlog
Devlog 2: Finally working multimodal audio and video support So after a lot of trial and error i finally added multimodal audio and video support because they were the only two things missing from a complete cpu engine because i wanted a fully working cpu reference before doing anything with cuda and stuff but i want to get cuda working asap because the smaller models that i have been testing that would run on my cpu with a good speed they kinda have bad multimodal performance Thank you for reading my devlog
Working cuda and ci pipeline but sadly i cant work on this project anymore because school started So working on this project required quite a beefy and heavy computer and i dont want to carry one so sadly i dont have time to continue on this project in this time so after adding a working cuda gpu backend and a ci pipeline so ppl dont have to compile it from the source code and have nvcc to even try i think this is the end of this project for the current time being and i hope that someone will find this So this is what i added: added a cuda backend with a fatbin kernel so it will work on multiple compute levels a github actions ci pipeline to generate verified releases for the ppl who dont want to compile everything for themselves
Fixed some bugs and improved the performance in my free time so i had some time on the weekend and the days i didnt go to school to fix added a benchmark shell script to compare the performance against ollama and llama.cpp for testing and for generating performance graphs now the vision tensors are run on the gpu too so the model wont get bottle necked by my laptops pci express bus speeds and uses the gpus memory instead so this or maybe another one will be probably the last devlog for this project because it has been super hard to develop this and kinda a pain to maintain and try to get it to the performance levels of modern interference libraries and i dont have much free time anymore because of school maybe i will continue development but idk
removed multimodal and fixed the performance issue so im writing this devlog the second time because stardance logged me out when i tried to post it and it didnt save it sadly so i have to write it again i guess but as the title said i removed the multimodal code basically because it was a pain to maintain and it broke with every update so i just wanted to focus on just closely matching llama.cpp on text speed as a solo developer project and i think i kinda achieved that because in the generation speed its only a few tokens of difference so i think the project is basically finished now and i maybe add a few small changes to it or ship it now but i dont know yet but i hope that someone will like my project even if it was a bit more boring then my other projects
Note to the reviewers/shipwright/fraud squad so i accidentally added my home folder to the hackatime project and and when i contacted the fraud squad they told me to write a note so can you please deduct around 10-15 hours please and i hope that i disclosed this honestly enough because im so scared being banned also i attached a demo video of the benchmark script running for the ppl that dont want to download models and set my project up
Ships:
So after achieving the performance goals that i wanted i think i decided that im ready to ship this project but i feel kinda scared because i wrote a lot less devlogs then my previous projects but like this project was a lot more boring debugging heavy so idk if i could have wrote about more stuff but im hoping that ppl are going to like this one as much as my previous project and it was a great learning experience and i learned a lot about the zig programing language and performance optimization and about the inner workings of llms and about writing low level performance critical cuda code Thank you for checking out my project and best of luck finishing your project and getting what you want...
|
1793350685.871407
|
1793437085.871407
|
|
54348
|
App made with flutter with python backend by @agam App made with flutter with python backend by @agamjot_sarao9797 | Stardance...
|
agamjot_sarao9797
|
1
|
48.32
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-13T03:48:16Z", "hours": 48.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an app with flutter and python API, This app gets a URL from the user and then scrapes the info from the website then the user gets the id to the block of info from a tab called Data Hub and then the user would enter the ID in the tabs where the app makes the excel sheet or presentation on that info. The mos challenging part of this project was the part where the app made a presentation because i did not know how to make a presentation with python or Python-pptx. The part I did use AI on as the .bat launcher because i do not know how to code bash", "repo": "https://github.com/CODER-MAN12/AI-webscraper-app", "demo": "https://github.com/CODER-MAN12/AI-webscraper-app/releases/tag/App"}]...
|
[{"post_id": 72940, "ts": "202 [{"post_id": 72940, "ts": "2026-09-24T02:34:16Z", "hours": 0.3172, "text": "Devlog#15: I have decided that I will keep working on the project to make it look better since I might keep working on it so i can put it on google play or PC app store because of this i have also started a 3 hour graphic design tutorial since my app looks hideous."}, {"post_id": 67052, "ts": "2026-09-13T03:01:00Z", "hours": 0.9414, "text": "I am done just about the ship my project"}, {"post_id": 65681, "ts": "2026-09-11T00:07:31Z", "hours": 1.7689, "text": "Devlog#13: I HAVE COMPLETED THE APP THE EXCEL SHEET MAKER ITS FUNCTIONAL SO IS THE PRESENTATION MAKER I JUST NEED TO MAKE A LAUNCHER !!!!"}, {"post_id": 65095, "ts": "2026-09-10T00:03:20Z", "hours": 8.2875, "text": "Devlog#12: I have been working on the last two files that make a excel file and a power point and I am done 70 percent on it but it is challenging"}, {"post_id": 62445, "ts": "2026-09-05T19:56:11Z", "hours": 5.8167, "text": "Devlog#11: I have finished the history feature for the app where it can access the previous scraped info by id and then it will enter the id in the power-point or spreadsheet maker so the AI knows what info to make it for."}, {"post_id": 60701, "ts": "2026-09-03T07:53:03Z", "hours": 2.6294, "text": "Devlog#10: The menu is fully functional and it can scrape info and save it in a python API server which then stores it into a JSON file"}, {"post_id": 60542, "ts": "2026-09-02T23:01:07Z", "hours": 6.6461, "text": "Devlog#9: I have made the python back-end scraper function which is ready to give info to the flutter UI but i have started to learn how to use HTTP in flutter"}, {"post_id": 59270, "ts": "2026-08-31T23:35:55Z", "hours": 2.0578, "text": "Devlog#8: I have learned how to web scrape with python and have started to work on the web scraping function"}, {"post_id": 58664, "ts": "2026-08-31T05:03:07Z", "hours": 2.2214, "text": "Devlog#7: I have added more error handling which checks if it can reach the HTTP link and i have added more pages to the app. The output terminal is also functioning but only outputs the HTTP body"}, {"post_id": 57946, "ts": "2026-08-30T08:58:29Z", "hours": 5.8464, "text": "Devlog#6: I have added a HTTP checker to the menu and have worked on the rest of the pages a bit. I have also switched from a android emulator to my phone since windows uses so much ram."}, {"post_id": 56939, "ts": "2026-08-28T23:27:18Z", "hours": 1.0114, "text": "Devlog#5: I have finished the UI of the menu and I have started the other pages for my app"}, {"post_id": 56482, "ts": "2026-08-28T08:12:24Z", "hours": 3.4047, "text": "Devlog#4: I have to add more to the menu"}, {"post_id": 56253, "ts": "2026-08-27T22:43:13Z", "hours": 3.0972, "text": "Devlog#3: I am finished learning the basics of Flutter and now i have started to work on a menu"}, {"post_id": 55271, "ts": "2026-08-26T23:32:31Z", "hours": 4.0222, "text": "Devlog#2: For my app i have started to learn Flutter"}, {"post_id": 54774, "ts": "2026-08-25T21:37:39Z", "hours": 0.3936, "text": "I am working on a Desktop app which where you can give the app a URL and it will scrape the website for info you specified and can make it into a PowerPoint, JSON, or a excel file. This is the first part of the back end python coding which uses FastApi and Pydantic to get requests from user"}]...
|
Title: App made with flutter with python backend b Title: App made with flutter with python backend by @agamjot_sarao9797 | Stardance
Devlogs:
I am working on a Desktop app which where you can give the app a URL and it will scrape the website for info you specified and can make it into a PowerPoint, JSON, or a excel file. This is the first part of the back end python coding which uses FastApi and Pydantic to get requests from user
Devlog#2: For my app i have started to learn Flutter
Devlog#3: I am finished learning the basics of Flutter and now i have started to work on a menu
Devlog#4: I have to add more to the menu
Devlog#5: I have finished the UI of the menu and I have started the other pages for my app
Devlog#6: I have added a HTTP checker to the menu and have worked on the rest of the pages a bit. I have also switched from a android emulator to my phone since windows uses so much ram.
Devlog#7: I have added more error handling which checks if it can reach the HTTP link and i have added more pages to the app. The output terminal is also functioning but only outputs the HTTP body
Devlog#8: I have learned how to web scrape with python and have started to work on the web scraping function
Devlog#9: I have made the python back-end scraper function which is ready to give info to the flutter UI but i have started to learn how to use HTTP in flutter
Devlog#10: The menu is fully functional and it can scrape info and save it in a python API server which then stores it into a JSON file
Devlog#11: I have finished the history feature for the app where it can access the previous scraped info by id and then it will enter the id in the power-point or spreadsheet maker so the AI knows what info to make it for.
Devlog#12: I have been working on the last two files that make a excel file and a power point and I am done 70 percent on it but it is challenging
Devlog#13: I HAVE COMPLETED THE APP THE EXCEL SHEET MAKER ITS FUNCTIONAL SO IS THE PRESENTATION MAKER I JUST NEED TO MAKE A LAUNCHER !!!!
I am done just about the ship my project
Devlog#15: I have decided that I will keep working on the project to make it look better since I might keep working on it so i can put it on google play or PC app store because of this i have also started a 3 hour graphic design tutorial since my app looks hideous.
Ships:
I made an app with flutter and python API, This app gets a URL from the user and then scrapes the info from the website then the user gets the id to the block of info from a tab called Data Hub and then the user would enter the ID in the tabs where the app makes the excel sheet or presentation on that info. The mos challenging part of this project was the part where the app made a presentation because i did not know how to make a presentation with python or Python-pptx. The part I did use AI on as the .bat launcher because i do not know how to code bash...
|
1793350687.1478817
|
1793437087.1478817
|
|
35896
|
jimOS by @r1eu | Stardance
|
r1eu
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-15T06:35:32Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my own webOS which I named it jimOS, some things I struggled with was trying to style and make the windows. I am most proud of my calculator as it is functional. Something to note is that my OS is mostly personal and about me, also kinda simple.", "repo": "https://github.com/jimuv/jimOS", "demo": "https://jimuv.github.io/jimOS/"}]...
|
[{"post_id": 68482, "ts": "202 [{"post_id": 68482, "ts": "2026-09-15T06:23:56Z", "hours": 1.3531, "text": "Finished making my 3 apps, 1 being a bit more advanced and changed styling"}, {"post_id": 65838, "ts": "2026-09-11T07:40:42Z", "hours": 0.4322, "text": "Added a simple app and other features"}, {"post_id": 65224, "ts": "2026-09-10T06:35:02Z", "hours": 0.34, "text": "Making it look more like an actual webOS and more polished"}, {"post_id": 65214, "ts": "2026-09-10T05:59:40Z", "hours": 0.6347, "text": "Working on basic html for now"}]...
|
Title: jimOS by @r1eu | Stardance
Devlogs:
Workin Title: jimOS by @r1eu | Stardance
Devlogs:
Working on basic html for now
Making it look more like an actual webOS and more polished
Added a simple app and other features
Finished making my 3 apps, 1 being a bit more advanced and changed styling
Ships:
I made my own webOS which I named it jimOS, some things I struggled with was trying to style and make the windows. I am most proud of my calculator as it is functional. Something to note is that my OS is mostly personal and about me, also kinda simple....
|
1793350688.5260146
|
1793437088.5260146
|
|
26001
|
Project Muniris by @shbebeek | Stardance
|
shbebeek
|
1
|
120.2
|
1013
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-18T05:31:47Z", "hours": 119.0, "multiplier": 8.54, "payout": 1013, "blessing": "neutral", "text": "This is my first ever fully finished Unity game, named Muniris! It is a 2-player action adventure game that combines RPG and shooter-based mechanics to make for dynamic and differentiating playstyles for everyone. Each player has a left and right hand that control different purposes: the left hand performs magic attacks/items, and the right hand shoots whatever gun you have equipped. Each player can choose their own loadout and upgrade their items along the way. To check out the project take a look at the README of my GitHub repo, as it contains info on which version you can play depending on your operating system. Enjoy!", "repo": "https://github.com/shbebeek/Muniris", "demo": "https://gamejolt.com/games/muniris-online/1100476"}]...
|
[{"post_id": 72059, "ts": "202 [{"post_id": 72059, "ts": "2026-09-22T03:03:44Z", "hours": 1.2, "text": "Another quick update, I made another build of the game that is includes compatibility with Windows, where the player starts off with a couple of items and a bit farther ahead in the game. I thought that the browser version would work for non-Mac users but I realize now that the servers really can’t run Muniris very well. Thanks for your patience everyone!"}, {"post_id": 69953, "ts": "2026-09-18T03:55:04Z", "hours": 5.1333, "text": "Hi guys, one last quick log. I’ve been working to ship Munirism over the last couple of days and ran into a bunch of computer issues due to itch.io not being able to take files more than 1 gb in size (and my computer kept crashing every time I tried to build the game). Thankfully, I got a working link to play on a browser and a link to the Mac download of the project for people who would like better frame rate optimizations. Since I can’t submit 2 test links, I’ll give the Mac download here: https://gamejolt.com/games/muniris/1100442 . Thanks everyone!"}, {"post_id": 68963, "ts": "2026-09-16T03:50:51Z", "hours": 9.4, "text": "Good evening fellow coders, this is my final devlog for Project Muniris! I added in all of the mechanics that I wanted to into this final portion of the game and it is finally ready to be shipped. To summarize what I did, I made a bite-size castle area where there is a HUGE enemy gauntlet, which contains a final climb to the top of the hourglass that has been tantalizing the player ever since they entered the game. Since the castle is so high up that you can see past the boundary walls, I added a dense fog at the bottom of the castle that respawns you if you fall just in case the player fails any of the challenges. I created one final enemy type, that being an RPG turret, which essentially can shoot tons of missiles that seek out the players. Additionally, the last gun, the sniper rifle, was a fun time to speed develop since I realized that the mouse sensitivity was WAY too high for the player to reliably shoot when the rifle was zoomed in all the way. Due to this observation, I tweaked the mouse sensitivity via scripting so that when the camera is not zoomed in, it has a greater mouse sensitivity than when it is. Furthermore, I finally added a bunch of musical/sound assets into the game! All of the bullets from enemy and player fire have sound effects added to them. Each area also has a unique track to it, making them stand out from one another. While each track may not be musical, I made sure to find a bunch of immersive sound effects to increase the player’s auditory connection with the game. All in all, it feels very bittersweet writing this devlog, as it is the capstone to one of my longest and most passionate projects ever. I’m really thankful to the Stardance team for creating this program, as the community it developed really helped motivate me along the way. Most of all, thank you to you guys as well! Reading your comments and seeing what other people are doing has been really fun the past couple of months. Best of luck everyone!"}, {"post_id": 67858, "ts": "2026-09-14T04:19:41Z", "hours": 6.0667, "text": "Hey everyone, this is probably going to be one of my last devlogs for this project, as it is nearing completion. For starters, I finished the tundra area today, which combined my original idea of 2 separate mountain and “heavy weather” areas. It is a much more open area that the player is free to explore, but requires the double jump and dash to get into. At this point in time, all I really have left to do is create a quick ending area in the form of a castle, where the player will infiltrate the area and get to a giant hourglass at the end marking the finale of the game. I still have to create a new gun for the ending, and I’m leaning towards a sniper rifle. Since the player will have had tons of experience with the right-hand guns for a while, I’m thinking of making the sniper a bit harder to aim but having lots of damage as a tradeoff. Additionally, I added a bunch of snow particles falling from the sky to simulate a snowstorm, and it actually turned out pretty well! Due to occlusion culling, the framerate can actually survive all the snow being generated, and allowed me to create a lot it. Lastly, I added a tiny script that changed the skybox when you enter the area so that it seems cloudy instead of sunny, just so that the snow doesn’t seem like it’s appearing out of nowhere. As a personal anecdote, this project has been really fun to create the past couple of months, and has seriously boosted my design/programming skills (and time management). There will probably be one more devlog before I ship Project Muniris, but in any case I just wanted to share my thoughts on my journey through Stardance here."}, {"post_id": 67111, "ts": "2026-09-13T05:25:35Z", "hours": 8.3, "text": "Hi again fellow devs, over the course of the week I have been working on a bunch of stuff that I am excited to share. First off, I finished up the mine mini dungeon, where the player has to hit switches in order to unlock gates and progress throughout the area. It isn’t the most complex of puzzles but it gets the job done in a 3d platformer/shooter. Secondly, I added in 2 new abilities: the double jump and the dash. Essentially, via giving each player an extra jump whenever they’re in the air, I can enable them to double jump, and when they dash I simply set the non-vertical movement speed very high for a quick moment. I initially had some problems with the dash where it could send you flying upward if you collided with terrain/obstacles, but I mitigated how far up it can send you when you collide with other objects. Past these abilities, I am currently in the middle of a snowfield area, where the players will have to use both of their new movement abilities to traverse the area and make it to their final destination, the castle. I’ve decided to make it so that any currency you collected along the way in the game will be displayed at the end, and you will be able to see both your completion percentage and your total run time. I don’t think the game should take too long to beat, so I’m trying to make it have some replay value along the way. One last thing I forgot to mention was that I spent a bunch of time fixing the jump, since the coyote time would make your jump seem to blast off in the air super high. I know I said I fixed this problem in my past devlogs, but it seemed to keep coming back for whatever reason. Now though, I am happy to say that I fixed the error via taking a deeper look at when the coyote time should reset back to 0.2 seconds (any time above 0 means you can still jump after you fall off a ledge). In total, this game is almost finished, I just have to add 1 more area and give it a thorough run-through!"}, {"post_id": 65758, "ts": "2026-09-11T03:24:26Z", "hours": 5.7667, "text": "Hi developers, I just finished the base layout for the mine system that I am developing as one of the final areas of the game. At this point in time, I am trying to finish the mine area, create a quick mountain area, and make a short castle segment that acts as the final challenge of the game. Since the game is open world, little hints and clues as to where items might be located are scattered around the world now. Additionally, I worked on some post-processing effects for the mine area, which is why it is so dark on the right side of the screen compared to the left side; I will eventually add post-processing for all areas once I finish all the other parts of the game. In terms of item adjustments, I made it so that the chakram has a point light attached to it that can act as a miniature burst of light in dark areas. My last thing for now is a little issue that I ran into while adjusting the lighting for the game. Essentially, I switched from baking lighting back to generating realtime lighting because I realized that my computer can’t really handle baking lighting for so many objects in the scene, so I wanted to just generate it all in realtime to make things easier. After I tweaked these settings and generated the new lighting, I pressed play and the game totally nuked itself. Every game object had broken out of its hierarchy and 75% of them were straight up missing/deleted (all they left behind were empty transforms). I tried for a while to recover the scene but nothing was working, and eventually I had to force quit Unity due to it having stopped responding to my inputs. After I reopened Unity, the scene was back to normal! All in all, lesson learned to not panic when all seems lost and to not upset grumpy old Unity about lighting anymore."}, {"post_id": 64589, "ts": "2026-09-09T03:06:19Z", "hours": 3.2667, "text": "Hello everyone, today I worked on fixing the player UI and coded the chakram left-hand item I’ve been working on. After seeing that at different screen sizes/resolutions the UI would change shape and position, I adjusted the anchors of each UI element and made sure that they looked nice together no matter the screen size. The chakram ability turned out very nice, as with the additional fire/spark fx it feels pretty cool to throw around. I made it so that the chakram will interact with any physics object, meaning that it can bounce around a bunch before returning to the player. Looking ahead to the next area, I am thinking of a maze-like mine segment where the player will get either a new gun or the dash ability. See you all next time!"}, {"post_id": 63978, "ts": "2026-09-08T02:19:27Z", "hours": 8.8, "text": "Hello fellow devs, writing this now I realize that this game has gotten to a pretty large scale and I might not have time to finish everything I wanted to do with this game before I ship it. HOWEVER, I will be working my hardest to make sure that this game still contains the core aspects of what I wanted it to be. Speaking of, I made a whole new “forest hideout” area where there are a lot of enemies and slight platforming challenges. I coded in moving platforms that essentially just move around using an animation, and when the player jumps on one their parent transform is linked to the platform so that the camera doesn’t fall off. Furthermore, I finally added locked doors to the game, so the player has to first find some keys before they can open certain doors in this area. At the end of the hideout, I am working on a chakram left-hand ability that will be able to return to the player after being thrown, acting sort of like a boomerang. During the middle of the development of this area, the framerate dropped like CRAZY and I had to take a whole bunch of time to fix the parameters of the game so that it could run better. To sum up all the changes I made, I added occlusion culling, baked lighting for static objects, and tweaked the rendering distance for terrain like trees and grass. Lastly, I tuned up the player’s jump because it was getting really random jump heights and I wanted to make it more consistent. All in all, this project is going great and I can’t wait to ship it to all of you!"}, {"post_id": 62548, "ts": "2026-09-06T00:11:13Z", "hours": 8.6, "text": "Hey guys, I just finished up the left-hand healing item that I’ve been hinting at in my recent devlogs. It is a magic bottle that will heal you up at the cost of magic. I used a special visual fx in order to make the heal seem more “magical.” I also heavily tweaked the enemy vision system so that the enemies can see the secondary player and choose to aim at them instead of just the primary player. Currently I am trying to fix a problem where the UI will go crazy if you resize the screen, so I will be working on that from now on. Other than that, I also fixed an error where only the secondary player’s health ui would update, leading to both the primary player’s health and game over screen being stuck on the wrong camera. Best of luck everyone!"}, {"post_id": 58491, "ts": "2026-08-30T22:13:10Z", "hours": 6.2667, "text": "Hey everyone, long time since I posted here. Last week I realized that inside of my areas, there are not a lot of rewards given to the player in terms of their stats. So, instead of developing that new left-hand item I talked about in my last devlog, I decided to make an upgrade system where the player can receive health, magic, or stamina upgrades scattered around chests throughout the world. I also added a little series of clues to get the key and the eventual healing item hidden in the lake of this region through visual cues (ex. a heart-shaped rock formation) and text written on the walls of certain shelters. See you guys next time!"}, {"post_id": 53431, "ts": "2026-08-23T23:40:01Z", "hours": 3.7667, "text": "Hi guys! Today I finished up the code and tuning for both the rpg and mech enemy that I have been designing the past couple of days. I added a cool explosion to the gun whenever the bullet collides with an object, which creates some really cool visual effects. However, the bullet will still explode underwater; since I’m thinking of having a feature of being underwater that your guns misfire anyways, I’ll just keep this effect for now. With the new gun item and enemies all finished up, I am excited to say that I am almost done with this lake area. I am proud to say that it is of a much better quality than the tutorial area and is heavily focused on platforming, which will hopefully generate some fun chaos with 2 people playing at the same time. The last thing I have to do with this area is give it a proper “final upgrade.” I’m thinking of it being a healing item you can use with your left hand that takes a lot of magic but slowly heals you up. See you all later!"}, {"post_id": 51974, "ts": "2026-08-21T23:36:52Z", "hours": 3.3, "text": "Hey guys, quick update here. Lately I’ve been working on a heat-seeking missile, and although I encountered a lot of different bugs today I finished the weapon up (kind of). I’m using a software called Linq to filter out enemies and get the closest one to the missile, but a problem I encountered is that the algorithm doesn’t account for colliders between the missile and the enemy. I’ve tried a bunch of stuff such as raycasting and Physics.linecast, but nothing seems to be working. I’m gonna take a break for today and come back tomorrow with a fresh mindset. Other than that, I also am finishing up a “mech” enemy that has different pieces of it you have to destroy in order to kill it. I’ll give a bigger explanation of this enemy when I finish it. Thanks for reading!"}, {"post_id": 51426, "ts": "2026-08-21T03:53:02Z", "hours": 8.7333, "text": "Greetings fellow developers, as of right now I have been furthering development on the lake area of the game right outside the tutorial. Development is progressing well, and I am just about finished with the overall design of the area. On the programming side, I have been working on “heat-seeking” missiles that will be the reward for the player in the form of a new right-handed weapon at the end of the area. I’m thinking of having a key to a chest being hidden at the top of the area and the player has to dive down to the deepest part of the lake to open the chest in order to make the area loop in on itself. If anybody has any ideas for left-handed items let me know!"}, {"post_id": 47900, "ts": "2026-08-16T05:25:50Z", "hours": 4.7, "text": "What’s up everyone, over the last couple of days I’ve been working towards finishing up the lake area. This area is mainly focusing on platforming and refining the platforming that is seen inside of the tutorial area, as I feel as if that area has some janky features. I will eventually add enemies and some mini-bosses to fight while you are jumping from rock to rock, but as said before this is mainly for the spectacle and the platforming. I am thinking about adding some sort of a movement ability at the end of this area to reward the player, but I do not want to overpower the player too much at the beginning of the game. If you have any ideas please comment them down below, they would be well appreciated!"}, {"post_id": 46897, "ts": "2026-08-14T13:19:17Z", "hours": 5.1, "text": "Hey everyone, quick update here. I’m currently in the process of making a beach area to highlight the water effect that I developed over the past couple of days. I added a bunch of different terrain textures and tree assets, so the area itself should look a little different than the typical forest/grassy area of the tutorial. I hope to add some post-processing for outside of the water eventually as well."}, {"post_id": 45235, "ts": "2026-08-11T16:04:46Z", "hours": 8.5333, "text": "Today I finished up a new ladder system and the water post-processing effects, alongside a much-needed tuning of base speeds, maximum velocities, and the different forces added to the player (for example the jumping force). I noticed that in the vertical platforming sections I did not add shortcuts to get back up in case the player fell all the way back down, so I decided to add a ladder system that will extend down when the player reaches a certain spot. Furthermore, with the water system being finished up, I can now focus on making more unique areas of the map and creating engaging gameplay instead of just tutorial and test areas. See you guys soon!"}, {"post_id": 42060, "ts": "2026-08-06T16:50:40Z", "hours": 4.0333, "text": "Hey everyone, it’s been a while. Currently I am trying to implement a water mechanic inside of the game where players can enter the water and swim freely without the effects of gravity. Mechanics are working well to my surprise, and the only thing left to really work on is the post-processing for when you dive in. Unfortunately, I realized that the jump mechanic has to be kind of reworked due to the fact that the player does not have control over their momentum after they jump, making platforming way harder. All in all, development is trucking along."}, {"post_id": 37917, "ts": "2026-07-30T22:28:39Z", "hours": 3.8667, "text": "At this point in time, I finished fixing up the UI system so that the 2 different players are both able to control their separate canvases, while there remains a large canvas that encompasses the entirety of the screen. This can be utilized through the time slower item, for example, as the entire screen is scene through a blue lens when the item is used. Furthermore, I added a house next to a dry lake (at the moment), and will figure out how to add a water mechanic to the game that will require certain items for the players to swim across. Lastly, in order to enter the first eventual “dungeon” of the game, players will need to get the attention of the big dragon in the sky that was added recently. It currently just roams around from point to point but when the players get to a specific point they will need to utilize its positioning."}, {"post_id": 36110, "ts": "2026-07-28T00:09:04Z", "hours": 2.5, "text": "Currently I am working on making a UI system that can fit both players. I have 3 separate canvases all controlled by a main UI Manager script. Basically, there is 1 canvas for each player and then there is 1 canvas that covers both players’ screens."}, {"post_id": 33509, "ts": "2026-07-23T14:54:08Z", "hours": 1.5667, "text": "I just finished integrating the second player’s movement and UI into the game. I made it so that the 2 players share a common magic meter, which is a circular ring in the center of the screen. I try to make the gameplay require cooperation as much as possible via having both players share certain game mechanics such as their magic. With that, I have also finished the enemy tutorial area!"}, {"post_id": 32678, "ts": "2026-07-22T00:03:43Z", "hours": 2.8, "text": "I am currently working on the 2-player functionality of the code for this game. Since some of Unity’s canvas assets are not built for 2-player unless you update them in a certain way, I have to manually go in and update my scripts to make the world objects function as expected. All in all, development is rocky but progressing."}, {"post_id": 31768, "ts": "2026-07-20T12:38:29Z", "hours": 4.4667, "text": "I just finished the chest system as well as the coin system. Taps are the standard currency and joules are a rare currency that can net you cool items that wouldn’t be available normally."}, {"post_id": 23766, "ts": "2026-07-06T21:56:29Z", "hours": 3.5333, "text": "Just finished the enemy code to track down the player and try to shoot the player, it has been a little rough with the balancing but development is going well on the programming side."}]...
|
Title: Project Muniris by @shbebeek | Stardance
D Title: Project Muniris by @shbebeek | Stardance
Devlogs:
Just finished the enemy code to track down the player and try to shoot the player, it has been a little rough with the balancing but development is going well on the programming side.
I just finished the chest system as well as the coin system. Taps are the standard currency and joules are a rare currency that can net you cool items that wouldn’t be available normally.
I am currently working on the 2-player functionality of the code for this game. Since some of Unity’s canvas assets are not built for 2-player unless you update them in a certain way, I have to manually go in and update my scripts to make the world objects function as expected. All in all, development is rocky but progressing.
I just finished integrating the second player’s movement and UI into the game. I made it so that the 2 players share a common magic meter, which is a circular ring in the center of the screen. I try to make the gameplay require cooperation as much as possible via having both players share certain game mechanics such as their magic. With that, I have also finished the enemy tutorial area!
Currently I am working on making a UI system that can fit both players. I have 3 separate canvases all controlled by a main UI Manager script. Basically, there is 1 canvas for each player and then there is 1 canvas that covers both players’ screens.
At this point in time, I finished fixing up the UI system so that the 2 different players are both able to control their separate canvases, while there remains a large canvas that encompasses the entirety of the screen. This can be utilized through the time slower item, for example, as the entire screen is scene through a blue lens when the item is used. Furthermore, I added a house next to a dry lake (at the moment), and will figure out how to add a water mechanic to the game that will require certain items for the players to swim across. Lastly, in order to enter the first eventual “dungeon” of the game, players will need to get the attention of the big dragon in the sky that was added recently. It currently just roams around from point to point but when the players get to a specific point they will need to utilize its positioning.
Hey everyone, it’s been a while. Currently I am trying to implement a water mechanic inside of the game where players can enter the water and swim freely without the effects of gravity. Mechanics are working well to my surprise, and the only thing left to really work on is the post-processing for when you dive in. Unfortunately, I realized that the jump mechanic has to be kind of reworked due to the fact that the player does not have control over their momentum after they jump, making platforming way harder. All in all, development is trucking along.
Today I finished up a new ladder system and the water post-processing effects, alongside a much-needed tuning of base speeds, maximum velocities, and the different forces added to the player (for example the jumping force). I noticed that in the vertical platforming sections I did not add shortcuts to get back up in case the player fell all the way back down, so I decided to add a ladder system that will extend down when the player reaches a certain spot. Furthermore, with the water system being finished up, I can now focus on making more unique areas of the map and creating engaging gameplay instead of just tutorial and test areas. See you guys soon!
Hey everyone, quick update here. I’m currently in the process of making a beach area to highlight the water effect that I developed over the past couple of days. I added a bunch of different terrain textures and tree assets, so the area itself should look a little different than the typical forest/grassy area of the tutorial. I hope to add some post-processing for outside of the water eventually as well.
What’s up everyone, over the last couple of days I’ve been working towards finishing up the lake area. This area is mainly focusing on platforming and refining the platforming that is seen inside of the tutorial area, as I feel as if that area has some janky features. I will eventually add enemies and some mini-bosses to fight while you are jumping from rock to rock, but as said before this is mainly for the spectacle and the platforming. I am thinking about adding some sort of a movement ability at the end of this area to reward the player, but I do not want to overpower the player too much at the beginning of the game. If you have any ideas please comment them down below, they would be well appreciated!
Greetings fellow developers, as of right now I have been furthering development on the lake area of the game right outside the tutorial. Development is progressing well, and I am just about finished with the overall design of the area. On the programming side, I have been working on “heat-seeking” missiles that will be the reward for the player in the form of a new right-handed weapon at the end of the area. I’m thinking of having a key to a chest being hidden at the top of the area and the player has to dive down to the deepest part of the lake to open the chest in order to make the area loop in on itself. If anybody has any ideas for left-handed items let me know!
Hey guys, quick update here. Lately I’ve been working on a heat-seeking missile, and although I encountered a lot of different bugs today I finished the weapon up (kind of). I’m using a software called Linq to filter out enemies and get the closest one to the missile, but a problem I encountered is that the algorithm doesn’t account for colliders between the missile and the enemy. I’ve tried a bunch of stuff such as raycasting and Physics.linecast, but nothing seems to be working. I’m gonna take a break for today and come back tomorrow with a fresh mindset. Other than that, I also am finishing up a “mech” enemy that has different pieces of it you have to destroy in order to kill it. I’ll give a bigger explanation of this enemy when I finish it. Thanks for reading!
Hi guys! Today I finished up the code and tuning for both the rpg and mech enemy that I have been designing the past couple of days. I added a cool explosion to the gun whenever the bullet collides with an object, which creates some really cool visual effects. However, the bullet will still explode underwater; since I’m thinking of having a feature of being underwater that your guns misfire anyways, I’ll just keep this effect for now. With the new gun item and enemies all finished up, I am excited to say that I am almost done with this lake area. I am proud to say that it is of a much better quality than the tutorial area and is heavily focused on platforming, which will hopefully generate some fun chaos with 2 people playing at the same time. The last thing I have to do with this area is give it a proper “final upgrade.” I’m thinking of it being a healing item you can use with your left hand that takes a lot of magic but slowly heals you up. See you all later!
Hey everyone, long time since I posted here. Last week I realized that inside of my areas, there are not a lot of rewards given to the player in terms of their stats. So, instead of developing that new left-hand item I talked about in my last devlog, I decided to make an upgrade system where the player can receive health, magic, or stamina upgrades scattered around chests throughout the world. I also added a little series of clues to get the key and the eventual healing item hidden in the lake of this region through visual cues (ex. a heart-shaped rock formation) and text written on the walls of certain shelters. See you guys next time!
Hey guys, I just finished up the left-hand healing item that I’ve been hinting at in my recent devlogs. It is a magic bottle that will heal you up at the cost of magic. I used a special visual fx in order to make the heal seem more “magical.” I also heavily tweaked the enemy vision system so that the enemies can see the secondary player and choose to aim at them instead of just the primary player. Currently I am trying to fix a problem where the UI will go crazy if you resize the screen, so I will be working on that from now on. Other than that, I also fixed an error where only the secondary player’s health ui would update, leading to both the primary player’s health and game over screen being stuck on the wrong camera. Best of luck everyone!
Hello fellow devs, writing this now I realize that this game has gotten to a pretty large scale and I might not have time to finish everything I wanted to do with this game before I ship it. HOWEVER, I will be working my hardest to make sure that this game still contains the core aspects of what I wanted it to be. Speaking of, I made a whole new “forest hideout” area where there are a lot of enemies and slight platforming challenges. I coded in moving platforms that essentially just move around using an animation, and when the player jumps on one their parent transform is linked to the platform so that the camera doesn’t fall off. Furthermore, I finally added locked doors to the game, so the player has to first find some keys before they can open certain doors in this area. At the end of the hideout, I am working on a chakram left-hand ability that will be able to return to the player after being thrown, acting sort of like a boomerang. During the middle of the development of this area, the framerate dropped like CRAZY and I had to take a whole bunch of time to fix the parameters of the game so that it could run better. To sum up all the changes I made, I added occlusion culling, baked lighting for static objects, and tweaked the rendering distance for terrain like trees and grass. Lastly, I tuned up the player’s jump because it was getting really random jump heights and I wanted to make it more consistent. All in all, this project is going great and I can’t wait to ship it to all of you!
Hello everyone, today I worked on fixing the player UI and coded the chakram left-hand item I’ve been working on. After seeing that at different screen sizes/resolutions the UI would change shape and position, I adjusted the anchors of each UI element and made sure that they looked nice together no matter the screen size. The chakram ability turned out very nice, as with the additional fire/spark fx it feels pretty cool to throw around. I made it so that the chakram will interact with any physics object, meaning that it can bounce around a bunch before returning to the player. Looking ahead to the next area, I am thinking of a maze-like mine segment where the player will get either a new gun or the dash ability. See you all next time!
Hi developers, I just finished the base layout for the mine system that I am developing as one of the final areas of the game. At this point in time, I am trying to finish the mine area, create a quick mountain area, and make a short castle segment that acts as the final challenge of the game. Since the game is open world, little hints and clues as to where items might be located are scattered around the world now. Additionally, I worked on some post-processing effects for the mine area, which is why it is so dark on the right side of the screen compared to the left side; I will eventually add post-processing for all areas once I finish all the other parts of the game. In terms of item adjustments, I made it so that the chakram has a point light attached to it that can act as a miniature burst of light in dark areas. My last thing for now is a little issue that I ran into while adjusting the lighting for the game. Essentially, I switched from baking lighting back to generating realtime lighting because I realized that my computer can’t really handle baking lighting for so many objects in the scene, so I wanted to just generate it all in realtime to make things easier. After I tweaked these settings and generated the new lighting, I pressed play and the game totally nuked itself. Every game object had broken out of its hierarchy and 75% of them were straight up missing/deleted (all they left behind were empty transforms). I tried for a while to recover the scene but nothing was working, and eventually I had to force quit Unity due to it having stopped responding to my inputs. After I reopened Unity, the scene was back to normal! All in all, lesson learned to not panic when all seems lost and to not upset grumpy old Unity about lighting anymore.
Hi again fellow devs, over the course of the week I have been working on a bunch of stuff that I am excited to share. First off, I finished up the mine mini dungeon, where the player has to hit switches in order to unlock gates and progress throughout the area. It isn’t the most complex of puzzles but it gets the job done in a 3d platformer/shooter. Secondly, I added in 2 new abilities: the double jump and the dash. Essentially, via giving each player an extra jump whenever they’re in the air, I can enable them to double jump, and when they dash I simply set the non-vertical movement speed very high for a quick moment. I initially had some problems with the dash where it could send you flying upward if you collided with terrain/obstacles, but I mitigated how far up it can send you when you collide with other objects. Past these abilities, I am currently in the middle of a snowfield area, where the players will have to use both of their new movement abilities to traverse the area and make it to their final destination, the castle. I’ve decided to make it so that any currency you collected along the way in the game will be displayed at the end, and you will be able to see both your completion percentage and your total run time. I don’t think the game should take too long to beat, so I’m trying to make it have some replay value along the way. One last thing I forgot to mention was that I spent a bunch of time fixing the jump, since the coyote time would make your jump seem to blast off in the air super high. I know I said I fixed this problem in my past devlogs, but it seemed to keep coming back for whatever reason. Now though, I am happy to say that I fixed the error via taking a deeper look at when the coyote time should reset back to 0.2 seconds (any time above 0 means you can still jump after you fall off a ledge). In total, this game is almost finished, I just have to add 1 more area and give it a thorough run-through!
Hey everyone, this is probably going to be one of my last devlogs for this project, as it is nearing completion. For starters, I finished the tundra area today, which combined my original idea of 2 separate mountain and “heavy weather” areas. It is a much more open area that the player is free to explore, but requires the double jump and dash to get into. At this point in time, all I really have left to do is create a quick ending area in the form of a castle, where the player will infiltrate the area and get to a giant hourglass at the end marking the finale of the game. I still have to create a new gun for the ending, and I’m leaning towards a sniper rifle. Since the player will have had tons of experience with the right-hand guns for a while, I’m thinking of making the sniper a bit harder to aim but having lots of damage as a tradeoff. Additionally, I added a bunch of snow particles falling from the sky to simulate a snowstorm, and it actually turned out pretty well! Due to occlusion culling, the framerate can actually survive all the snow being generated, and allowed me to create a lot it. Lastly, I added a tiny script that changed the skybox when you enter the area so that it seems cloudy instead of sunny, just so that the snow doesn’t seem like it’s appearing out of nowhere. As a personal anecdote, this project has been really fun to create the past couple of months, and has seriously boosted my design/programming skills (and time management). There will probably be one more devlog before I ship Project Muniris, but in any case I just wanted to share my thoughts on my journey through Stardance here.
Good evening fellow coders, this is my final devlog for Project Muniris! I added in all of the mechanics that I wanted to into this final portion of the game and it is finally ready to be shipped. To summarize what I did, I made a bite-size castle area where there is a HUGE enemy gauntlet, which contains a final climb to the top of the hourglass that has been tantalizing the player ever since they entered the game. Since the castle is so high up that you can see past the boundary walls, I added a dense fog at the bottom of the castle that respawns you if you fall just in case the player fails any of the challenges. I created one final enemy type, that being an RPG turret, which essentially can shoot tons of missiles that seek out the players. Additionally, the last gun, the sniper rifle, was a fun time to speed develop since I realized that the mouse sensitivity was WAY too high for the player to reliably shoot when the rifle was zoomed in all the way. Due to this observation, I tweaked the mouse sensitivity via scripting so that when the camera is not zoomed in, it has a greater mouse sensitivity than when it is. Furthermore, I finally added a bunch of musical/sound assets into the game! All of the bullets from enemy and player fire have sound effects added to them. Each area also has a unique track to it, making them stand out from one another. While each track may not be musical, I made sure to find a bunch of immersive sound effects to increase the player’s auditory connection with the game. All in all, it feels very bittersweet writing this devlog, as it is the capstone to one of my longest and most passionate projects ever. I’m really thankful to the Stardance team for creating this program, as the community it developed really helped motivate me along the way. Most of all, thank you to you guys as well! Reading your comments and seeing what other people are doing has been really fun the past couple of months. Best of luck everyone!
Hi guys, one last quick log. I’ve been working to ship Munirism over the last couple of days and ran into a bunch of computer issues due to itch.io not being able to take files more than 1 gb in size (and my computer kept crashing every time I tried to build the game). Thankfully, I got a working link to play on a browser and a link to the Mac download of the project for people who would like better frame rate optimizations. Since I can’t submit 2 test links, I’ll give the Mac download here: https://gamejolt.com/games/muniris/1100442 . Thanks everyone!
Another quick update, I made another build of the game that is includes compatibility with Windows, where the player starts off with a couple of items and a bit farther ahead in the game. I thought that the browser version would work for non-Mac users but I realize now that the servers really can’t run Muniris very well. Thanks for your patience everyone!
Ships:
This is my first ever fully finished Unity game, named Muniris! It is a 2-player action adventure game that combines RPG and shooter-based mechanics to make for dynamic and differentiating playstyles for everyone. Each player has a left and right hand that control different purposes: the left hand performs magic attacks/items, and the right hand shoots whatever gun you have equipped. Each player can choose their own loadout and upgrade their items along the way. To check out the project take a look at the README of my GitHub repo, as it contains info on which version you can play depending on your operating system. Enjoy!...
|
1793350689.7654078
|
1793437089.7654078
|
|
16965
|
My Website by @Luke42 | Stardance
|
Luke42
|
1
|
9.0
|
55
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-23T00:48:39Z", "hours": 9.0, "multiplier": 6.34, "payout": 55, "blessing": "neutral", "text": "I’ve been wanting to make a website for myself for awhile without AI, so without further ado, here it is! I designed this like a command line because I thought it would be cool. I don’t have that much experience in frontend web dev, so I learned a lot over the course of making this. This was fully made on HC spaces on my school chromebook during my free time in school lol Sorry for the massive devlog I didn’t know which program I wanted to ship this to and I picked this 6 hrs in I hope you guys like it!", "repo": "https://github.com/GoatTech-42/my-website/", "demo": "https://lukeevanson.com"}]...
|
[{"post_id": 72455, "ts": "202 [{"post_id": 72455, "ts": "2026-09-23T00:38:59Z", "hours": 0.3314, "text": "Just finished up the project and finalized readme and stuff and added secret commands disclaimer thingy in help command"}, {"post_id": 72392, "ts": "2026-09-22T20:17:10Z", "hours": 1.0061, "text": "FIXED CUSTOM CURSOR and also like added more comments for code readibility and stuff and also did a ton of fixes i know you cant see the custom cursor but im coding this on a school chromebook in school so the screenshot tool is buns for instance i fixed css styles that i broke and stuff"}, {"post_id": 72274, "ts": "2026-09-22T15:47:42Z", "hours": 0.8889, "text": "I removed the glow effect cause my friend said it looked ai generated, I added up and down command history, and added the sources thingy"}, {"post_id": 71885, "ts": "2026-09-21T18:11:33Z", "hours": 6.4519, "text": "Ok so basically, I did almost the whole site. For the first hour, I got the background set up and the CSS border and container created. I also imported the custom cmd terminal font. I also worked for like forever on making the colors change based on the seasons and particles (this is worked on progressively throughout the project). The second hour, I created the heading and the placeholders for the typing area, along with starting on the typing input blinking underscore thingy. The third hour, I finished the blinking caret underscore thing and started sending inputs to the javascript. I also created the output field. The 4th hour, I created the typing animation for the output box with a JS function and CSS. The 5th hour, I got a ton of commands working, and found some random website with a good css glow effect. The last bit of time I spent quite a bit getting some games working because I’m addicted, and a little more CSS. (sorry I lowk was working on this just for a new website’s sake but decided to submit it)"}]...
|
Title: My Website by @Luke42 | Stardance
Devlogs: Title: My Website by @Luke42 | Stardance
Devlogs:
Ok so basically, I did almost the whole site. For the first hour, I got the background set up and the CSS border and container created. I also imported the custom cmd terminal font. I also worked for like forever on making the colors change based on the seasons and particles (this is worked on progressively throughout the project). The second hour, I created the heading and the placeholders for the typing area, along with starting on the typing input blinking underscore thingy. The third hour, I finished the blinking caret underscore thing and started sending inputs to the javascript. I also created the output field. The 4th hour, I created the typing animation for the output box with a JS function and CSS. The 5th hour, I got a ton of commands working, and found some random website with a good css glow effect. The last bit of time I spent quite a bit getting some games working because I’m addicted, and a little more CSS. (sorry I lowk was working on this just for a new website’s sake but decided to submit it)
I removed the glow effect cause my friend said it looked ai generated, I added up and down command history, and added the sources thingy
FIXED CUSTOM CURSOR and also like added more comments for code readibility and stuff and also did a ton of fixes i know you cant see the custom cursor but im coding this on a school chromebook in school so the screenshot tool is buns for instance i fixed css styles that i broke and stuff
Just finished up the project and finalized readme and stuff and added secret commands disclaimer thingy in help command
Ships:
I’ve been wanting to make a website for myself for awhile without AI, so without further ado, here it is! I designed this like a command line because I thought it would be cool. I don’t have that much experience in frontend web dev, so I learned a lot over the course of making this. This was fully made on HC spaces on my school chromebook during my free time in school lol Sorry for the massive devlog I didn’t know which program I wanted to ship this to and I picked this 6 hrs in I hope you guys like it!...
|
1793350691.0492282
|
1793437091.0492282
|
|
59195
|
Pinpoint by @arpanshah102 | Stardance
|
arpanshah102
|
1
|
6.0
|
112
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-19T01:46:24Z", "hours": 6.0, "multiplier": 17.39, "payout": 112, "blessing": "neutral", "text": "Hello guys! This is a react game where you will guess the angle you see on a circle. Simply type it in using the buttons on the site or use your keyboard for keyboard shortcuts. There are two gamemodes, guess and set. In guess, you will have to guess the angle shown while on set, you’ll have to try your best to place the angle that was randomly picked. Enjoy!", "repo": "https://github.com/Arpan-Shah-102/pinpoint", "demo": "https://pinpoint-psi-rust.vercel.app/"}]...
|
[{"post_id": 70369, "ts": "202 [{"post_id": 70369, "ts": "2026-09-19T01:43:22Z", "hours": 0.3372, "text": "Today, I believe I’ve finally finished this project by adding the snapback feature. Basically, whether you’re in the set or guess gamemode, after the round ends, it shows you either what you put in the guess gamemode, or the correct answer in the set gamemode. In this screenshot, you can see it behind the main dial."}, {"post_id": 67055, "ts": "2026-09-13T03:09:36Z", "hours": 0.4867, "text": "Today, I added some bug fixes and streak tracking. You can now track how many you’ve gotten in a row and your all time highest. You can also reset your data if you don’t like it. Tomorrow, I’m probably gonna add a snapback feature, you will see you’re guess as a black outline of the line and the dial will move to the correct guess."}, {"post_id": 63281, "ts": "2026-09-07T00:59:24Z", "hours": 5.6336, "text": "I accidently forgot to upload this project to stardance so I’m doing that today. Here is a quick devlog for this project. Mobile Bug Fixes V2.1 - 8/25/2026 Added Buttons to move dial on set gamemode for mobile Bug Fixes Set Game Mode Update V2.0 - 8/25/2026 Added gamemode selection setting Added new ‘set’ gamemode Implemented Dial Dragging Added set gamemode functionality Bug Fixes Bug Fixing V1.1 - 8/21/2026 Fixed Settings not appearing on dark mode Fixed Wrap around values not being near Scaling Update V1.0 - 8/21/2026 Finished Game Improved Scaling on large screens Functionality Update V0.9 - 8/21/2026 Implemented Functionality for Pinpoint Added SFX for componentes UI Update V0.5 - 8/21/2026 Worked on UI Updated Readme Basic Template V0.0 - 8/21/2026 Initialized and started repo Got react via npx create-vite"}]...
|
Title: Pinpoint by @arpanshah102 | Stardance
Devl Title: Pinpoint by @arpanshah102 | Stardance
Devlogs:
I accidently forgot to upload this project to stardance so I’m doing that today. Here is a quick devlog for this project. Mobile Bug Fixes V2.1 - 8/25/2026 Added Buttons to move dial on set gamemode for mobile Bug Fixes Set Game Mode Update V2.0 - 8/25/2026 Added gamemode selection setting Added new ‘set’ gamemode Implemented Dial Dragging Added set gamemode functionality Bug Fixes Bug Fixing V1.1 - 8/21/2026 Fixed Settings not appearing on dark mode Fixed Wrap around values not being near Scaling Update V1.0 - 8/21/2026 Finished Game Improved Scaling on large screens Functionality Update V0.9 - 8/21/2026 Implemented Functionality for Pinpoint Added SFX for componentes UI Update V0.5 - 8/21/2026 Worked on UI Updated Readme Basic Template V0.0 - 8/21/2026 Initialized and started repo Got react via npx create-vite
Today, I added some bug fixes and streak tracking. You can now track how many you’ve gotten in a row and your all time highest. You can also reset your data if you don’t like it. Tomorrow, I’m probably gonna add a snapback feature, you will see you’re guess as a black outline of the line and the dial will move to the correct guess.
Today, I believe I’ve finally finished this project by adding the snapback feature. Basically, whether you’re in the set or guess gamemode, after the round ends, it shows you either what you put in the guess gamemode, or the correct answer in the set gamemode. In this screenshot, you can see it behind the main dial.
Ships:
Hello guys! This is a react game where you will guess the angle you see on a circle. Simply type it in using the buttons on the site or use your keyboard for keyboard shortcuts. There are two gamemodes, guess and set. In guess, you will have to guess the angle shown while on set, you’ll have to try your best to place the angle that was randomly picked. Enjoy!...
|
1793350692.2457767
|
1793437092.2457767
|
|
54394
|
Dynamic New Tab Page by @Harpaavan108 | Stardance
|
Harpaavan108
|
1
|
20.48
|
29
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-13T04:07:00Z", "hours": 6.0, "multiplier": 5.14, "payout": 29, "blessing": "neutral", "text": "Dynamic New Tab Page In this project, I am making a dynamic new tab page, which will change based on the time of the day. Currently, I have made a new tab page with a title text and 4 shortcuts that I frequently use. I have also added an animated gradient background. Depending on the time of day, the background and text color will change color. View the project here: https://harpaavan-s.github.io/new-tab/ Tech Stack Built with: HTML, CSS, JS HTML was used to build the basic structure of the page, such as writing the title text and shortcuts. CSS was used to style the page, such as positioning the text and shortcuts, as well as animating the gradient background to loop. I also created the classes for the different times of the day. JS was used to detect the time of day and add the appropriate class to the body of the document. Features In the morning from 6 - 10 AM, the gradient will be a sunset color and the text will be light red. In the afternoon from 11 AM - 4 PM, the gradient will be a sky blue color and the text will be dark blue. In the evening from 5 - 9 PM, the gradient will be a dark purple color and the text will be light purple. During the night from 10 PM - 5 AM, the gradient will be navy and the text will be light gray. I will be adding more features to this later in the future, however this what I have for the initial ship. Acknowledgements There is no AI usage in this project. Enjoy!!!", "repo": "https://github.com/Harpaavan-S/new-tab", "demo": "https://harpaavan-s.github.io/new-tab/"}]...
|
[{"post_id": 82875, "ts": "202 [{"post_id": 82875, "ts": "2026-10-26T03:52:37Z", "hours": 5.4833, "text": "Devlog #7 This session I mainly worked on modeling the house, which also took a bunch of time, but it looks super cool in the end. Not much new. I am officially done the house, so I hope I can move onto the rest of the castle. Hopefully I can finish this before StarDance ends!!! Current Progress I really made my house thing look a lot more realistic, I first started with some small towers around it, then I worked on the top and the front, and I moved onto the courtyard thing. There were a lot of small details to add, but I think I have gotten the hang of all the tools in Blender. Its slow but its moving forward. Next Steps Next I will work on another bigger courtyard thing on the other side of the castle. This will also have a bunch of detail, but I hope to finish it quick, like in 2 hours MAX. I really need to start working faster, so yeah. Below you can see a picture of the finished house beside the tower."}, {"post_id": 82524, "ts": "2026-10-25T03:41:50Z", "hours": 4.6514, "text": "Devlog #6 This session was mainly just working on the big tower part of the 3D castle. It took me a lot of time to do the tiny details, but the tower is finally done, and I will start to work on the next things. It is a very time consuming process trying to follow along with the tutorial, and I hope I can finish this before stardance ends, because I want to integrate it into my website as well. Current Progress I finally got the tower done. Because the model is isometric, like everything has to be aligned with the grooves, and I learned how to like duplicate something in a circle to just quickly rotate it, so that was convenient. I had A LOT of trouble with global and local orientations and how to scale and move things along their global, local, and normal axises. But I think I’ve got the hang of it. Its a slow and tedious process, but I think I will get it done. Next Steps The next steps are to work on the decoration for the the surrounding towers and the like houses things, and just make those look as pretty as the tower. I will first completely finish with the model before moving onto shading and coloring it. Below is an image of the tower in Blender"}, {"post_id": 80811, "ts": "2026-10-18T21:02:35Z", "hours": 3.1964, "text": "Devlog #5 It has been a while since I posted my last devlog, but I have come back with a fresh vision of what I want to make. So I wanted to incorporate Three.js into my project, but I do not now a lot of Three.js. However, I discovered that I could make the models in Blender and import them from there into Three.js, which is a lot easier. So I have started with modeling in Blender, and I also figured out how to use Lapse. Current Progress I wanted to go with a fantasy theme for my new tab page, but I also wanted it to be isometric, because I really like how isometric models look, so I found a timelapse video of someone making one, and I am trying to follow that, but it IS HARD, like I am watching the video and half speed just to go along with the video. But I really like the model, so I will push through and try to make. It is based off of the Hogwarts castle, so I am trying to make that. Next Steps The next couple of devlogs will just be me making the castle model. I will first start with the outline, and then move onto shading. I am super excited about how this will turn out, but I hope I can finish it before the deadline. Below is an image of the starting outline"}, {"post_id": 69974, "ts": "2026-09-18T04:51:38Z", "hours": 1.1506, "text": "Devlog #4 So I tried to ship my project, but I kept getting rejected on the basis that it is AI generated, when I have used 0 AI. I have no idea where they are finding AI use, but I decided to disconnect it from the mission because I was not going to waste my time just for 60 stardust. So a lot of time was just spent tinkering around with code seeing if they would accept it, but no luck, so I’m just going to continue on, add some new features, and hope that that gets accepted. Current Progress There was not much progress during this block, it was mainly just adjusting code or typing small lines. I got feedback saying that the CSS looked AI generated, so I should change that. But as I started to, I just felt so sad to see the progress I made go away, so I decided to just keep working on this and continue from there. I added one more link as a shortcut and that is for gmail. Next Steps Now its time to really take this project to the max. One thing that I really want to tinker around with is Three.js, and adding interactive 3D models into my webpage. It doesn’t even have to be interactive, it just has to have a 3D effect. I am thinking a space scene. So that is the next goal. I am still thinking of some ideas. But I am done with the mission, and I didn’t use any AI, so I am just going to continue with this."}, {"post_id": 67076, "ts": "2026-09-13T03:53:18Z", "hours": 2.7406, "text": "Devlog #3 I am ready to ship my first version of this project. I have added an animated gradient background to the webpage. I have also added the dynamic features. So the gradient color and the text color will change color based on the time of day. I had to use just a bit of JS for this, but it was easy to figure out as JS has the ability to pull the time by itself. Current Progress I first worked on making the looping gradient. I wanted it to be at -31 degrees, but the looping was not working. I tried a lot of things, like increasing the size of the background, the keyframes of the animation, the width of the keyframes, and reversing the gradient colors. But nothing worked, so I decided to keep it just going horizontally as I had done that before and was able to quickly make. I then moved to JS, in which I made a const for the hour. I discovered that JS can automatically pull the time of day from your device, so that was super convenient. I am actually learning JS in school, so I was able to add classes to the body depending on the time of day using if and else if statements. So it wasn’t too hard, and I got a really nice result out of it. Next Steps I am planning to ship next just so I can complete this mission. I already took way too many hours (only for 60 stardust). But I will for sure keep adding to this project. I want to connect it to my school schedule so that I can track my classes. I also want to include some productivity widgets, so I can remember things and get some stuff done in my life. But I will ship for now and continue working on it later. Below you can see pictures of all the gradient backgrounds. Challenge: try to guess what time of day they are each for."}, {"post_id": 66746, "ts": "2026-09-12T17:15:12Z", "hours": 1.8125, "text": "Devlog #2 During this block, I spent some time styling the website in CSS. I wanted it to start looking a bit more like a new tab page before I started in JS. I positioned my text in the middle, and made my shortcuts look nicer. Basically, it was a major styling block. Current Progress For now, I decided to keep only a title and some shortcuts just to keep the design simple. I want to then move onto JS to implement a dynamic feature into my website which will change with the time. So the goal is a minimalist style for now. The styling overall was not too hard. I had already arranged by classes nicely in HTML, so I had to move them around. I finally learned the secrets of the display: flex; rule, and how to use it to center things properly in CSS. So I got that working and then styled my icons. I applied some neat hover effects to them. At first I was planning to have a label text to label the shortcuts, but I already knew what they all were, so I decided to keep the text out, and if I wanted to I could add it again later. Next Steps The next thing that I want to do is make the background a moving gradient, but not too fast or bright, because that will be distracting. The main thing I want to add is a dynamic aspect. So I want to make it so that the background color will change with the time of day. Pretty basic, but that’s all I want to do before the inital ship. Below you can see a image of the page after styling."}, {"post_id": 65998, "ts": "2026-09-11T14:45:16Z", "hours": 1.1072, "text": "Devlog #1 I am officially starting my next project! In this project, I am planning to make a dynamic page that will show up when I open a new tab, replacing the regular GOOGLE one. For the first iteration, I am planning on making a simple page that has a large greeting text on it, but it’s background color will change depending on the time of day. I will probably change some stuff after that, but that’s the plan right now for my first ship so I can complete the mission. Current Progress So I started with the bare minimum. Because the site for now will not have much content on it, the HTML was pretty simple. I added a h1 tag with my title in it, and I decided that I will add buttons as shortcuts for some links that I use everyday. So I just added some icons that are linked to the sites. I also started with some super basic CSS, like just reseting margins, and starting to change the background color. It looks kinda bad right now, but I will make it look better. Next Steps My next steps are just to style it so it actually looks like a new tab page. I am not planning to add a search bar in there, because I don’t use the middle search bar, I only use the one on top, so I don’t want to take up unneccessary space. I want to finish styling in CSS before moving onto JS to set the dynamic changes. Below is a image of the very rough draft with the icons, labels, and title. (It looks bad right now, but it will look better in the next devlog.)"}]...
|
Title: Dynamic New Tab Page by @Harpaavan108 | Sta Title: Dynamic New Tab Page by @Harpaavan108 | Stardance
Devlogs:
Devlog #1 I am officially starting my next project! In this project, I am planning to make a dynamic page that will show up when I open a new tab, replacing the regular GOOGLE one. For the first iteration, I am planning on making a simple page that has a large greeting text on it, but it’s background color will change depending on the time of day. I will probably change some stuff after that, but that’s the plan right now for my first ship so I can complete the mission. Current Progress So I started with the bare minimum. Because the site for now will not have much content on it, the HTML was pretty simple. I added a h1 tag with my title in it, and I decided that I will add buttons as shortcuts for some links that I use everyday. So I just added some icons that are linked to the sites. I also started with some super basic CSS, like just reseting margins, and starting to change the background color. It looks kinda bad right now, but I will make it look better. Next Steps My next steps are just to style it so it actually looks like a new tab page. I am not planning to add a search bar in there, because I don’t use the middle search bar, I only use the one on top, so I don’t want to take up unneccessary space. I want to finish styling in CSS before moving onto JS to set the dynamic changes. Below is a image of the very rough draft with the icons, labels, and title. (It looks bad right now, but it will look better in the next devlog.)
Devlog #2 During this block, I spent some time styling the website in CSS. I wanted it to start looking a bit more like a new tab page before I started in JS. I positioned my text in the middle, and made my shortcuts look nicer. Basically, it was a major styling block. Current Progress For now, I decided to keep only a title and some shortcuts just to keep the design simple. I want to then move onto JS to implement a dynamic feature into my website which will change with the time. So the goal is a minimalist style for now. The styling overall was not too hard. I had already arranged by classes nicely in HTML, so I had to move them around. I finally learned the secrets of the display: flex; rule, and how to use it to center things properly in CSS. So I got that working and then styled my icons. I applied some neat hover effects to them. At first I was planning to have a label text to label the shortcuts, but I already knew what they all were, so I decided to keep the text out, and if I wanted to I could add it again later. Next Steps The next thing that I want to do is make the background a moving gradient, but not too fast or bright, because that will be distracting. The main thing I want to add is a dynamic aspect. So I want to make it so that the background color will change with the time of day. Pretty basic, but that’s all I want to do before the inital ship. Below you can see a image of the page after styling.
Devlog #3 I am ready to ship my first version of this project. I have added an animated gradient background to the webpage. I have also added the dynamic features. So the gradient color and the text color will change color based on the time of day. I had to use just a bit of JS for this, but it was easy to figure out as JS has the ability to pull the time by itself. Current Progress I first worked on making the looping gradient. I wanted it to be at -31 degrees, but the looping was not working. I tried a lot of things, like increasing the size of the background, the keyframes of the animation, the width of the keyframes, and reversing the gradient colors. But nothing worked, so I decided to keep it just going horizontally as I had done that before and was able to quickly make. I then moved to JS, in which I made a const for the hour. I discovered that JS can automatically pull the time of day from your device, so that was super convenient. I am actually learning JS in school, so I was able to add classes to the body depending on the time of day using if and else if statements. So it wasn’t too hard, and I got a really nice result out of it. Next Steps I am planning to ship next just so I can complete this mission. I already took way too many hours (only for 60 stardust). But I will for sure keep adding to this project. I want to connect it to my school schedule so that I can track my classes. I also want to include some productivity widgets, so I can remember things and get some stuff done in my life. But I will ship for now and continue working on it later. Below you can see pictures of all the gradient backgrounds. Challenge: try to guess what time of day they are each for.
Devlog #4 So I tried to ship my project, but I kept getting rejected on the basis that it is AI generated, when I have used 0 AI. I have no idea where they are finding AI use, but I decided to disconnect it from the mission because I was not going to waste my time just for 60 stardust. So a lot of time was just spent tinkering around with code seeing if they would accept it, but no luck, so I’m just going to continue on, add some new features, and hope that that gets accepted. Current Progress There was not much progress during this block, it was mainly just adjusting code or typing small lines. I got feedback saying that the CSS looked AI generated, so I should change that. But as I started to, I just felt so sad to see the progress I made go away, so I decided to just keep working on this and continue from there. I added one more link as a shortcut and that is for gmail. Next Steps Now its time to really take this project to the max. One thing that I really want to tinker around with is Three.js, and adding interactive 3D models into my webpage. It doesn’t even have to be interactive, it just has to have a 3D effect. I am thinking a space scene. So that is the next goal. I am still thinking of some ideas. But I am done with the mission, and I didn’t use any AI, so I am just going to continue with this.
Devlog #5 It has been a while since I posted my last devlog, but I have come back with a fresh vision of what I want to make. So I wanted to incorporate Three.js into my project, but I do not now a lot of Three.js. However, I discovered that I could make the models in Blender and import them from there into Three.js, which is a lot easier. So I have started with modeling in Blender, and I also figured out how to use Lapse. Current Progress I wanted to go with a fantasy theme for my new tab page, but I also wanted it to be isometric, because I really like how isometric models look, so I found a timelapse video of someone making one, and I am trying to follow that, but it IS HARD, like I am watching the video and half speed just to go along with the video. But I really like the model, so I will push through and try to make. It is based off of the Hogwarts castle, so I am trying to make that. Next Steps The next couple of devlogs will just be me making the castle model. I will first start with the outline, and then move onto shading. I am super excited about how this will turn out, but I hope I can finish it before the deadline. Below is an image of the starting outline
Devlog #6 This session was mainly just working on the big tower part of the 3D castle. It took me a lot of time to do the tiny details, but the tower is finally done, and I will start to work on the next things. It is a very time consuming process trying to follow along with the tutorial, and I hope I can finish this before stardance ends, because I want to integrate it into my website as well. Current Progress I finally got the tower done. Because the model is isometric, like everything has to be aligned with the grooves, and I learned how to like duplicate something in a circle to just quickly rotate it, so that was convenient. I had A LOT of trouble with global and local orientations and how to scale and move things along their global, local, and normal axises. But I think I’ve got the hang of it. Its a slow and tedious process, but I think I will get it done. Next Steps The next steps are to work on the decoration for the the surrounding towers and the like houses things, and just make those look as pretty as the tower. I will first completely finish with the model before moving onto shading and coloring it. Below is an image of the tower in Blender
Devlog #7 This session I mainly worked on modeling the house, which also took a bunch of time, but it looks super cool in the end. Not much new. I am officially done the house, so I hope I can move onto the rest of the castle. Hopefully I can finish this before StarDance ends!!! Current Progress I really made my house thing look a lot more realistic, I first started with some small towers around it, then I worked on the top and the front, and I moved onto the courtyard thing. There were a lot of small details to add, but I think I have gotten the hang of all the tools in Blender. Its slow but its moving forward. Next Steps Next I will work on another bigger courtyard thing on the other side of the castle. This will also have a bunch of detail, but I hope to finish it quick, like in 2 hours MAX. I really need to start working faster, so yeah. Below you can see a picture of the finished house beside the tower.
Ships:
Dynamic New Tab Page In this project, I am making a dynamic new tab page, which will change based on the time of the day. Currently, I have made a new tab page with a title text and 4 shortcuts that I frequently use. I have also added an animated gradient background. Depending on the time of day, the background and text color will change color. View the project here: https://harpaavan-s.github.io/new-tab/ Tech Stack Built with: HTML, CSS, JS HTML was used to build the basic structure of the page, such as writing the title text and shortcuts. CSS was used to style the page, such as positioning the text and shortcuts, as well as animating the gradient background to loop. I also created the classes for the different times of the day. JS was used to detect the time of day and add the appropriate class to the body of the document. Features In the morning from 6 - 10 AM, the gradient will be a sunset color and the text will be light red. In the afternoon from 11 AM - 4 PM, the gradient will be a sky blue color and the text will be dark blue. In the evening from 5 - 9 PM, the gradient will be a dark purple color and the text will be light purple. During the night from 10 PM - 5 AM, the gradient will be navy and the text will be light gray. I will be adding more features to this later in the future, however this what I have for the initial ship. Acknowledgements There is no AI usage in this project. Enjoy!!!...
|
1793350694.0826921
|
1793437094.0826921
|
|
27389
|
Fpv Mini Rc Car by @Kiril | Stardance
|
Kiril
|
1
|
47.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-18T06:25:26Z", "hours": 47.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I spent almost the whole summer building this mini FPV RC car. It took a massive amount of time with 3d modeling, testing, and finding the right electronic modules. This is really one of my hardest projects I have ever made, but I am happy that I realized my childhood dream of creating it.", "repo": "https://github.com/kirilDen/Mini_FPV_RC_CAR_WiFi", "demo": ""}]...
|
[{"post_id": 68423, "ts": "202 [{"post_id": 68423, "ts": "2026-09-15T02:59:08Z", "hours": 1.1667, "text": "After adding support braces, I finally finished the body of the car. After 3d printing I will paint and submit the project."}, {"post_id": 67869, "ts": "2026-09-14T04:48:31Z", "hours": 1.7, "text": "I improved the body’s mounting points so it could be attached firmly to the chassis."}, {"post_id": 65115, "ts": "2026-09-10T00:53:17Z", "hours": 1.5, "text": "Today I was working on the body for the Rc Car."}, {"post_id": 64033, "ts": "2026-09-08T04:48:21Z", "hours": 3.3, "text": "Hello, I started remodeling the body for the car."}, {"post_id": 56373, "ts": "2026-08-28T03:43:29Z", "hours": 3.0167, "text": "Today I kept working on the body of the Rc Car."}, {"post_id": 56264, "ts": "2026-08-27T23:22:14Z", "hours": 2.8169, "text": "I started working on the body of the car"}, {"post_id": 55355, "ts": "2026-08-27T04:18:20Z", "hours": 0.2833, "text": "I added a place for FPV camera. Now the car is fully functional and can be controlled using computer or phone with live view video. Next step is to make enclosure."}, {"post_id": 55308, "ts": "2026-08-27T01:42:26Z", "hours": 0.6833, "text": "I assembled the chassis and the car works perfect. The next step which I started is to design an FPV camera holder."}, {"post_id": 55247, "ts": "2026-08-26T22:10:32Z", "hours": 2.8503, "text": "I kept working on chassis and finding the best size of the wheels and axle."}, {"post_id": 47908, "ts": "2026-08-16T05:45:04Z", "hours": 4.6419, "text": "I spend most of the time assembling the chassis and also modeling the wheels."}, {"post_id": 46558, "ts": "2026-08-13T21:36:07Z", "hours": 2.7003, "text": "Today I finished making the electronic mounts. I designed them specifically so the electronics would sit still and require no glue."}, {"post_id": 45539, "ts": "2026-08-12T03:02:19Z", "hours": 2.3836, "text": "I finally finished working on the steering system and started connecting the whole chassis. Also trying to make a good battery holder."}, {"post_id": 44938, "ts": "2026-08-11T01:08:07Z", "hours": 1.8833, "text": "I kept improving the steering system to find the best option."}, {"post_id": 43038, "ts": "2026-08-08T02:51:25Z", "hours": 2.1922, "text": "Today I started rebuilding the steering system for better steering."}, {"post_id": 33356, "ts": "2026-07-23T06:24:28Z", "hours": 0.8472, "text": "Today I was soldering the electronics and putting everything together. Code is working well and the next step is to design wheels."}, {"post_id": 33238, "ts": "2026-07-22T23:37:37Z", "hours": 4.7169, "text": "I started assembling the RC car and also designed a cover for electronics."}, {"post_id": 31634, "ts": "2026-07-20T06:06:52Z", "hours": 0.765, "text": "I just finished modeling placeholders for electronics."}, {"post_id": 31605, "ts": "2026-07-20T04:25:11Z", "hours": 1.1833, "text": "I didn’t save my files last time, so today I had to remake everything I did last time."}, {"post_id": 28722, "ts": "2026-07-15T04:57:07Z", "hours": 1.1833, "text": "I almost finished working on the chassis for my RC car. The next step is to make mounts for the rest of the electronics."}, {"post_id": 26361, "ts": "2026-07-11T03:24:06Z", "hours": 1.5336, "text": "Hello! Today I finished designing and printing the gears for both the motor and the axle. I also tested different gear ratios and found the best balance between speed and torque."}, {"post_id": 25710, "ts": "2026-07-10T04:27:04Z", "hours": 0.9, "text": "I made the RC car wider to fit the electronics, so I widened the front chassis and improved servo mount."}, {"post_id": 25152, "ts": "2026-07-09T05:41:50Z", "hours": 1.2172, "text": "I almost finished the steering system for the RC car. The only thing left to make is the placing for servo motor."}, {"post_id": 24508, "ts": "2026-07-08T03:08:51Z", "hours": 0.9333, "text": "Today I was still working on the steering system of my car, and I hope I will finish next time."}, {"post_id": 23946, "ts": "2026-07-07T04:57:28Z", "hours": 0.9167, "text": "Today I started working on steering system of my car. I had to design the spindles for the steering system."}, {"post_id": 23247, "ts": "2026-07-06T02:31:35Z", "hours": 1.4003, "text": "Started the RC car rear chassis today! It doesn’t look like much yet, but I made space for the motor and shaft. Next time, I will add gears and finish the back hopefully."}]...
|
Title: Fpv Mini Rc Car by @Kiril | Stardance
Devl Title: Fpv Mini Rc Car by @Kiril | Stardance
Devlogs:
Started the RC car rear chassis today! It doesn’t look like much yet, but I made space for the motor and shaft. Next time, I will add gears and finish the back hopefully.
Today I started working on steering system of my car. I had to design the spindles for the steering system.
Today I was still working on the steering system of my car, and I hope I will finish next time.
I almost finished the steering system for the RC car. The only thing left to make is the placing for servo motor.
I made the RC car wider to fit the electronics, so I widened the front chassis and improved servo mount.
Hello! Today I finished designing and printing the gears for both the motor and the axle. I also tested different gear ratios and found the best balance between speed and torque.
I almost finished working on the chassis for my RC car. The next step is to make mounts for the rest of the electronics.
I didn’t save my files last time, so today I had to remake everything I did last time.
I just finished modeling placeholders for electronics.
I started assembling the RC car and also designed a cover for electronics.
Today I was soldering the electronics and putting everything together. Code is working well and the next step is to design wheels.
Today I started rebuilding the steering system for better steering.
I kept improving the steering system to find the best option.
I finally finished working on the steering system and started connecting the whole chassis. Also trying to make a good battery holder.
Today I finished making the electronic mounts. I designed them specifically so the electronics would sit still and require no glue.
I spend most of the time assembling the chassis and also modeling the wheels.
I kept working on chassis and finding the best size of the wheels and axle.
I assembled the chassis and the car works perfect. The next step which I started is to design an FPV camera holder.
I added a place for FPV camera. Now the car is fully functional and can be controlled using computer or phone with live view video. Next step is to make enclosure.
I started working on the body of the car
Today I kept working on the body of the Rc Car.
Hello, I started remodeling the body for the car.
Today I was working on the body for the Rc Car.
I improved the body’s mounting points so it could be attached firmly to the chassis.
After adding support braces, I finally finished the body of the car. After 3d printing I will paint and submit the project.
Ships:
I spent almost the whole summer building this mini FPV RC car. It took a massive amount of time with 3d modeling, testing, and finding the right electronic modules. This is really one of my hardest projects I have ever made, but I am happy that I realized my childhood dream of creating it....
|
1793350697.9537966
|
1793437097.9537966
|