|
21308
|
NihonGo! by @Manenti | Stardance
|
Manenti
|
1
|
39.64
|
654
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-11T19:25:19Z", "hours": 39.0, "multiplier": 17.16, "payout": 654, "blessing": "neutral", "text": "NihonGo! I made NihonGo! , a full-stack Japanese learning platform for English speakers. It includes structured lessons, interactive exercises, progress tracking, authentication, and a flashcard system where users can create decks, add cards, and practice vocabulary or writing systems like hiragana, katakana, and kanji. The most challenging part was connecting all the pieces together into a real deployed app: the React frontend, Express backend, PostgreSQL database, migrations, seed data, authentication, CORS, rate limits, and Render deployment. I also had to think carefully about how learners move through the app, so it feels like a study tool instead of just a collection of pages. I’m proud that NihonGo! is not only a UI mockup, but a working full-stack project with user accounts, saved progress, lessons, exercises, and flashcards. I’m also proud of improving the project structure, documentation, deployment setup, and overall polish so it feels more complete and usable. To test the project, create a new account or log in, then explore the dashboard, modules, lessons, trainer, and flashcards pages. The app may take a few seconds to respond the first time because the backend is hosted on Render’s free tier and can spin down when inactive.", "repo": "https://github.com/noname697/NihonGo", "demo": "https://nihon-go-jp.vercel.app"}]...
|
[{"post_id": 27337, "ts": "202 [{"post_id": 27337, "ts": "2026-07-12T20:30:08Z", "hours": 0.64, "text": "Devlog: Fixing the Deployment After submitting NihonGo!, I found out that Render was not an accepted deployment option for this project. I also realized that Render’s free tier can put services to sleep after periods of inactivity, which is not ideal for a project that reviewers and users need to test reliably. To fix this, I migrated the deployment away from Render: Moved the frontend deployment to Vercel Moved the backend API deployment to Vercel Switched the production database to Neon PostgreSQL Updated the frontend environment variable to point to the new Vercel backend Updated the backend CORS settings to allow the new Vercel frontend URL Fixed the backend serverless deployment configuration for Vercel Added the PostgreSQL dialect module explicitly so Sequelize works correctly in Vercel’s serverless environment Re-ran the production migrations and seeders on the new database Tested account registration and the main app flow again after the migration The main reason for this change was reliability. Since Render can make free services inactive when there is no traffic for a while, the app could appear broken or slow when someone tries to test it later. Moving the app to Vercel and Neon makes the project easier to access, test, and review. The new deployment is now working correctly, with the frontend, backend, database, authentication, and CORS all connected again."}, {"post_id": 26768, "ts": "2026-07-11T19:17:43Z", "hours": 2.5694, "text": "Since the last devlog, I focused on preparing NihonGo! for a more complete public release. I expanded the learning content with new seeders for more hiragana, katakana, N5 kanji, and beginner lessons covering particles like を , に , の , questions with か , and polite ます verbs. I also added backend tests with Jest and Supertest to validate the API health check, protected dashboard routes, and unknown route handling. On the frontend, I repolished the landing page to better present the app as a full Japanese learning platform, with clearer calls to action, feature highlights, preview stats, and a stronger visual identity. I also added a custom favicon and included a preview GIF so the project feels more complete and presentable from the first visit. Finally, I prepared the project for deployment: I configured the backend for production PostgreSQL over SSL, added the proper start/test scripts and dependencies, consolidated the documentation into a full project README, and published the live demo on Render at nihongo-udug.onrender.com . With this, NihonGo! now has content, documentation, tests, production configuration, and a working public deployment."}, {"post_id": 26265, "ts": "2026-07-10T23:16:21Z", "hours": 4.7308, "text": "Since the last devlog, I focused on making the dashboard more complete and data-driven. On the backend, I refactored the dashboard service and presenter, expanded the statistics service to return quick stats, daily goal progress, and recent activity, adjusted progress handling, added a migration for renamed character progress columns, cleaned up unused code, and updated the API docs. On the frontend, I connected the new dashboard data to polished cards for Daily Goal, Recent Activity, Recommended Lessons, and Quick Stats. I also improved module/exercise UI details, cleaned up duplicated or unused components, fixed naming and lint issues, and made small page-level adjustments across the app. I also expanded the Flashcards feature into a fuller management flow: fetching deck details, editing and deleting decks, editing and deleting cards, refreshing due cards and progress after actions, and resolving warnings around the page state. This makes flashcards feel much closer to a complete study tool rather than just a basic review screen."}, {"post_id": 25079, "ts": "2026-07-09T01:35:53Z", "hours": 5.7917, "text": "Today I expanded NihonGo with new learning flows for practice and review. On the backend, I added the dashboard recommendation feature, connecting lesson progress, quick stats, and recommendations so users can continue unfinished lessons or start the next suggested lesson. On the frontend, I improved the Dashboard with modular cards for continuing learning, daily goals, recent activity, recommendations, and quick stats. I also built the Kana/Kanji Trainer page with filters, progress tracking, random practice, answer submission, and instant feedback. I also implemented the Flashcards experience, including deck creation, card creation, due-card review, answer reveal, and progress tracking. Finally, I cleaned up page exports/routes and fixed integration bugs across auth, exercises, module details, and flashcard behavior."}, {"post_id": 23838, "ts": "2026-07-07T00:42:42Z", "hours": 3.1194, "text": "Since the last update, I shifted the backend toward a clearer screen-driven architecture by introducing dedicated screen services and presenters. This included the first lesson screen flow, with a new lesson endpoint and controller designed to return lesson content in a frontend-friendly shape. I also prepared the presentation layer to merge lesson data with user progress details, setting up cleaner contracts between API and UI. I then expanded the dashboard API with a v2 response format focused on frontend consumption. The dashboard service now aggregates the user’s latest studied lesson plus quick stats in one place, and maps them into a structured payload for cards like Continue Learning, Lessons Completed, Exercise Accuracy, Characters Mastered, and Flashcards Reviewed. This makes the home experience more actionable and reduces data assembly work on the client side. To support this, I improved backend organization by separating domain services from screen services and updating controllers to use the new structure. I also added supporting progress/statistics functions to centralize calculations and keep business logic out of route handlers. Overall, this sprint was about making the backend more scalable, consistent, and aligned with the next frontend iterations."}, {"post_id": 21876, "ts": "2026-07-04T01:29:52Z", "hours": 2.8131, "text": "Since the last update, I pushed NihonGo! into the actual learning flow instead of just the dashboard. The modules page now pulls real progress data from the backend and presents each JLPT module as a clickable card, with loading, error, and empty states to make the experience feel complete and stable. I also added dedicated module and lesson detail pages. Module pages now show overall completion and the full list of lessons, while lesson pages display the explanation content together with exercise previews, making the study journey feel much more structured. To keep everything consistent, I introduced reusable UI pieces like page headers, badges, empty states, and lesson/exercise cards."}, {"post_id": 21666, "ts": "2026-07-03T19:03:29Z", "hours": 2.4261, "text": "I moved the front-end from setup mode into a real product experience by building the first complete dashboard screen for NihonGo! . The dashboard now loads live summary data from the API , greets the user, shows their current study progress, and highlights what they should continue next. I also added proper loading and error states so the page feels stable instead of empty. To support that, I created a small set of reusable UI pieces like cards , stat blocks , and a progress bar , which made the interface much easier to structure and keep consistent. With that in place, the front-end now feels like the beginning of a full learning platform instead of just a shell around the authentication flow."}, {"post_id": 20419, "ts": "2026-07-02T00:41:54Z", "hours": 3.1839, "text": "I started turning NihonGo! into a real frontend app by setting up the main routing structure and global providers for authentication and theme control. That gave the project a proper foundation, with protected routes for the learning area and a shared app layout that keeps navigation consistent across the site. From there, I built the first visible pieces of the interface: a landing page, a styled auth layout, and a functional login screen. I also added reusable form components, API error handling, and session logic so the frontend can talk to the backend, keep users logged in, and send them to the dashboard when authentication succeeds."}, {"post_id": 18824, "ts": "2026-06-30T00:57:08Z", "hours": 1.8339, "text": "Since the last update, I worked on the backend’s security and request-handling layer. I added validation schemas with Zod across the main routes, including auth, progress, trainer, and flashcards, so the API now validates params, query strings, and request bodies more consistently. I also improved the app structure with a rate limiter, a not-found middleware, and stronger error handling for validation and database issues. On top of that, I added CORS configuration and request logging with Morgan in development. This was also my first time using both Zod and Morgan , so this update was useful for learning how to structure validation and logging in a more organized way."}, {"post_id": 18589, "ts": "2026-06-29T19:39:02Z", "hours": 2.5708, "text": "Since the last update, I added a dashboard layer that brings together the main learning data in one place. The backend now exposes a dashboard summary route that aggregates progress across lessons, exercises, trainer characters, and flashcards, along with recent activity for each area. I also kept improving the flashcards flow by fixing the due-cards logic and adding example flashcard seed data. The app now includes the new dashboard routes, so the API is starting to feel more complete and connected across all study features."}, {"post_id": 17799, "ts": "2026-06-28T18:44:40Z", "hours": 2.0806, "text": "Since the last update, I implemented a complete Flashcards module end-to-end. This included new database migrations and models for decks, cards, and card reviews, plus the associations needed to connect users, decks, and review history. I also finished the full MVC flow for flashcards: Deck management ( create , list , view , update , delete ). Card management inside decks ( create , update , delete ). Review flow with due cards and answer submission. Review progress endpoint for tracking performance over time. On the logic side, I added mastery score calculation and a spaced-review style due-date strategy based on correct and wrong attempts. I also fixed integration issues from this cycle, including model naming, async promise handling, and boolean behavior in requests."}, {"post_id": 16609, "ts": "2026-06-27T00:43:37Z", "hours": 2.2261, "text": "Since the last devlog, I added the trainer system for study characters. The backend now supports listing characters, fetching random practice sets, submitting character answers, and tracking each user’s trainer progress . I also seeded the first batch of hiragana , katakana , and a few kanji so the trainer has real content to work with. On top of that, I wired the new trainer and progress routes into the app and fixed a few implementation issues around model names, async handling, and boolean values."}, {"post_id": 15208, "ts": "2026-06-24T18:32:51Z", "hours": 1.7694, "text": "Since the last devlog, I added the first version of the progress layer for users. The new service now tracks exercise submissions, lesson progress, and module progress, so the backend can calculate completion and score instead of only serving content. I also adjusted the models and associations to support that progress data, and fixed some import/export and naming issues along the way. The app is moving from content delivery to actual study tracking, which is the main step forward in this update."}, {"post_id": 13306, "ts": "2026-06-21T19:43:49Z", "hours": 1.1961, "text": "Since the last update, I finished the first full content layer of the backend. I added a content service that can fetch modules, individual modules with their lessons, lessons with their parent module, and lesson exercises with answer options. This turned the database schema into something the API can actually serve. I also created the content controller and routes, then mounted them in the main app under /api/content . At the same time, I added an initial content seeder to populate the database with JLPT module data, lessons, exercises, and multiple-choice options so the API has real content to work with right away. After that, I fixed a few integration issues, including import/export problems and some attribute name typos, so the content queries and models line up correctly. The backend is now in a much better state: authentication is in place, content endpoints are wired, and the database can be seeded with starter learning material."}, {"post_id": 12812, "ts": "2026-06-20T23:34:58Z", "hours": 0.7633, "text": "Since the last update, I expanded the backend schema beyond authentication and started modeling the learning content structure of NihonGo. I added the core Sequelize models for course modules, lessons, exercises, and exercise options, along with the relationships between them so the content can be loaded in a structured way. The project now supports a full content hierarchy: modules contain lessons, lessons contain exercises, and exercises can contain multiple answer options. I also kept the user model in place for authentication, with roles already prepared for future access control. On the database side, I created and ran the migrations needed to make these tables available in PostgreSQL. The schema is now in a usable state for starting content seeding and API endpoints for lessons and exercises."}, {"post_id": 12764, "ts": "2026-06-20T21:30:02Z", "hours": 0.8664, "text": "Since the last update, I focused on turning the backend into a real authentication API . I created the User model and its migration, then added the auth service layer to handle registration and login logic. I also built a token utility with JWT so authenticated users can receive access tokens after signing in. On top of that, I added an auth controller, auth routes, and a global error middleware to keep the API responses consistent. The main app was updated to use the new auth routes and the error handler, and the Sequelize setup was adjusted to load the shared config correctly."}, {"post_id": 12739, "ts": "2026-06-20T20:34:15Z", "hours": 1.0964, "text": "Set up the backend project and installed the dependencies. Added the main scripts for development, start, migrations, and seeders with sequelize-CLI. Built the Express app with cors , helmet , and JSON parsing enabled. Configured the server entry point to load environment variables and start the app on the chosen port. Created environment-based database configuration for development, test, and production. Adjusted Sequelize paths so the CLI can find the config, models, migrations, and seeders correctly."}]...
|
Title: NihonGo! by @Manenti | Stardance
Devlogs:
Title: NihonGo! by @Manenti | Stardance
Devlogs:
Set up the backend project and installed the dependencies. Added the main scripts for development, start, migrations, and seeders with sequelize-CLI. Built the Express app with cors , helmet , and JSON parsing enabled. Configured the server entry point to load environment variables and start the app on the chosen port. Created environment-based database configuration for development, test, and production. Adjusted Sequelize paths so the CLI can find the config, models, migrations, and seeders correctly.
Since the last update, I focused on turning the backend into a real authentication API . I created the User model and its migration, then added the auth service layer to handle registration and login logic. I also built a token utility with JWT so authenticated users can receive access tokens after signing in. On top of that, I added an auth controller, auth routes, and a global error middleware to keep the API responses consistent. The main app was updated to use the new auth routes and the error handler, and the Sequelize setup was adjusted to load the shared config correctly.
Since the last update, I expanded the backend schema beyond authentication and started modeling the learning content structure of NihonGo. I added the core Sequelize models for course modules, lessons, exercises, and exercise options, along with the relationships between them so the content can be loaded in a structured way. The project now supports a full content hierarchy: modules contain lessons, lessons contain exercises, and exercises can contain multiple answer options. I also kept the user model in place for authentication, with roles already prepared for future access control. On the database side, I created and ran the migrations needed to make these tables available in PostgreSQL. The schema is now in a usable state for starting content seeding and API endpoints for lessons and exercises.
Since the last update, I finished the first full content layer of the backend. I added a content service that can fetch modules, individual modules with their lessons, lessons with their parent module, and lesson exercises with answer options. This turned the database schema into something the API can actually serve. I also created the content controller and routes, then mounted them in the main app under /api/content . At the same time, I added an initial content seeder to populate the database with JLPT module data, lessons, exercises, and multiple-choice options so the API has real content to work with right away. After that, I fixed a few integration issues, including import/export problems and some attribute name typos, so the content queries and models line up correctly. The backend is now in a much better state: authentication is in place, content endpoints are wired, and the database can be seeded with starter learning material.
Since the last devlog, I added the first version of the progress layer for users. The new service now tracks exercise submissions, lesson progress, and module progress, so the backend can calculate completion and score instead of only serving content. I also adjusted the models and associations to support that progress data, and fixed some import/export and naming issues along the way. The app is moving from content delivery to actual study tracking, which is the main step forward in this update.
Since the last devlog, I added the trainer system for study characters. The backend now supports listing characters, fetching random practice sets, submitting character answers, and tracking each user’s trainer progress . I also seeded the first batch of hiragana , katakana , and a few kanji so the trainer has real content to work with. On top of that, I wired the new trainer and progress routes into the app and fixed a few implementation issues around model names, async handling, and boolean values.
Since the last update, I implemented a complete Flashcards module end-to-end. This included new database migrations and models for decks, cards, and card reviews, plus the associations needed to connect users, decks, and review history. I also finished the full MVC flow for flashcards: Deck management ( create , list , view , update , delete ). Card management inside decks ( create , update , delete ). Review flow with due cards and answer submission. Review progress endpoint for tracking performance over time. On the logic side, I added mastery score calculation and a spaced-review style due-date strategy based on correct and wrong attempts. I also fixed integration issues from this cycle, including model naming, async promise handling, and boolean behavior in requests.
Since the last update, I added a dashboard layer that brings together the main learning data in one place. The backend now exposes a dashboard summary route that aggregates progress across lessons, exercises, trainer characters, and flashcards, along with recent activity for each area. I also kept improving the flashcards flow by fixing the due-cards logic and adding example flashcard seed data. The app now includes the new dashboard routes, so the API is starting to feel more complete and connected across all study features.
Since the last update, I worked on the backend’s security and request-handling layer. I added validation schemas with Zod across the main routes, including auth, progress, trainer, and flashcards, so the API now validates params, query strings, and request bodies more consistently. I also improved the app structure with a rate limiter, a not-found middleware, and stronger error handling for validation and database issues. On top of that, I added CORS configuration and request logging with Morgan in development. This was also my first time using both Zod and Morgan , so this update was useful for learning how to structure validation and logging in a more organized way.
I started turning NihonGo! into a real frontend app by setting up the main routing structure and global providers for authentication and theme control. That gave the project a proper foundation, with protected routes for the learning area and a shared app layout that keeps navigation consistent across the site. From there, I built the first visible pieces of the interface: a landing page, a styled auth layout, and a functional login screen. I also added reusable form components, API error handling, and session logic so the frontend can talk to the backend, keep users logged in, and send them to the dashboard when authentication succeeds.
I moved the front-end from setup mode into a real product experience by building the first complete dashboard screen for NihonGo! . The dashboard now loads live summary data from the API , greets the user, shows their current study progress, and highlights what they should continue next. I also added proper loading and error states so the page feels stable instead of empty. To support that, I created a small set of reusable UI pieces like cards , stat blocks , and a progress bar , which made the interface much easier to structure and keep consistent. With that in place, the front-end now feels like the beginning of a full learning platform instead of just a shell around the authentication flow.
Since the last update, I pushed NihonGo! into the actual learning flow instead of just the dashboard. The modules page now pulls real progress data from the backend and presents each JLPT module as a clickable card, with loading, error, and empty states to make the experience feel complete and stable. I also added dedicated module and lesson detail pages. Module pages now show overall completion and the full list of lessons, while lesson pages display the explanation content together with exercise previews, making the study journey feel much more structured. To keep everything consistent, I introduced reusable UI pieces like page headers, badges, empty states, and lesson/exercise cards.
Since the last update, I shifted the backend toward a clearer screen-driven architecture by introducing dedicated screen services and presenters. This included the first lesson screen flow, with a new lesson endpoint and controller designed to return lesson content in a frontend-friendly shape. I also prepared the presentation layer to merge lesson data with user progress details, setting up cleaner contracts between API and UI. I then expanded the dashboard API with a v2 response format focused on frontend consumption. The dashboard service now aggregates the user’s latest studied lesson plus quick stats in one place, and maps them into a structured payload for cards like Continue Learning, Lessons Completed, Exercise Accuracy, Characters Mastered, and Flashcards Reviewed. This makes the home experience more actionable and reduces data assembly work on the client side. To support this, I improved backend organization by separating domain services from screen services and updating controllers to use the new structure. I also added supporting progress/statistics functions to centralize calculations and keep business logic out of route handlers. Overall, this sprint was about making the backend more scalable, consistent, and aligned with the next frontend iterations.
Today I expanded NihonGo with new learning flows for practice and review. On the backend, I added the dashboard recommendation feature, connecting lesson progress, quick stats, and recommendations so users can continue unfinished lessons or start the next suggested lesson. On the frontend, I improved the Dashboard with modular cards for continuing learning, daily goals, recent activity, recommendations, and quick stats. I also built the Kana/Kanji Trainer page with filters, progress tracking, random practice, answer submission, and instant feedback. I also implemented the Flashcards experience, including deck creation, card creation, due-card review, answer reveal, and progress tracking. Finally, I cleaned up page exports/routes and fixed integration bugs across auth, exercises, module details, and flashcard behavior.
Since the last devlog, I focused on making the dashboard more complete and data-driven. On the backend, I refactored the dashboard service and presenter, expanded the statistics service to return quick stats, daily goal progress, and recent activity, adjusted progress handling, added a migration for renamed character progress columns, cleaned up unused code, and updated the API docs. On the frontend, I connected the new dashboard data to polished cards for Daily Goal, Recent Activity, Recommended Lessons, and Quick Stats. I also improved module/exercise UI details, cleaned up duplicated or unused components, fixed naming and lint issues, and made small page-level adjustments across the app. I also expanded the Flashcards feature into a fuller management flow: fetching deck details, editing and deleting decks, editing and deleting cards, refreshing due cards and progress after actions, and resolving warnings around the page state. This makes flashcards feel much closer to a complete study tool rather than just a basic review screen.
Since the last devlog, I focused on preparing NihonGo! for a more complete public release. I expanded the learning content with new seeders for more hiragana, katakana, N5 kanji, and beginner lessons covering particles like を , に , の , questions with か , and polite ます verbs. I also added backend tests with Jest and Supertest to validate the API health check, protected dashboard routes, and unknown route handling. On the frontend, I repolished the landing page to better present the app as a full Japanese learning platform, with clearer calls to action, feature highlights, preview stats, and a stronger visual identity. I also added a custom favicon and included a preview GIF so the project feels more complete and presentable from the first visit. Finally, I prepared the project for deployment: I configured the backend for production PostgreSQL over SSL, added the proper start/test scripts and dependencies, consolidated the documentation into a full project README, and published the live demo on Render at nihongo-udug.onrender.com . With this, NihonGo! now has content, documentation, tests, production configuration, and a working public deployment.
Devlog: Fixing the Deployment After submitting NihonGo!, I found out that Render was not an accepted deployment option for this project. I also realized that Render’s free tier can put services to sleep after periods of inactivity, which is not ideal for a project that reviewers and users need to test reliably. To fix this, I migrated the deployment away from Render: Moved the frontend deployment to Vercel Moved the backend API deployment to Vercel Switched the production database to Neon PostgreSQL Updated the frontend environment variable to point to the new Vercel backend Updated the backend CORS settings to allow the new Vercel frontend URL Fixed the backend serverless deployment configuration for Vercel Added the PostgreSQL dialect module explicitly so Sequelize works correctly in Vercel’s serverless environment Re-ran the production migrations and seeders on the new database Tested account registration and the main app flow again after the migration The main reason for this change was reliability. Since Render can make free services inactive when there is no traffic for a while, the app could appear broken or slow when someone tries to test it later. Moving the app to Vercel and Neon makes the project easier to access, test, and review. The new deployment is now working correctly, with the frontend, backend, database, authentication, and CORS all connected again.
Ships:
NihonGo! I made NihonGo! , a full-stack Japanese learning platform for English speakers. It includes structured lessons, interactive exercises, progress tracking, authentication, and a flashcard system where users can create decks, add cards, and practice vocabulary or writing systems like hiragana, katakana, and kanji. The most challenging part was connecting all the pieces together into a real deployed app: the React frontend, Express backend, PostgreSQL database, migrations, seed data, authentication, CORS, rate limits, and Render deployment. I also had to think carefully about how learners move through the app, so it feels like a study tool instead of just a collection of pages. I’m proud that NihonGo! is not only a UI mockup, but a working full-stack project with user accounts, saved progress, lessons, exercises, and flashcards. I’m also proud of improving the project structure, documentation, deployment setup, and overall polish so it feels more complete and usable. To test the project, create a new account or log in, then explore the dashboard, modules, lessons, trainer, and flashcards pages. The app may take a few seconds to respond the first time because the backend is hosted on Render’s free tier and can spin down when inactive....
|
1793141401.3102083
|
1793227801.3102083
|
|
21523
|
CTFs by @amyoatsie | Stardance
|
amyoatsie
|
0
|
39.55
|
0
|
[]
|
[{"post_id": 45705, "ts": "202 [{"post_id": 45705, "ts": "2026-08-12T11:31:10Z", "hours": 7.6975, "text": "I’ve finished the prototype with internal documentation. And I have also attempted to implent OOP, with specific classes, files, and folder structure. The only case which works is case 1, but it functions as a sufficient proof of concept."}, {"post_id": 41291, "ts": "2026-08-05T12:50:09Z", "hours": 8.3089, "text": "I’ve been working through CSV reading and writing in terms of the username/sign in pop up and then updating progress so only 1 row exists per user. I’m now trying to sort the code into appropriate OOP files and folders… :’)"}, {"post_id": 32955, "ts": "2026-07-22T13:18:05Z", "hours": 10.0764, "text": "Making progress on the home screen, however due to the way tkinter bootstrap works, alot of elements conflicted each other and have ended up scattered in random places…"}, {"post_id": 19997, "ts": "2026-07-01T14:00:34Z", "hours": 2.7658, "text": "i’m now building functionality for the challenge screen by adding relevant information and questions (including question answers defined in dictionaries for the comboboxes) :)"}, {"post_id": 14317, "ts": "2026-06-23T12:27:25Z", "hours": 10.2278, "text": "I have been painfully learning tkinter bootstrap and have finally gotten my notebook and tabs to work with images. The colour style has been customised and can now be referenced as needed."}, {"post_id": 11261, "ts": "2026-06-18T12:52:12Z", "hours": 0.4703, "text": "Learning how to incorporate ttkbootstrap for the GUI design… :’)"}]...
|
Title: CTFs by @amyoatsie | Stardance
Devlogs:
Le Title: CTFs by @amyoatsie | Stardance
Devlogs:
Learning how to incorporate ttkbootstrap for the GUI design… :’)
I have been painfully learning tkinter bootstrap and have finally gotten my notebook and tabs to work with images. The colour style has been customised and can now be referenced as needed.
i’m now building functionality for the challenge screen by adding relevant information and questions (including question answers defined in dictionaries for the comboboxes) :)
Making progress on the home screen, however due to the way tkinter bootstrap works, alot of elements conflicted each other and have ended up scattered in random places…
I’ve been working through CSV reading and writing in terms of the username/sign in pop up and then updating progress so only 1 row exists per user. I’m now trying to sort the code into appropriate OOP files and folders… :’)
I’ve finished the prototype with internal documentation. And I have also attempted to implent OOP, with specific classes, files, and folder structure. The only case which works is case 1, but it functions as a sufficient proof of concept....
|
1793177752.3933399
|
1793782552.3933399
|
|
28927
|
IOMessage by @shi | Stardance
|
shi
|
0
|
39.48
|
0
|
[]
|
[{"post_id": 40924, "ts": "202 [{"post_id": 40924, "ts": "2026-08-04T19:18:49Z", "hours": 14.2408, "text": "Hi! finally finished making TUI menus for my app. I had some difficulties with menu sizing and accounting for borders and style while making it but when I finally figured out that issue it was pretty straightforward to implement everything. What was interesting about all of this In this part of development I’m really understanding the difficulties of creating things we take for granted, like menus or just simple boxes of text, implementing menu scrolling and other types of utilities to make them usable was a pain for sure, but it was also interesting to see my changes in code affecting something as immediate as graphics (well TUI graphics but still graphics non the less). This is the first time i programmed something that could be seen and used and it’s honestly pretty sweet. The stars of the show All this time I spent working on this was to implement mainly three functions: create_menu_handle, draw_menu and menu_driver, those three functions regulate how the menu looks, feels, and takes input: menu_handle_t* create_menu_handle(WINDOW* parent, const char* menu_label, point_t pos, int max_height, int pad_y, int pad_x, int n_options, const char** option_labels, void (**opt_funcs)(void*), void **opt_args, chtype menu_attrs, chtype menu_color, chtype highlight_attrs, chtype highlight_color, int inside_shading, enum MenuBorderTypes border, int mouse_enabled); this is a beefy boy (look at all those parameters) but it’s pretty configurable and allows some real customization of your menu! It calculates available option space from the max height, and implements scrolling automatically int draw_menu(menu_handle_t* menu); Pretty much self explanatory, draws the menu and its borders. int menu_driver(menu_handle_t* menu, int input_type, MEVENT* mouse); Really cool function that given an input handles option selection/scrolling mechanics and highlighting of the selected option."}, {"post_id": 39015, "ts": "2026-08-01T17:50:12Z", "hours": 15.3456, "text": "Hi there guys! These are a lot of hours to log i know, but I swear I have a reason!! The main problem that took so long When I started to work on the client I came accross the problem of making a stable and working UI for it , and because I’m one of the cool kids developing in C (this is me -> 🤓) I obviously had to go for a TUI ( Text User Interface ) for street cred. Nerdy stuff about library searching and linking There i came accross the first real problem of the journey, wich library do I use (because no way im gonna code all of that myself)?? While searching i came accross a second problem: NOBODY USES A TUI , there are 0, and i mean 0 multi-platform libraries that work for linux and windows because of console shenanigans. I spent 2 hours + another 2 hours of changing the build pipe COMPLETELY (goodbye MSVC, hi there gcc and ninja) to find something. At last i went with NCurses for linux and PDCurses for windows, and the coolest thing is that they have ( almost ) the same exact API, so i just need to link them conditionally. Now out of the way with nerdy stuff and hi there cool TUI graphical stuff. Hi there graphical elements!! Now NCurses and PDCurses are mainly low level console libraries, in short they allow you to manipulate the console and cursor however you want (with some utility stuff). but we need a good old UI, so we need textboxes , menus , input fields , etc. while some of these exist for NCurses as addons, they dont for PDCurses, so i went with the bob the builder approach. I’m spending this much time writing the UI elements, for now the only thing I can show for my work is a textbox element that with a couple of lines of code can display text with: padding, colors and eventual attributes ( bold , italic , etc…). other than that i made some changes to utils and added a really cool split_lines function that makes splitting on newline in C pretty easy. Here’s a little preview of the textboxes! the code: init_pair(1, COLOR_RED, COLOR_BLUE); textbox_t* my_txt = create_textbox(stdscr, POINT(0,0), PAD(1, 1, 1, 1), str, A_BOLD, COLOR_PAIR(1)); if(!my_txt) { error(\"hell naw\"); return 1; } point_t centered = get_centered_pos(stdscr, my_txt->h, my_txt->w); move_text_box(my_txt, centered); if(draw_textbox(my_txt) == -1) error(\"ERR\"); getch(); destroy_textbox(my_txt); the result:"}, {"post_id": 26648, "ts": "2026-07-11T16:13:39Z", "hours": 4.3872, "text": "Hi! Finished working on an interface beetwen the database and my server code, it was really too messy earlier. So i made an interface that manages caching and retrieving the data, the only downside is that the data it returns (pointers to the cache) is completely immutable outside of the interface, so for every update you necessarily need to call update_user or update_channel or appropriate caching functions, other than that it should work pretty well and i made my previous example 1000 times simpler (in the photos I’ll provide a before and after). How i made it So while coding this new interface I encountered some problems, first of all I’m gonna remind myself to never use databases in C, i really hate all that boilerplate :d. I decided to make the interface pretty specific on users and channels, if i ever need to add anything to my database it’s gonna be a pain but I dont plan to do that (outside of files but those will come later), I also decided to use arena’s to manage memory in the cached user and channel struct because it’s cleaner cleanup. For last I was going to make a check_credentials function for log in but i decided to do that later as I need to implement hashing and md5 and that will be another dependancy. I think the next feature I’m gonna work on is probably making a decent client, if I continue the server I’m gonna have a functioning server without a client to serve. Later guys!"}, {"post_id": 21175, "ts": "2026-07-02T23:56:24Z", "hours": 5.5089, "text": "Hi there! This is my first devlog ever, so bear with me. It’s gonna be kinda long since this is a WIP project and I want to walk you through the codebase. This first devlog covers the pre-existing code and what I did in the ~5 hours I logged. Overview IOMessage is a centralized messaging CLI platform built entirely in C. Server and client are both meant to be multi-platform. The app will implement: channels (groups where users can share messages) moderation capabilities (kick, mute, …) file sharing (maybe other things in the future) Architecture CommunicationManager: this module handles I/O for each connected client ServerManager: this module handles requests and allows client communication ThreadManager / NetworkManager: modules that handles OS abstraction Thread communication: CommunicationManager and ServerManager talk through shared queues. Each CommunicationManager pushes incoming requests to a shared request queue, ServerManager pops them, processes them, and pushes responses back to that specific client’s response queue in a consumer-producer model. What I’m working on Done: CommunicationManager, ThreadManager, NetworkManager. WIP: ServerManager mainly the channel and messaging feature so i can ship a demo. Right now I need auth and channels working. I was facing the problem of storing user data past program exit. I considered files/folders, but linking data got messy fast, example: channels need to reference actual users by id so the server can identify the allowed users, and once channels and members live in separate files with changing data, it turns into a mess. So I choose SQLite: i choose because it stores data in just a file (minimum complexity) and as solid C API. Spent a good two hours designing the schema (it was the first time I used a DB lol). Then the hard part: seed the DB with some info, get the server to open it, print the channels, exit and read a looooot of docs. then after I started coding, i read the documentation bit by bit and slowly became horrified… THE BOILERPLATE WAS ABSOLUTELY GRUELING : 5 function calls per query, each one can fail, so for each function there are 5 lines of code Handling the error and freeing memory. I tried wrapper functions, I really tried, but it didn’t help much. Still need to find a way to cut the boilerplate down. I’m a bit of a perfectionist and it’s killing me. But after a lot of fighting, reading, and debugging, it finally works and displays the seeded info about channels.(the code I’m showing is basically 70% boilerplate for sqlite, btw the i swear the application can talk to clients, handle bad client behaviour and serialize the protocol, i have it turned off for testing so the app quits immediately after reading data from the database tho)."}]...
|
Title: IOMessage by @shi | Stardance
Devlogs:
Hi Title: IOMessage by @shi | Stardance
Devlogs:
Hi there! This is my first devlog ever, so bear with me. It’s gonna be kinda long since this is a WIP project and I want to walk you through the codebase. This first devlog covers the pre-existing code and what I did in the ~5 hours I logged. Overview IOMessage is a centralized messaging CLI platform built entirely in C. Server and client are both meant to be multi-platform. The app will implement: channels (groups where users can share messages) moderation capabilities (kick, mute, …) file sharing (maybe other things in the future) Architecture CommunicationManager: this module handles I/O for each connected client ServerManager: this module handles requests and allows client communication ThreadManager / NetworkManager: modules that handles OS abstraction Thread communication: CommunicationManager and ServerManager talk through shared queues. Each CommunicationManager pushes incoming requests to a shared request queue, ServerManager pops them, processes them, and pushes responses back to that specific client’s response queue in a consumer-producer model. What I’m working on Done: CommunicationManager, ThreadManager, NetworkManager. WIP: ServerManager mainly the channel and messaging feature so i can ship a demo. Right now I need auth and channels working. I was facing the problem of storing user data past program exit. I considered files/folders, but linking data got messy fast, example: channels need to reference actual users by id so the server can identify the allowed users, and once channels and members live in separate files with changing data, it turns into a mess. So I choose SQLite: i choose because it stores data in just a file (minimum complexity) and as solid C API. Spent a good two hours designing the schema (it was the first time I used a DB lol). Then the hard part: seed the DB with some info, get the server to open it, print the channels, exit and read a looooot of docs. then after I started coding, i read the documentation bit by bit and slowly became horrified… THE BOILERPLATE WAS ABSOLUTELY GRUELING : 5 function calls per query, each one can fail, so for each function there are 5 lines of code Handling the error and freeing memory. I tried wrapper functions, I really tried, but it didn’t help much. Still need to find a way to cut the boilerplate down. I’m a bit of a perfectionist and it’s killing me. But after a lot of fighting, reading, and debugging, it finally works and displays the seeded info about channels.(the code I’m showing is basically 70% boilerplate for sqlite, btw the i swear the application can talk to clients, handle bad client behaviour and serialize the protocol, i have it turned off for testing so the app quits immediately after reading data from the database tho).
Hi! Finished working on an interface beetwen the database and my server code, it was really too messy earlier. So i made an interface that manages caching and retrieving the data, the only downside is that the data it returns (pointers to the cache) is completely immutable outside of the interface, so for every update you necessarily need to call update_user or update_channel or appropriate caching functions, other than that it should work pretty well and i made my previous example 1000 times simpler (in the photos I’ll provide a before and after). How i made it So while coding this new interface I encountered some problems, first of all I’m gonna remind myself to never use databases in C, i really hate all that boilerplate :d. I decided to make the interface pretty specific on users and channels, if i ever need to add anything to my database it’s gonna be a pain but I dont plan to do that (outside of files but those will come later), I also decided to use arena’s to manage memory in the cached user and channel struct because it’s cleaner cleanup. For last I was going to make a check_credentials function for log in but i decided to do that later as I need to implement hashing and md5 and that will be another dependancy. I think the next feature I’m gonna work on is probably making a decent client, if I continue the server I’m gonna have a functioning server without a client to serve. Later guys!
Hi there guys! These are a lot of hours to log i know, but I swear I have a reason!! The main problem that took so long When I started to work on the client I came accross the problem of making a stable and working UI for it , and because I’m one of the cool kids developing in C (this is me -> 🤓) I obviously had to go for a TUI ( Text User Interface ) for street cred. Nerdy stuff about library searching and linking There i came accross the first real problem of the journey, wich library do I use (because no way im gonna code all of that myself)?? While searching i came accross a second problem: NOBODY USES A TUI , there are 0, and i mean 0 multi-platform libraries that work for linux and windows because of console shenanigans. I spent 2 hours + another 2 hours of changing the build pipe COMPLETELY (goodbye MSVC, hi there gcc and ninja) to find something. At last i went with NCurses for linux and PDCurses for windows, and the coolest thing is that they have ( almost ) the same exact API, so i just need to link them conditionally. Now out of the way with nerdy stuff and hi there cool TUI graphical stuff. Hi there graphical elements!! Now NCurses and PDCurses are mainly low level console libraries, in short they allow you to manipulate the console and cursor however you want (with some utility stuff). but we need a good old UI, so we need textboxes , menus , input fields , etc. while some of these exist for NCurses as addons, they dont for PDCurses, so i went with the bob the builder approach. I’m spending this much time writing the UI elements, for now the only thing I can show for my work is a textbox element that with a couple of lines of code can display text with: padding, colors and eventual attributes ( bold , italic , etc…). other than that i made some changes to utils and added a really cool split_lines function that makes splitting on newline in C pretty easy. Here’s a little preview of the textboxes! the code: init_pair(1, COLOR_RED, COLOR_BLUE); textbox_t* my_txt = create_textbox(stdscr, POINT(0,0), PAD(1, 1, 1, 1), str, A_BOLD, COLOR_PAIR(1)); if(!my_txt) { error("hell naw"); return 1; } point_t centered = get_centered_pos(stdscr, my_txt->h, my_txt->w); move_text_box(my_txt, centered); if(draw_textbox(my_txt) == -1) error("ERR"); getch(); destroy_textbox(my_txt); the result:
Hi! finally finished making TUI menus for my app. I had some difficulties with menu sizing and accounting for borders and style while making it but when I finally figured out that issue it was pretty straightforward to implement everything. What was interesting about all of this In this part of development I’m really understanding the difficulties of creating things we take for granted, like menus or just simple boxes of text, implementing menu scrolling and other types of utilities to make them usable was a pain for sure, but it was also interesting to see my changes in code affecting something as immediate as graphics (well TUI graphics but still graphics non the less). This is the first time i programmed something that could be seen and used and it’s honestly pretty sweet. The stars of the show All this time I spent working on this was to implement mainly three functions: create_menu_handle, draw_menu and menu_driver, those three functions regulate how the menu looks, feels, and takes input: menu_handle_t* create_menu_handle(WINDOW* parent, const char* menu_label, point_t pos, int max_height, int pad_y, int pad_x, int n_options, const char** option_labels, void (**opt_funcs)(void*), void **opt_args, chtype menu_attrs, chtype menu_color, chtype highlight_attrs, chtype highlight_color, int inside_shading, enum MenuBorderTypes border, int mouse_enabled); this is a beefy boy (look at all those parameters) but it’s pretty configurable and allows some real customization of your menu! It calculates available option space from the max height, and implements scrolling automatically int draw_menu(menu_handle_t* menu); Pretty much self explanatory, draws the menu and its borders. int menu_driver(menu_handle_t* menu, int input_type, MEVENT* mouse); Really cool function that given an input handles option selection/scrolling mechanics and highlighting of the selected option....
|
1793177640.29188
|
1793782440.29188
|
|
17570
|
Lil dog bot by @lilfox | Stardance
|
lilfox
|
0
|
39.47
|
0
|
[]
|
[{"post_id": 53341, "ts": "202 [{"post_id": 53341, "ts": "2026-08-23T20:34:53Z", "hours": 8.3714, "text": "I have added more to the inverse kinematics of my robot dog. Targeting the bottom left leg, I: Created the functions Calc_femur , Calc_tibia , and Calc_hip to individually calculate the designated angles for each part based on the variables x , y , and z . The code had already implemented the math from my Desmos demonstrations in the previous devlogs, but this allowed for a more organized system. Created a void move_to_position function that collected outputs from Calc_femur , Calc_tibia , and Calc_hip , using them to run the servos in turn. Used an array system to realize the pins of the servos (on the PCA9685) and their respective max and min PWM (based on calibration) What’s great is that the femur is working as intended! In comparing its position to the position on the Desmos graph, the calculations are accurate. On the other hand, I’m still struggling to properly calculate the angle for the servo moving the tibia. The issue is that I have to take into account the angle offset (the angle the servo is turning is not the same as the resulting angle between the femur and tibia) and the fact that the rotating femur influences the angle of the tibia. Another thing I have to fix is the discrepancy between the math for the hip servo and the output. Yet another issue to handle (TT-TT) But it’s a learning process that I’m happy to take part in :)"}, {"post_id": 36148, "ts": "2026-07-28T01:40:17Z", "hours": 3.5828, "text": "Things I have done: -Reduced friction in the linkages -Prevented interference with calibration I have been working on improving the design of the robot dog’s legs. So far I’ve only screwed the legs onto the servos, so that if I put my hands in the way, I could easily displace, or offset, the legs, and the legs would no longer be calibrated. Although I’ve figured out the PWM signals that calibrate the servos (for now), this seemed to be an issue for the foreseeable future. Terrain with rocks, for example, could easily mess up the angles of the legs and screw the inverse kinematics :P. Another issue I had was with the mechanical design was with the mechanism that connected the top servo with the linkage moving the tibia. There was nothing separating the plate from the top of the servo, so that the friction made it hard to move the plate independently. So! Back to Onshape I went, haha. I made sure to create a dedicated slot for the plate, and split the femur so that I could screw the face over the plate. This allows the plate to move freely side by side, but not up and down. Then I made a dedicated hole in the back of the femur for the servo horn, because the manufactured horns perfectly meshed with the servos…meaning a moving horn wouldn’t be offset by something like my hand. Now there was a way to connect the horn to the femur. There were also little things like: ->the femur’s rotation being blocked by the other servo, so I designed it to be slightly taller ->adjusting the heights of the connecting linkages as a result of changing the design Overall, the new design was used for two of the robot’s legs. For some reason the old design worked perfectly for the other two, but I’m not complaining! :)"}, {"post_id": 23810, "ts": "2026-07-06T23:40:21Z", "hours": 4.5664, "text": "Successfully transferred my inverse kinematics calculations from paper and Desmos to code (supposedly). All these days, and I hadn’t actually double checked my work or finished coding the IK. On one occasion, I had coded something of a framework, but later had it accidentally deleted when trying to connect the project to Github (because I’m an idiot :P). So today I focused on one of the robot’s legs––the bottom left––because the IK is different for each leg. By using Serial.print to compare the values in the code to the values in Desmos (based on an input x, y, z), I was able to fix the bugs in my equations, since the equations from Desmos slightly differed from the code. I also added a map function to convert the angles into PWM. It will be a while before I actually test this on the servos, because I need to find a way to recharge my batteries, but I’m excited to use this code! :)"}, {"post_id": 19684, "ts": "2026-07-01T02:21:07Z", "hours": 2.0481, "text": "Fixed the mess that was my board management (is that how you call it?) by finally adding screws and a stricter fit to the design. Previously I tried adding a spring-like hold on both sides of the…uh…electronics holders?…but they were too loose, easily slid, and simply fell off whenever I nudged the bot a little (left). For the 9v battery holder (with the nano and breadboard on top), I added screws to the sides (I had planned this when I started designing before the summer, couldn’t figure it out, and had useless screw holes at the sides for a while), whereas the buck converter and the pca9685 holder was given a tighter tolerance (given that there were no screw holes in the bot body designed by the past me). Now they no longer fall off when testing the legs, making my life a lot easier (right)! :D!!!"}, {"post_id": 16421, "ts": "2026-06-26T18:29:12Z", "hours": 5.6453, "text": "I finished the inverse kinematics for my robot dog! While I already calculated angles for the femur and tibia (upper/lower linkages of the leg) based on (x,y), I had yet to calculate the hip angle based on a given (z,y) yet. The hip angle allows for the dog to move its leg outwards and inwards from the body, like your shoulder enabling your arm to swing left and right. However, there was now the challenge of maintaining a right angle between linkages 1 and 2! Instead of using the law of cosines, I just used the standard soh/cah/toa for right triangles, and tested my calculations in Desmos (here: https://www.desmos.com/calculator/hifeumrqwd )."}, {"post_id": 14677, "ts": "2026-06-23T21:18:59Z", "hours": 11.8564, "text": "Finally figured out Platformio! Apparently I had to include upload_port = COM3 and upload_speed = 115200 in the Platformio.ini file, and then type the code I wanted to upload into main.cpp…oops (took a long time for me to figure that out…)! That was my fault. I made progress with the robot dog, though––I had to manually figure out which PWM signals signified 0-180 degrees for each servo. This process included unscrewing the servos, testing minimum and maximum PWM values, then screwing them back in. But I’m very happy with the result, and I can start implementing the inverse kinematics!"}, {"post_id": 10378, "ts": "2026-06-17T01:49:51Z", "hours": 2.8325, "text": "Today I tried using Platformio for the first time, but there were a lot of pit stops along the way. Couldn’t understand why the port wasn’t connecting, and the servo suddenly stopped working! Still trying to fix the issue with the port…but figured out that the motor thought now was a good time for a disconnected gear (ᵕ—ᴗ—) On the bright side, made progress with Desmos and step trajectory interpolation through a parabola and some handy math equations (here’s the link! :D https://www.desmos.com/calculator/vxmkw9d4zw ). Frustrating day but had fun trying new things! :)"}, {"post_id": 9659, "ts": "2026-06-16T02:09:51Z", "hours": 0.5664, "text": "Calculated inverse kinematics for my robot dog. I used Desmos to double-check my calculations, but it was hard to understand the trigonometry and how it worked. After an ungodly amount of time spent watching Khan Academy videos and studying other graphs, I finally simulated the robot dog’s limb movement in Desmos (Here’s the link if you’re interested :D -> https://www.desmos.com/calculator/ey6wzovfjc )! Days spent on a graphing calculator and 33 minutes coding XD"}]...
|
Title: Lil dog bot by @lilfox | Stardance
Devlogs Title: Lil dog bot by @lilfox | Stardance
Devlogs:
Calculated inverse kinematics for my robot dog. I used Desmos to double-check my calculations, but it was hard to understand the trigonometry and how it worked. After an ungodly amount of time spent watching Khan Academy videos and studying other graphs, I finally simulated the robot dog’s limb movement in Desmos (Here’s the link if you’re interested :D -> https://www.desmos.com/calculator/ey6wzovfjc )! Days spent on a graphing calculator and 33 minutes coding XD
Today I tried using Platformio for the first time, but there were a lot of pit stops along the way. Couldn’t understand why the port wasn’t connecting, and the servo suddenly stopped working! Still trying to fix the issue with the port…but figured out that the motor thought now was a good time for a disconnected gear (ᵕ—ᴗ—) On the bright side, made progress with Desmos and step trajectory interpolation through a parabola and some handy math equations (here’s the link! :D https://www.desmos.com/calculator/vxmkw9d4zw ). Frustrating day but had fun trying new things! :)
Finally figured out Platformio! Apparently I had to include upload_port = COM3 and upload_speed = 115200 in the Platformio.ini file, and then type the code I wanted to upload into main.cpp…oops (took a long time for me to figure that out…)! That was my fault. I made progress with the robot dog, though––I had to manually figure out which PWM signals signified 0-180 degrees for each servo. This process included unscrewing the servos, testing minimum and maximum PWM values, then screwing them back in. But I’m very happy with the result, and I can start implementing the inverse kinematics!
I finished the inverse kinematics for my robot dog! While I already calculated angles for the femur and tibia (upper/lower linkages of the leg) based on (x,y), I had yet to calculate the hip angle based on a given (z,y) yet. The hip angle allows for the dog to move its leg outwards and inwards from the body, like your shoulder enabling your arm to swing left and right. However, there was now the challenge of maintaining a right angle between linkages 1 and 2! Instead of using the law of cosines, I just used the standard soh/cah/toa for right triangles, and tested my calculations in Desmos (here: https://www.desmos.com/calculator/hifeumrqwd ).
Fixed the mess that was my board management (is that how you call it?) by finally adding screws and a stricter fit to the design. Previously I tried adding a spring-like hold on both sides of the…uh…electronics holders?…but they were too loose, easily slid, and simply fell off whenever I nudged the bot a little (left). For the 9v battery holder (with the nano and breadboard on top), I added screws to the sides (I had planned this when I started designing before the summer, couldn’t figure it out, and had useless screw holes at the sides for a while), whereas the buck converter and the pca9685 holder was given a tighter tolerance (given that there were no screw holes in the bot body designed by the past me). Now they no longer fall off when testing the legs, making my life a lot easier (right)! :D!!!
Successfully transferred my inverse kinematics calculations from paper and Desmos to code (supposedly). All these days, and I hadn’t actually double checked my work or finished coding the IK. On one occasion, I had coded something of a framework, but later had it accidentally deleted when trying to connect the project to Github (because I’m an idiot :P). So today I focused on one of the robot’s legs––the bottom left––because the IK is different for each leg. By using Serial.print to compare the values in the code to the values in Desmos (based on an input x, y, z), I was able to fix the bugs in my equations, since the equations from Desmos slightly differed from the code. I also added a map function to convert the angles into PWM. It will be a while before I actually test this on the servos, because I need to find a way to recharge my batteries, but I’m excited to use this code! :)
Things I have done: -Reduced friction in the linkages -Prevented interference with calibration I have been working on improving the design of the robot dog’s legs. So far I’ve only screwed the legs onto the servos, so that if I put my hands in the way, I could easily displace, or offset, the legs, and the legs would no longer be calibrated. Although I’ve figured out the PWM signals that calibrate the servos (for now), this seemed to be an issue for the foreseeable future. Terrain with rocks, for example, could easily mess up the angles of the legs and screw the inverse kinematics :P. Another issue I had was with the mechanical design was with the mechanism that connected the top servo with the linkage moving the tibia. There was nothing separating the plate from the top of the servo, so that the friction made it hard to move the plate independently. So! Back to Onshape I went, haha. I made sure to create a dedicated slot for the plate, and split the femur so that I could screw the face over the plate. This allows the plate to move freely side by side, but not up and down. Then I made a dedicated hole in the back of the femur for the servo horn, because the manufactured horns perfectly meshed with the servos…meaning a moving horn wouldn’t be offset by something like my hand. Now there was a way to connect the horn to the femur. There were also little things like: ->the femur’s rotation being blocked by the other servo, so I designed it to be slightly taller ->adjusting the heights of the connecting linkages as a result of changing the design Overall, the new design was used for two of the robot’s legs. For some reason the old design worked perfectly for the other two, but I’m not complaining! :)
I have added more to the inverse kinematics of my robot dog. Targeting the bottom left leg, I: Created the functions Calc_femur , Calc_tibia , and Calc_hip to individually calculate the designated angles for each part based on the variables x , y , and z . The code had already implemented the math from my Desmos demonstrations in the previous devlogs, but this allowed for a more organized system. Created a void move_to_position function that collected outputs from Calc_femur , Calc_tibia , and Calc_hip , using them to run the servos in turn. Used an array system to realize the pins of the servos (on the PCA9685) and their respective max and min PWM (based on calibration) What’s great is that the femur is working as intended! In comparing its position to the position on the Desmos graph, the calculations are accurate. On the other hand, I’m still struggling to properly calculate the angle for the servo moving the tibia. The issue is that I have to take into account the angle offset (the angle the servo is turning is not the same as the resulting angle between the femur and tibia) and the fact that the rotating femur influences the angle of the tibia. Another thing I have to fix is the discrepancy between the math for the hip servo and the output. Yet another issue to handle (TT-TT) But it’s a learning process that I’m happy to take part in :)...
|
1792568886.2375908
|
1793173686.2375908
|
|
42698
|
clearfx by @satvikhardat | Stardance
|
satvikhardat
|
1
|
39.47
|
563
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-06T12:40:30Z", "hours": 37.0, "multiplier": 18.75, "payout": 563, "blessing": "neutral", "text": "A small CLI + website where people can upload TUI designs, and anyone can make those TUI animations show up whenever they type a specific command in their terminal like “clear” or “ls” while also doing the job of that command!!! Package Manager Install the core CLI globally via pip. pip install clearfx Shell Hooks Initialize shell integrations to wrap the clear command automatically. clearfx setup-shell Quick Wrap Want to animate a specific command? Wrap it directly (e.g., wrap ls with the Aurora Fold animation). clearfx wrap ls --anim aurora-fold Reload Shell Source your configuration file to apply the newly added shell hooks. source ~/.bashrc # or ~/.zshrc if you wanna stop the animation you can run clearfx reset", "repo": "https://github.com/random-unknown-username/clearfx/", "demo": "https://clearfx-zeta.vercel.app/"}]...
|
[{"post_id": 41926, "ts": "202 [{"post_id": 41926, "ts": "2026-08-06T13:29:40Z", "hours": 2.4739, "text": "Fixed vercel hosting hell, the whole thing js didnt want to work for soon long, small fix not much, not writing a huge devlog, because the ships already done, and probably wont be working on this again moving forward"}, {"post_id": 41330, "ts": "2026-08-05T14:06:46Z", "hours": 12.5803, "text": "devlog 3: debugging hell and nuking the UI bruh the last 10 hours were an absolute nightmare. the web UI preview was completely broken. you’d hit play, and it would just flash and disappear. i was losing my mind trying to figure out why the terminal was instantly clearing itself. turns out, the core engine’s TerminalSession was doing its job too well. when the animation finished, it sent the ANSI sequence to exit the alternate screen buffer, which is exactly what you want in a real terminal. but in xterm.js , exiting the alternate screen just leaves you with a blank black box! had to wire up a --keep-screen flag all the way through the CLI architecture to intercept that sequence when running inside the web preview. # src/clearfx/engine/terminal.py def __exit__ ( self , exc_type , exc_val , exc_tb ): if not self . keep_screen : # restore alternate screen self . write ( b \" \\033 [?1049l \" ) then there was the resizing bug. xterm.js was fitting to the container, but the PTY backend was hardcoded to 80x24. so it looked super misaligned. had to intercept term.cols and term.rows in React and pass them through the WebSocket JSON payload. wsRef . current . send ( JSON . stringify ({ type : ' run ' , code , width : termRef . current . cols , height : termRef . current . rows })); once the bugs were dead, i looked at the web UI and realized it looked like generic SaaS slop. huge glowing pills, purple gradients everywhere… it was dog shit. so i nuked index.css entirely. built a custom design system inspired by factory.ai. pure dark operations console vibes. strictly monochrome, 8px spacing grid, geist monospace fonts for technical labels, and tiny orange/green signal dots instead of giant colored backgrounds. /* replaced the generic slop with this */ :root { --bg-canvas : #101010 ; --bg-surface : #1D1A18 ; --border-hairline : #34312F ; --signal-orange : #EE6018 ; --font-mono : 'Geist Mono' , monospace ; } the hero section now has a literal UI-in-UI terminal preview embedded in a custom .product-frame . the whole app feels like a precision engineering tool now, not a marketing page. we finally shipped a safe, strictly declarative, gorgeous terminal engine."}, {"post_id": 39256, "ts": "2026-08-02T03:27:42Z", "hours": 10.2494, "text": "devlog 2: nuking the backend and building a safe package format so after the engine was running, i needed a marketplace. initially i spun up a whole fastAPI backend, but maintaining that sounded like a nightmare. so i ripped it all out and moved the entire catalog to firebase. but here’s the catch: if i’m letting randos upload python animations to a public marketplace, they could literally just inject os.system(\"rm -rf /\") inside their design.py and wipe everyone’s machines when they run clear . security was a massive issue. to fix this, i built a compiler that parses the python animation locally, extracts all the elements and keyframes, and bakes them into a purely declarative design.json . def pack ( self , directory : str | Path ) -> Path : # we literally run their code in an isolated builder # and dump the resulting state. no logic is saved. design_data = { \" elements \" : builder . _elements , \" keyframes \" : builder . _keyframes , \" config \" : builder . _config } with zipfile . ZipFile ( out_path , ' w ' ) as zf : zf . writestr ( \" manifest.toml \" , toml_content ) zf . writestr ( \" design.json \" , json . dumps ( design_data )) this means .clearfx packages are just dumb JSON files. the CLI’s DesignInterpreter reads the JSON and feeds it back into the engine safely. zero arbitrary code execution. then i had to build the web studio so people could preview their animations in the browser. getting a live terminal running in react is a pain. i used xterm.js on the frontend, and built a websocket server in python using pty.fork() to spin up a fake terminal session. @app.websocket ( \" /ws/studio \" ) async def websocket_studio ( websocket : WebSocket , width : int = 80 , height : int = 24 ): pid , fd = pty . fork () if pid == 0 : # child process - sets up the fake terminal size winsize = struct . pack ( \" HHHH \" , height , width , 0 , 0 ) fcntl . ioctl ( sys . stdout . fileno (), termios . TIOCSWINSZ , winsize ) os . execvpe ( \" python \" , [ \" python \" , \" -m \" , \" clearfx.cli.main \" , \" preview \" , temp_dir ], env ) so when you click “execute” in the web UI, it literally sends the python code over websockets, saves it to a temp dir, forks a new PTY, runs the engine natively, and pipes the raw ANSI output back to xterm.js . it’s basically magic. but the resize bugs were driving me insane."}, {"post_id": 38827, "ts": "2026-08-01T12:02:35Z", "hours": 14.2386, "text": "devlog 1: building a terminal engine from scratch because clear is boring bro i got so tired of just typing clear and seeing the terminal instantly snap to empty. it’s so boring. so i decided to build a full double-buffered animation engine in python just to replace the clear command. the idea was to make something that hooks into your .bashrc or .zshrc and intercepts clear , plays a sick terminal animation, and then actually clears the screen. first thing i realized: you can’t just print strings to the terminal and expect it to look like a smooth 60fps animation. the flickering is insane if you do that. so i had to build a double-buffered FrameBuffer system from scratch. class FrameBuffer : def diff ( self ) -> list [ tuple [ int , int , Cell ]]: \"\"\" returns only the cells that changed since last frame. \"\"\" changes = [] for i in range ( len ( self . front . cells )): if self . front . cells [ i ] != self . back . cells [ i ]: x = i % self . width y = i // self . width changes . append (( x , y , self . front . cells [ i ])) return changes this is the secret sauce. instead of redrawing 80x24 characters every frame, we only send ANSI escape codes for the exact pixels (cells) that changed. then i built a DiffRenderer that takes those changes and constructs the smallest possible ANSI sequence to move the cursor and update the colors. # snippet from renderer.py for x , y , cell in changes : # only move cursor if we aren't already there if not ( y == cy and x == cx ): out . append ( f \" \\033 [ { y + 1 } ; { x + 1 } H \" ) # write the actual character with truecolor out . append ( f \" \\033 [38;2; { cell . fg [ 0 ] } ; { cell . fg [ 1 ] } ; { cell . fg [ 2 ] } m { cell . char } \" ) after getting the engine running, i needed a way to safely inject it into the shell without destroying people’s configs. built a ShellIntegration class that detects zsh/bash/fish, backs up the config, and safely appends a wrapper. # >>> clearfx managed block >>> if command -v clearfx &>/dev/null ; then clear () { command clearfx play --clear-after } fi # <<< clearfx managed block <<< i spent like 10 hours just getting the core engine to hit 60fps consistently. python is slow, so minimizing string concatenations and using sys.stdout.buffer.write instead of print() was mandatory. next up was actually building out the animation formats and getting a marketplace running so people could share these."}]...
|
Title: clearfx by @satvikhardat | Stardance
Devlo Title: clearfx by @satvikhardat | Stardance
Devlogs:
devlog 1: building a terminal engine from scratch because clear is boring bro i got so tired of just typing clear and seeing the terminal instantly snap to empty. it’s so boring. so i decided to build a full double-buffered animation engine in python just to replace the clear command. the idea was to make something that hooks into your .bashrc or .zshrc and intercepts clear , plays a sick terminal animation, and then actually clears the screen. first thing i realized: you can’t just print strings to the terminal and expect it to look like a smooth 60fps animation. the flickering is insane if you do that. so i had to build a double-buffered FrameBuffer system from scratch. class FrameBuffer : def diff ( self ) -> list [ tuple [ int , int , Cell ]]: """ returns only the cells that changed since last frame. """ changes = [] for i in range ( len ( self . front . cells )): if self . front . cells [ i ] != self . back . cells [ i ]: x = i % self . width y = i // self . width changes . append (( x , y , self . front . cells [ i ])) return changes this is the secret sauce. instead of redrawing 80x24 characters every frame, we only send ANSI escape codes for the exact pixels (cells) that changed. then i built a DiffRenderer that takes those changes and constructs the smallest possible ANSI sequence to move the cursor and update the colors. # snippet from renderer.py for x , y , cell in changes : # only move cursor if we aren't already there if not ( y == cy and x == cx ): out . append ( f " \033 [ { y + 1 } ; { x + 1 } H " ) # write the actual character with truecolor out . append ( f " \033 [38;2; { cell . fg [ 0 ] } ; { cell . fg [ 1 ] } ; { cell . fg [ 2 ] } m { cell . char } " ) after getting the engine running, i needed a way to safely inject it into the shell without destroying people’s configs. built a ShellIntegration class that detects zsh/bash/fish, backs up the config, and safely appends a wrapper. # >>> clearfx managed block >>> if command -v clearfx &>/dev/null ; then clear () { command clearfx play --clear-after } fi # <<< clearfx managed block <<< i spent like 10 hours just getting the core engine to hit 60fps consistently. python is slow, so minimizing string concatenations and using sys.stdout.buffer.write instead of print() was mandatory. next up was actually building out the animation formats and getting a marketplace running so people could share these.
devlog 2: nuking the backend and building a safe package format so after the engine was running, i needed a marketplace. initially i spun up a whole fastAPI backend, but maintaining that sounded like a nightmare. so i ripped it all out and moved the entire catalog to firebase. but here’s the catch: if i’m letting randos upload python animations to a public marketplace, they could literally just inject os.system("rm -rf /") inside their design.py and wipe everyone’s machines when they run clear . security was a massive issue. to fix this, i built a compiler that parses the python animation locally, extracts all the elements and keyframes, and bakes them into a purely declarative design.json . def pack ( self , directory : str | Path ) -> Path : # we literally run their code in an isolated builder # and dump the resulting state. no logic is saved. design_data = { " elements " : builder . _elements , " keyframes " : builder . _keyframes , " config " : builder . _config } with zipfile . ZipFile ( out_path , ' w ' ) as zf : zf . writestr ( " manifest.toml " , toml_content ) zf . writestr ( " design.json " , json . dumps ( design_data )) this means .clearfx packages are just dumb JSON files. the CLI’s DesignInterpreter reads the JSON and feeds it back into the engine safely. zero arbitrary code execution. then i had to build the web studio so people could preview their animations in the browser. getting a live terminal running in react is a pain. i used xterm.js on the frontend, and built a websocket server in python using pty.fork() to spin up a fake terminal session. @app.websocket ( " /ws/studio " ) async def websocket_studio ( websocket : WebSocket , width : int = 80 , height : int = 24 ): pid , fd = pty . fork () if pid == 0 : # child process - sets up the fake terminal size winsize = struct . pack ( " HHHH " , height , width , 0 , 0 ) fcntl . ioctl ( sys . stdout . fileno (), termios . TIOCSWINSZ , winsize ) os . execvpe ( " python " , [ " python " , " -m " , " clearfx.cli.main " , " preview " , temp_dir ], env ) so when you click “execute” in the web UI, it literally sends the python code over websockets, saves it to a temp dir, forks a new PTY, runs the engine natively, and pipes the raw ANSI output back to xterm.js . it’s basically magic. but the resize bugs were driving me insane.
devlog 3: debugging hell and nuking the UI bruh the last 10 hours were an absolute nightmare. the web UI preview was completely broken. you’d hit play, and it would just flash and disappear. i was losing my mind trying to figure out why the terminal was instantly clearing itself. turns out, the core engine’s TerminalSession was doing its job too well. when the animation finished, it sent the ANSI sequence to exit the alternate screen buffer, which is exactly what you want in a real terminal. but in xterm.js , exiting the alternate screen just leaves you with a blank black box! had to wire up a --keep-screen flag all the way through the CLI architecture to intercept that sequence when running inside the web preview. # src/clearfx/engine/terminal.py def __exit__ ( self , exc_type , exc_val , exc_tb ): if not self . keep_screen : # restore alternate screen self . write ( b " \033 [?1049l " ) then there was the resizing bug. xterm.js was fitting to the container, but the PTY backend was hardcoded to 80x24. so it looked super misaligned. had to intercept term.cols and term.rows in React and pass them through the WebSocket JSON payload. wsRef . current . send ( JSON . stringify ({ type : ' run ' , code , width : termRef . current . cols , height : termRef . current . rows })); once the bugs were dead, i looked at the web UI and realized it looked like generic SaaS slop. huge glowing pills, purple gradients everywhere… it was dog shit. so i nuked index.css entirely. built a custom design system inspired by factory.ai. pure dark operations console vibes. strictly monochrome, 8px spacing grid, geist monospace fonts for technical labels, and tiny orange/green signal dots instead of giant colored backgrounds. /* replaced the generic slop with this */ :root { --bg-canvas : #101010 ; --bg-surface : #1D1A18 ; --border-hairline : #34312F ; --signal-orange : #EE6018 ; --font-mono : 'Geist Mono' , monospace ; } the hero section now has a literal UI-in-UI terminal preview embedded in a custom .product-frame . the whole app feels like a precision engineering tool now, not a marketing page. we finally shipped a safe, strictly declarative, gorgeous terminal engine.
Fixed vercel hosting hell, the whole thing js didnt want to work for soon long, small fix not much, not writing a huge devlog, because the ships already done, and probably wont be working on this again moving forward
Ships:
A small CLI + website where people can upload TUI designs, and anyone can make those TUI animations show up whenever they type a specific command in their terminal like “clear” or “ls” while also doing the job of that command!!! Package Manager Install the core CLI globally via pip. pip install clearfx Shell Hooks Initialize shell integrations to wrap the clear command automatically. clearfx setup-shell Quick Wrap Want to animate a specific command? Wrap it directly (e.g., wrap ls with the Aurora Fold animation). clearfx wrap ls --anim aurora-fold Reload Shell Source your configuration file to apply the newly added shell hooks. source ~/.bashrc # or ~/.zshrc if you wanna stop the animation you can run clearfx reset...
|
1792878689.518756
|
1793742689.518756
|
|
64095
|
Openblock C++ by @Rohit_Biswas | Stardance
|
Rohit_Biswas
|
0
|
39.34
|
0
|
[]
|
[{"post_id": 75940, "ts": "202 [{"post_id": 75940, "ts": "2026-10-01T17:42:23Z", "hours": 9.2058, "text": "This time i almost 3x optimized block generation system"}, {"post_id": 73926, "ts": "2026-09-26T10:47:12Z", "hours": 0.7142, "text": "Day 7 My project had become messy,buggy and poorly optimized but i did learned a lot. I had new ideas for improving performance and adding some really cool features. so i decided to start from scratch again. for the next 7 days, iam going to try building minecraft clone again better,cleaner and more optimized this time.if i can’t finish it, i’ll delete the project completely."}, {"post_id": 73634, "ts": "2026-09-25T15:30:37Z", "hours": 4.4053, "text": "Day 6 I made chunk loading system with simple multithreading."}, {"post_id": 73029, "ts": "2026-09-24T07:36:49Z", "hours": 3.3083, "text": "Day 5 today,i added textures and optimized block face generating system."}, {"post_id": 72638, "ts": "2026-09-23T12:32:06Z", "hours": 3.1672, "text": "Day 4 today, i work on world cpp/h and creating multiple chunk in heap"}, {"post_id": 72275, "ts": "2026-09-22T15:48:33Z", "hours": 5.7428, "text": "Day 3 finally i made a chunk of blocks! oh my gosh i faced so many memory allocation problem when i was making it"}, {"post_id": 71687, "ts": "2026-09-21T09:51:06Z", "hours": 2.1708, "text": "Day 2 I made a block! today, i made quad rendering system and vertex color system (lighting)"}, {"post_id": 71207, "ts": "2026-09-20T13:24:07Z", "hours": 10.625, "text": "Day 1 I learned basics of C++ and i made a triangle!"}]...
|
Title: Openblock C++ by @Rohit_Biswas | Stardance
Title: Openblock C++ by @Rohit_Biswas | Stardance
Devlogs:
Day 1 I learned basics of C++ and i made a triangle!
Day 2 I made a block! today, i made quad rendering system and vertex color system (lighting)
Day 3 finally i made a chunk of blocks! oh my gosh i faced so many memory allocation problem when i was making it
Day 4 today, i work on world cpp/h and creating multiple chunk in heap
Day 5 today,i added textures and optimized block face generating system.
Day 6 I made chunk loading system with simple multithreading.
Day 7 My project had become messy,buggy and poorly optimized but i did learned a lot. I had new ideas for improving performance and adding some really cool features. so i decided to start from scratch again. for the next 7 days, iam going to try building minecraft clone again better,cleaner and more optimized this time.if i can’t finish it, i’ll delete the project completely.
This time i almost 3x optimized block generation system...
|
1793058624.1457005
|
1793663424.1457005
|
|
68239
|
Java Path Tracer by @Robodog81 | Stardance
|
Robodog81
|
1
|
39.33
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-17T03:56:37Z", "hours": 18.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is an early beta of a path tracer that I am working on. I belive there are still a few problems (fuzzy metals not quite right) but overall it still looks ok.", "repo": "https://github.com/Robodog81/Path-Tracer", "demo": "https://github.com/Robodog81/Path-Tracer/releases/tag/Beta"}]...
|
[{"post_id": 82913, "ts": "202 [{"post_id": 82913, "ts": "2026-10-26T06:47:37Z", "hours": 17.1086, "text": "HUGE CHANGES I have been on holiday for the weekend and have not been able to post a devlog as I was offline and my time has gone above 10 hours. Does anyone know how I could still get stardust for the extra time? Anyway, it has been a bit since my last devlog and I can assure you that I have added many new features targeted at making the system easier to use. Almost everything is changeable without even looking at the code. Also, I’m not sure if they were in the last devlog but I added a time rendered metric in the top left to give more of an idea of performance in my images. The Editor UI I poured many hours into making a (hopefully) intuitive system to edit the scene to be rendered. You can now select any sphere with the arrow keys and move it with WASD. You can also open a menu to change it’s properties like radius, colour, and material. The Editor Preview Render I wanted there to be a real time preview of the scene whyle you are editing it. Due to the accumulative nature of my Path Tracer, running it in real time would look incredibly noisy and fickery. I opted to try and make a totally new rendering system that can approximate the result in a single frame. At the moment this works great for everything except fuzzie metals - they just show as smooth. Problems & Future Changes One of the things that i find annoying about the preview render is that there is some fairly obvious screen tearing on parts of moving spheres. This doesn’t affect the final render but is just a bit annoying When going to render the scene the first frame may contain some black lines that remain as ghosts for the a while until enough frames have been rendered over them and the colours average out. There is currently no way to change the resolution without editing the source code. It defaults to 480 x 270. A quarter of the standard 1920 x 1080. The sphere editing menu can jump around when choosing changing the selected sphere. I would like to add an option to hide or show the debug performance metrics. Extra Info Not much here :) In the images you can see both a editor preview render with all of the menus open and a quick render of the scene to compare to the preview. In the editor the big sphere that is tinted white is the one that is selected, the white tint pulses on and off."}, {"post_id": 81078, "ts": "2026-10-19T19:53:24Z", "hours": 1.4683, "text": "Tonemap Update and Code Reformatting I haven’t done much in the way of large changes since last devlog but I have been reformatting much of my code to make it easier to read and use. The code should now look a lot cleaner. I also fixed the tonemapper as it was over over exposing the brighter spheres. I also added a new tone map option that seems to be significantly better at representing bright colours than my prior two. The first one is purely clamping the HDR value to sRGB. As you may guess this leads to bright lights of most colours appearing white. I did have an alternative Reinhard tonemapper (v / (v + 1)) but that made everything look gray and desaturated as it applied the map to every colour channel individually causing all colours to look similar. The fix was to run the tone map with the brightest colour of the channel. This new screenshot is done with the new tonemapper and is a great example of the new glass refraction. It is a bit dark sorry. This took >30min to render."}, {"post_id": 80880, "ts": "2026-10-19T04:40:56Z", "hours": 2.75, "text": "Java Path-Tracer A simple Java Path-tracer for rendering cool scenes written in a single java class. The main thing I have spent my time on is adding in a glass material. It has proved to be more of a pain than I originally thought. The book series Ray Tracing in One Weekend has once again proved very useful. Anyway, whyle developing it I would repetitively get a material that looks somewhat like glass (or some weird blob) or something that was overly noisy. at one point my glass started emitting blue and yellow light (not much of a clue why that happened. After a good few hours of hassle I finally got it refracting properly. The rest of the features (total internal reflection & reflection) were fairly straightforward after that. Even caustics (the focused light under a glass sphere) work really well. I also found that my metal bounce rays for fuzzie metals weren’t being normalised properly causing weird ring artefacts. That was an easy fix luckily. I think this project is coming along well. Here is a new Hi-Res test scene that I let my laptop suffer on for quite a while. for reference this is an 8th gen i5 laptop and this scene took around 15 minutes to render. I did have a fair bit of other stuff open though. Enjoy. :)"}, {"post_id": 80270, "ts": "2026-10-17T01:58:49Z", "hours": 8.0306, "text": "Over the past few days i have made a few improvements. I have focused a bit more on the performance side of things and implemented (fairly bad) CPU multi threading as it was running single threaded before. This resulted in a 2-3x performance increase even though I went from 1 to 8 threads. I believe this is due to my bad code and the fact I create 8 new Thread objects every frame. Other than performance optimisations I also expanded the functionality of the renderer. I added Lambertian scattering for more accurate matte surfaces. I gave metal a fuzziness propitiate that allows for more surface options. I also started to implement glass (which is an absolute pain) but it is still broken at the moment (see screenshots) :) I also did some general housekeeping and cleaned up the code making it easier to read. The code is now visible on github for anyone who is interested."}, {"post_id": 78982, "ts": "2026-10-12T07:57:37Z", "hours": 10.1758, "text": "This is my shot at making a (somewhat optimised) Path Tracer in Java. I have previously made one in scratch and am trying to make a better foundation to work off of so I can add more advanced features. I had already started making the ray traversal code but forgot to log it; my current time is a little on the low side. I primarily work of the online books ‘Ray Tracing In One Weekend’ as they contain most of the info I need. At the moment only spheres are supported and only can be matte or a light. Even now I have been able to make some cool renders of random spheres. I will soon add more surfaces (mirror, glass, etc), anti aliasing, and multi thread support for better performance. If I can I will add support for polygons and thus 3d models. I hope this is as cool to you as it is to me. Thanks for reading. :)"}]...
|
Title: Java Path Tracer by @Robodog81 | Stardance
Title: Java Path Tracer by @Robodog81 | Stardance
Devlogs:
This is my shot at making a (somewhat optimised) Path Tracer in Java. I have previously made one in scratch and am trying to make a better foundation to work off of so I can add more advanced features. I had already started making the ray traversal code but forgot to log it; my current time is a little on the low side. I primarily work of the online books ‘Ray Tracing In One Weekend’ as they contain most of the info I need. At the moment only spheres are supported and only can be matte or a light. Even now I have been able to make some cool renders of random spheres. I will soon add more surfaces (mirror, glass, etc), anti aliasing, and multi thread support for better performance. If I can I will add support for polygons and thus 3d models. I hope this is as cool to you as it is to me. Thanks for reading. :)
Over the past few days i have made a few improvements. I have focused a bit more on the performance side of things and implemented (fairly bad) CPU multi threading as it was running single threaded before. This resulted in a 2-3x performance increase even though I went from 1 to 8 threads. I believe this is due to my bad code and the fact I create 8 new Thread objects every frame. Other than performance optimisations I also expanded the functionality of the renderer. I added Lambertian scattering for more accurate matte surfaces. I gave metal a fuzziness propitiate that allows for more surface options. I also started to implement glass (which is an absolute pain) but it is still broken at the moment (see screenshots) :) I also did some general housekeeping and cleaned up the code making it easier to read. The code is now visible on github for anyone who is interested.
Java Path-Tracer A simple Java Path-tracer for rendering cool scenes written in a single java class. The main thing I have spent my time on is adding in a glass material. It has proved to be more of a pain than I originally thought. The book series Ray Tracing in One Weekend has once again proved very useful. Anyway, whyle developing it I would repetitively get a material that looks somewhat like glass (or some weird blob) or something that was overly noisy. at one point my glass started emitting blue and yellow light (not much of a clue why that happened. After a good few hours of hassle I finally got it refracting properly. The rest of the features (total internal reflection & reflection) were fairly straightforward after that. Even caustics (the focused light under a glass sphere) work really well. I also found that my metal bounce rays for fuzzie metals weren’t being normalised properly causing weird ring artefacts. That was an easy fix luckily. I think this project is coming along well. Here is a new Hi-Res test scene that I let my laptop suffer on for quite a while. for reference this is an 8th gen i5 laptop and this scene took around 15 minutes to render. I did have a fair bit of other stuff open though. Enjoy. :)
Tonemap Update and Code Reformatting I haven’t done much in the way of large changes since last devlog but I have been reformatting much of my code to make it easier to read and use. The code should now look a lot cleaner. I also fixed the tonemapper as it was over over exposing the brighter spheres. I also added a new tone map option that seems to be significantly better at representing bright colours than my prior two. The first one is purely clamping the HDR value to sRGB. As you may guess this leads to bright lights of most colours appearing white. I did have an alternative Reinhard tonemapper (v / (v + 1)) but that made everything look gray and desaturated as it applied the map to every colour channel individually causing all colours to look similar. The fix was to run the tone map with the brightest colour of the channel. This new screenshot is done with the new tonemapper and is a great example of the new glass refraction. It is a bit dark sorry. This took >30min to render.
HUGE CHANGES I have been on holiday for the weekend and have not been able to post a devlog as I was offline and my time has gone above 10 hours. Does anyone know how I could still get stardust for the extra time? Anyway, it has been a bit since my last devlog and I can assure you that I have added many new features targeted at making the system easier to use. Almost everything is changeable without even looking at the code. Also, I’m not sure if they were in the last devlog but I added a time rendered metric in the top left to give more of an idea of performance in my images. The Editor UI I poured many hours into making a (hopefully) intuitive system to edit the scene to be rendered. You can now select any sphere with the arrow keys and move it with WASD. You can also open a menu to change it’s properties like radius, colour, and material. The Editor Preview Render I wanted there to be a real time preview of the scene whyle you are editing it. Due to the accumulative nature of my Path Tracer, running it in real time would look incredibly noisy and fickery. I opted to try and make a totally new rendering system that can approximate the result in a single frame. At the moment this works great for everything except fuzzie metals - they just show as smooth. Problems & Future Changes One of the things that i find annoying about the preview render is that there is some fairly obvious screen tearing on parts of moving spheres. This doesn’t affect the final render but is just a bit annoying When going to render the scene the first frame may contain some black lines that remain as ghosts for the a while until enough frames have been rendered over them and the colours average out. There is currently no way to change the resolution without editing the source code. It defaults to 480 x 270. A quarter of the standard 1920 x 1080. The sphere editing menu can jump around when choosing changing the selected sphere. I would like to add an option to hide or show the debug performance metrics. Extra Info Not much here :) In the images you can see both a editor preview render with all of the menus open and a quick render of the scene to compare to the preview. In the editor the big sphere that is tinted white is the one that is selected, the white tint pulses on and off.
Ships:
This is an early beta of a path tracer that I am working on. I belive there are still a few problems (fuzzy metals not quite right) but overall it still looks ok....
|
1793155850.551105
|
1793242250.551105
|
|
7854
|
CometOS by @Aradhana | Stardance
|
Aradhana
|
1
|
39.23
|
48
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-22T11:27:56Z", "hours": 31.0, "multiplier": 1.71, "payout": 48, "blessing": "neutral", "text": "I built a WebOS that was designed to explore a character - the Sorceress Comet, a student at the Arx Nubium - and her fictional world of Alarica. As people use it, they find out more about Comet’s world, thoughts and family. It has a notebook app (where you can write your thoughts), a family tree app (to see a bit more of what Comet’s life is like) and comes with added functionality for the users - a date and time display, and battery meter. Now, the project is finally SHIPPED!", "repo": "https://github.com/dragonloversod051-max/CometOS", "demo": "https://dragonloversod051-max.github.io/CometOS/"}]...
|
[{"post_id": 79292, "ts": "202 [{"post_id": 79292, "ts": "2026-10-13T11:03:42Z", "hours": 8.2306, "text": "Devlog #8 Ok, so this is the FIRST devlog after the ship. Not really happy about how the ship went but oh well. Anyway, so, I added stuff: A Settings App Upgrades to the UI Worked on a sort of dictionary for all the new stuff that I’m introducing (after all, it is CometOS) The Settings App: Ok, so one of the major themes in the feedback I got was there needed to be more apps (since its an OS). So, I added a settings app, as just a basic, customization app. So, you can change the background image, and there’s a bit of design choices as well. I kept it so you need to scroll down to see all the images (some people won’t agree with this, but personally, I really like it. The scrolling feels more interactive and is required for a window size that looks really, really good). Also, the borders of the buttons turn blue when selected, and there obviously also a shadow indication that its a button when you hover over it. UI changes: So this was actually pretty small but looked really cool. I’ve seen on some sites there are just these little elements that blur the background behind them. While I was tinkering with css for the button shading I realized there was a style of filter: blur() . From there I found out about backdrop-filter: blur() and used that in the CometOS welcome window and the top and bottom bars. The dictionary app (name needs workshopping) So this is basically just because CometOS is about a fictional character in a fantasy world, so there needed to be an app that dealt with some words and terms used in other partts of the website (specifically the family tree). I felt there needed to be something to explain it, so, I added this. Its not done, so far I’m just done with one of the Relseiðr pages. Currently this is just hidden with display: none so I can work on functionality first. Challenges: There were really only a few challenges this time. The largest one was actually just getting the seperate visual cues which go ( oh, this is interactive! ) for the button and the image inside. Because I kept accidentally giving the button’s new classList to the image. And thats when I realized event.target and event.currentTarget were different and made for this….. On a side note, omg, display: inline-flex is so helpful! What I’ll work on next: I have now realized that since I’m adding so many apps, I need to add proper, adaptive view bounds. Before this I was using local pixel-specific bounds which were adapted to my viewport, and just not putting it on github, because I had already put in the work for those view bounds a few months ago, and it worked really well for me. So, anyway, I have now decided I need proper view bounds, so definitely going to work on that. Also, heres the new Settings app, and the beginning of the dictionary app."}, {"post_id": 71729, "ts": "2026-09-21T12:19:13Z", "hours": 2.21, "text": "Devlog #7 So, I thought it was ready to be shipped, but it wasn’t. In the final checks, I found out that because I had used pixel - specific drag bounds , while it worked perfectly on my laptop, it didn’t on anyone else’s (since other devices have different viewports, different areas. Some have longer lengths or widths than others, leading drag bounds to potentially be in the middle of the screen). I tinkered with it for a while (enlisting a bit of AI help) , but then realized that there was something about the new code that was messing up the notebook app (the sidebar stuck to the edge of the viewport). And, since there was about only one week left (and exams are starting soon), I decided to not accidentally mess up anything else, and so, deleted the drag bounds - I mean, better to be able to drag windows anywhere than have bounds that completely restrict it, right? - The good part is that even if the window goes out of the viewport somehow, you can just reload the screen to get it all back, which has no real downside since notes autosave. So anyway, now, we are actually , finally ready to ship ! This was what was happening to the notebook app btw"}, {"post_id": 43179, "ts": "2026-08-08T09:26:22Z", "hours": 3.4597, "text": "Devlog #6 We are FINALLY DONE and ready for the FIRST SHIP! Here’s whats new: Added information bubbles for each and every character in the family tree, which can be easily opened and closed. Fixed the selection for icons in the bottom bar: The green highlighted background would also highlight the areas where there were padding which we didn’t want because the icons would then be off center. Fixed this by adding a new transparent div in the middle, so padding is no longer required. Challenges: Fixing the icon selection bug. I played around with box-size for a bit but then chose to just add a transparent div between icons. Getting the information window to move along with the family tree window (as that is draggable). After a lot of testing, I realized I could just keep it inside the div but in positioning, its overflowing, so with an overflow: auto tag, it’s now set up and working! This is a screenshot of how the info bubble would break because it wasn’t in the same div:"}, {"post_id": 38671, "ts": "2026-08-01T05:38:48Z", "hours": 5.8169, "text": "Devlog #5 Ok, so, update: Created the family tree Improved feel of the app (through a visual sign when you hover over a character button) Fully initialized the window for the family tree app (made it closable, draggable, opens with an icon, added drag bounds). Challenges: The family tree image kept going above the icons used to drag and close the window. I put them in a different and experimented with different ways for SOOOO long - turned out I was just missing a position: absolute tag…. There was also a small bug where the buttons would go under the image instead of on it. Here are some pictures of the bugs, since it’s pretty hard to explain:"}, {"post_id": 34516, "ts": "2026-07-25T09:34:28Z", "hours": 0.6922, "text": "Devlog #4 I’ve started the next app - an interactive family tree. Since CometOS is based around Comet, I figured I should add a family tree. So this app is going to have clickable buttons for each member of the family, to give some info. Basically, its a massive lore drop. Here’s the wireframe for the app, and also an entire page I spent planning it because I ran into a few problems…"}, {"post_id": 31185, "ts": "2026-07-19T11:57:03Z", "hours": 12.5381, "text": "Devlog #3 What’s new: Added a bottom bar to store content selection options Added a notes app which is editable (and stored in javascript)-you can add your own notes. Added a save feature to the notes app-log back in anytime and the note is still there. YOU WOULD NOT BELIEVE HOW LONG THIS TOOK ( but, I learned how to save things in localStorage ). Fixed a bug where was at the bottom of the and the .js file and .css file weren’t loading in the live server. Fixed the bug where you lose the handle and the window gets stuck at the top/bottom of the page by making it so you can click through the top and bottom bar. Challenges: I spent a whole afternoon trying to come up with a clever way to avoid putting html in my .js file (because it looked messy), only to end up putting it in my .js file….. MOVING ON, There was some really weird stuff happening with saving notes. Like, I would write stuff, and it would be saved, but in different ’s? So only one was actually editable and the rest were all floating under it. Started to debug in a live server instead of as a file. The html and css files weren’t loading in. I spent so long trying to figure out why, and then realized that should be at the top of the body, not at the bottom ( You know, like an actual head. Wow, thats pretty self-explanatory ). So then, I fixed that and to check if it was working or not, made the background hot pink in css.( AND IT WORKED! And I will never be able to forget that image ). What’s next: Ok, so next, I still have to finish a few things. Make it so that you can’t drag windows past a certain limit (to prevent the background image scrolling and multiplying - learned how to clamp draggable elements to the viewport!). START STEP 5! So since this entire webOS is based around a fictional character-Comet, I think I’ll make an interactive family tree. So, each person has buttons and that leads you to a brief description about them ( and lore. LOTS of lore ). This is how the webOS looked in the test. I’m still not sure how the top bar also turned light pink, but, cool I guess"}, {"post_id": 15523, "ts": "2026-06-25T06:48:06Z", "hours": 1.6658, "text": "Devlog#2 Done with step 3. So now I can open, close and move around the welcome screen window. The cross acts as the close button, and you click and drag the hand part of the window to move it around. So I’ve updated the CometOS text in the top bar to open this window - hence it looks a lot more like a button. I think for the next windows and apps I’m going to make the open button in a side bar. And I finally figured out what classes are! So yeah, for now thats it, but I think by the end of step 4 its going to be a massive update with a lot more things."}, {"post_id": 13644, "ts": "2026-06-22T11:56:42Z", "hours": 4.2733, "text": "Devlog #1 So this is CometOS which is from the mission WebOS 1. It revolves around a fictional character - the Sorceress (in-training) Comet, set in the fictional world of Alarica. So far I’ve finished uptil step 2. So the top bar can track time, and also battery levels and gives custom messages based on the battery. Right now that’s pretty much it but I can’t wait to expand the project and develop the world and everything."}]...
|
Title: CometOS by @Aradhana | Stardance
Devlogs:
Title: CometOS by @Aradhana | Stardance
Devlogs:
Devlog #1 So this is CometOS which is from the mission WebOS 1. It revolves around a fictional character - the Sorceress (in-training) Comet, set in the fictional world of Alarica. So far I’ve finished uptil step 2. So the top bar can track time, and also battery levels and gives custom messages based on the battery. Right now that’s pretty much it but I can’t wait to expand the project and develop the world and everything.
Devlog#2 Done with step 3. So now I can open, close and move around the welcome screen window. The cross acts as the close button, and you click and drag the hand part of the window to move it around. So I’ve updated the CometOS text in the top bar to open this window - hence it looks a lot more like a button. I think for the next windows and apps I’m going to make the open button in a side bar. And I finally figured out what classes are! So yeah, for now thats it, but I think by the end of step 4 its going to be a massive update with a lot more things.
Devlog #3 What’s new: Added a bottom bar to store content selection options Added a notes app which is editable (and stored in javascript)-you can add your own notes. Added a save feature to the notes app-log back in anytime and the note is still there. YOU WOULD NOT BELIEVE HOW LONG THIS TOOK ( but, I learned how to save things in localStorage ). Fixed a bug where was at the bottom of the and the .js file and .css file weren’t loading in the live server. Fixed the bug where you lose the handle and the window gets stuck at the top/bottom of the page by making it so you can click through the top and bottom bar. Challenges: I spent a whole afternoon trying to come up with a clever way to avoid putting html in my .js file (because it looked messy), only to end up putting it in my .js file….. MOVING ON, There was some really weird stuff happening with saving notes. Like, I would write stuff, and it would be saved, but in different ’s? So only one was actually editable and the rest were all floating under it. Started to debug in a live server instead of as a file. The html and css files weren’t loading in. I spent so long trying to figure out why, and then realized that should be at the top of the body, not at the bottom ( You know, like an actual head. Wow, thats pretty self-explanatory ). So then, I fixed that and to check if it was working or not, made the background hot pink in css.( AND IT WORKED! And I will never be able to forget that image ). What’s next: Ok, so next, I still have to finish a few things. Make it so that you can’t drag windows past a certain limit (to prevent the background image scrolling and multiplying - learned how to clamp draggable elements to the viewport!). START STEP 5! So since this entire webOS is based around a fictional character-Comet, I think I’ll make an interactive family tree. So, each person has buttons and that leads you to a brief description about them ( and lore. LOTS of lore ). This is how the webOS looked in the test. I’m still not sure how the top bar also turned light pink, but, cool I guess
Devlog #4 I’ve started the next app - an interactive family tree. Since CometOS is based around Comet, I figured I should add a family tree. So this app is going to have clickable buttons for each member of the family, to give some info. Basically, its a massive lore drop. Here’s the wireframe for the app, and also an entire page I spent planning it because I ran into a few problems…
Devlog #5 Ok, so, update: Created the family tree Improved feel of the app (through a visual sign when you hover over a character button) Fully initialized the window for the family tree app (made it closable, draggable, opens with an icon, added drag bounds). Challenges: The family tree image kept going above the icons used to drag and close the window. I put them in a different and experimented with different ways for SOOOO long - turned out I was just missing a position: absolute tag…. There was also a small bug where the buttons would go under the image instead of on it. Here are some pictures of the bugs, since it’s pretty hard to explain:
Devlog #6 We are FINALLY DONE and ready for the FIRST SHIP! Here’s whats new: Added information bubbles for each and every character in the family tree, which can be easily opened and closed. Fixed the selection for icons in the bottom bar: The green highlighted background would also highlight the areas where there were padding which we didn’t want because the icons would then be off center. Fixed this by adding a new transparent div in the middle, so padding is no longer required. Challenges: Fixing the icon selection bug. I played around with box-size for a bit but then chose to just add a transparent div between icons. Getting the information window to move along with the family tree window (as that is draggable). After a lot of testing, I realized I could just keep it inside the div but in positioning, its overflowing, so with an overflow: auto tag, it’s now set up and working! This is a screenshot of how the info bubble would break because it wasn’t in the same div:
Devlog #7 So, I thought it was ready to be shipped, but it wasn’t. In the final checks, I found out that because I had used pixel - specific drag bounds , while it worked perfectly on my laptop, it didn’t on anyone else’s (since other devices have different viewports, different areas. Some have longer lengths or widths than others, leading drag bounds to potentially be in the middle of the screen). I tinkered with it for a while (enlisting a bit of AI help) , but then realized that there was something about the new code that was messing up the notebook app (the sidebar stuck to the edge of the viewport). And, since there was about only one week left (and exams are starting soon), I decided to not accidentally mess up anything else, and so, deleted the drag bounds - I mean, better to be able to drag windows anywhere than have bounds that completely restrict it, right? - The good part is that even if the window goes out of the viewport somehow, you can just reload the screen to get it all back, which has no real downside since notes autosave. So anyway, now, we are actually , finally ready to ship ! This was what was happening to the notebook app btw
Devlog #8 Ok, so this is the FIRST devlog after the ship. Not really happy about how the ship went but oh well. Anyway, so, I added stuff: A Settings App Upgrades to the UI Worked on a sort of dictionary for all the new stuff that I’m introducing (after all, it is CometOS) The Settings App: Ok, so one of the major themes in the feedback I got was there needed to be more apps (since its an OS). So, I added a settings app, as just a basic, customization app. So, you can change the background image, and there’s a bit of design choices as well. I kept it so you need to scroll down to see all the images (some people won’t agree with this, but personally, I really like it. The scrolling feels more interactive and is required for a window size that looks really, really good). Also, the borders of the buttons turn blue when selected, and there obviously also a shadow indication that its a button when you hover over it. UI changes: So this was actually pretty small but looked really cool. I’ve seen on some sites there are just these little elements that blur the background behind them. While I was tinkering with css for the button shading I realized there was a style of filter: blur() . From there I found out about backdrop-filter: blur() and used that in the CometOS welcome window and the top and bottom bars. The dictionary app (name needs workshopping) So this is basically just because CometOS is about a fictional character in a fantasy world, so there needed to be an app that dealt with some words and terms used in other partts of the website (specifically the family tree). I felt there needed to be something to explain it, so, I added this. Its not done, so far I’m just done with one of the Relseiðr pages. Currently this is just hidden with display: none so I can work on functionality first. Challenges: There were really only a few challenges this time. The largest one was actually just getting the seperate visual cues which go ( oh, this is interactive! ) for the button and the image inside. Because I kept accidentally giving the button’s new classList to the image. And thats when I realized event.target and event.currentTarget were different and made for this….. On a side note, omg, display: inline-flex is so helpful! What I’ll work on next: I have now realized that since I’m adding so many apps, I need to add proper, adaptive view bounds. Before this I was using local pixel-specific bounds which were adapted to my viewport, and just not putting it on github, because I had already put in the work for those view bounds a few months ago, and it worked really well for me. So, anyway, I have now decided I need proper view bounds, so definitely going to work on that. Also, heres the new Settings app, and the beginning of the dictionary app.
Ships:
I built a WebOS that was designed to explore a character - the Sorceress Comet, a student at the Arx Nubium - and her fictional world of Alarica. As people use it, they find out more about Comet’s world, thoughts and family. It has a notebook app (where you can write your thoughts), a family tree app (to see a bit more of what Comet’s life is like) and comes with added functionality for the users - a date and time display, and battery meter. Now, the project is finally SHIPPED!...
|
1793152232.0427723
|
1793238632.0427723
|
|
12297
|
Realmbinder by @Ratseer | Stardance
|
Ratseer
|
0
|
39.2
|
0
|
[]
|
[{"post_id": 29701, "ts": "202 [{"post_id": 29701, "ts": "2026-07-16T19:50:24Z", "hours": 9.1703, "text": "another teaser to satisfy the quota before the big devlog…. this is taking a while lmao"}, {"post_id": 28768, "ts": "2026-07-15T07:34:40Z", "hours": 9.6028, "text": "working on an interface for runecarving! here, have this teaser ig to satisfy the 10hr thing"}, {"post_id": 25747, "ts": "2026-07-10T05:49:52Z", "hours": 9.9653, "text": "WAIT WAIT ILL FINISH THIS DEVLOG IN A SEC STARDANCE IS YELLING AT ME as i was saying…. Material Plates I’ve added a new item: Material Plates. They can be made with a chisel tool - hold a chisel in one hand and a material that can become a plate (most metals and gems) in the other. One block turns into 3 plates, 3 items turns into one plate, with respect for the chisel’s material and mining level (e.g. iron chisel cannot carve a netherite plate). I tried to get it to tint the texture of the plate to that of the material it has, but it turns out I dunno how to use Minecraft’s weird ass image system and also the average colour of diamond looks like turquoise turd. So instead, I’ve just put the original item texture underneath the plate’s texture in the corner. These are intended to be where you’d carve your runes. They can be inserted into currently not implemented machines to execute the instructions based on those runes the voices There is a ghost in my Minecraft instance I swear. It keeps changing the ConditionalTooltipComponent s of my chisels. I don’t know what’s happening. Nothing makes sense anymore. There are only two lines of code in the whole mod that should be changing those. On the topic of paranormal activity, I’ve added a nice markdown file named ‘the voices’ to the Github root directory. It details all the stuff that’s pissed me off over development. Will be a funny read when it’s done, hopefully."}, {"post_id": 25148, "ts": "2026-07-09T05:31:17Z", "hours": 2.3772, "text": "Runecarver Lens Model The normal runecarver lens now has a model! Tooltip Utils Did some more work on the tooltip components. They now support automatic line wrap, and a ‘_’ shorthand in the lang files for emphasis (e.g. lang “ _ THIS _ is emphasized” makes THIS a different colour). Tooltips have also been stylized to look better, inspired by the Create mod’s tooltips."}, {"post_id": 23770, "ts": "2026-07-06T22:04:59Z", "hours": 8.0856, "text": "Potentia Fundamentals Drehmal’s magic is very loosely defined, so I’ve taken the liberty of having the magic system be based on potentia, a property inherent to materials and souls that is sparsely mentioned in the map. It serves as a sort of inherent energy that can be extracted and utilized for magic. Runecarver Lens The Runecarver Lens (and its upgrade, the Precise Runecarver Lens) are items made for the viewing of potentia. The original version shows different particle icons based on the potentia value of a targeted object, while the upgrade displays exact numbers. That is the one shown here because I still need a model for the original. Potentia is now a DataComponentType that I’ve used Fabric’s ConventionalItemTags to add as a default component to different categories of item. The system also adds potentia via item name based selection for extra compatibility and range. Items without predefined values fall back to 3 potentia. Conditional Tooltip System In MC 1.21.5 Mojang deprecated my beloved appendHoverText() method and now I’ve got to use the dastardly ItemTooltipProviderRegistry . This would be really nice, except I had no idea how to make tooltips conditional based on key press. I ended up adding two more DataComponentType s: TooltipComponent and ConditionalTooltipComponent . Both can be assigned as default components on item registration and thus make adding tooltips easier. ConditionalTooltipComponent also takes an additional condition property. It’s TooltipProvider is coded so that it only displays a ‘Hold key for more info’ text until said key is pressed."}]...
|
Title: Realmbinder by @Ratseer | Stardance
Devlog Title: Realmbinder by @Ratseer | Stardance
Devlogs:
Potentia Fundamentals Drehmal’s magic is very loosely defined, so I’ve taken the liberty of having the magic system be based on potentia, a property inherent to materials and souls that is sparsely mentioned in the map. It serves as a sort of inherent energy that can be extracted and utilized for magic. Runecarver Lens The Runecarver Lens (and its upgrade, the Precise Runecarver Lens) are items made for the viewing of potentia. The original version shows different particle icons based on the potentia value of a targeted object, while the upgrade displays exact numbers. That is the one shown here because I still need a model for the original. Potentia is now a DataComponentType that I’ve used Fabric’s ConventionalItemTags to add as a default component to different categories of item. The system also adds potentia via item name based selection for extra compatibility and range. Items without predefined values fall back to 3 potentia. Conditional Tooltip System In MC 1.21.5 Mojang deprecated my beloved appendHoverText() method and now I’ve got to use the dastardly ItemTooltipProviderRegistry . This would be really nice, except I had no idea how to make tooltips conditional based on key press. I ended up adding two more DataComponentType s: TooltipComponent and ConditionalTooltipComponent . Both can be assigned as default components on item registration and thus make adding tooltips easier. ConditionalTooltipComponent also takes an additional condition property. It’s TooltipProvider is coded so that it only displays a ‘Hold key for more info’ text until said key is pressed.
Runecarver Lens Model The normal runecarver lens now has a model! Tooltip Utils Did some more work on the tooltip components. They now support automatic line wrap, and a ‘_’ shorthand in the lang files for emphasis (e.g. lang “ _ THIS _ is emphasized” makes THIS a different colour). Tooltips have also been stylized to look better, inspired by the Create mod’s tooltips.
WAIT WAIT ILL FINISH THIS DEVLOG IN A SEC STARDANCE IS YELLING AT ME as i was saying…. Material Plates I’ve added a new item: Material Plates. They can be made with a chisel tool - hold a chisel in one hand and a material that can become a plate (most metals and gems) in the other. One block turns into 3 plates, 3 items turns into one plate, with respect for the chisel’s material and mining level (e.g. iron chisel cannot carve a netherite plate). I tried to get it to tint the texture of the plate to that of the material it has, but it turns out I dunno how to use Minecraft’s weird ass image system and also the average colour of diamond looks like turquoise turd. So instead, I’ve just put the original item texture underneath the plate’s texture in the corner. These are intended to be where you’d carve your runes. They can be inserted into currently not implemented machines to execute the instructions based on those runes the voices There is a ghost in my Minecraft instance I swear. It keeps changing the ConditionalTooltipComponent s of my chisels. I don’t know what’s happening. Nothing makes sense anymore. There are only two lines of code in the whole mod that should be changing those. On the topic of paranormal activity, I’ve added a nice markdown file named ‘the voices’ to the Github root directory. It details all the stuff that’s pissed me off over development. Will be a funny read when it’s done, hopefully.
working on an interface for runecarving! here, have this teaser ig to satisfy the 10hr thing
another teaser to satisfy the quota before the big devlog…. this is taking a while lmao...
|
1793199233.7052212
|
1793804033.7052212
|
|
58596
|
WAR ZONE by @Tallurisaikumar | Stardance
|
Tallurisaikumar
|
0
|
39.16
|
0
|
[]
|
[{"post_id": 65450, "ts": "202 [{"post_id": 65450, "ts": "2026-09-10T16:17:10Z", "hours": 8.0953, "text": "180 games to play game with that space small rocket"}, {"post_id": 65145, "ts": "2026-09-10T02:43:41Z", "hours": 9.3353, "text": "space war 180 game to play game like fight with others"}, {"post_id": 63446, "ts": "2026-09-07T09:28:18Z", "hours": 1.3131, "text": "just now complete my interface"}, {"post_id": 62635, "ts": "2026-09-06T03:07:04Z", "hours": 3.165, "text": "iam crate more better game"}, {"post_id": 62241, "ts": "2026-09-05T14:47:51Z", "hours": 17.2478, "text": "few houres back iam started my new project name is WAR ZONE game to play game like 360 war games and"}]...
|
Title: WAR ZONE by @Tallurisaikumar | Stardance
D Title: WAR ZONE by @Tallurisaikumar | Stardance
Devlogs:
few houres back iam started my new project name is WAR ZONE game to play game like 360 war games and
iam crate more better game
just now complete my interface
space war 180 game to play game like fight with others
180 games to play game with that space small rocket...
|
1792936104.257238
|
1793800104.257238
|
|
18145
|
MC Modding Shenanigans by @Mapplect | Stardance
|
Mapplect
|
0
|
39.12
|
0
|
[]
|
[{"post_id": 31417, "ts": "202 [{"post_id": 31417, "ts": "2026-07-19T19:27:31Z", "hours": 4.5917, "text": "Back after doing a million other projects. The Work So Far: I’ve been doing textures here and there so I have most tools done (pickaxe, axe, shovel, sword, didn’t add hoes unfortunately maybe later). Been trying to balance out how effective my tools are but keep making them a little too good…Got the basic stuff I need for armor (armor materials) but haven’t actually registered any yet. Nothing much to say because I’ve been doing everything else but working on the mod. Next Course of Action: Finishing textures, this always haunts me. Need to do more balancing because a pickaxe having 5 attack speed is genuinely criminal (some axes unintentionally have 6+ which is bad bad). Moving into the RPG direction will take place after I finish all this stuff, lowkey might ship before starting on the RPG idk why but I want to. Probably gonna work on the mod for the rest of the day so I can make some good progress."}, {"post_id": 19641, "ts": "2026-07-01T00:47:49Z", "hours": 9.0897, "text": "Data gen is so cool!! The Work So Far: I added several food items to the mod. Some of these include fried eggs (which can be made by cooking/smoking vanilla MC eggs), bacon, cheese, baguette, and tomatoes (which have their own crop block). Need to finish adding ways to get all of these food items in survival mode. Started making my first wood block, I’ve finished almost all the textures except for the leaves and stripped variants. I plan to add many more wood types (speaking of that I need to figure out how to spawn custom trees naturally in the world). Started making tools to give my ores some usage, pickaxes first. Experimented by altering the vanilla pickaxe texture to see if I could make something I liked, came up with a good first draft. Next Course of Action: Thinking of adding a slop bowl food item (because why not). It’ll probably have a 50/50 or 40/60 chance of giving you some nice effects or some really bad ones. I’ll make it good give saturation/hunger too to make it somewhat more rewarding. A friend suggested making an enchant called “Larpness” (sharpness spinoff), I figured I could make it heal whoever is hit by it rather than damaging them. It’ll most likely be a fun learning experience. Gotta finish a bunch of textures before I move on to tree generation. My current ore ones look like TRASH. I also need to start learning into the RPG theme more, maybe a questbook? Leveling system? Need to add more magic items too so I’ll probably go and study the code of some mods I really enjoy (Ars Noveau deserves a mention). Notes: Data generation has to be one of the greatest things out there. It was so tedious creating several JSON files, but now all I have to do is write one line of code!"}, {"post_id": 15773, "ts": "2026-06-25T17:18:55Z", "hours": 9.57, "text": "Ores galore! (pt. 2) The Work So Far: Ore generation is finally done! There’s about 11 ores (most having a deepslate variant) to find around the world. Made raw versions of each one cuz yes smelting!! Started doing the necessary stuff needed for making trees but haven’t finished it yet. Next Course of Action: I still haven’t finished all the textures…Adding raw versions and deepslate variants basically tripled what I needed to do pixel art wise and I still haven’t given the ores usage yet (such as armor, tools, etc.). I do want to add some custom crops/mobs so that’s also on my plate for these next 10 ish working hours. I want to make a working fuel source, something similar to coal but faster. Notes: Ore gen has to be one of the most painful things I’ve done so far it took SO LONG to finish. Hopefully tree and biome generation won’t be too bad…"}, {"post_id": 13430, "ts": "2026-06-22T00:21:14Z", "hours": 8.9106, "text": "Ores galore! The Work So Far: I’ve added many new ores! Some of them include gems like jade and topaz, and ores like platinum. Did a bunch of pixel art for the ores and fixed up some old ones (especially the sapphire gem one). Started adding deepslate variants but I haven’t finished all the pixel art for those. The biggest thing is probably the fact that my blocks actually drop things! I combed through some of Minecraft’s code to create loot tables for most ores. Next Course of Action: I wanna work on getting these ores to appear naturally in the world. I also wanna start making overworld biomes so I need to put in some more work towards things like trees n stuff. Notes: Pixel art gets real boring..so does the repetitive coding to add new blocks. I’m trying to learn how to do new things so I don’t burn myself out. One of these things is adding a metal detector item to make finding ores easier because I may or may not make them difficult to find.."}, {"post_id": 10899, "ts": "2026-06-17T21:13:35Z", "hours": 4.7597, "text": "Modding is a lot easier than I thought it would be (just very tedious). The Work So Far: Added some more ores/blocks, not done with the pixel art for all of them however. Started separating my custom items into groups (ie. “Ore Group) just to make things easier for myself. Not much else to say because ts takes a long time… Next Course Of Action: More items! More pixel art! Need to add more functionality to my blocks (currently they don’t drop a single item and can’t even break them in survival). Still need to do crafting recipes. I think I’m gonna add custom mobs/bosses because I’ve decided I wanted to make this an RPG mod (magic themed because yes!). Notes: Figuring out how to display my items properly in Minecraft SUCKED. Spent a whole hour editing “translation”, “rotation”, and “scale” but I finally got it (for only one ingot) and hopefully it won’t be too bad doing the rest of them. Here’s a picture of me accidentally making an ingot too big."}, {"post_id": 8846, "ts": "2026-06-14T18:23:27Z", "hours": 2.2003, "text": "I’ve been pondering a lot about what other projects I could make and decided to make a Minecraft mod! It has been a huge struggle, so many errors popping up that I can’t find the answers for, hours of configurating IntelliJ in hopes that it would finally work, the Minecraft client refusing to open for whatever reason. After all of those issues, I’ve finally made my first custom item! The Work So Far: Nothing really to be honest…Made a sapphire gem and learned the inner workings of adding items to Minecraft. Next Course of Action: Adding more items of course!! I also want to brush up on my pixel art (its lacking a lot right now..). Probably going to try and make ore blocks to drop the gems I make and give them actual purpose through crafting recipes. Notes: This WAS originally going to be a Kirby-themed modpack but I figured that was a little too far out of reach for right now, maybe in the near future."}]...
|
Title: MC Modding Shenanigans by @Mapplect | Stard Title: MC Modding Shenanigans by @Mapplect | Stardance
Devlogs:
I’ve been pondering a lot about what other projects I could make and decided to make a Minecraft mod! It has been a huge struggle, so many errors popping up that I can’t find the answers for, hours of configurating IntelliJ in hopes that it would finally work, the Minecraft client refusing to open for whatever reason. After all of those issues, I’ve finally made my first custom item! The Work So Far: Nothing really to be honest…Made a sapphire gem and learned the inner workings of adding items to Minecraft. Next Course of Action: Adding more items of course!! I also want to brush up on my pixel art (its lacking a lot right now..). Probably going to try and make ore blocks to drop the gems I make and give them actual purpose through crafting recipes. Notes: This WAS originally going to be a Kirby-themed modpack but I figured that was a little too far out of reach for right now, maybe in the near future.
Modding is a lot easier than I thought it would be (just very tedious). The Work So Far: Added some more ores/blocks, not done with the pixel art for all of them however. Started separating my custom items into groups (ie. “Ore Group) just to make things easier for myself. Not much else to say because ts takes a long time… Next Course Of Action: More items! More pixel art! Need to add more functionality to my blocks (currently they don’t drop a single item and can’t even break them in survival). Still need to do crafting recipes. I think I’m gonna add custom mobs/bosses because I’ve decided I wanted to make this an RPG mod (magic themed because yes!). Notes: Figuring out how to display my items properly in Minecraft SUCKED. Spent a whole hour editing “translation”, “rotation”, and “scale” but I finally got it (for only one ingot) and hopefully it won’t be too bad doing the rest of them. Here’s a picture of me accidentally making an ingot too big.
Ores galore! The Work So Far: I’ve added many new ores! Some of them include gems like jade and topaz, and ores like platinum. Did a bunch of pixel art for the ores and fixed up some old ones (especially the sapphire gem one). Started adding deepslate variants but I haven’t finished all the pixel art for those. The biggest thing is probably the fact that my blocks actually drop things! I combed through some of Minecraft’s code to create loot tables for most ores. Next Course of Action: I wanna work on getting these ores to appear naturally in the world. I also wanna start making overworld biomes so I need to put in some more work towards things like trees n stuff. Notes: Pixel art gets real boring..so does the repetitive coding to add new blocks. I’m trying to learn how to do new things so I don’t burn myself out. One of these things is adding a metal detector item to make finding ores easier because I may or may not make them difficult to find..
Ores galore! (pt. 2) The Work So Far: Ore generation is finally done! There’s about 11 ores (most having a deepslate variant) to find around the world. Made raw versions of each one cuz yes smelting!! Started doing the necessary stuff needed for making trees but haven’t finished it yet. Next Course of Action: I still haven’t finished all the textures…Adding raw versions and deepslate variants basically tripled what I needed to do pixel art wise and I still haven’t given the ores usage yet (such as armor, tools, etc.). I do want to add some custom crops/mobs so that’s also on my plate for these next 10 ish working hours. I want to make a working fuel source, something similar to coal but faster. Notes: Ore gen has to be one of the most painful things I’ve done so far it took SO LONG to finish. Hopefully tree and biome generation won’t be too bad…
Data gen is so cool!! The Work So Far: I added several food items to the mod. Some of these include fried eggs (which can be made by cooking/smoking vanilla MC eggs), bacon, cheese, baguette, and tomatoes (which have their own crop block). Need to finish adding ways to get all of these food items in survival mode. Started making my first wood block, I’ve finished almost all the textures except for the leaves and stripped variants. I plan to add many more wood types (speaking of that I need to figure out how to spawn custom trees naturally in the world). Started making tools to give my ores some usage, pickaxes first. Experimented by altering the vanilla pickaxe texture to see if I could make something I liked, came up with a good first draft. Next Course of Action: Thinking of adding a slop bowl food item (because why not). It’ll probably have a 50/50 or 40/60 chance of giving you some nice effects or some really bad ones. I’ll make it good give saturation/hunger too to make it somewhat more rewarding. A friend suggested making an enchant called “Larpness” (sharpness spinoff), I figured I could make it heal whoever is hit by it rather than damaging them. It’ll most likely be a fun learning experience. Gotta finish a bunch of textures before I move on to tree generation. My current ore ones look like TRASH. I also need to start learning into the RPG theme more, maybe a questbook? Leveling system? Need to add more magic items too so I’ll probably go and study the code of some mods I really enjoy (Ars Noveau deserves a mention). Notes: Data generation has to be one of the greatest things out there. It was so tedious creating several JSON files, but now all I have to do is write one line of code!
Back after doing a million other projects. The Work So Far: I’ve been doing textures here and there so I have most tools done (pickaxe, axe, shovel, sword, didn’t add hoes unfortunately maybe later). Been trying to balance out how effective my tools are but keep making them a little too good…Got the basic stuff I need for armor (armor materials) but haven’t actually registered any yet. Nothing much to say because I’ve been doing everything else but working on the mod. Next Course of Action: Finishing textures, this always haunts me. Need to do more balancing because a pickaxe having 5 attack speed is genuinely criminal (some axes unintentionally have 6+ which is bad bad). Moving into the RPG direction will take place after I finish all this stuff, lowkey might ship before starting on the RPG idk why but I want to. Probably gonna work on the mod for the rest of the day so I can make some good progress....
|
1792659250.295877
|
1793264050.295877
|
|
37881
|
IntelliML – AI Powered Dataset Management & Au IntelliML – AI Powered Dataset Management & AutoML Platform by @ifwhotcheetoss | Stardance...
|
ifwhotcheetoss
|
0
|
39.01
|
0
|
[]
|
[{"post_id": 64967, "ts": "202 [{"post_id": 64967, "ts": "2026-09-09T18:24:26Z", "hours": 7.1086, "text": "heyy guysss whassupp!! so akot has happened and finally my cleaning of dataset is now very close to be perfect .. rn i just did corrected the cleaning part … just check this out and i need suggestions of how can i make it perfect"}, {"post_id": 58990, "ts": "2026-08-31T15:51:19Z", "hours": 11.7933, "text": "Hey guys whatsupp… hope yall are fine… so as my intelliml is coming to end …there were many errors i faced after the completion of backend during frontend dev and api integartion …. ther eare still some fixes that needs to be done but for now focusing more on better quality of eda and automl charts and reports :)"}, {"post_id": 48123, "ts": "2026-08-16T12:42:35Z", "hours": 4.7389, "text": "hey guyss…. so my IntelliML project is coming to its end there is still some integration left but this is what ive done so far…. the backend was already completed but frontend as well as integration of apis is on its way… for now ive integrated eda and the cleaning of dataset… check this out"}, {"post_id": 43471, "ts": "2026-08-08T19:13:20Z", "hours": 5.1603, "text": "hiiii…..hope yall are doin well…. so for my project… The IntelliML backend is now functionally complete. I implemented dataset upload and versioning, profiling and quality analysis, EDA visualizations, and a full AutoML pipeline with multiple models, cross validation, hyperparameter tuning, and detailed evaluation metrics…ive also added model saving and prediction, experiment tracking and comparison, automated PDF report generation, and APIs for downloading predictions, models, and reports. I also added a dashboard summary API to track datasets, models, experiments, reports, and the best-performing model. I’m now working on improving the PDF reports with richer metadata, visualizations, and a more polished presentation."}, {"post_id": 40630, "ts": "2026-08-04T09:37:06Z", "hours": 3.3611, "text": "Enhanced the AutoML Pipeline heyyy guyss…hope yall are doin great…so ive spent this week improving IntelliML’s AutoML pipeline by making model evaluation more detailed and reliable. Added support for precision, recall, and F1-score alongside accuracy, along with confusion matrices and classification reports for better performance analysis. Implemented 5 fold cross validation to provide more robust evaluation and added feature importance for tree-based models to improve model interpretability. I also integrated GridSearchCV for automatic hyperparameter tuning of Random Forest, measured model training time, and expanded the results to include detailed performance metrics for every trained algorithm. To make the pipeline more robust, I added exception handling so that if one model fails, the remaining models continue training without interrupting the workflow. With these improvements, IntelliML now provides a much more complete and reliable AutoML experience, and I’m now moving on to the visualization phase, started with correlation heatmaps."}, {"post_id": 36878, "ts": "2026-07-29T07:40:40Z", "hours": 1.3322, "text": "##Built the AutoML Training Pipeline hii guysss………hope yall are doin well. ive implemented the first version of IntelliML’s AutoML training pipeline, which automates the end-to-end model training process. The pipeline loads the selected dataset, handles missing values, validates the target column, performs train test splitting and one hot encoding, then trains and evaluates multiple machine learning models, including Decision Tree, Random Forest, Logistic Regression, KNN, and Gaussian Naive Bayes. It compares their performance using accuracy and automatically returns the best performing model, making model selection fast and effortless."}, {"post_id": 36236, "ts": "2026-07-28T05:51:04Z", "hours": 1.3792, "text": "##Data Preprocessing Pipeline hey guyss!! hope ya’ll are doin well, so today ive build the data preprocessing pipeline for IntelliML. It can now automatically clean datasets by handling missing values, removing duplicates, encoding categorical features (Label Encoding and One Hot Encoding), scaling numerical data, and detecting outliers using the IQR method. The processed dataset is generated automatically, so it’s ready for model training without any extra manual work."}, {"post_id": 35715, "ts": "2026-07-27T10:05:31Z", "hours": 1.9989, "text": "heyy guysss.. hope yall are doin well so today I focused on dataset versioning and version comparison in IntelliML. I implemented automatic version creation so every new upload is saved as a separate dataset version, along with APIs to view version history and manage stored versions. I also built the first version of the comparison module, which can compare different dataset versions by highlighting changes in rows, columns, schema, data types, missing values, and duplicate records. These features make it much easier to track how datasets evolve over time and provide a solid foundation for future experiment tracking and MLOps workflows."}, {"post_id": 32408, "ts": "2026-07-21T16:01:53Z", "hours": 0.4597, "text": "I’ve implemented dataset profiling and data quality modules for IntelliMl. I’ve added APIs to analyse uploaded datasets by generating metadata(rows, cols etc).With this I’ve implemented data quality checks for missing values, duplicate rows and class distribution analysis"}, {"post_id": 32264, "ts": "2026-07-21T10:15:34Z", "hours": 1.6828, "text": "I’ve build a backend foundation for IntelliML in which I’ve used fastapi with a clean modular architecture. I’ve implemented dataset uploading functionality with automatic metadata storage, SQLITE, SQLAlchemy. The backend is configured with swagger api docs and I’ve started dataset profiling module to generate statistics"}]...
|
Title: IntelliML – AI Powered Dataset Management & Title: IntelliML – AI Powered Dataset Management & AutoML Platform by @ifwhotcheetoss | Stardance
Devlogs:
I’ve build a backend foundation for IntelliML in which I’ve used fastapi with a clean modular architecture. I’ve implemented dataset uploading functionality with automatic metadata storage, SQLITE, SQLAlchemy. The backend is configured with swagger api docs and I’ve started dataset profiling module to generate statistics
I’ve implemented dataset profiling and data quality modules for IntelliMl. I’ve added APIs to analyse uploaded datasets by generating metadata(rows, cols etc).With this I’ve implemented data quality checks for missing values, duplicate rows and class distribution analysis
heyy guysss.. hope yall are doin well so today I focused on dataset versioning and version comparison in IntelliML. I implemented automatic version creation so every new upload is saved as a separate dataset version, along with APIs to view version history and manage stored versions. I also built the first version of the comparison module, which can compare different dataset versions by highlighting changes in rows, columns, schema, data types, missing values, and duplicate records. These features make it much easier to track how datasets evolve over time and provide a solid foundation for future experiment tracking and MLOps workflows.
##Data Preprocessing Pipeline hey guyss!! hope ya’ll are doin well, so today ive build the data preprocessing pipeline for IntelliML. It can now automatically clean datasets by handling missing values, removing duplicates, encoding categorical features (Label Encoding and One Hot Encoding), scaling numerical data, and detecting outliers using the IQR method. The processed dataset is generated automatically, so it’s ready for model training without any extra manual work.
##Built the AutoML Training Pipeline hii guysss………hope yall are doin well. ive implemented the first version of IntelliML’s AutoML training pipeline, which automates the end-to-end model training process. The pipeline loads the selected dataset, handles missing values, validates the target column, performs train test splitting and one hot encoding, then trains and evaluates multiple machine learning models, including Decision Tree, Random Forest, Logistic Regression, KNN, and Gaussian Naive Bayes. It compares their performance using accuracy and automatically returns the best performing model, making model selection fast and effortless.
Enhanced the AutoML Pipeline heyyy guyss…hope yall are doin great…so ive spent this week improving IntelliML’s AutoML pipeline by making model evaluation more detailed and reliable. Added support for precision, recall, and F1-score alongside accuracy, along with confusion matrices and classification reports for better performance analysis. Implemented 5 fold cross validation to provide more robust evaluation and added feature importance for tree-based models to improve model interpretability. I also integrated GridSearchCV for automatic hyperparameter tuning of Random Forest, measured model training time, and expanded the results to include detailed performance metrics for every trained algorithm. To make the pipeline more robust, I added exception handling so that if one model fails, the remaining models continue training without interrupting the workflow. With these improvements, IntelliML now provides a much more complete and reliable AutoML experience, and I’m now moving on to the visualization phase, started with correlation heatmaps.
hiiii…..hope yall are doin well…. so for my project… The IntelliML backend is now functionally complete. I implemented dataset upload and versioning, profiling and quality analysis, EDA visualizations, and a full AutoML pipeline with multiple models, cross validation, hyperparameter tuning, and detailed evaluation metrics…ive also added model saving and prediction, experiment tracking and comparison, automated PDF report generation, and APIs for downloading predictions, models, and reports. I also added a dashboard summary API to track datasets, models, experiments, reports, and the best-performing model. I’m now working on improving the PDF reports with richer metadata, visualizations, and a more polished presentation.
hey guyss…. so my IntelliML project is coming to its end there is still some integration left but this is what ive done so far…. the backend was already completed but frontend as well as integration of apis is on its way… for now ive integrated eda and the cleaning of dataset… check this out
Hey guys whatsupp… hope yall are fine… so as my intelliml is coming to end …there were many errors i faced after the completion of backend during frontend dev and api integartion …. ther eare still some fixes that needs to be done but for now focusing more on better quality of eda and automl charts and reports :)
heyy guysss whassupp!! so akot has happened and finally my cleaning of dataset is now very close to be perfect .. rn i just did corrected the cleaning part … just check this out and i need suggestions of how can i make it perfect...
|
1792799635.388038
|
1793404435.388038
|
|
52739
|
Physics Based Character Controller by @AbdurRehman Physics Based Character Controller by @AbdurRehman | Stardance...
|
AbdurRehman
|
0
|
39.01
|
0
|
[]
|
[{"post_id": 57932, "ts": "202 [{"post_id": 57932, "ts": "2026-08-30T08:30:17Z", "hours": 10.05, "text": "Since the last dev log, I’ve spent most of my time building out the animation system for the character controller. The character could already move, but everything felt super basic visually so I wanted the animations to properly react to what the character is actually doing instead of just switching between a few animations. I started by adding a basic locomotion animation system with idle, walk, and run animations. I added blending between the different locomotion states based on the character’s movement speed, so the character doesn’t immediately snap from one animation to another. I also added other details like adjusting the animation playback speed based on the physical movement speed making everything feel more realistic. While working on locomotion, the animations didn’t look too good because I was simply playing one animation at a given time so I added support for separating the upper and lower body using bone masks, which allows different parts of the character to be animated independently. After that things started to look better but the animations that I had added on the model weren’t good so I spent a lot of time finding and adding more and better animations to the model. One of the changes I made with the new animations was combining multiple idle animations together instead of having the character constantly repeat the same idle pose making the character feel alive when idle. After that I moved on to the character’s vertical movement. I connected the fall, jump, and land animations to the character state system. The animator now plays the animations based on whether the character is jumping, falling, or landing based on the physics state rather than input alone. I also added separate jump animations for jumping while standing still and jumping while moving, so the animations look good. The landing animation required more work since it didn’t look polished so I added landing detection based on things like fall height and fall speed so that small steps don’t trigger a landing animation. And finally I added a rolling animation for falls from high places. This took quite a while to get working and it still isn’t perfect but I am working on it. At this point the character’s animations are pretty much almost complete. Next I want to continue improving the animation system by adding animations for crouching and adding transition animations like idle to walk, etc and also finalizing the roll animation. And after that I want to start making stuff react to the environment."}, {"post_id": 56441, "ts": "2026-08-28T06:34:37Z", "hours": 7.5369, "text": "I continued working on the character controller by moving into the visual side of the project and integrating a proper player model. I added a new character model and tuned its scale and positioning so that it correctly matches the physics body. I also added an asset loading system and a basic loading screen so that the character and assets in the future can be loaded before the game starts. When I was working on the project I felt that everything looked weird and that was because I forgot to add shadows. So I added them and then spent quite a bit of time improving the lighting and shadow quality. I also added tone mapping to make the scene look better. While testing the character model, I ran into shadow acne and something called peter panning, so I spent some time tuning the shadow bias and normal bias to get a balance between the two. I also noticed that the character and small vertical movement/jitter while walking on flat ground probably because of the physics adjusting it’s position. I added direction Y smoothing to the character model so that small physics corrections don’t make the character appear to jitter while moving. Also the camera movement wasn’t good so to make it better I added vertical smoothing to it. Previously, the shadow camera covered a fixed area of the world which made stuff not in the coverage area have no shadows so I improved the directional shadow by making the shadow coverage follow the player. And the final change was working on the model’s materials since the character looked overly metallic and glossy in Three.js even though it looked normal in Blender. Turns out the materials had an incorrect metallic value, so I corrected that and adjusted the roughness to make everything look good. Next, I’ll finally start building the character state system and start moving toward animations."}, {"post_id": 54973, "ts": "2026-08-26T12:27:47Z", "hours": 6.13, "text": "I continued working on the character controller, by adding crouching now allowing the player to move underneath surfaces and other obstacles. Getting this working correctly took a lot more time than I expected because changing the character’s collider size introduced several physics related bugs like the character getting stuck or incorrectly standing up when there wasn’t enough room above, as well as making sure crouching and standing transitions behaved correctly which took a lot of time to fix and get right. I also added an unstuck mechanism to help recover the character if they end up in a weird position. I then cleaned up the code making it easier for me to add other features I have planned. Next, I’ll build on the character state system and start moving toward the animations of the controller."}, {"post_id": 54399, "ts": "2026-08-25T12:18:54Z", "hours": 6.0731, "text": "I continued improving the basic character controller and worked on turning into a reusable system. I separated character movement, physics, and the visual model into their own components and refactored input into a dedicated character input object so movement data can be passed through the system pretty simply and made it way easier to add other inputs in the future. I added acceleration and deceleration, sprinting, and jumping, while also improving the existing movement to make the controller feel better and everything less floaty. I also fixed some movement related bugs like temporarily sticking to ceilings when jumping. I also added the entire character state system. I created a state tracker that derives useful information from the character’s movement and physics, such as velocity, movement direction, speed, grounded/airborne state, landing, jumping, slopes, sliding, wall collisions, ceiling collisions, fall height among many more. This is pretty much the foundation for the state machine and animation system by instead of making animations directly tied to physics or movement code they can be made to react to the character’s current state. This pretty much make it possible to build stuff like strafing blend trees, jump/fall transitions, landing reactions, and eventually more environment aware animations easily. Next, I’ll start building crouch functionality before adding animation stuff."}, {"post_id": 53609, "ts": "2026-08-24T07:43:08Z", "hours": 7.0756, "text": "I built the very basic version of the character controller. I implemented a basic kinematic character controller with gravity, collision handling, slope detection, sliding, stair stepping, and snap to ground behavior. I then added keyboard input and a very basic third person camera so the character can at least be properly controlled for testing. I also fixed some bugs one of which was movement jitter and added stuff to test the controller and also added a physics debug visualizer. I also created config files so that values can easily be tuned and changed and to avoid hard coding stuff in the code. The foundation of the character controller is mostly in place. Next, I’ll work on improving the movement by adding acceleration and jumping. After the movement feels good, I’ll add a real character model, its animations and a state machine."}, {"post_id": 52524, "ts": "2026-08-22T18:00:40Z", "hours": 2.1469, "text": "Set up the project’s basic architecture by creating Vite app using TypeScript, initializing the Git repository, integrating Three.js before modularizing my code and making it clean by separating the scene, camera, renderer, and game loop into dedicated classes. I also added a custom time system with delta/elapsed time tracking for like animation stuff and a fixed timestep for physics stuff, then integrated Rapier and built a basic physics world with gravity, collisions, and a few test bodies. Next, I’ll start building the basic character controller which lays the foundation for all the work to come."}]...
|
Title: Physics Based Character Controller by @Abdu Title: Physics Based Character Controller by @AbdurRehman | Stardance
Devlogs:
Set up the project’s basic architecture by creating Vite app using TypeScript, initializing the Git repository, integrating Three.js before modularizing my code and making it clean by separating the scene, camera, renderer, and game loop into dedicated classes. I also added a custom time system with delta/elapsed time tracking for like animation stuff and a fixed timestep for physics stuff, then integrated Rapier and built a basic physics world with gravity, collisions, and a few test bodies. Next, I’ll start building the basic character controller which lays the foundation for all the work to come.
I built the very basic version of the character controller. I implemented a basic kinematic character controller with gravity, collision handling, slope detection, sliding, stair stepping, and snap to ground behavior. I then added keyboard input and a very basic third person camera so the character can at least be properly controlled for testing. I also fixed some bugs one of which was movement jitter and added stuff to test the controller and also added a physics debug visualizer. I also created config files so that values can easily be tuned and changed and to avoid hard coding stuff in the code. The foundation of the character controller is mostly in place. Next, I’ll work on improving the movement by adding acceleration and jumping. After the movement feels good, I’ll add a real character model, its animations and a state machine.
I continued improving the basic character controller and worked on turning into a reusable system. I separated character movement, physics, and the visual model into their own components and refactored input into a dedicated character input object so movement data can be passed through the system pretty simply and made it way easier to add other inputs in the future. I added acceleration and deceleration, sprinting, and jumping, while also improving the existing movement to make the controller feel better and everything less floaty. I also fixed some movement related bugs like temporarily sticking to ceilings when jumping. I also added the entire character state system. I created a state tracker that derives useful information from the character’s movement and physics, such as velocity, movement direction, speed, grounded/airborne state, landing, jumping, slopes, sliding, wall collisions, ceiling collisions, fall height among many more. This is pretty much the foundation for the state machine and animation system by instead of making animations directly tied to physics or movement code they can be made to react to the character’s current state. This pretty much make it possible to build stuff like strafing blend trees, jump/fall transitions, landing reactions, and eventually more environment aware animations easily. Next, I’ll start building crouch functionality before adding animation stuff.
I continued working on the character controller, by adding crouching now allowing the player to move underneath surfaces and other obstacles. Getting this working correctly took a lot more time than I expected because changing the character’s collider size introduced several physics related bugs like the character getting stuck or incorrectly standing up when there wasn’t enough room above, as well as making sure crouching and standing transitions behaved correctly which took a lot of time to fix and get right. I also added an unstuck mechanism to help recover the character if they end up in a weird position. I then cleaned up the code making it easier for me to add other features I have planned. Next, I’ll build on the character state system and start moving toward the animations of the controller.
I continued working on the character controller by moving into the visual side of the project and integrating a proper player model. I added a new character model and tuned its scale and positioning so that it correctly matches the physics body. I also added an asset loading system and a basic loading screen so that the character and assets in the future can be loaded before the game starts. When I was working on the project I felt that everything looked weird and that was because I forgot to add shadows. So I added them and then spent quite a bit of time improving the lighting and shadow quality. I also added tone mapping to make the scene look better. While testing the character model, I ran into shadow acne and something called peter panning, so I spent some time tuning the shadow bias and normal bias to get a balance between the two. I also noticed that the character and small vertical movement/jitter while walking on flat ground probably because of the physics adjusting it’s position. I added direction Y smoothing to the character model so that small physics corrections don’t make the character appear to jitter while moving. Also the camera movement wasn’t good so to make it better I added vertical smoothing to it. Previously, the shadow camera covered a fixed area of the world which made stuff not in the coverage area have no shadows so I improved the directional shadow by making the shadow coverage follow the player. And the final change was working on the model’s materials since the character looked overly metallic and glossy in Three.js even though it looked normal in Blender. Turns out the materials had an incorrect metallic value, so I corrected that and adjusted the roughness to make everything look good. Next, I’ll finally start building the character state system and start moving toward animations.
Since the last dev log, I’ve spent most of my time building out the animation system for the character controller. The character could already move, but everything felt super basic visually so I wanted the animations to properly react to what the character is actually doing instead of just switching between a few animations. I started by adding a basic locomotion animation system with idle, walk, and run animations. I added blending between the different locomotion states based on the character’s movement speed, so the character doesn’t immediately snap from one animation to another. I also added other details like adjusting the animation playback speed based on the physical movement speed making everything feel more realistic. While working on locomotion, the animations didn’t look too good because I was simply playing one animation at a given time so I added support for separating the upper and lower body using bone masks, which allows different parts of the character to be animated independently. After that things started to look better but the animations that I had added on the model weren’t good so I spent a lot of time finding and adding more and better animations to the model. One of the changes I made with the new animations was combining multiple idle animations together instead of having the character constantly repeat the same idle pose making the character feel alive when idle. After that I moved on to the character’s vertical movement. I connected the fall, jump, and land animations to the character state system. The animator now plays the animations based on whether the character is jumping, falling, or landing based on the physics state rather than input alone. I also added separate jump animations for jumping while standing still and jumping while moving, so the animations look good. The landing animation required more work since it didn’t look polished so I added landing detection based on things like fall height and fall speed so that small steps don’t trigger a landing animation. And finally I added a rolling animation for falls from high places. This took quite a while to get working and it still isn’t perfect but I am working on it. At this point the character’s animations are pretty much almost complete. Next I want to continue improving the animation system by adding animations for crouching and adding transition animations like idle to walk, etc and also finalizing the roll animation. And after that I want to start making stuff react to the environment....
|
1792723711.9387405
|
1793328511.9387405
|
|
5727
|
Album Rater Website by @Vishwa | Stardance
|
Vishwa
|
1
|
39.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-01T05:07:44Z", "hours": 39.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made SimpleRater, a way to quickly write in your own ratings and comments on songs you love! You can search for an album using one of 2 music databases, and rate the album song-by-song on its own, colorful theme. I kept it Simple: just rate, comment, and save; no extra unnecessary features.", "repo": "https://github.com/VaishuBeta/album-rater", "demo": "https://rater-deployment.netlify.app/"}]...
|
[{"post_id": 75790, "ts": "202 [{"post_id": 75790, "ts": "2026-10-01T04:46:05Z", "hours": 1.7628, "text": "Final devlog Everything is ready for publishing. Submission will be finished shortly."}, {"post_id": 74277, "ts": "2026-09-27T03:35:16Z", "hours": 3.5108, "text": "Final update before publishing This is the final, ready-for-release version of the project. I will be working on packaging and publishing it for the next few days. Album pages can be exported with album and rating data (new button!) Home page has a new (but familiar) layout. Added a background for the search section, creates the sections step-by-step and autoscrolls for a smooth and clear experience. Looks a lot better than the old UI, honestly. **Added iTunes Search, using iTunes API. It gives generally different results than MusicBrainz, so you’ll usually find the album you’re looking for in one of them. Importing is somewhat functional but causes a lot of issues. This will likely be removed before release. Rating comments look better (gray when blank, scrolling for long comments) Rating numbers are much easier to type. Previously, the auto-formatting made it annoying to type in your rating. The format has since been fixed, and is much easier to use. Rating cells change opacity depending on how well rated the song is. Lowest opacity is 30% for a 0/10 rating, so even 0s are still visible. This makes it much easier to see what songs are rated well/poorly at a glance, and makes the page look much better. Misc. bugs were fixed, and more comments were added to the code"}, {"post_id": 60618, "ts": "2026-09-03T02:20:32Z", "hours": 7.0539, "text": "Returning to the Album Rater Album Rater is now fully saved using LocalStorage. I plan to add exports page exports very soon. Color palettes also save to LocalStorage and work with a pop-up button next to the edit button. To Do: Add imports/exports Tracklist editing before and after page creation Manual page creation with user-inputted album data Try another music search API (Spotify API needs premium) UI updates to polish the look Finish up and submit the project"}, {"post_id": 13535, "ts": "2026-06-22T04:44:10Z", "hours": 8.9711, "text": "I added so much this time I forgot everything I did, so this is just what I remember. Made the HTML files generate with a parallel JSON file, which I’ll use for data importing/exporting Added custom colors. Color Thief generates a clean palette up to 10 colors, and the user can select two to be the primary and secondary colors. This influences the entire page’s theme, since every color is derived from those two colors. The program also saves your chosen two colors in local storage, so that each page has its own selected theme. (I might move this to a JSON file, since I plan to use that for saving the tracklist info, but i’m not sure yet). On the home page, I made a pop-up box for the user to validate/customize album information before the page is made. This way, they can make the page name whatever they want instead of the automatic one. I still have to link this to the backend to sync the page names with the page generation. I finally added custom comments for the songs, which I’ve stalled for super long now. I’m debating between saving them with local storage or a seperate JSON file, so I’ve held off on the saving for now. Right now they just save in an object in the JS file. I made a top bar where the pages will go. I want the UI to look like Google tabs, with a (+) button that has a dropdown with all the pages. I fixed the entire backend and solved a bunch of problems. Before, making two pages for the same album would overwrite the old one, but now I made it make a duplicate, titled” {Album Name} 2.html” instead. I have to link this with the popup to let the user name it whatever they want, since this is going to be the page name used everywhere. I also had issues with albums with special names. For example, I knew an album titled “</3”, and the “<” and “/” would cause issues with finding the file as well as HTML formatting when generating the page. So I seperated the file name from the album name by making a separate sanitized name, which is going to be the page name. I also remember doing a ton of smaller fixes but I forgot what I did. I cleaned up the CSS in a bunch of places and made sure elements didn’t break with different-sized windows. Next, I need to Link the popup on the Search page to the backend, so the user can customize page names before making them. Make the tabs system on the top, where the user can open/close whichever pages are relevant. Let the user update the number rating, and put some album data (median rating, user rating, album comments) Let the user change the album cover in the popup and on the album page Export album pages as JSON files I’m almost done with the app and I think I can probably finish it up in a few more devlogs. I’m expecting two weeks until I’m ready to ship."}, {"post_id": 8440, "ts": "2026-06-14T01:18:21Z", "hours": 4.2897, "text": "For the past few sessions, I’ve just been working on a dynamic theme for the album page. It automatically samples a dominant and secondary color from the album cover, and then: Creates a gradient for the banner, with both colors darkened (or lightened if needed) until it’s within a certain luminosity threshhold Darkens the primary color to create the background color Raises luminosity of the secondary color to color the tracklist numbers and “Tracklist” title. I just need to make the ratings and comments for this page, and I should be done with the album pages. After that, I’ll probably work on customizing the album page themes, since sometimes they don’t pick the best colors automatically. Then, I’ll have to do rating and comment functionality. The project is going well so far, and I think I’m close to done. I only have a few more big tasks left, and then I just have to do some finishing touches and I should be done."}, {"post_id": 6643, "ts": "2026-06-11T04:05:07Z", "hours": 4.5094, "text": "Made the UI for the album pages (this is temporary, I plan to work on this a lot more later). I also added the ability to edit the album data. User input for the songs is not implemented yet, so this is all hardcoded. I spent a while trying to use ColorThief to automatically sample a background color for the album cover, but there were some issues with the package and I couldn’t get it to work, so I just hardcoded this color for now. I plan to get ColorThief (or a similar package) working soon, since the accent color is pretty important to the look of the app. My next steps are to implement song input (rating & comments) and improve the UI for this page, as well as the home page."}, {"post_id": 5296, "ts": "2026-06-09T00:50:52Z", "hours": 1.9944, "text": "I’ve made the process to generate album pages. It’s not hooked up to a script yet, so there’s no functionality, but the Search->Page Generation pipeline works perfectly. You can search for an album with MusicBrainz API (or just give a release ID) and find an album, then get a preview to make sure it’s the right album, and finally generate an album page for it. All that’s left is making the script to edit the album pages as needed. I’m guessing this will be in 3 parts: being able to edit album “hard” data, being able to input ratings and comments, and being able to export/import album pages as a file. For the last part, I would like it to be a text file or CSV file, but an HTML file could honestly be easier if all the data is written in there anyways. I’ll cross that bridge when I get to it. For now, I need to work on the former 2 parts."}, {"post_id": 4712, "ts": "2026-06-08T04:13:41Z", "hours": 3.0178, "text": "UI for the homepage is coming together well, but I might update it at the end of the project. For now, there’s a theme and it looks good, so that’s good enough. I also added a Search by Release ID feature, since the MusicBrainz API search isn’t that great and oftentimes doesn’t suggest the album that I want, so now I can just paste a release ID to get the album immediately. Next steps are building the functionality for the rating pages and figuring out how to store the user-inputted page data."}, {"post_id": 3882, "ts": "2026-06-06T23:43:20Z", "hours": 3.32, "text": "The program can now search for albums, preview information, and load it in a new file for further use. The UI looks like a mess for now, so the next step is to fix the layout and interface. This is a great experience, learning to use the MusicBrainz API and learn how Electron works, and I’m glad to be working on this project."}, {"post_id": 1147, "ts": "2026-06-03T00:10:20Z", "hours": 0.4867, "text": "Basic Electron setup for the app, learning how it works. This is my first time using Electron for any project, so this will be fun."}]...
|
Title: Album Rater Website by @Vishwa | Stardance
Title: Album Rater Website by @Vishwa | Stardance
Devlogs:
Basic Electron setup for the app, learning how it works. This is my first time using Electron for any project, so this will be fun.
The program can now search for albums, preview information, and load it in a new file for further use. The UI looks like a mess for now, so the next step is to fix the layout and interface. This is a great experience, learning to use the MusicBrainz API and learn how Electron works, and I’m glad to be working on this project.
UI for the homepage is coming together well, but I might update it at the end of the project. For now, there’s a theme and it looks good, so that’s good enough. I also added a Search by Release ID feature, since the MusicBrainz API search isn’t that great and oftentimes doesn’t suggest the album that I want, so now I can just paste a release ID to get the album immediately. Next steps are building the functionality for the rating pages and figuring out how to store the user-inputted page data.
I’ve made the process to generate album pages. It’s not hooked up to a script yet, so there’s no functionality, but the Search->Page Generation pipeline works perfectly. You can search for an album with MusicBrainz API (or just give a release ID) and find an album, then get a preview to make sure it’s the right album, and finally generate an album page for it. All that’s left is making the script to edit the album pages as needed. I’m guessing this will be in 3 parts: being able to edit album “hard” data, being able to input ratings and comments, and being able to export/import album pages as a file. For the last part, I would like it to be a text file or CSV file, but an HTML file could honestly be easier if all the data is written in there anyways. I’ll cross that bridge when I get to it. For now, I need to work on the former 2 parts.
Made the UI for the album pages (this is temporary, I plan to work on this a lot more later). I also added the ability to edit the album data. User input for the songs is not implemented yet, so this is all hardcoded. I spent a while trying to use ColorThief to automatically sample a background color for the album cover, but there were some issues with the package and I couldn’t get it to work, so I just hardcoded this color for now. I plan to get ColorThief (or a similar package) working soon, since the accent color is pretty important to the look of the app. My next steps are to implement song input (rating & comments) and improve the UI for this page, as well as the home page.
For the past few sessions, I’ve just been working on a dynamic theme for the album page. It automatically samples a dominant and secondary color from the album cover, and then: Creates a gradient for the banner, with both colors darkened (or lightened if needed) until it’s within a certain luminosity threshhold Darkens the primary color to create the background color Raises luminosity of the secondary color to color the tracklist numbers and “Tracklist” title. I just need to make the ratings and comments for this page, and I should be done with the album pages. After that, I’ll probably work on customizing the album page themes, since sometimes they don’t pick the best colors automatically. Then, I’ll have to do rating and comment functionality. The project is going well so far, and I think I’m close to done. I only have a few more big tasks left, and then I just have to do some finishing touches and I should be done.
I added so much this time I forgot everything I did, so this is just what I remember. Made the HTML files generate with a parallel JSON file, which I’ll use for data importing/exporting Added custom colors. Color Thief generates a clean palette up to 10 colors, and the user can select two to be the primary and secondary colors. This influences the entire page’s theme, since every color is derived from those two colors. The program also saves your chosen two colors in local storage, so that each page has its own selected theme. (I might move this to a JSON file, since I plan to use that for saving the tracklist info, but i’m not sure yet). On the home page, I made a pop-up box for the user to validate/customize album information before the page is made. This way, they can make the page name whatever they want instead of the automatic one. I still have to link this to the backend to sync the page names with the page generation. I finally added custom comments for the songs, which I’ve stalled for super long now. I’m debating between saving them with local storage or a seperate JSON file, so I’ve held off on the saving for now. Right now they just save in an object in the JS file. I made a top bar where the pages will go. I want the UI to look like Google tabs, with a (+) button that has a dropdown with all the pages. I fixed the entire backend and solved a bunch of problems. Before, making two pages for the same album would overwrite the old one, but now I made it make a duplicate, titled” {Album Name} 2.html” instead. I have to link this with the popup to let the user name it whatever they want, since this is going to be the page name used everywhere. I also had issues with albums with special names. For example, I knew an album titled “</3”, and the “<” and “/” would cause issues with finding the file as well as HTML formatting when generating the page. So I seperated the file name from the album name by making a separate sanitized name, which is going to be the page name. I also remember doing a ton of smaller fixes but I forgot what I did. I cleaned up the CSS in a bunch of places and made sure elements didn’t break with different-sized windows. Next, I need to Link the popup on the Search page to the backend, so the user can customize page names before making them. Make the tabs system on the top, where the user can open/close whichever pages are relevant. Let the user update the number rating, and put some album data (median rating, user rating, album comments) Let the user change the album cover in the popup and on the album page Export album pages as JSON files I’m almost done with the app and I think I can probably finish it up in a few more devlogs. I’m expecting two weeks until I’m ready to ship.
Returning to the Album Rater Album Rater is now fully saved using LocalStorage. I plan to add exports page exports very soon. Color palettes also save to LocalStorage and work with a pop-up button next to the edit button. To Do: Add imports/exports Tracklist editing before and after page creation Manual page creation with user-inputted album data Try another music search API (Spotify API needs premium) UI updates to polish the look Finish up and submit the project
Final update before publishing This is the final, ready-for-release version of the project. I will be working on packaging and publishing it for the next few days. Album pages can be exported with album and rating data (new button!) Home page has a new (but familiar) layout. Added a background for the search section, creates the sections step-by-step and autoscrolls for a smooth and clear experience. Looks a lot better than the old UI, honestly. **Added iTunes Search, using iTunes API. It gives generally different results than MusicBrainz, so you’ll usually find the album you’re looking for in one of them. Importing is somewhat functional but causes a lot of issues. This will likely be removed before release. Rating comments look better (gray when blank, scrolling for long comments) Rating numbers are much easier to type. Previously, the auto-formatting made it annoying to type in your rating. The format has since been fixed, and is much easier to use. Rating cells change opacity depending on how well rated the song is. Lowest opacity is 30% for a 0/10 rating, so even 0s are still visible. This makes it much easier to see what songs are rated well/poorly at a glance, and makes the page look much better. Misc. bugs were fixed, and more comments were added to the code
Final devlog Everything is ready for publishing. Submission will be finished shortly.
Ships:
I made SimpleRater, a way to quickly write in your own ratings and comments on songs you love! You can search for an album using one of 2 music databases, and rate the album song-by-song on its own, colorful theme. I kept it Simple: just rate, comment, and save; no extra unnecessary features....
|
1793145246.4387844
|
1793231646.4387844
|
|
6629
|
Devault by @jan_zdan1234 | Stardance
|
jan_zdan1234
|
0
|
39.0
|
0
|
[]
|
[{"post_id": 62358, "ts": "202 [{"post_id": 62358, "ts": "2026-09-05T18:01:38Z", "hours": 5.6394, "text": "Spent most of the time on the GitHub side of ingestion-service. Went with GraphQL instead of REST, mainly to actually learn something new — turned out to have its own quirks (no file diffs available, rate limiting works completely differently, cursor-based pagination instead of the usual page numbers). Built the GitHub client with three methods for commits, PRs, and issues, all going through one GraphQL endpoint. Tested it live against a few real repos, including our own Devault repo, and it’s working correctly along with pagination and rate limit tracking. Sorted out secure token storage too - separate table for credentials, encrypted with AES-GCM, and nothing else in the codebase touches the raw token except one dedicated service. Also added a check so nobody can use someone else’s token, which wasn’t there at first and was a real gap I almost shipped. Backfill is working now - runs async on virtual threads, loops through pagination for each resource type, saves to the DB with idempotency so restarts don’t duplicate anything. Source status goes PENDING -> SYNCING -> ACTIVE/ERROR depending on how it goes. Last thing I got done was the service and controller for creating sources. Still need to test the whole flow end to end through the API, add the workspace role check I skipped for now."}, {"post_id": 34206, "ts": "2026-07-24T18:40:39Z", "hours": 1.1872, "text": "Spent today setting up the ingestion-service module. Decided to go with personal access tokens for GitHub auth instead of building a full GitHub App, way less setup for now and honestly the app registration stuff isn’t worth it yet. Got the module skeleton wired up too. Hit a dumb Gradle error where IntelliJ kept saying it couldn’t find a Kotlin task in the module, turned out I accidentally put an include() call inside the module’s build.gradle.kts instead of settings.gradle.kts. Classic copy paste mistake. Fixed it and the sync worked fine after that. Also poked at the JWKS endpoint path stuff on auth-service, decided to keep it out of the api/v1 prefix by using RequestMapping per controller instead of a global context path, since jwks is supposed to live at the root per spec anyway. Next up is actually building the GitHub client and the data model for ingestion sources."}, {"post_id": 33486, "ts": "2026-07-23T13:58:37Z", "hours": 1.8556, "text": "Fixed most of the bugs from the code review today. Sorted out exception handling in common-lib, fixed a race condition when adding a member to a workspace, got the JWKS key cache working properly, plus a few smaller things along the way. Had some pain with kids in the tokens, but ended up leaving it in a simpler version since it doesn’t really matter without key rotation anyway. Next up is ingestion-service. Starting with GitHub, using a personal access token for now instead of jumping straight into GitHub App territory. Backfill first, then webhooks, we’ll see how it goes."}, {"post_id": 27688, "ts": "2026-07-13T14:01:42Z", "hours": 2.6669, "text": "Wrapped up MockK unit tests for auth-service-lib - JwtClaimsService, JwtAuthenticationProvider, and JwtAuthenticationFilter are now fully covered. Burned a good chunk of time on one annoying issue with relaxed = true on the HttpServletRequest mock - OncePerRequestFilter internally checks getAttribute/getDispatcherType before even reaching the actual filter logic, and the relaxed mock was returning non-null instead of null, so tests were passing for entirely the wrong reason. Lesson learned: when mocking Servlet API, better to explicitly stub those two calls in @BeforeEach instead of relying on relaxed. Code review also turned up a real security gap in validate() - a token with no exp claim was passing validation as effectively non-expiring, since JJWT only throws ExpiredJwtException when exp is present and past, not when it’s missing entirely. Fix incoming. Holding off on MVC/@WebMvcTest for the controllers for now - fixing a handful of code review items first (the missing exp check, plus making exception handling consistent in extractExpiration), then back to controller tests and GlobalExceptionHandler."}, {"post_id": 20031, "ts": "2026-07-01T15:11:59Z", "hours": 2.2333, "text": "I finished auth-service tests now I’m working on auth-lib. One test that failed is spring conected because I didn’t provide on local good configuration that is why it failed but in docker it works perfectly."}, {"post_id": 17900, "ts": "2026-06-28T20:44:43Z", "hours": 5.8931, "text": "I’ve written some tests, but haven’t finished yet. So far I’ve covered services with business logic in workspace-service, and I’m currently working on auth-service. After that, I’m planning to add some MVC tests for controllers and exception handlers, and finally write tests for my shared libraries: auth-service-lib and common-lib."}, {"post_id": 13758, "ts": "2026-06-22T15:31:14Z", "hours": 5.3156, "text": "Just wrapped up workspace-service. As always, had some trouble on the auth side — needed to fix a handful of bugs that came up during code review (a couple of nasty ones: deleteWorkspace was silently broken due to an FK constraint, and transferOwnership wasn’t updating Workspace.ownerId, which could’ve permanently locked workspaces). Also caught a regression in the JWT filter that was blocking even permitAll routes like login/refresh — fixed now. Along the way I also pulled the ApiResponse wrapper and exception handling into a shared common-lib module, so both auth-service and workspace-service now return a consistent response format. I might revisit a few design choices here later for my own convenience, but for now the service is functionally complete — workspace CRUD, member management, role changes, and ownership transfer all working with proper error handling. Starting on tests next, then moving on to ingestion-service."}, {"post_id": 10887, "ts": "2026-06-17T20:54:30Z", "hours": 4.8578, "text": "I have finished basics in workspace-service like some CRUD controllers basic services and repositories with dtos now I’m testing everything in insomnia. I also had some troubles with auth, it was a nightmare to find a bug (i was hardcoding jwt issuer). I added in my screenshot content from testing in insomnia"}, {"post_id": 8667, "ts": "2026-06-14T12:18:27Z", "hours": 0.8042, "text": "I fixed up auth-service-lib before jumping into workspace-service. I added AuthenticatedUser so other services can just use @AuthenticationPrincipal instead of digging through SecurityContext manually. also fixed some stuff in JwtTokenCandidate that was technically wrong but worked anyway lol"}, {"post_id": 8299, "ts": "2026-06-13T19:55:45Z", "hours": 4.5347, "text": "I made auth-service-lib today, basically a shared lib so i dont have to copy paste the same jwt verification code into every new microservice. workspace-service, query-service etc. I will just import it and get the filter + claims extraction for free. Had a weird issue where JwksClient was trying to fetch the public key from auth-service before it even started, took me a bit to figure out but I fixed it."}, {"post_id": 4381, "ts": "2026-06-07T18:15:39Z", "hours": 1.5217, "text": "I added JWT auth with Ed25519 signing. Now login returns access + refresh token pair, refresh rotates tokens, logout blacklists the refresh token in Redis. JWKS endpoint exposed at /.well-known/jwks.json for other services to verify tokens."}, {"post_id": 2368, "ts": "2026-06-04T20:29:25Z", "hours": 2.4933, "text": "i was working on my auth-service. I changed from basic auth with bearer tokens to access and refresh tokens. Also I added endpoint to refresh tokens when they expire and logout endpoint."}]...
|
Title: Devault by @jan_zdan1234 | Stardance
Devlo Title: Devault by @jan_zdan1234 | Stardance
Devlogs:
i was working on my auth-service. I changed from basic auth with bearer tokens to access and refresh tokens. Also I added endpoint to refresh tokens when they expire and logout endpoint.
I added JWT auth with Ed25519 signing. Now login returns access + refresh token pair, refresh rotates tokens, logout blacklists the refresh token in Redis. JWKS endpoint exposed at /.well-known/jwks.json for other services to verify tokens.
I made auth-service-lib today, basically a shared lib so i dont have to copy paste the same jwt verification code into every new microservice. workspace-service, query-service etc. I will just import it and get the filter + claims extraction for free. Had a weird issue where JwksClient was trying to fetch the public key from auth-service before it even started, took me a bit to figure out but I fixed it.
I fixed up auth-service-lib before jumping into workspace-service. I added AuthenticatedUser so other services can just use @AuthenticationPrincipal instead of digging through SecurityContext manually. also fixed some stuff in JwtTokenCandidate that was technically wrong but worked anyway lol
I have finished basics in workspace-service like some CRUD controllers basic services and repositories with dtos now I’m testing everything in insomnia. I also had some troubles with auth, it was a nightmare to find a bug (i was hardcoding jwt issuer). I added in my screenshot content from testing in insomnia
Just wrapped up workspace-service. As always, had some trouble on the auth side — needed to fix a handful of bugs that came up during code review (a couple of nasty ones: deleteWorkspace was silently broken due to an FK constraint, and transferOwnership wasn’t updating Workspace.ownerId, which could’ve permanently locked workspaces). Also caught a regression in the JWT filter that was blocking even permitAll routes like login/refresh — fixed now. Along the way I also pulled the ApiResponse wrapper and exception handling into a shared common-lib module, so both auth-service and workspace-service now return a consistent response format. I might revisit a few design choices here later for my own convenience, but for now the service is functionally complete — workspace CRUD, member management, role changes, and ownership transfer all working with proper error handling. Starting on tests next, then moving on to ingestion-service.
I’ve written some tests, but haven’t finished yet. So far I’ve covered services with business logic in workspace-service, and I’m currently working on auth-service. After that, I’m planning to add some MVC tests for controllers and exception handlers, and finally write tests for my shared libraries: auth-service-lib and common-lib.
I finished auth-service tests now I’m working on auth-lib. One test that failed is spring conected because I didn’t provide on local good configuration that is why it failed but in docker it works perfectly.
Wrapped up MockK unit tests for auth-service-lib - JwtClaimsService, JwtAuthenticationProvider, and JwtAuthenticationFilter are now fully covered. Burned a good chunk of time on one annoying issue with relaxed = true on the HttpServletRequest mock - OncePerRequestFilter internally checks getAttribute/getDispatcherType before even reaching the actual filter logic, and the relaxed mock was returning non-null instead of null, so tests were passing for entirely the wrong reason. Lesson learned: when mocking Servlet API, better to explicitly stub those two calls in @BeforeEach instead of relying on relaxed. Code review also turned up a real security gap in validate() - a token with no exp claim was passing validation as effectively non-expiring, since JJWT only throws ExpiredJwtException when exp is present and past, not when it’s missing entirely. Fix incoming. Holding off on MVC/@WebMvcTest for the controllers for now - fixing a handful of code review items first (the missing exp check, plus making exception handling consistent in extractExpiration), then back to controller tests and GlobalExceptionHandler.
Fixed most of the bugs from the code review today. Sorted out exception handling in common-lib, fixed a race condition when adding a member to a workspace, got the JWKS key cache working properly, plus a few smaller things along the way. Had some pain with kids in the tokens, but ended up leaving it in a simpler version since it doesn’t really matter without key rotation anyway. Next up is ingestion-service. Starting with GitHub, using a personal access token for now instead of jumping straight into GitHub App territory. Backfill first, then webhooks, we’ll see how it goes.
Spent today setting up the ingestion-service module. Decided to go with personal access tokens for GitHub auth instead of building a full GitHub App, way less setup for now and honestly the app registration stuff isn’t worth it yet. Got the module skeleton wired up too. Hit a dumb Gradle error where IntelliJ kept saying it couldn’t find a Kotlin task in the module, turned out I accidentally put an include() call inside the module’s build.gradle.kts instead of settings.gradle.kts. Classic copy paste mistake. Fixed it and the sync worked fine after that. Also poked at the JWKS endpoint path stuff on auth-service, decided to keep it out of the api/v1 prefix by using RequestMapping per controller instead of a global context path, since jwks is supposed to live at the root per spec anyway. Next up is actually building the GitHub client and the data model for ingestion sources.
Spent most of the time on the GitHub side of ingestion-service. Went with GraphQL instead of REST, mainly to actually learn something new — turned out to have its own quirks (no file diffs available, rate limiting works completely differently, cursor-based pagination instead of the usual page numbers). Built the GitHub client with three methods for commits, PRs, and issues, all going through one GraphQL endpoint. Tested it live against a few real repos, including our own Devault repo, and it’s working correctly along with pagination and rate limit tracking. Sorted out secure token storage too - separate table for credentials, encrypted with AES-GCM, and nothing else in the codebase touches the raw token except one dedicated service. Also added a check so nobody can use someone else’s token, which wasn’t there at first and was a real gap I almost shipped. Backfill is working now - runs async on virtual threads, loops through pagination for each resource type, saves to the DB with idempotency so restarts don’t duplicate anything. Source status goes PENDING -> SYNCING -> ACTIVE/ERROR depending on how it goes. Last thing I got done was the service and controller for creating sources. Still need to test the whole flow end to end through the API, add the workspace role check I skipped for now....
|
1792680852.3454087
|
1793285652.3454087
|
|
14705
|
LUMA by @Eben-Siyabalapitiya | Stardance
|
Eben-Siyabalapitiya
|
1
|
39.0
|
177
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-07T22:44:28Z", "hours": 39.0, "multiplier": 5.0, "payout": 177, "blessing": "neutral", "text": "I built LUMA. She is a little desk robot with animated eyes that actually has a personality. tap it once and it gets excited, spam tap it and it gets mad, rub your finger on it and it gets cozy. each emotion has multiple different face variants so it never shows the same reaction twice. it also shows live weather, a real time clock and a calendar on a tiny 1.8 TFT screen. The hardest part was spending hours writing the emotion system, making sure everything was perfect, and then compiling it only to get hit with “101% of flash limit” it wouldn’t even upload. completely forgot there was a size limit while I was writing it so I just kept going and going. ended up spending more time fixing that than actually writing the feature in the first place. had to rip out entire libraries and replace them with raw socket connections and manual parsers just to get it under the limit without losing a single feature and it was a very painful session honestly. But what I’m most proud of is how far it came from just a random idea. the firmware, the enclosure, the website, the domain, the devlogs all of it open source so anyone can build their own. this is my first ever open source project and it came out way better than I ever expected. genuinely wasn’t expecting it to get this far or turn out this good, it went way beyond what I had in mind when I started and I’m really proud of it. love how it turned out. Everything is at meetluma.live if you want to check it out or build your own", "repo": "https://github.com/Eben-Siyabalapitiya/LUMA", "demo": ""}]...
|
[{"post_id": 24384, "ts": "202 [{"post_id": 24384, "ts": "2026-07-07T22:13:10Z", "hours": 13.0889, "text": "DEVLOG 008 - The Website & Wrapping Everything Up Everything is finally done after a long grind. Building the Website Since this is my first ever open source project I really wanted the website to be really good. Not just functional but actually good. So I locked for hours and paid attention to every single detail. Started with a blue colour scheme but it wasn’t sitting right with LUMA’s darker aesthetic so i decided to switch everything to a deeper darker palette and it immediately i knew it was perfect for her. I went through a lot of iterations getting the look right, smooth scroll animations, hover effects, proper transitions throughout. Kept going back and refining until it felt clean and polished. Bugs I ran into along the way: Files weren’t downloading when the download button was clicked tracked down the issue and got it fixed Some animations were firing at the wrong time on scroll it was all so cooked so i had to adjust the trigger points for all of them so everything feels smooth and clean A few layout inconsistencies on smaller screens that needed sorting Hover states on some cards weren’t behaving correctly so i hadda clean those up as well Some placeholder sections needed proper content wired in before publishing so i had to collect all the files and add it to its proper spots Each thing small on its own but there were a lot lot lot of them so they all adds up. What’s on the Site? Made sure everything anyone needs to build their own LUMA is actually there: Full build guide with step by step instructions Wiring diagram so its not just the chart from before, a proper schematic so anyone can see visually how it all connects before they start wiring 3MF file set up in Bambu Lab with the right settings infill, wall thickness, all the print settings dialed in. One click download and it’s ready to print CAD file included so anyone can open it up and customize the enclosure if they need to Recommendations section for parts and anything else that helps with the build Contact section so if anyone has questions or runs into issues building it they can reach out directly and the question will straight drop into my email ( i check my emails everyday) Bought a proper domain for it as well with the money i had left. LUMA now has a real home on the internet and its not just a project link, an actual address anyone can search up and find. Code on GitHub Everything is published. Full firmware, wiring, build instructions all of it open source and ready for anyone who wants to build their own. Honestly really proud of how far this went. Luma started as a random idea and turned into a complete project working firmware, a finished enclosure, a proper website, a domain, and a GitHub repo with everything documented. My first ever open source project and it came out wayyy better than I expected. LUMA IS FINALLY DONE. Not just for me for anyone who wants their own little desk companion. GitHub → https://github.com/Eben-Siyabalapitiya/LUMA Website → https://meetluma.live/"}, {"post_id": 22453, "ts": "2026-07-04T22:27:35Z", "hours": 6.17, "text": "DEVLOG 007 — Final Polish & Full Assembly Mostly physical work this session but a lot got done and LUMA is finally feeling complete. ───────────────────────────────────────── New Enclosure & Sensor Placement ───────────────────────────────────────── Reprinted the enclosure again with a new slot for the second sensor. Moved things around so the layout actually makes sense to use: ◆ Emotion sensor mounted on the top, easy to reach, natural to tap or hold while LUMA is sitting on your desk ◆ Mode switch moved to the back top center so switching between face, clock, weather, and calendar is just a tap on the back Much more intuitive than before. ───────────────────────────────────────── Legs ───────────────────────────────────────── LUMA was looking too much like a plain box so I designed and printed her some legs. Honestly one of those small changes that made a big difference, she looks way more like an actual character now and it just suited her really well. ───────────────────────────────────────── Reprints & Tolerance Fixes ───────────────────────────────────────── Had to reprint most of the parts to get the thickness right for the touch sensors to actually work properly through the walls. Also tightened up the sensor slot tolerances that were coming out too loose. Took a few iterations but everything fits clean now. ───────────────────────────────────────── Full Rewire & Schematic ───────────────────────────────────────── Rewired the whole thing properly from scratch. Made a proper schematic diagram and followed it this time so there are no guessing games with the connections. Resoldered everything cleanly so it’s solid for the final assembly and not going anywhere. ───────────────────────────────────────── Code & CAD Cleanup ───────────────────────────────────────── Fixed up the remaining code bugs, cleaned everything up and made sure it was all working properly. Same with the CAD, went through it and sorted all the small things that still needed attention. ───────────────────────────────────────── Final Print — Black ───────────────────────────────────────── Printed everything in black for the final assembly. Really suited LUMA. Looked way better than the prototypes. ───────────────────────────────────────── GitHub & Wrapping Up ───────────────────────────────────────── Set up a proper GitHub repo, wrote everything up, and finalized the project. LUMA is done. Next goal is to build LUMA a website. Full build guide, open source, everything anyone needs to build their own. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"}, {"post_id": 21162, "ts": "2026-07-02T23:31:36Z", "hours": 5.6367, "text": "DEVLOG 005 - Second Touch Sensor & Emotion System Added a second capacitive touch sensor on a new GPIO pin dedicated entirely to emotions. How It Works Built a full gesture detection system on the new sensor: ◆ Single tap → excited ◆ Hold for 800ms → cozy ◆ Rapid tap 3+ times → mad Each emotion has 5 or 6 distinct face variants that cycle using weighted random probabilities so it never shows the same reaction twice in a row. ◈ Mad - red angry eyes in different shapes: wide glare, tiny squint, psycho stare, disgusted droop ◈ Excited - big round happy eyes, bouncy small eyes, wide open stare ◈ Cozy - half closed drowsy eyes, warm round soft eyes, tiny sleepy eyes Emotions auto expire after 6 seconds and return to the default idle face automatically. Spent a long time writing the code, fixing errors, getting everything working and then the compiled firmware came out at 101% of the ESP32’s flash limit and wouldn’t upload. Couldn’t just scrap it after all that work so I started diagnosing what was eating the space. The two biggest culprits: ◈ HTTPClient and ArduinoJson together were pulling in around 60–80KB of overhead just from the libraries alone How I Fixed It ◆ Replaced HTTPClient and ArduinoJson with a raw WiFiClient socket connection and three tiny manual JSON parsers using strstr and atof no library needed at all ◆ Replaced every cos and sin math call with precomputed fixed point lookup tables stored in PROGMEM completely removed the float math library dependency ◆ Wrapped all string literals in F() to keep them in flash instead of RAM Got the binary down under the limit without cutting a single feature. Everything still works exactly the same, it just actually fits on the board now. Still needs some tuning though the emotion faces need a bit more work to feel right and there are a few things here and there that need cleaning up. The structure and foundation is solid but it’s not fully polished yet. More to come on that in the next log."}, {"post_id": 19651, "ts": "2026-07-01T01:00:57Z", "hours": 1.5672, "text": "DEVLOG 004 - Fixes, Wiring Cleanup & Getting It Solid Mostly a cleanup and bug fixing session today before moving on to the next round of upgrades. Screen Flip Once the screen was mounted in the enclosure everything was upside down. One line fix changed setRotation from 1 to 3 and that was it. Done. Weather Screen Bug Tracked down an annoying bug where the weather screen would show data the first time but come back blank after switching away and returning. The issue was a redraw flag that never reset on screen re entry. Fixed it by resetting the flag in both the screen router and the mode switch handler so weather now fully redraws every time you land on it. Enclosure Reprint - Screen Pocket Reprinted the base and added a small pocket to the cutout because the screen wasn’t sitting flush. The soldered pins on the front of the screen were hitting the case and pushing it up slightly. Added a slot for them to drop into screen sits perfectly flush now. Wiring Issues - Touch Sensor One of the touch sensors was activating on its own just a red light flashing like something was constantly triggering it with nothing touching it. First thought was the code since I was in the middle of cleaning everything up anyway, so I spent a while going through it trying to figure out what was wrong. Nothing. Code was fine. Turned out to be a bad ground connection on the sensor the whole time. Resoldered it properly and it’s been stable since. Classic hardware problem disguised as a software problem. Overall today was about getting everything solid and clean before the next upgrade push. Wiring is tidy, code is cleaned up, everything is working as expected."}, {"post_id": 18929, "ts": "2026-06-30T03:25:21Z", "hours": 3.5008, "text": "DEVLOG 003 — First Real Assembly Now that the firmware was in a solid place, it was time to actually build the thing. Got into CAD properly and started designing the enclosure for real not just roughing it out anymore, actually planning where every component sits and how it all fits together. Originally I was just going to use the bare ESP32 board and solder everything directly onto it, but ended up switching to a breakout board for the ESP32 instead which was the right call. That change meant I had to scale the enclosure up a bit to fit everything properly, so I reworked the design, got the dimensions right, and sent it to print. Once it came off the printer I grabbed the calipers and started checking everything: ◆ ESP32 breakout board fit perfectly in its slot ◆ Screen seated clean in the cutout ◆ Touch sensor connected and sitting in the right spots ◆ Overall fit was exactly where I wanted it Pretty satisfying moment honestly. But then I started running into the first real problems. ◈ The walls ended up being too thick, so the capacitive touch sensors could barely detect anything through them touch was sluggish and inconsistent, not responsive at all ◈ The screen had to be mounted the way it is because flipping it would’ve sent the wires running from the pins straight into the breakout board no room for that. Which left the display showing everything upside down Both things need fixing, but overall for a first proper assembly it came out pretty well. It’s starting to look like an actual product, which is a good feeling."}, {"post_id": 17746, "ts": "2026-06-28T17:42:08Z", "hours": 4.1867, "text": "DEVLOG 002 — Firmware & Making It Actually Look Good First thing I tackled was getting the core firmware structured properly. Built out the full mode switching system FACE, CLOCK, WEATHER, and CALENDAR all cycling on a single small capacitive touch sensor. Then got into the connectivity side of things: ◆ WiFi connecting on boot automatically ◆ NTP time sync so the clock always pulls real time without me hardcoding anything ◆ OpenWeatherMap API hooked up parsing temperature, humidity, wind speed, and condition ◆ Calendar built from the actual current date with a real day grid and event highlights Everything was working at this point but honestly it looked terrible just white text on a black screen, nothing impressive at all. It was functional but it didn’t feel like anything yet. So I basically tore everything out visually and rebuilt every screen from scratch. That’s where it started actually feeling like a real product. ◈ Gradient header bar across every screen ◈ Weather display completely redone color coded temperature + pixel art icon system that draws different visuals depending on the condition (sun, clouds, rain, thunderstorm, snow, fog all drawn in code, no images) ◈ Calendar got a proper grid with weekday headers, today highlighted, and event colors ◈ Clock got a big clean digital readout with a seconds progress bar filling across the screen in real time ◈ Scrolling agenda strip at the bottom of the calendar showing the next upcoming event Going from plain text to all of that in one session was a big jump. That was the moment it started looking like something I’d actually want on my desk."}, {"post_id": 16710, "ts": "2026-06-27T04:42:31Z", "hours": 4.3819, "text": "DEVLOG 001 - Planning out & Testing So basically I had this idea of building a little desktop robot that could show a face, clock, weather, and calendar and I just wanted something that felt alive on my desk, not another boring info display. Decided to go with the ESP32 and the ST7735 TFT display, ordered the parts and waited. Parts came in and before doing anything permanent I threw everything onto a breadboard first just to test connections and make sure the components were actually talking to each other. Got the ESP32 seated, wired up the TFT with the SPI lines, and powered it on and immediately the display was just… white. Solid white, nothing rendering at all. I genuinely thought it was a code issue so I started digging through everything: Rewrote the initialization logic multiple times Swapped library settings, tried different pin configs Spent way too long convinced it was something in the code Eventually I just rewired the whole breadboard from scratch out of frustration and it just worked. Wiring issue the whole time, one of the connections on the breadboard just wasn’t seated properly into the rail. Such a simple thing but it ate up so much time. After that everything started clicking. Got the display confirmed working, flashed the RoboEyes library on it and saw the eyes blink on actual hardware for the first time that was a real moment honestly. Super small but it just felt like okay this is actually going somewhere. First boot was literally just a face sitting there blinking on a breadboard with loose wires everywhere, nothing else running, but that was enough to know the foundation was solid. Ended the session jumping into CAD and just roughing out what the enclosure could look like, trying to figure out how everything fits together in a way that actually looks good sitting on a desk."}]...
|
Title: LUMA by @Eben-Siyabalapitiya | Stardance
D Title: LUMA by @Eben-Siyabalapitiya | Stardance
Devlogs:
DEVLOG 001 - Planning out & Testing So basically I had this idea of building a little desktop robot that could show a face, clock, weather, and calendar and I just wanted something that felt alive on my desk, not another boring info display. Decided to go with the ESP32 and the ST7735 TFT display, ordered the parts and waited. Parts came in and before doing anything permanent I threw everything onto a breadboard first just to test connections and make sure the components were actually talking to each other. Got the ESP32 seated, wired up the TFT with the SPI lines, and powered it on and immediately the display was just… white. Solid white, nothing rendering at all. I genuinely thought it was a code issue so I started digging through everything: Rewrote the initialization logic multiple times Swapped library settings, tried different pin configs Spent way too long convinced it was something in the code Eventually I just rewired the whole breadboard from scratch out of frustration and it just worked. Wiring issue the whole time, one of the connections on the breadboard just wasn’t seated properly into the rail. Such a simple thing but it ate up so much time. After that everything started clicking. Got the display confirmed working, flashed the RoboEyes library on it and saw the eyes blink on actual hardware for the first time that was a real moment honestly. Super small but it just felt like okay this is actually going somewhere. First boot was literally just a face sitting there blinking on a breadboard with loose wires everywhere, nothing else running, but that was enough to know the foundation was solid. Ended the session jumping into CAD and just roughing out what the enclosure could look like, trying to figure out how everything fits together in a way that actually looks good sitting on a desk.
DEVLOG 002 — Firmware & Making It Actually Look Good First thing I tackled was getting the core firmware structured properly. Built out the full mode switching system FACE, CLOCK, WEATHER, and CALENDAR all cycling on a single small capacitive touch sensor. Then got into the connectivity side of things: ◆ WiFi connecting on boot automatically ◆ NTP time sync so the clock always pulls real time without me hardcoding anything ◆ OpenWeatherMap API hooked up parsing temperature, humidity, wind speed, and condition ◆ Calendar built from the actual current date with a real day grid and event highlights Everything was working at this point but honestly it looked terrible just white text on a black screen, nothing impressive at all. It was functional but it didn’t feel like anything yet. So I basically tore everything out visually and rebuilt every screen from scratch. That’s where it started actually feeling like a real product. ◈ Gradient header bar across every screen ◈ Weather display completely redone color coded temperature + pixel art icon system that draws different visuals depending on the condition (sun, clouds, rain, thunderstorm, snow, fog all drawn in code, no images) ◈ Calendar got a proper grid with weekday headers, today highlighted, and event colors ◈ Clock got a big clean digital readout with a seconds progress bar filling across the screen in real time ◈ Scrolling agenda strip at the bottom of the calendar showing the next upcoming event Going from plain text to all of that in one session was a big jump. That was the moment it started looking like something I’d actually want on my desk.
DEVLOG 003 — First Real Assembly Now that the firmware was in a solid place, it was time to actually build the thing. Got into CAD properly and started designing the enclosure for real not just roughing it out anymore, actually planning where every component sits and how it all fits together. Originally I was just going to use the bare ESP32 board and solder everything directly onto it, but ended up switching to a breakout board for the ESP32 instead which was the right call. That change meant I had to scale the enclosure up a bit to fit everything properly, so I reworked the design, got the dimensions right, and sent it to print. Once it came off the printer I grabbed the calipers and started checking everything: ◆ ESP32 breakout board fit perfectly in its slot ◆ Screen seated clean in the cutout ◆ Touch sensor connected and sitting in the right spots ◆ Overall fit was exactly where I wanted it Pretty satisfying moment honestly. But then I started running into the first real problems. ◈ The walls ended up being too thick, so the capacitive touch sensors could barely detect anything through them touch was sluggish and inconsistent, not responsive at all ◈ The screen had to be mounted the way it is because flipping it would’ve sent the wires running from the pins straight into the breakout board no room for that. Which left the display showing everything upside down Both things need fixing, but overall for a first proper assembly it came out pretty well. It’s starting to look like an actual product, which is a good feeling.
DEVLOG 004 - Fixes, Wiring Cleanup & Getting It Solid Mostly a cleanup and bug fixing session today before moving on to the next round of upgrades. Screen Flip Once the screen was mounted in the enclosure everything was upside down. One line fix changed setRotation from 1 to 3 and that was it. Done. Weather Screen Bug Tracked down an annoying bug where the weather screen would show data the first time but come back blank after switching away and returning. The issue was a redraw flag that never reset on screen re entry. Fixed it by resetting the flag in both the screen router and the mode switch handler so weather now fully redraws every time you land on it. Enclosure Reprint - Screen Pocket Reprinted the base and added a small pocket to the cutout because the screen wasn’t sitting flush. The soldered pins on the front of the screen were hitting the case and pushing it up slightly. Added a slot for them to drop into screen sits perfectly flush now. Wiring Issues - Touch Sensor One of the touch sensors was activating on its own just a red light flashing like something was constantly triggering it with nothing touching it. First thought was the code since I was in the middle of cleaning everything up anyway, so I spent a while going through it trying to figure out what was wrong. Nothing. Code was fine. Turned out to be a bad ground connection on the sensor the whole time. Resoldered it properly and it’s been stable since. Classic hardware problem disguised as a software problem. Overall today was about getting everything solid and clean before the next upgrade push. Wiring is tidy, code is cleaned up, everything is working as expected.
DEVLOG 005 - Second Touch Sensor & Emotion System Added a second capacitive touch sensor on a new GPIO pin dedicated entirely to emotions. How It Works Built a full gesture detection system on the new sensor: ◆ Single tap → excited ◆ Hold for 800ms → cozy ◆ Rapid tap 3+ times → mad Each emotion has 5 or 6 distinct face variants that cycle using weighted random probabilities so it never shows the same reaction twice in a row. ◈ Mad - red angry eyes in different shapes: wide glare, tiny squint, psycho stare, disgusted droop ◈ Excited - big round happy eyes, bouncy small eyes, wide open stare ◈ Cozy - half closed drowsy eyes, warm round soft eyes, tiny sleepy eyes Emotions auto expire after 6 seconds and return to the default idle face automatically. Spent a long time writing the code, fixing errors, getting everything working and then the compiled firmware came out at 101% of the ESP32’s flash limit and wouldn’t upload. Couldn’t just scrap it after all that work so I started diagnosing what was eating the space. The two biggest culprits: ◈ HTTPClient and ArduinoJson together were pulling in around 60–80KB of overhead just from the libraries alone How I Fixed It ◆ Replaced HTTPClient and ArduinoJson with a raw WiFiClient socket connection and three tiny manual JSON parsers using strstr and atof no library needed at all ◆ Replaced every cos and sin math call with precomputed fixed point lookup tables stored in PROGMEM completely removed the float math library dependency ◆ Wrapped all string literals in F() to keep them in flash instead of RAM Got the binary down under the limit without cutting a single feature. Everything still works exactly the same, it just actually fits on the board now. Still needs some tuning though the emotion faces need a bit more work to feel right and there are a few things here and there that need cleaning up. The structure and foundation is solid but it’s not fully polished yet. More to come on that in the next log.
DEVLOG 007 — Final Polish & Full Assembly Mostly physical work this session but a lot got done and LUMA is finally feeling complete. ───────────────────────────────────────── New Enclosure & Sensor Placement ───────────────────────────────────────── Reprinted the enclosure again with a new slot for the second sensor. Moved things around so the layout actually makes sense to use: ◆ Emotion sensor mounted on the top, easy to reach, natural to tap or hold while LUMA is sitting on your desk ◆ Mode switch moved to the back top center so switching between face, clock, weather, and calendar is just a tap on the back Much more intuitive than before. ───────────────────────────────────────── Legs ───────────────────────────────────────── LUMA was looking too much like a plain box so I designed and printed her some legs. Honestly one of those small changes that made a big difference, she looks way more like an actual character now and it just suited her really well. ───────────────────────────────────────── Reprints & Tolerance Fixes ───────────────────────────────────────── Had to reprint most of the parts to get the thickness right for the touch sensors to actually work properly through the walls. Also tightened up the sensor slot tolerances that were coming out too loose. Took a few iterations but everything fits clean now. ───────────────────────────────────────── Full Rewire & Schematic ───────────────────────────────────────── Rewired the whole thing properly from scratch. Made a proper schematic diagram and followed it this time so there are no guessing games with the connections. Resoldered everything cleanly so it’s solid for the final assembly and not going anywhere. ───────────────────────────────────────── Code & CAD Cleanup ───────────────────────────────────────── Fixed up the remaining code bugs, cleaned everything up and made sure it was all working properly. Same with the CAD, went through it and sorted all the small things that still needed attention. ───────────────────────────────────────── Final Print — Black ───────────────────────────────────────── Printed everything in black for the final assembly. Really suited LUMA. Looked way better than the prototypes. ───────────────────────────────────────── GitHub & Wrapping Up ───────────────────────────────────────── Set up a proper GitHub repo, wrote everything up, and finalized the project. LUMA is done. Next goal is to build LUMA a website. Full build guide, open source, everything anyone needs to build their own. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DEVLOG 008 - The Website & Wrapping Everything Up Everything is finally done after a long grind. Building the Website Since this is my first ever open source project I really wanted the website to be really good. Not just functional but actually good. So I locked for hours and paid attention to every single detail. Started with a blue colour scheme but it wasn’t sitting right with LUMA’s darker aesthetic so i decided to switch everything to a deeper darker palette and it immediately i knew it was perfect for her. I went through a lot of iterations getting the look right, smooth scroll animations, hover effects, proper transitions throughout. Kept going back and refining until it felt clean and polished. Bugs I ran into along the way: Files weren’t downloading when the download button was clicked tracked down the issue and got it fixed Some animations were firing at the wrong time on scroll it was all so cooked so i had to adjust the trigger points for all of them so everything feels smooth and clean A few layout inconsistencies on smaller screens that needed sorting Hover states on some cards weren’t behaving correctly so i hadda clean those up as well Some placeholder sections needed proper content wired in before publishing so i had to collect all the files and add it to its proper spots Each thing small on its own but there were a lot lot lot of them so they all adds up. What’s on the Site? Made sure everything anyone needs to build their own LUMA is actually there: Full build guide with step by step instructions Wiring diagram so its not just the chart from before, a proper schematic so anyone can see visually how it all connects before they start wiring 3MF file set up in Bambu Lab with the right settings infill, wall thickness, all the print settings dialed in. One click download and it’s ready to print CAD file included so anyone can open it up and customize the enclosure if they need to Recommendations section for parts and anything else that helps with the build Contact section so if anyone has questions or runs into issues building it they can reach out directly and the question will straight drop into my email ( i check my emails everyday) Bought a proper domain for it as well with the money i had left. LUMA now has a real home on the internet and its not just a project link, an actual address anyone can search up and find. Code on GitHub Everything is published. Full firmware, wiring, build instructions all of it open source and ready for anyone who wants to build their own. Honestly really proud of how far this went. Luma started as a random idea and turned into a complete project working firmware, a finished enclosure, a proper website, a domain, and a GitHub repo with everything documented. My first ever open source project and it came out wayyy better than I expected. LUMA IS FINALLY DONE. Not just for me for anyone who wants their own little desk companion. GitHub → https://github.com/Eben-Siyabalapitiya/LUMA Website → https://meetluma.live/
Ships:
I built LUMA. She is a little desk robot with animated eyes that actually has a personality. tap it once and it gets excited, spam tap it and it gets mad, rub your finger on it and it gets cozy. each emotion has multiple different face variants so it never shows the same reaction twice. it also shows live weather, a real time clock and a calendar on a tiny 1.8 TFT screen. The hardest part was spending hours writing the emotion system, making sure everything was perfect, and then compiling it only to get hit with “101% of flash limit” it wouldn’t even upload. completely forgot there was a size limit while I was writing it so I just kept going and going. ended up spending more time fixing that than actually writing the feature in the first place. had to rip out entire libraries and replace them with raw socket connections and manual parsers just to get it under the limit without losing a single feature and it was a very painful session honestly. But what I’m most proud of is how far it came from just a random idea. the firmware, the enclosure, the website, the domain, the devlogs all of it open source so anyone can build their own. this is my first ever open source project and it came out way better than I ever expected. genuinely wasn’t expecting it to get this far or turn out this good, it went way beyond what I had in mind when I started and I’m really proud of it. love how it turned out. Everything is at meetluma.live if you want to check it out or build your own...
|
1792875239.0659401
|
1793739239.0659401
|
|
18567
|
SecureVault by @F3rro_32 | Stardance
|
F3rro_32
|
2
|
39.0
|
367
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-19T18:11:39Z", "hours": 4.0, "multiplier": 12.33, "payout": 49, "blessing": "neutral", "text": "Just improved some things, mostly advices from other users.", "repo": "https://github.com/eLandoAD/Rila", "demo": "https://securevault.alessio.hackclub.app/"}, {"ship_num": 2, "ts": "2026-07-15T09:49:13Z", "hours": 35.0, "multiplier": 9.05, "payout": 318, "blessing": "neutral", "text": "SecureVault, zero knowledge, end-to-end encrypted cloud storage. Your files and their names are encrypted in the browser before they ever reach the server, which only ever stores ciphertext it can’t read.", "repo": "https://github.com/eLandoAD/Rila", "demo": "https://securevault.alessio.hackclub.app/"}]...
|
[{"post_id": 70745, "ts": "202 [{"post_id": 70745, "ts": "2026-09-19T18:11:08Z", "hours": 3.2156, "text": "devlog Hey guys, how’s going? I’m pretty well, I have loads of things to do, but there’s always time for my biggest passion, coding. Yesterday I turned on a strinct CSP (content security policy) for this project, so today the pricing section looked like the one in the first screen. The Popular badge had no pill behind it, it was just the word, with the card’s border running straight through it. The higlighted card’s border was white, instead of indigo. Also the Get Pro was the same flat grey as the two buttons next to it. It looked like a CSS mistake, but actually it wasn’t. “It worked on my machine” ng serve rendered it correctly. Same commit, same browser. That is the part that cost me the most time: I kept hunting for a rule that only existed in production. So I stopped reading CSS and read the live page instead: --color-primary → \"\" (empty) badge background → rgba(0, 0, 0, 0) (transparent) card border → rgb(255, 255, 255) --color-primary wasn’t defined at all. And when a custom property is undefined, background-color: var(--color-primary) computes to transparent , while border-color: var(--color-primary) falls back to currentColor , which on that section is white. One missing variable, and every symptom follows from it, including the ones that look unrelated. Where the variable went Angular’s production build enables inlineCritical . It inlines the critical CSS and defers the rest of the stylesheet like this: <link rel= \"stylesheet\" href= \"styles-XXXX.css\" media= \"print\" onload= \"this.media='all'\" > That onload is an inline event handler , and script-src 'self' blocks inline handlers. So the handler never ran, the stylesheet stayed at media=\"print\" , and it was never applied. For a whole day the site had been running on nothing but the inlined critical CSS, and the theme tokens live in the file that never loaded. ng serve doesn’t run inlineCritical . That’s the entire reason it only happened in production. The fix is one flag in angular.json : \"optimization\" : { \"styles\" : { \"minify\" : true , \"inlineCritical\" : false } } The stylesheet now ships as a plain blocking <link> . One render-blocking request, ~20 KB gzipped, and the CSP stays exactly as strict as it was."}, {"post_id": 32224, "ts": "2026-07-21T08:07:59Z", "hours": 0.7983, "text": "I don’t know why, but the db crashed, so the backend wasn’t working and many of you couldn’t test out the app. I just fixed this problem, and added in docker compose the restart clause, so things like this won’t happen again. Sorry for the problem"}, {"post_id": 28809, "ts": "2026-07-15T09:41:17Z", "hours": 1.2811, "text": "Finished the project. I used a seo checker to improve the seo, at least, what I can actually improve. I then focused on writing the md files. The readme and the security.md, that displays all infos about how crypto works and in general terms, security. I hope you like the project."}, {"post_id": 28422, "ts": "2026-07-14T17:36:22Z", "hours": 6.4156, "text": "Hey guys, here I am again. Lately I focused a lot on improving both the website and the overall user experience. The first thing I did was completely redesign the landing page. I switched everything to a dark theme, added a new hero section with a background image and gradient overlay, and converted every section into dark cards to make the design feel much more consistent. I also reworked the pricing section Finally, I added smooth navigation between sections using anchor links. I also redesigned the navigation bar. On desktop and tablets it stays at the top as expected, while on mobile it moves to the bottom of the screen for easier access. During this process I removed the old hamburger menu. The file manager received one of the biggest UI updates. On mobile there’s now a bottom navigation bar with a floating upload button in the center. The Files page no longer uses a traditional table; instead, files are displayed as modern cards with encryption badges and a cleaner action menu that groups all available operations together. I also fixed some spacing issues on the login page caused by the fixed navbar. Besides the UI, I spent some time improving the website from a technical perspective. I configured gzip compression, hid unnecessary server information, fixed some SEO issues like duplicated headings, and added both a robots.txt file and a sitemap. Another important feature I implemented is the new Settings page. It now includes profile information, security settings, storage usage, and account management. I decided to keep the interface honest: only features that are actually supported by the backend are available, while future ones are clearly disabled. I also implemented permanent account deletion, both on the backend and frontend, making sure all related data is safely removed before the user is deleted. I added a lot, I hope everything works as I expect. See ya"}, {"post_id": 25831, "ts": "2026-07-10T09:45:28Z", "hours": 3.4414, "text": "Okay guys, big news: I was finally able to get an SMTP server from a friend of mine, so now email verification and password recovery are working. I’m pretty satisfied; I really wanted this app to work as well as possible, and with email support, it feels even more complete. Stay tuned, because it won’t be long before it’s ready."}, {"post_id": 24603, "ts": "2026-07-08T09:57:29Z", "hours": 0.7383, "text": "Hey guys, I know this isn’t a proper devlog, but I wanted to show you this new tool I used yesterday, called graphify. Basically you take an AI, and you install graphify on it. It will create this graph, that represents the project. I find it really useful for my actual process, reviewing. As you can see, I just need to start from the biggest Node, which is the “center” of the project, and then link every other Node. The nice thing is that you can also ask questions, and the AI will respond also taking in consideration the graph, so the response will be more accurate. I strongly advice this tool for reviewing the code and improving the “style” of the code. I hope you like it"}, {"post_id": 24026, "ts": "2026-07-07T09:39:58Z", "hours": 4.4797, "text": "Hi guys Lately I did much work. First of all, security audit fixes. I bound internal ports to localhost; moved JWT secret to a real random value in .env; hardened rate limiting (to avoid spoofing); set file uploading limit to 40MB and switched uploads/downloads to streaming so files aren’t loaded whole into RAM. Sharing rework (the main piece). Before, each user had one master DEK that encrypted all their files, and sharing sent that master DEK to the server in cleartext, so the server could decrypt shared files, and sharing one file handed over the key to every file. Now the master DEK only wraps other keys. Each file has its own random DEK (encrypting its content and name), stored wrapped by the master DEK. Each user has an RSA keypair: the public key is stored in cleartext, the private key is wrapped by the master DEK (so password reset and recovery keep working without extra code). To share, the sender fetches the recipient’s public key and RSA-encrypts only that file’s DEK; the recipient decrypts it with their private key. The server never sees a key in cleartext, and the recipient gets access to only that one file. Public links work the same way, carrying the DEK for each file in the URL fragment (never sent to the server), with a revoke action. To clean the code I also made an interfaces refactor. Moved all TypeScript interfaces into core/interfaces/, one per file (I), updated imports, removed the old model files. I’m quite done, I still have to review some graphical aspects and improve some things in the code, but I think I’ll be done this week."}, {"post_id": 21523, "ts": "2026-07-03T15:14:16Z", "hours": 0.6814, "text": "Okay guys, big problem. I realized I haven’t solved my problem with sharing files. I actually made things worse. Now each user has one DEK that is used for encryption of all their files. Two issues: the server is able to read the key (it decrypts shared files, thus E2EE is not provided), and when you give a person access to one file, you give the person access to all files. The solution I need to implement: the master DEK will not be used for encrypting the files anymore, but will become a wrapping key, each file will have its own DEK which encrypts data in this particular file, and this DEK will be wrapped by the master DEK. Each user should also have a key pair for RSA encryption: the public part of the key will be in cleartext, while the private part will be wrapped by the master DEK. When a user shares a file, they encrypt only the DEK of this file with the recipient’s public RSA key, the recipient decrypts it with the private RSA key, and the server does not see any key in cleartext. Wrapping the private key with the master DEK (not the password) means it’s recovered for free via the recovery key and survives password resets, so the existing login/recovery code stays untouched. I hope to be able to fix this problem in reasonable time. I’ll stay in touch for further clarification and devlogs P.S. in the screen you can see the DEK, proof for my thesis."}, {"post_id": 21487, "ts": "2026-07-03T13:52:44Z", "hours": 1.5675, "text": "Still improving the application. I want everything to be the best as possible. I fixed some minor bugs in fronted, mostly with the crypto service. I had some problems with the sharing of files, I realized I was also sharing the DEK of the user, which is really a problem since the receiver could, from that moment, decrypt every sender file. After fixing it I improved some things in the backend, like the process of uploading and downloading files. Another important thing I fixed is the preview. The problem is that before I was opening the file directly in RAM, which, as I explained in some prev devlog, is a problem, since I have only 2 gb of ram. The important thing is that I was able to fix it, by opening it on disk."}, {"post_id": 20927, "ts": "2026-07-02T17:28:01Z", "hours": 3.2586, "text": "Still working for improving the app. I’m slowly changing simple details, and fixing bugs, like rate limiting for api, uploading dimensions and so on. As you can see from the screens, I also added the “fake” email inbox, that allows to verify the email. This was a solution I came up yesterday, to avoid using an SMTP server. I hope you find it reasonable."}, {"post_id": 19956, "ts": "2026-07-01T12:38:11Z", "hours": 3.2114, "text": "Still improving the website and checking security. I hope everything works well and is secure. I’m now focusing on fixing small bugs, and improving UI. Something I still have to figure out, is how to manage SMTP. I don’t know if I’ll just skip this part and open a link in the browser, that works like the mail. Idk In the meanwhile I’m also addressing some memory issues, since the container given by Nest is just 2 GB in ram, so I have to optimize everything, to make the app work correctly. A thing I found really useful in this project is committing with claude. Many times I don’t know what to write, and many commits are too vague, so Claude is really helpful for this task."}, {"post_id": 18321, "ts": "2026-06-29T12:57:25Z", "hours": 5.4161, "text": "I’m slowly compelting this project. I uploaded everything on #Nest, very useful. I still have to find a solution for the SMTP service, but I’m sure I’ll find something. I’m currently fixing some graphical isseus, for example I fixed the responsivety of the application, mostly the lateral navbar. Before the release, I want to fix some other problems and things I don’t like. Additionaly I want to test everything and be sure that the encryption is secure and working correctly."}, {"post_id": 9105, "ts": "2026-06-15T07:01:04Z", "hours": 4.8314, "text": "I’m currently working on secureVault, a E2E platform which allows people to store securely files and organize them in folder. Additionaly there’s the possibility to share files. It follows a lot of directives to mantain everything crypted. I had already started this project, so it isn’t fully logged. Stay tuned."}]...
|
Title: SecureVault by @F3rro_32 | Stardance
Devlo Title: SecureVault by @F3rro_32 | Stardance
Devlogs:
I’m currently working on secureVault, a E2E platform which allows people to store securely files and organize them in folder. Additionaly there’s the possibility to share files. It follows a lot of directives to mantain everything crypted. I had already started this project, so it isn’t fully logged. Stay tuned.
I’m slowly compelting this project. I uploaded everything on #Nest, very useful. I still have to find a solution for the SMTP service, but I’m sure I’ll find something. I’m currently fixing some graphical isseus, for example I fixed the responsivety of the application, mostly the lateral navbar. Before the release, I want to fix some other problems and things I don’t like. Additionaly I want to test everything and be sure that the encryption is secure and working correctly.
Still improving the website and checking security. I hope everything works well and is secure. I’m now focusing on fixing small bugs, and improving UI. Something I still have to figure out, is how to manage SMTP. I don’t know if I’ll just skip this part and open a link in the browser, that works like the mail. Idk In the meanwhile I’m also addressing some memory issues, since the container given by Nest is just 2 GB in ram, so I have to optimize everything, to make the app work correctly. A thing I found really useful in this project is committing with claude. Many times I don’t know what to write, and many commits are too vague, so Claude is really helpful for this task.
Still working for improving the app. I’m slowly changing simple details, and fixing bugs, like rate limiting for api, uploading dimensions and so on. As you can see from the screens, I also added the “fake” email inbox, that allows to verify the email. This was a solution I came up yesterday, to avoid using an SMTP server. I hope you find it reasonable.
Still improving the application. I want everything to be the best as possible. I fixed some minor bugs in fronted, mostly with the crypto service. I had some problems with the sharing of files, I realized I was also sharing the DEK of the user, which is really a problem since the receiver could, from that moment, decrypt every sender file. After fixing it I improved some things in the backend, like the process of uploading and downloading files. Another important thing I fixed is the preview. The problem is that before I was opening the file directly in RAM, which, as I explained in some prev devlog, is a problem, since I have only 2 gb of ram. The important thing is that I was able to fix it, by opening it on disk.
Okay guys, big problem. I realized I haven’t solved my problem with sharing files. I actually made things worse. Now each user has one DEK that is used for encryption of all their files. Two issues: the server is able to read the key (it decrypts shared files, thus E2EE is not provided), and when you give a person access to one file, you give the person access to all files. The solution I need to implement: the master DEK will not be used for encrypting the files anymore, but will become a wrapping key, each file will have its own DEK which encrypts data in this particular file, and this DEK will be wrapped by the master DEK. Each user should also have a key pair for RSA encryption: the public part of the key will be in cleartext, while the private part will be wrapped by the master DEK. When a user shares a file, they encrypt only the DEK of this file with the recipient’s public RSA key, the recipient decrypts it with the private RSA key, and the server does not see any key in cleartext. Wrapping the private key with the master DEK (not the password) means it’s recovered for free via the recovery key and survives password resets, so the existing login/recovery code stays untouched. I hope to be able to fix this problem in reasonable time. I’ll stay in touch for further clarification and devlogs P.S. in the screen you can see the DEK, proof for my thesis.
Hi guys Lately I did much work. First of all, security audit fixes. I bound internal ports to localhost; moved JWT secret to a real random value in .env; hardened rate limiting (to avoid spoofing); set file uploading limit to 40MB and switched uploads/downloads to streaming so files aren’t loaded whole into RAM. Sharing rework (the main piece). Before, each user had one master DEK that encrypted all their files, and sharing sent that master DEK to the server in cleartext, so the server could decrypt shared files, and sharing one file handed over the key to every file. Now the master DEK only wraps other keys. Each file has its own random DEK (encrypting its content and name), stored wrapped by the master DEK. Each user has an RSA keypair: the public key is stored in cleartext, the private key is wrapped by the master DEK (so password reset and recovery keep working without extra code). To share, the sender fetches the recipient’s public key and RSA-encrypts only that file’s DEK; the recipient decrypts it with their private key. The server never sees a key in cleartext, and the recipient gets access to only that one file. Public links work the same way, carrying the DEK for each file in the URL fragment (never sent to the server), with a revoke action. To clean the code I also made an interfaces refactor. Moved all TypeScript interfaces into core/interfaces/, one per file (I), updated imports, removed the old model files. I’m quite done, I still have to review some graphical aspects and improve some things in the code, but I think I’ll be done this week.
Hey guys, I know this isn’t a proper devlog, but I wanted to show you this new tool I used yesterday, called graphify. Basically you take an AI, and you install graphify on it. It will create this graph, that represents the project. I find it really useful for my actual process, reviewing. As you can see, I just need to start from the biggest Node, which is the “center” of the project, and then link every other Node. The nice thing is that you can also ask questions, and the AI will respond also taking in consideration the graph, so the response will be more accurate. I strongly advice this tool for reviewing the code and improving the “style” of the code. I hope you like it
Okay guys, big news: I was finally able to get an SMTP server from a friend of mine, so now email verification and password recovery are working. I’m pretty satisfied; I really wanted this app to work as well as possible, and with email support, it feels even more complete. Stay tuned, because it won’t be long before it’s ready.
Hey guys, here I am again. Lately I focused a lot on improving both the website and the overall user experience. The first thing I did was completely redesign the landing page. I switched everything to a dark theme, added a new hero section with a background image and gradient overlay, and converted every section into dark cards to make the design feel much more consistent. I also reworked the pricing section Finally, I added smooth navigation between sections using anchor links. I also redesigned the navigation bar. On desktop and tablets it stays at the top as expected, while on mobile it moves to the bottom of the screen for easier access. During this process I removed the old hamburger menu. The file manager received one of the biggest UI updates. On mobile there’s now a bottom navigation bar with a floating upload button in the center. The Files page no longer uses a traditional table; instead, files are displayed as modern cards with encryption badges and a cleaner action menu that groups all available operations together. I also fixed some spacing issues on the login page caused by the fixed navbar. Besides the UI, I spent some time improving the website from a technical perspective. I configured gzip compression, hid unnecessary server information, fixed some SEO issues like duplicated headings, and added both a robots.txt file and a sitemap. Another important feature I implemented is the new Settings page. It now includes profile information, security settings, storage usage, and account management. I decided to keep the interface honest: only features that are actually supported by the backend are available, while future ones are clearly disabled. I also implemented permanent account deletion, both on the backend and frontend, making sure all related data is safely removed before the user is deleted. I added a lot, I hope everything works as I expect. See ya
Finished the project. I used a seo checker to improve the seo, at least, what I can actually improve. I then focused on writing the md files. The readme and the security.md, that displays all infos about how crypto works and in general terms, security. I hope you like the project.
I don’t know why, but the db crashed, so the backend wasn’t working and many of you couldn’t test out the app. I just fixed this problem, and added in docker compose the restart clause, so things like this won’t happen again. Sorry for the problem
devlog Hey guys, how’s going? I’m pretty well, I have loads of things to do, but there’s always time for my biggest passion, coding. Yesterday I turned on a strinct CSP (content security policy) for this project, so today the pricing section looked like the one in the first screen. The Popular badge had no pill behind it, it was just the word, with the card’s border running straight through it. The higlighted card’s border was white, instead of indigo. Also the Get Pro was the same flat grey as the two buttons next to it. It looked like a CSS mistake, but actually it wasn’t. “It worked on my machine” ng serve rendered it correctly. Same commit, same browser. That is the part that cost me the most time: I kept hunting for a rule that only existed in production. So I stopped reading CSS and read the live page instead: --color-primary → "" (empty) badge background → rgba(0, 0, 0, 0) (transparent) card border → rgb(255, 255, 255) --color-primary wasn’t defined at all. And when a custom property is undefined, background-color: var(--color-primary) computes to transparent , while border-color: var(--color-primary) falls back to currentColor , which on that section is white. One missing variable, and every symptom follows from it, including the ones that look unrelated. Where the variable went Angular’s production build enables inlineCritical . It inlines the critical CSS and defers the rest of the stylesheet like this: <link rel= "stylesheet" href= "styles-XXXX.css" media= "print" onload= "this.media='all'" > That onload is an inline event handler , and script-src 'self' blocks inline handlers. So the handler never ran, the stylesheet stayed at media="print" , and it was never applied. For a whole day the site had been running on nothing but the inlined critical CSS, and the theme tokens live in the file that never loaded. ng serve doesn’t run inlineCritical . That’s the entire reason it only happened in production. The fix is one flag in angular.json : "optimization" : { "styles" : { "minify" : true , "inlineCritical" : false } } The stylesheet now ships as a plain blocking <link> . One render-blocking request, ~20 KB gzipped, and the CSP stays exactly as strict as it was.
Ships:
SecureVault, zero knowledge, end-to-end encrypted cloud storage. Your files and their names are encrypted in the browser before they ever reach the server, which only ever stores ciphertext it can’t read.
Just improved some things, mostly advices from other users....
|
1793116102.3308027
|
1793202502.3308027
|
|
27038
|
CodeKidsIDE by @Nanos | Stardance
|
Nanos
|
4
|
39.0
|
494
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T09:37:04Z", "hours": 14.0, "multiplier": 11.29, "payout": 132, "blessing": "neutral", "text": "Stable Desktop Synchronization (Live Sync Reworked) One of the biggest issues discovered during testing involved the Desktop synchronization system. Previously, if you linked the Desktop application while it didn’t contain any projects or files, the synchronization process treated the empty Desktop workspace as the latest version and deleted the existing files stored on the Website. This could result in accidental data loss. The synchronization logic has now been completely redesigned. The Website is now considered the source of truth during the initial connection. When a Desktop client is linked for the first time, the Web version automatically pushes all current files to the Desktop instead of allowing the Desktop to overwrite existing data. This guarantees that users never lose their work simply because they connected a fresh installation. Another issue appeared while editing code in the browser. Because Live Sync constantly updated the editor, keyboard shortcuts such as Ctrl+Z (Undo) could stop working correctly or even freeze the editing experience. This has also been fixed. While the user is actively editing and the editor has focus, incoming synchronization updates are temporarily ignored. Once editing stops, synchronization continues normally in the background. As a result, undo/redo shortcuts now work exactly as expected without interfering with Live Sync. Smarter Error Detection and Feedback The error reporting system has been completely rewritten to provide much clearer and more helpful feedback. Previously, runtime errors could display completely incorrect line numbers, sometimes reporting errors hundreds of lines away from where the problem actually existed. This made debugging frustrating, especially for beginners. The new parser now extracts the correct source location and accurately reports the line where the error originated using the detected line information. In addition, many common programming mistakes are now recognized automatically. Instead of displaying only a technical interpreter message, CodeKids now explains the problem in plain language. For example: Missing quotation marks now generate a clear explanation telling the user that strings must be enclosed inside single or double quotes. Mixing tabs and spaces produces an understandable warning instead of a confusing interpreter error. Common syntax mistakes now include helpful hints and suggestions for fixing the issue. Every major error now includes a dedicated [TIP] section whenever possible, helping beginners understand not only what went wrong, but also how to solve it. UI & User Experience Improvements Several parts of the interface have been modernized to create a smoother and more professional experience. All default browser alert() and confirm() dialogs have been removed and replaced with fully custom modal windows that match the application’s design. Toast notifications have also been introduced across the IDE, providing lightweight feedback for actions such as saving files, synchronization events, successful operations, and warnings without interrupting the user’s workflow. The onboarding experience has also been improved. Previously, the guided tutorial could sometimes appear before the welcome screen had finished loading, leaving users unable to continue. The onboarding system now initializes correctly, ensuring that the welcome screen appears first before starting the interactive tutorial. This creates a much smoother first-time experience for new users.", "repo": "https://github.com/na1os/codeKidsIDE", "demo": "https://m1hai.xyz/s/"}, {"ship_num": 2, "ts": "2026-07-07T19:34:57Z", "hours": 15.0, "multiplier": 18.32, "payout": 269, "blessing": "neutral", "text": "CodeKids IDE is a beginner-friendly programming environment designed to help kids learn Python through interactive lessons, helpful coding tools, and a simple interface. Highlights Multi-project workspace with support for multiple files and folders Import and export entire projects as .zip Cross-file Python imports (modules work across files) Autocomplete for Python keywords, variables, and functions Better Error Feedback with beginner-friendly explanations instead of confusing Python errors Explain Code to help students understand what their code does Smart Fix for common beginner mistakes Search & Replace Interactive lessons with hints, XP, achievements, badges, and daily challenges Multiple editor themes, including a custom Kids theme More stable Python execution with crash protection and improved project saving This release marks the completion of the web version (v2). My next goal is to build an even better desktop version with more advanced features, improved performance, and an even better learning experience for kids.", "repo": "https://github.com/na1os/codeKidsIDE", "demo": "https://m1hai.xyz/s/"}, {"ship_num": 3, "ts": "2026-07-02T09:31:00Z", "hours": 6.0, "multiplier": 9.08, "payout": 57, "blessing": "neutral", "text": "A web version for CideKidsIde with almost all the features of the app", "repo": "https://github.com/na1os/codeKidsIDE", "demo": "https://m1hai.xyz/s/"}, {"ship_num": 4, "ts": "2026-06-27T22:16:42Z", "hours": 4.0, "multiplier": 8.14, "payout": 36, "blessing": "neutral", "text": "What I did: I built a simple Python IDE for kids using CustomTkinter. It has a code editor, a file explorer, and a run button. I also added a lessons tab with badges and a beginner mode that explains errors. What was hard: The hardest part was running the code without freezing the app. I had to learn how to use the threading module to run the subprocess in the background. Also, CustomTkinter textboxes do not support tags well, so I had to use the standard tkinter Text widget for the editor to get syntax highlighting and line numbers working. What I am proud of: I am proud of the error helper. Python tracebacks are scary for an 8 year old. I wrote a script that reads the errors and gives simple hints, like telling them they forgot a colon or that they cannot divide by zero. What people should know to test it: You need to install customtkinter first. Try the templates like the Snake Game and go through the lessons tab to see how the badges unlock. I will modify it in the future to add more features.", "repo": "https://github.com/na1os/codeKidsIDE", "demo": "https://m1hai.xyz/s/"}]...
|
[{"post_id": 28800, "ts": "202 [{"post_id": 28800, "ts": "2026-07-15T09:30:25Z", "hours": 12.5333, "text": "Stable Desktop Synchronization (Live Sync Reworked) One of the biggest issues discovered during testing involved the Desktop synchronization system. Previously, if you linked the Desktop application while it didn’t contain any projects or files, the synchronization process treated the empty Desktop workspace as the latest version and deleted the existing files stored on the Website. This could result in accidental data loss. The synchronization logic has now been completely redesigned. The Website is now considered the source of truth during the initial connection. When a Desktop client is linked for the first time, the Web version automatically pushes all current files to the Desktop instead of allowing the Desktop to overwrite existing data. This guarantees that users never lose their work simply because they connected a fresh installation. Another issue appeared while editing code in the browser. Because Live Sync constantly updated the editor, keyboard shortcuts such as Ctrl+Z (Undo) could stop working correctly or even freeze the editing experience. This has also been fixed. While the user is actively editing and the editor has focus, incoming synchronization updates are temporarily ignored. Once editing stops, synchronization continues normally in the background. As a result, undo/redo shortcuts now work exactly as expected without interfering with Live Sync. Smarter Error Detection and Feedback The error reporting system has been completely rewritten to provide much clearer and more helpful feedback. Previously, runtime errors could display completely incorrect line numbers, sometimes reporting errors hundreds of lines away from where the problem actually existed. This made debugging frustrating, especially for beginners. The new parser now extracts the correct source location and accurately reports the line where the error originated using the detected line information. In addition, many common programming mistakes are now recognized automatically. Instead of displaying only a technical interpreter message, CodeKids now explains the problem in plain language. For example: Missing quotation marks now generate a clear explanation telling the user that strings must be enclosed inside single or double quotes. Mixing tabs and spaces produces an understandable warning instead of a confusing interpreter error. Common syntax mistakes now include helpful hints and suggestions for fixing the issue. Every major error now includes a dedicated [TIP] section whenever possible, helping beginners understand not only what went wrong, but also how to solve it. UI & User Experience Improvements Several parts of the interface have been modernized to create a smoother and more professional experience. All default browser alert() and confirm() dialogs have been removed and replaced with fully custom modal windows that match the application’s design. Toast notifications have also been introduced across the IDE, providing lightweight feedback for actions such as saving files, synchronization events, successful operations, and warnings without interrupting the user’s workflow. The onboarding experience has also been improved. Previously, the guided tutorial could sometimes appear before the welcome screen had finished loading, leaving users unable to continue. The onboarding system now initializes correctly, ensuring that the welcome screen appears first before starting the interactive tutorial. This creates a much smoother first-time experience for new users."}, {"post_id": 28405, "ts": "2026-07-14T17:19:48Z", "hours": 1.6881, "text": "Web Improvements & Desktop Version V2 I’ve been focusing on improving the web version based on the feedback I received. The goal was to make the IDE easier to use for complete beginners while polishing the overall experience. Web Improvements: Replaced native browser dialogs with custom in-app modals for a more consistent and professional UI. Improved the lesson flow to make challenges clearer and easier to understand. Expanded the educational content with more explanations before exercises. Redesigned the console to provide clearer error messages and better debugging feedback. Improved the code explanation system and started separating code explanations from debugging information. Refined the onboarding experience so new users can quickly learn how to use the IDE. Added and polished project templates directly inside the web IDE. Fixed various UI issues and improved the overall responsiveness and smoothness of the application. These improvements address the majority of the feedback received during testing and make the web version significantly more beginner-friendly. Development Begins on Desktop Version V2 Alongside the improvements to the web version, development has officially begun on Desktop Version V2. Unlike the original desktop version, which was designed as a standalone application, Version V2 is being built to work seamlessly with the web platform, creating a unified experience across both environments. Planned Features: Automatic project synchronization between the desktop app and the website. Continue working on the same project from any device without manually transferring files. Shared lessons, XP, achievements, and learning progress. Automatic project backups. Near real-time synchronization whenever projects are modified. Improved local performance for larger projects while keeping the convenience of cloud access. The long-term vision is to make the web version and Desktop Version V2 feel like a single platform. Users will be able to start coding in the browser, continue on the desktop application, and switch back at any time with their projects and progress automatically synchronized."}, {"post_id": 24261, "ts": "2026-07-07T18:28:17Z", "hours": 3.3, "text": "Web Version Complete The web version of CodeKids IDE is now complete and ready to ship. I added many of the features I had planned, including autocomplete, better error feedback, support for multiple files and folders, cross-file imports, and theme support. The goal was to create a coding environment that is simple enough for beginners while still feeling like a real IDE. Development doesn’t stop here, though. My next focus will be building a much more powerful desktop version, with even more features, better performance, and an improved experience for kids learning to code."}, {"post_id": 24152, "ts": "2026-07-07T15:10:13Z", "hours": 1.8333, "text": "Better Error Feedback & File System Complete I finished implementing Better Error Feedback and the new file system for CodeKids IDE. Error messages are now much more beginner-friendly, helping users understand what went wrong instead of only showing technical errors. For common mistakes, the editor now provides simple explanations and helpful suggestions. For example, if a user tries to use a variable before creating it, CodeKids IDE will display a message like: You used the variable x before creating it. Create it first, for example: x = 10. I also completed the new file system, which now supports creating multiple files and folders, as well as importing Python files from one another. This makes it much easier to organize projects and gives users a more realistic development experience while keeping the interface simple for beginners. To make the editor more enjoyable to use, I also added theme support, allowing users to switch between different editor themes. These features are important milestones for Version 2 and bring CodeKids IDE one step closer to becoming a complete learning environment for new programmers."}, {"post_id": 24097, "ts": "2026-07-07T13:19:40Z", "hours": 5.7517, "text": "Working on Better Error Feedback With autocomplete now finished, I’m currently working on Better Error Feedback. The goal is to make error messages much more beginner-friendly. Instead of displaying confusing technical errors, CodeKids IDE will explain what went wrong in simple language, point to the exact location of the problem, and provide helpful suggestions on how to fix it. I’m also improving how errors are presented so they’re easier to understand at a glance. Since CodeKids IDE is designed for kids and beginners, I want mistakes to become learning opportunities instead of frustrating roadblocks. This feature is still in development, but it’s one of the biggest improvements planned for Version 2 and should make learning to code much more approachable."}, {"post_id": 23718, "ts": "2026-07-06T20:35:50Z", "hours": 4.3011, "text": "Working on Autocomplete Today I started working on one of the biggest features planned for Version 2: autocomplete. I spent time researching how modern code editors provide suggestions while you’re typing and planning how to integrate a similar system into CodeKids IDE. My goal is to make coding easier for beginners by suggesting keywords, built-in functions, and common code patterns as they type."}, {"post_id": 20650, "ts": "2026-07-02T09:28:41Z", "hours": 6.2725, "text": "Just finished a web version"}, {"post_id": 17202, "ts": "2026-06-27T22:13:55Z", "hours": 4.3986, "text": "I tried to build a simple Python IDE for kids using CustomTkinter. I wanted a clean layout with a code editor, file explorer, and a run button that doesn’t freeze the app. I also wanted to translate scary Python errors into simple English and add a lesson system with badges.I managed to do it by using the threading module to run code in the background. I used standard tkinter Text widgets for the code editor so I could add syntax highlighting and line numbers. For the errors, I wrote a helper script that uses regex to find common mistakes and prints friendly hints. The lessons and badges are stored in a local JSON file.I will modify it in the future. Right now the input function doesn’t work because of the background thread, so I want to fix that. I also plan to add more templates and maybe drag and drop file support."}]...
|
Title: CodeKidsIDE by @Nanos | Stardance
Devlogs: Title: CodeKidsIDE by @Nanos | Stardance
Devlogs:
I tried to build a simple Python IDE for kids using CustomTkinter. I wanted a clean layout with a code editor, file explorer, and a run button that doesn’t freeze the app. I also wanted to translate scary Python errors into simple English and add a lesson system with badges.I managed to do it by using the threading module to run code in the background. I used standard tkinter Text widgets for the code editor so I could add syntax highlighting and line numbers. For the errors, I wrote a helper script that uses regex to find common mistakes and prints friendly hints. The lessons and badges are stored in a local JSON file.I will modify it in the future. Right now the input function doesn’t work because of the background thread, so I want to fix that. I also plan to add more templates and maybe drag and drop file support.
Just finished a web version
Working on Autocomplete Today I started working on one of the biggest features planned for Version 2: autocomplete. I spent time researching how modern code editors provide suggestions while you’re typing and planning how to integrate a similar system into CodeKids IDE. My goal is to make coding easier for beginners by suggesting keywords, built-in functions, and common code patterns as they type.
Working on Better Error Feedback With autocomplete now finished, I’m currently working on Better Error Feedback. The goal is to make error messages much more beginner-friendly. Instead of displaying confusing technical errors, CodeKids IDE will explain what went wrong in simple language, point to the exact location of the problem, and provide helpful suggestions on how to fix it. I’m also improving how errors are presented so they’re easier to understand at a glance. Since CodeKids IDE is designed for kids and beginners, I want mistakes to become learning opportunities instead of frustrating roadblocks. This feature is still in development, but it’s one of the biggest improvements planned for Version 2 and should make learning to code much more approachable.
Better Error Feedback & File System Complete I finished implementing Better Error Feedback and the new file system for CodeKids IDE. Error messages are now much more beginner-friendly, helping users understand what went wrong instead of only showing technical errors. For common mistakes, the editor now provides simple explanations and helpful suggestions. For example, if a user tries to use a variable before creating it, CodeKids IDE will display a message like: You used the variable x before creating it. Create it first, for example: x = 10. I also completed the new file system, which now supports creating multiple files and folders, as well as importing Python files from one another. This makes it much easier to organize projects and gives users a more realistic development experience while keeping the interface simple for beginners. To make the editor more enjoyable to use, I also added theme support, allowing users to switch between different editor themes. These features are important milestones for Version 2 and bring CodeKids IDE one step closer to becoming a complete learning environment for new programmers.
Web Version Complete The web version of CodeKids IDE is now complete and ready to ship. I added many of the features I had planned, including autocomplete, better error feedback, support for multiple files and folders, cross-file imports, and theme support. The goal was to create a coding environment that is simple enough for beginners while still feeling like a real IDE. Development doesn’t stop here, though. My next focus will be building a much more powerful desktop version, with even more features, better performance, and an improved experience for kids learning to code.
Web Improvements & Desktop Version V2 I’ve been focusing on improving the web version based on the feedback I received. The goal was to make the IDE easier to use for complete beginners while polishing the overall experience. Web Improvements: Replaced native browser dialogs with custom in-app modals for a more consistent and professional UI. Improved the lesson flow to make challenges clearer and easier to understand. Expanded the educational content with more explanations before exercises. Redesigned the console to provide clearer error messages and better debugging feedback. Improved the code explanation system and started separating code explanations from debugging information. Refined the onboarding experience so new users can quickly learn how to use the IDE. Added and polished project templates directly inside the web IDE. Fixed various UI issues and improved the overall responsiveness and smoothness of the application. These improvements address the majority of the feedback received during testing and make the web version significantly more beginner-friendly. Development Begins on Desktop Version V2 Alongside the improvements to the web version, development has officially begun on Desktop Version V2. Unlike the original desktop version, which was designed as a standalone application, Version V2 is being built to work seamlessly with the web platform, creating a unified experience across both environments. Planned Features: Automatic project synchronization between the desktop app and the website. Continue working on the same project from any device without manually transferring files. Shared lessons, XP, achievements, and learning progress. Automatic project backups. Near real-time synchronization whenever projects are modified. Improved local performance for larger projects while keeping the convenience of cloud access. The long-term vision is to make the web version and Desktop Version V2 feel like a single platform. Users will be able to start coding in the browser, continue on the desktop application, and switch back at any time with their projects and progress automatically synchronized.
Stable Desktop Synchronization (Live Sync Reworked) One of the biggest issues discovered during testing involved the Desktop synchronization system. Previously, if you linked the Desktop application while it didn’t contain any projects or files, the synchronization process treated the empty Desktop workspace as the latest version and deleted the existing files stored on the Website. This could result in accidental data loss. The synchronization logic has now been completely redesigned. The Website is now considered the source of truth during the initial connection. When a Desktop client is linked for the first time, the Web version automatically pushes all current files to the Desktop instead of allowing the Desktop to overwrite existing data. This guarantees that users never lose their work simply because they connected a fresh installation. Another issue appeared while editing code in the browser. Because Live Sync constantly updated the editor, keyboard shortcuts such as Ctrl+Z (Undo) could stop working correctly or even freeze the editing experience. This has also been fixed. While the user is actively editing and the editor has focus, incoming synchronization updates are temporarily ignored. Once editing stops, synchronization continues normally in the background. As a result, undo/redo shortcuts now work exactly as expected without interfering with Live Sync. Smarter Error Detection and Feedback The error reporting system has been completely rewritten to provide much clearer and more helpful feedback. Previously, runtime errors could display completely incorrect line numbers, sometimes reporting errors hundreds of lines away from where the problem actually existed. This made debugging frustrating, especially for beginners. The new parser now extracts the correct source location and accurately reports the line where the error originated using the detected line information. In addition, many common programming mistakes are now recognized automatically. Instead of displaying only a technical interpreter message, CodeKids now explains the problem in plain language. For example: Missing quotation marks now generate a clear explanation telling the user that strings must be enclosed inside single or double quotes. Mixing tabs and spaces produces an understandable warning instead of a confusing interpreter error. Common syntax mistakes now include helpful hints and suggestions for fixing the issue. Every major error now includes a dedicated [TIP] section whenever possible, helping beginners understand not only what went wrong, but also how to solve it. UI & User Experience Improvements Several parts of the interface have been modernized to create a smoother and more professional experience. All default browser alert() and confirm() dialogs have been removed and replaced with fully custom modal windows that match the application’s design. Toast notifications have also been introduced across the IDE, providing lightweight feedback for actions such as saving files, synchronization events, successful operations, and warnings without interrupting the user’s workflow. The onboarding experience has also been improved. Previously, the guided tutorial could sometimes appear before the welcome screen had finished loading, leaving users unable to continue. The onboarding system now initializes correctly, ensuring that the welcome screen appears first before starting the interactive tutorial. This creates a much smoother first-time experience for new users.
Ships:
What I did: I built a simple Python IDE for kids using CustomTkinter. It has a code editor, a file explorer, and a run button. I also added a lessons tab with badges and a beginner mode that explains errors. What was hard: The hardest part was running the code without freezing the app. I had to learn how to use the threading module to run the subprocess in the background. Also, CustomTkinter textboxes do not support tags well, so I had to use the standard tkinter Text widget for the editor to get syntax highlighting and line numbers working. What I am proud of: I am proud of the error helper. Python tracebacks are scary for an 8 year old. I wrote a script that reads the errors and gives simple hints, like telling them they forgot a colon or that they cannot divide by zero. What people should know to test it: You need to install customtkinter first. Try the templates like the Snake Game and go through the lessons tab to see how the badges unlock. I will modify it in the future to add more features.
A web version for CideKidsIde with almost all the features of the app
CodeKids IDE is a beginner-friendly programming environment designed to help kids learn Python through interactive lessons, helpful coding tools, and a simple interface. Highlights Multi-project workspace with support for multiple files and folders Import and export entire projects as .zip Cross-file Python imports (modules work across files) Autocomplete for Python keywords, variables, and functions Better Error Feedback with beginner-friendly explanations instead of confusing Python errors Explain Code to help students understand what their code does Smart Fix for common beginner mistakes Search & Replace Interactive lessons with hints, XP, achievements, badges, and daily challenges Multiple editor themes, including a custom Kids theme More stable Python execution with crash protection and improved project saving This release marks the completion of the web version (v2). My next goal is to build an even better desktop version with more advanced features, improved performance, and an even better learning experience for kids.
Stable Desktop Synchronization (Live Sync Reworked) One of the biggest issues discovered during testing involved the Desktop synchronization system. Previously, if you linked the Desktop application while it didn’t contain any projects or files, the synchronization process treated the empty Desktop workspace as the latest version and deleted the existing files stored on the Website. This could result in accidental data loss. The synchronization logic has now been completely redesigned. The Website is now considered the source of truth during the initial connection. When a Desktop client is linked for the first time, the Web version automatically pushes all current files to the Desktop instead of allowing the Desktop to overwrite existing data. This guarantees that users never lose their work simply because they connected a fresh installation. Another issue appeared while editing code in the browser. Because Live Sync constantly updated the editor, keyboard shortcuts such as Ctrl+Z (Undo) could stop working correctly or even freeze the editing experience. This has also been fixed. While the user is actively editing and the editor has focus, incoming synchronization updates are temporarily ignored. Once editing stops, synchronization continues normally in the background. As a result, undo/redo shortcuts now work exactly as expected without interfering with Live Sync. Smarter Error Detection and Feedback The error reporting system has been completely rewritten to provide much clearer and more helpful feedback. Previously, runtime errors could display completely incorrect line numbers, sometimes reporting errors hundreds of lines away from where the problem actually existed. This made debugging frustrating, especially for beginners. The new parser now extracts the correct source location and accurately reports the line where the error originated using the detected line information. In addition, many common programming mistakes are now recognized automatically. Instead of displaying only a technical interpreter message, CodeKids now explains the problem in plain language. For example: Missing quotation marks now generate a clear explanation telling the user that strings must be enclosed inside single or double quotes. Mixing tabs and spaces produces an understandable warning instead of a confusing interpreter error. Common syntax mistakes now include helpful hints and suggestions for fixing the issue. Every major error now includes a dedicated [TIP] section whenever possible, helping beginners understand not only what went wrong, but also how to solve it. UI & User Experience Improvements Several parts of the interface have been modernized to create a smoother and more professional experience. All default browser alert() and confirm() dialogs have been removed and replaced with fully custom modal windows that match the application’s design. Toast notifications have also been introduced across the IDE, providing lightweight feedback for actions such as saving files, synchronization events, successful operations, and warnings without interrupting the user’s workflow. The onboarding experience has also been improved. Previously, the guided tutorial could sometimes appear before the welcome screen had finished loading, leaving users unable to continue. The onboarding system now initializes correctly, ensuring that the welcome screen appears first before starting the interactive tutorial. This creates a much smoother first-time experience for new users....
|
1793105297.5152445
|
1793191697.5152445
|
|
32344
|
N-IDE by @Nanos | Stardance
|
Nanos
|
2
|
39.0
|
331
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-20T13:26:06Z", "hours": 11.0, "multiplier": 9.98, "payout": 100, "blessing": "neutral", "text": "Productivity & Editor Improvements This update focuses on improving the overall development workflow by adding new debugging, navigation, and editing features. Problems Panel A new Problems tab has been added to the bottom panel.FeaturesReal-time syntax diagnostics powered by the Monaco Editor. Displays Errors, Warnings, and Info with dedicated icons and colors. Clicking a problem instantly jumps to the corresponding line. The tab title automatically updates to show the current number of detected issues (e.g. Problems (2 errors)). Global Search & Replace The Search panel has been completely rebuilt.New capabilities Search across all opened files. Regular Expression (Regex) support. Match Case option. Replace All across every opened file. Integrated Color Picker Enabled Monaco’s built-in Color Decorators. Color values such as: #ff0000 rgb(255,0,0) hsl(…) now display an inline color preview that can be clicked to open the color picker directly inside the editor. Empty Projects Creating a New Empty Project now generates a completely blank workspace. No default index.html or starter files are created, allowing users to build their project structure from scratch. Command Palette Improvements The Command Palette now provides a smoother experience. Press Escape to close it instantly. Clicking outside the modal also closes it automatically. Explorer Improvements Added a Refresh Explorer button to quickly reload the file tree after external changes are made to the project directory. Editor Improvements Added support for Ctrl + and Ctrl - to zoom the editor in and out. Added a quick toggle in the status bar to switch between Absolute and Relative line numbers.", "repo": "https://github.com/na1os/n-ide", "demo": "https://apps.m1hai.xyz/ide/"}, {"ship_num": 2, "ts": "2026-07-14T14:12:14Z", "hours": 28.0, "multiplier": 10.08, "payout": 231, "blessing": "neutral", "text": "N-IDE is a modern browser-based IDE designed to bring a desktop-like development experience directly to the web. It features a powerful virtual file system, support for opening local folders, a multi-tab code editor powered by Monaco, intelligent autocomplete, built-in Python and JavaScript execution, live HTML/CSS/JavaScript preview, an integrated terminal, global search, a Command Palette, and many other productivity features. The goal of N-IDE is to provide a fast, intuitive, and feature-rich coding environment that works entirely in the browser while feeling as close as possible to a native desktop IDE. (or some day a desktop ide)", "repo": "https://github.com/na1os/n-ide", "demo": "https://apps.m1hai.xyz/ide/"}]...
|
[{"post_id": 31775, "ts": "202 [{"post_id": 31775, "ts": "2026-07-20T13:05:22Z", "hours": 10.6333, "text": "Productivity & Editor Improvements This update focuses on improving the overall development workflow by adding new debugging, navigation, and editing features. Problems Panel A new Problems tab has been added to the bottom panel.FeaturesReal-time syntax diagnostics powered by the Monaco Editor. Displays Errors, Warnings, and Info with dedicated icons and colors. Clicking a problem instantly jumps to the corresponding line. The tab title automatically updates to show the current number of detected issues (e.g. Problems (2 errors)). Global Search & Replace The Search panel has been completely rebuilt.New capabilities Search across all opened files. Regular Expression (Regex) support. Match Case option. Replace All across every opened file. Integrated Color Picker Enabled Monaco’s built-in Color Decorators. Color values such as: #ff0000 rgb(255,0,0) hsl(…) now display an inline color preview that can be clicked to open the color picker directly inside the editor. Empty Projects Creating a New Empty Project now generates a completely blank workspace. No default index.html or starter files are created, allowing users to build their project structure from scratch. Command Palette Improvements The Command Palette now provides a smoother experience. Press Escape to close it instantly. Clicking outside the modal also closes it automatically. Explorer Improvements Added a Refresh Explorer button to quickly reload the file tree after external changes are made to the project directory. Editor Improvements Added support for Ctrl + and Ctrl - to zoom the editor in and out. Added a quick toggle in the status bar to switch between Absolute and Relative line numbers."}, {"post_id": 27981, "ts": "2026-07-13T22:52:34Z", "hours": 14.8967, "text": "Feature Complete I’ve now finished implementing most of the core features planned for the new browser IDE. Over the last development sessions, I completed the new interface, improved autocomplete, expanded the file management system, and polished many parts of the overall user experience. The IDE has reached a point where it already feels stable and ready for everyday use. I also experimented with real-time collaboration, but after testing it, I decided to remove it for now. While the feature was promising, it introduced stability and synchronization issues that didn’t meet the quality I want for this project. Rather than shipping an unreliable feature, I chose to focus on delivering a more stable experience. I plan to revisit real-time collaboration in the future with a better implementation."}, {"post_id": 24703, "ts": "2026-07-08T13:54:26Z", "hours": 9.1667, "text": "Real-Time Collaboration Progress I spent around 9 hours working on one of the biggest features planned for the new IDE: real-time collaboration. During this session, I built the foundation that will allow multiple users to work on the same project simultaneously. I focused on designing the synchronization system, improving how project data is shared between users, and making sure future collaborative features can be added without major changes to the architecture. I also continued polishing the editor by fixing bugs, improving performance, and refining the overall user experience while preparing the project for multiplayer editing. There’s still plenty of work left, but the core foundation is now in place. The next steps are syncing file changes in real time, showing updates instantly to everyone connected, and adding features like user presence and collaborative editing tools."}, {"post_id": 24466, "ts": "2026-07-08T01:20:39Z", "hours": 3.5333, "text": "UI Complete & Improved AutocompleteI finished building the first version of the new IDE’s interface.I also reused the autocomplete system from CodeKids IDE (my other ide) as a starting point and significantly improved it for this project. It now provides faster and more accurate suggestions, making the coding experience smoother and more productive. With the foundation and UI now in place, I can start focusing on adding the larger features planned for this IDE. The goal is to create a browser-based development environment with many more capabilities than CodeKids IDE while keeping it fast, modern, and easy to use.This is another big milestone, and I’m looking forward to continuing development and adding even more advanced features. One of the next major features I’m planning is real-time multiplayer collaboration, where multiple users can edit the same project simultaneously, making it easier to build projects together."}, {"post_id": 24369, "ts": "2026-07-07T21:43:37Z", "hours": 0.2572, "text": "A New Beginning Today I’m officially starting work on my second IDE project. Right now I’m focusing on building the user interface and creating a clean, modern foundation that will make future features easy to add. My goal is to make the editor feel fast, intuitive, and enjoyable to use from the very beginning. The current work includes: Designing the overall layout. Building the sidebar, activity bar, and editor area. Creating a modern welcome screen. Setting up reusable UI components. Preparing the project structure for future features. This is only the beginning. Over time I plan to add many more features, including an integrated terminal, built-in browser, Git support, AI tools, customizable themes, project management, extensions, and much more."}]...
|
Title: N-IDE by @Nanos | Stardance
Devlogs:
A New Title: N-IDE by @Nanos | Stardance
Devlogs:
A New Beginning Today I’m officially starting work on my second IDE project. Right now I’m focusing on building the user interface and creating a clean, modern foundation that will make future features easy to add. My goal is to make the editor feel fast, intuitive, and enjoyable to use from the very beginning. The current work includes: Designing the overall layout. Building the sidebar, activity bar, and editor area. Creating a modern welcome screen. Setting up reusable UI components. Preparing the project structure for future features. This is only the beginning. Over time I plan to add many more features, including an integrated terminal, built-in browser, Git support, AI tools, customizable themes, project management, extensions, and much more.
UI Complete & Improved AutocompleteI finished building the first version of the new IDE’s interface.I also reused the autocomplete system from CodeKids IDE (my other ide) as a starting point and significantly improved it for this project. It now provides faster and more accurate suggestions, making the coding experience smoother and more productive. With the foundation and UI now in place, I can start focusing on adding the larger features planned for this IDE. The goal is to create a browser-based development environment with many more capabilities than CodeKids IDE while keeping it fast, modern, and easy to use.This is another big milestone, and I’m looking forward to continuing development and adding even more advanced features. One of the next major features I’m planning is real-time multiplayer collaboration, where multiple users can edit the same project simultaneously, making it easier to build projects together.
Real-Time Collaboration Progress I spent around 9 hours working on one of the biggest features planned for the new IDE: real-time collaboration. During this session, I built the foundation that will allow multiple users to work on the same project simultaneously. I focused on designing the synchronization system, improving how project data is shared between users, and making sure future collaborative features can be added without major changes to the architecture. I also continued polishing the editor by fixing bugs, improving performance, and refining the overall user experience while preparing the project for multiplayer editing. There’s still plenty of work left, but the core foundation is now in place. The next steps are syncing file changes in real time, showing updates instantly to everyone connected, and adding features like user presence and collaborative editing tools.
Feature Complete I’ve now finished implementing most of the core features planned for the new browser IDE. Over the last development sessions, I completed the new interface, improved autocomplete, expanded the file management system, and polished many parts of the overall user experience. The IDE has reached a point where it already feels stable and ready for everyday use. I also experimented with real-time collaboration, but after testing it, I decided to remove it for now. While the feature was promising, it introduced stability and synchronization issues that didn’t meet the quality I want for this project. Rather than shipping an unreliable feature, I chose to focus on delivering a more stable experience. I plan to revisit real-time collaboration in the future with a better implementation.
Productivity & Editor Improvements This update focuses on improving the overall development workflow by adding new debugging, navigation, and editing features. Problems Panel A new Problems tab has been added to the bottom panel.FeaturesReal-time syntax diagnostics powered by the Monaco Editor. Displays Errors, Warnings, and Info with dedicated icons and colors. Clicking a problem instantly jumps to the corresponding line. The tab title automatically updates to show the current number of detected issues (e.g. Problems (2 errors)). Global Search & Replace The Search panel has been completely rebuilt.New capabilities Search across all opened files. Regular Expression (Regex) support. Match Case option. Replace All across every opened file. Integrated Color Picker Enabled Monaco’s built-in Color Decorators. Color values such as: #ff0000 rgb(255,0,0) hsl(…) now display an inline color preview that can be clicked to open the color picker directly inside the editor. Empty Projects Creating a New Empty Project now generates a completely blank workspace. No default index.html or starter files are created, allowing users to build their project structure from scratch. Command Palette Improvements The Command Palette now provides a smoother experience. Press Escape to close it instantly. Clicking outside the modal also closes it automatically. Explorer Improvements Added a Refresh Explorer button to quickly reload the file tree after external changes are made to the project directory. Editor Improvements Added support for Ctrl + and Ctrl - to zoom the editor in and out. Added a quick toggle in the status bar to switch between Absolute and Relative line numbers.
Ships:
N-IDE is a modern browser-based IDE designed to bring a desktop-like development experience directly to the web. It features a powerful virtual file system, support for opening local folders, a multi-tab code editor powered by Monaco, intelligent autocomplete, built-in Python and JavaScript execution, live HTML/CSS/JavaScript preview, an integrated terminal, global search, a Command Palette, and many other productivity features. The goal of N-IDE is to provide a fast, intuitive, and feature-rich coding environment that works entirely in the browser while feeling as close as possible to a native desktop IDE. (or some day a desktop ide)
Productivity & Editor Improvements This update focuses on improving the overall development workflow by adding new debugging, navigation, and editing features. Problems Panel A new Problems tab has been added to the bottom panel.FeaturesReal-time syntax diagnostics powered by the Monaco Editor. Displays Errors, Warnings, and Info with dedicated icons and colors. Clicking a problem instantly jumps to the corresponding line. The tab title automatically updates to show the current number of detected issues (e.g. Problems (2 errors)). Global Search & Replace The Search panel has been completely rebuilt.New capabilities Search across all opened files. Regular Expression (Regex) support. Match Case option. Replace All across every opened file. Integrated Color Picker Enabled Monaco’s built-in Color Decorators. Color values such as: #ff0000 rgb(255,0,0) hsl(…) now display an inline color preview that can be clicked to open the color picker directly inside the editor. Empty Projects Creating a New Empty Project now generates a completely blank workspace. No default index.html or starter files are created, allowing users to build their project structure from scratch. Command Palette Improvements The Command Palette now provides a smoother experience. Press Escape to close it instantly. Clicking outside the modal also closes it automatically. Explorer Improvements Added a Refresh Explorer button to quickly reload the file tree after external changes are made to the project directory. Editor Improvements Added support for Ctrl + and Ctrl - to zoom the editor in and out. Added a quick toggle in the status bar to switch between Absolute and Relative line numbers....
|
1793087732.398314
|
1793174132.398314
|
|
37521
|
CHRONOTAMEION (JAM VERSION) by @dylz | Stardance
|
dylz
|
1
|
39.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-05T06:16:48Z", "hours": 39.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is a top-down doors inspired (yes i know) game where you need to get past 25 rooms before the clock ticks all the way down. In all honesty, I think the code for this game is pretty bad. This was the first time I seriously spent time working with someone else on a project and the first time I did a jam in a while, so there are a lot of issues. In the end though, I’m really proud of what we made, and I think it was a pretty cool project for the 4 days we worked on it! I know there isn’t a web build, but please do take the time to download the game and run the executable! It means a lot, and the games framework we’re using (raylib-cs) doesn’t allow for for web export yet, so it means a lot! Thank you for looking at the project <3", "repo": "https://github.com/Dylhouse/GMTK26", "demo": "https://dylhousedylz.itch.io/chronotameion"}]...
|
[{"post_id": 41154, "ts": "202 [{"post_id": 41154, "ts": "2026-08-05T05:58:36Z", "hours": 2.1661, "text": "The game is done (fr) Ok, so when I submitted this to GMTK, I built it wrong, so I ended up placing poorly (obviously due to lack of having a runnable executable), but I’m really happy with the game! That was about a week ago by the way, I went on a vacation almost immediately after the jam ended and now I’m back and wrapping things up. Anyways, I’ll open-source the github, commit the final changes, and yeah, that’ll be it! Have fun playing CHRONOTAMEION (jam version, might make a new game based off it!)"}, {"post_id": 35180, "ts": "2026-07-26T13:14:21Z", "hours": 10.5847, "text": "THE GAME IS (almost) DONE I did a lot, but since I want to get all my hours I’m going to make a quick devlog here. Static effect, enemies, level generation, tons of level design, balancing, inputs, and more! Very fun time, will post the link to the game in my next devlog :)"}, {"post_id": 34846, "ts": "2026-07-25T21:30:47Z", "hours": 10.9972, "text": "more work, will post more tommorow once the game is done but here’s some furniture:"}, {"post_id": 33914, "ts": "2026-07-24T06:36:02Z", "hours": 13.1753, "text": "GHOUL GAME Honestly, I don’t have a lot because art assets are still underway and we’ve been working slowly BUT I have a sick ass dithering and occlusion effects. Anyways ima go to bed i’ll have more upds later"}, {"post_id": 31633, "ts": "2026-07-20T06:00:53Z", "hours": 1.7706, "text": "Basic setup Not much to show here, just setting up the repo and everything for GMTK on Wednesday! Figured I might as well log the hours."}]...
|
Title: CHRONOTAMEION (JAM VERSION) by @dylz | Star Title: CHRONOTAMEION (JAM VERSION) by @dylz | Stardance
Devlogs:
Basic setup Not much to show here, just setting up the repo and everything for GMTK on Wednesday! Figured I might as well log the hours.
GHOUL GAME Honestly, I don’t have a lot because art assets are still underway and we’ve been working slowly BUT I have a sick ass dithering and occlusion effects. Anyways ima go to bed i’ll have more upds later
more work, will post more tommorow once the game is done but here’s some furniture:
THE GAME IS (almost) DONE I did a lot, but since I want to get all my hours I’m going to make a quick devlog here. Static effect, enemies, level generation, tons of level design, balancing, inputs, and more! Very fun time, will post the link to the game in my next devlog :)
The game is done (fr) Ok, so when I submitted this to GMTK, I built it wrong, so I ended up placing poorly (obviously due to lack of having a runnable executable), but I’m really happy with the game! That was about a week ago by the way, I went on a vacation almost immediately after the jam ended and now I’m back and wrapping things up. Anyways, I’ll open-source the github, commit the final changes, and yeah, that’ll be it! Have fun playing CHRONOTAMEION (jam version, might make a new game based off it!)
Ships:
This is a top-down doors inspired (yes i know) game where you need to get past 25 rooms before the clock ticks all the way down. In all honesty, I think the code for this game is pretty bad. This was the first time I seriously spent time working with someone else on a project and the first time I did a jam in a while, so there are a lot of issues. In the end though, I’m really proud of what we made, and I think it was a pretty cool project for the 4 days we worked on it! I know there isn’t a web build, but please do take the time to download the game and run the executable! It means a lot, and the games framework we’re using (raylib-cs) doesn’t allow for for web export yet, so it means a lot! Thank you for looking at the project <3...
|
1793206042.1151724
|
1793292442.1151724
|
|
46049
|
Puzzled Pomodoro by @Sarahg | Stardance
|
Sarahg
|
1
|
39.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-31T22:52:42Z", "hours": 39.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "what is it? A pomodoro/work timer featuring sudokus! challenges? The sudoku was very frustrating. I had no clue what recursion was, and I don’t think I could have done this without my sibling’s help! Also, it was hard working on this over a long, sporadic time frame because I kept forgetting what I learned. what am I proud of? I’m proud of the sudoku (duh!) :). It was also very cool being able to easily do things (ex: make a window close by clicking an x) which had been major struggles in previous projects. ~ My pause button for my timer is a bit weird, because it seemed like there was a bug (you had to click it twice the first time), but when I ran the debugger, it worked, so…?", "repo": "https://github.com/sloppysarah/puzzled-pomodoro", "demo": "https://sloppysarah.github.io/puzzled-pomodoro/"}]...
|
[{"post_id": 59237, "ts": "202 [{"post_id": 59237, "ts": "2026-08-31T22:20:53Z", "hours": 2.8922, "text": "Added: ambience mode (listen to the sounds of the sea!) checklist! (mostly making sure that boxes stayed checked when adding/deleting tasks)"}, {"post_id": 58226, "ts": "2026-08-30T16:10:09Z", "hours": 8.1244, "text": "Yay! The sudoku works! I got help from my sibling (they are a programmer), and it actually generates a puzzle correctly. Besides that, I have just been working on my checklist. (I’m not quite sure how eight hours passed; I guess I’m a slow typer???)"}, {"post_id": 50599, "ts": "2026-08-19T20:16:33Z", "hours": 8.2614, "text": "So… what did I do? Sadly, essentially nothing. You see, I was working on creating a sudoku, and I thought I figured it out (all by myself – I was very proud). But no. I only realized after spending a dumb amount of time on my initial plan (of only generating the clues/initial filled squares) that it wouldn’t guarantee a solution. So now I’m back at square one, trying to figure out how to generate the entire puzzle and then remove values to create the starting hints. I have to figure out recursion, but I do not fully understand…"}, {"post_id": 46515, "ts": "2026-08-13T19:54:36Z", "hours": 7.9192, "text": "What I added/changed: Added tooltips (for the timer set button + break “apps”) Fixed bugs (the timer wasn’t removing the previous set time when the user closed the timer window & the quote window wasn’t hidden on load) Added quote window - Yay! Inspiration! Added a pause button to the timer (I was afraid it was going to be terribly buggy and difficult, but it was actually very simple! :) A few random css changes - fonts, flavor text Break button now does something! - opens a “break direct” window w/ “apps” + auto pauses work timer Focus mode: click a brain emoji to turn off sounds Added water/stretch reminders every 30 minutes Also: I didn’t really add this yet, but I got the idea to put in a “tips” feature for productivity; (un)fortunately I am a sucker for that type of stuff!"}, {"post_id": 45956, "ts": "2026-08-12T19:33:51Z", "hours": 5.4617, "text": "I finally got the timer to work!! First I was stuck on making the timer countdown, because it only displayed the input time, then I figured that out and got more stuck on making it so that when a user input a new time, it would restart the timer. But lo and behold… Now you can both use AND change it! Besides that, I worked out a few minor problems: max times (so no giant #s) decimal inputs stopping the clock if the user closes the timer window"}, {"post_id": 44688, "ts": "2026-08-10T16:46:56Z", "hours": 3.2986, "text": "Added: divs are now draggable beginning of work timer"}, {"post_id": 44292, "ts": "2026-08-09T23:04:45Z", "hours": 3.3733, "text": "Currently my site looks somewhat goofy with the overlap of the divs, but… What I Did: added a clock outlined a bunch of features I want to add (the empty boxes - timer, checklist, etc.) background/basic design"}]...
|
Title: Puzzled Pomodoro by @Sarahg | Stardance
De Title: Puzzled Pomodoro by @Sarahg | Stardance
Devlogs:
Currently my site looks somewhat goofy with the overlap of the divs, but… What I Did: added a clock outlined a bunch of features I want to add (the empty boxes - timer, checklist, etc.) background/basic design
Added: divs are now draggable beginning of work timer
I finally got the timer to work!! First I was stuck on making the timer countdown, because it only displayed the input time, then I figured that out and got more stuck on making it so that when a user input a new time, it would restart the timer. But lo and behold… Now you can both use AND change it! Besides that, I worked out a few minor problems: max times (so no giant #s) decimal inputs stopping the clock if the user closes the timer window
What I added/changed: Added tooltips (for the timer set button + break “apps”) Fixed bugs (the timer wasn’t removing the previous set time when the user closed the timer window & the quote window wasn’t hidden on load) Added quote window - Yay! Inspiration! Added a pause button to the timer (I was afraid it was going to be terribly buggy and difficult, but it was actually very simple! :) A few random css changes - fonts, flavor text Break button now does something! - opens a “break direct” window w/ “apps” + auto pauses work timer Focus mode: click a brain emoji to turn off sounds Added water/stretch reminders every 30 minutes Also: I didn’t really add this yet, but I got the idea to put in a “tips” feature for productivity; (un)fortunately I am a sucker for that type of stuff!
So… what did I do? Sadly, essentially nothing. You see, I was working on creating a sudoku, and I thought I figured it out (all by myself – I was very proud). But no. I only realized after spending a dumb amount of time on my initial plan (of only generating the clues/initial filled squares) that it wouldn’t guarantee a solution. So now I’m back at square one, trying to figure out how to generate the entire puzzle and then remove values to create the starting hints. I have to figure out recursion, but I do not fully understand…
Yay! The sudoku works! I got help from my sibling (they are a programmer), and it actually generates a puzzle correctly. Besides that, I have just been working on my checklist. (I’m not quite sure how eight hours passed; I guess I’m a slow typer???)
Added: ambience mode (listen to the sounds of the sea!) checklist! (mostly making sure that boxes stayed checked when adding/deleting tasks)
Ships:
what is it? A pomodoro/work timer featuring sudokus! challenges? The sudoku was very frustrating. I had no clue what recursion was, and I don’t think I could have done this without my sibling’s help! Also, it was hard working on this over a long, sporadic time frame because I kept forgetting what I learned. what am I proud of? I’m proud of the sudoku (duh!) :). It was also very cool being able to easily do things (ex: make a window close by clicking an x) which had been major struggles in previous projects. ~ My pause button for my timer is a bit weird, because it seemed like there was a bug (you had to click it twice the first time), but when I ran the debugger, it worked, so…?...
|
1793083988.3506463
|
1793170388.3506463
|
|
41757
|
Competitive Programming Helper by @lnsekhon | Star Competitive Programming Helper by @lnsekhon | Stardance...
|
lnsekhon
|
0
|
38.99
|
0
|
[]
|
[{"post_id": 49272, "ts": "202 [{"post_id": 49272, "ts": "2026-08-17T23:43:57Z", "hours": 2.2642, "text": "added the main “Competitive Programming Helper” text on entry of project. pretty cool ig"}, {"post_id": 48587, "ts": "2026-08-17T01:24:30Z", "hours": 0.3581, "text": "I created a small animation for the openning of the app, scrolling up our two current pages with text that prompts the user to click any key to continue into the app. The text also flashes which is pretty cool and I thought was fun to implement!"}, {"post_id": 48565, "ts": "2026-08-17T00:30:58Z", "hours": 36.3714, "text": "In this build, I added the problem fetcher and the contest fetcher to Competitive Programming Helper. Both systems connect with platforms like Codeforces and AtCoder. Without these features, the app was just a static text editor that required copying and pasting test cases manually. Fetching data directly turns it into an automated workflow tool.functionality-wise, the problem fetcher takes a problem ID from Codeforces, extracts the sample test cases, and runs the user’s local code against them to check the output. At the same time, the contest fetcher uses a web scraper to pull upcoming competition schedules from both Codeforces and AtCoder into a single list.Together, these features build out the core data pipeline for the app, handling local test execution and schedule tracking in one place."}]...
|
Title: Competitive Programming Helper by @lnsekhon Title: Competitive Programming Helper by @lnsekhon | Stardance
Devlogs:
In this build, I added the problem fetcher and the contest fetcher to Competitive Programming Helper. Both systems connect with platforms like Codeforces and AtCoder. Without these features, the app was just a static text editor that required copying and pasting test cases manually. Fetching data directly turns it into an automated workflow tool.functionality-wise, the problem fetcher takes a problem ID from Codeforces, extracts the sample test cases, and runs the user’s local code against them to check the output. At the same time, the contest fetcher uses a web scraper to pull upcoming competition schedules from both Codeforces and AtCoder into a single list.Together, these features build out the core data pipeline for the app, handling local test execution and schedule tracking in one place.
I created a small animation for the openning of the app, scrolling up our two current pages with text that prompts the user to click any key to continue into the app. The text also flashes which is pretty cool and I thought was fun to implement!
added the main “Competitive Programming Helper” text on entry of project. pretty cool ig...
|
1792882357.2882843
|
1793746357.2882843
|
|
49692
|
HoverCruiser by @Toma_Kuchta | Stardance
|
Toma_Kuchta
|
0
|
38.99
|
0
|
[]
|
[{"post_id": 58113, "ts": "202 [{"post_id": 58113, "ts": "2026-08-30T13:47:52Z", "hours": 4.4481, "text": "Even thought I didn’t feel as productive I’ve done a lot of polishing of the project and added Fasteners to BOM, made technical drawings and exported everything needed for building to a folder. The fasteners were pretty relaxing, because it was a pretty simple task and I had searched for in on a supplier site and then pasted over some random din number and other stuff. After that I had reviewed the BOM and found out that i was missing the silicon cabling so I’ve asked gemini and it had a great idea of choosing a local model shop instead of aliexpress and it was cheaper and better quality! I wouldn’t have looked there otherwise but this time it worked out perfectly. And while I was at it i have also checked of they have other parts and they had it and you wouldn’t have guessed it - it was actually also cheaper. And after a lot of small tweaks, I felt like it’s all done! So instead of shipping rn I had made technical drawings! It will help everyone get the scale of this project and help them with building it. I’m super exited to actually start making it!!!!!!"}, {"post_id": 56868, "ts": "2026-08-28T20:52:28Z", "hours": 5.15, "text": "Basically I’m finishing up! It’s actually turning out great. Oh the price it’s like $1500 but I’ve managed to slash it to something like $500 by using parts I already have at hand. The CAD model is now completed and looks it should be final. I had a lot of issues with containers in FreeCAD bc part mirrors are like eating up the base geomerty - I was able to overcome this by making copies of the base geometries, but I lost the colors though. Next up is the wiring of the electronics. I’ve thought of using cheap FOCer ESCs because they are better and smoother but once price and second integration issues. So at the end I’ve opted in for the origianl ESCs with a standard RC reciever, it isn’t as clean and beutifull as with the VESCs but it should do. BTW: edited the draft devlog, also how did it do so well bc it has like 45 views and 2 likes. And secondly I’m super sleepy rn."}, {"post_id": 56505, "ts": "2026-08-28T09:33:44Z", "hours": 5.98, "text": "AaaAaAaAaaAAaaahhh got way too stuck on the ESC. So basically I wanted to merge one cheap FOCer to for it to have 2 channels but that turned out to be the wrong rabbit hole bc I got way too deep and with 3 days left I lost a substantial time. But on the other hand I’ve learnt about git submodules, older version of KiCAD and porting them to newer ones and type FOC!er! And I also wanted to make quite a bit of changes to justify it bc I can’t submit others project’s to HC! So I wanted to add USBc make the board 4 layer for better heat disapation make it 2ch and ideally run it with just one mcu. and all of it was thrown out of the window as I wasn’t able to make it work in short time frame. No worries thought."}, {"post_id": 55662, "ts": "2026-08-27T16:55:39Z", "hours": 1.5, "text": "the top and bottom cover is on! it took me way too long, but I’ve managed to model it. The flat part was pretty good but the holes were a nightmare as I needed to start from a corner and not the middle. but I like it."}, {"post_id": 55506, "ts": "2026-08-27T12:12:10Z", "hours": 1.1167, "text": "Noice the axle assembly is finally designed! I have mirrored the other sides but the mirror for everything mirrored but it didn’t mirror the parts I was mirroring before GGs."}, {"post_id": 55450, "ts": "2026-08-27T09:18:24Z", "hours": 9.8253, "text": "I’ve been working on the axle! It’s pretty hard but its going on nicely. Also I’m taking inspiration from the czech guy. The bases of this mechanism were from the czech guy and trampa trucks. Alo set colors for different manufacturing tecniques. Blue and orange - CNC gray - AL extrusion Green - bought RED - mirror It looks to be solid atleast I hope. Also I wanted to complete thw whole axle assembly but stardance cut me off. Also I’m running out of time a bit. 3 days to go and I still need to do way more."}, {"post_id": 52190, "ts": "2026-08-22T08:54:54Z", "hours": 8.1436, "text": "Oh I’ve got too locked in! So after a bit of design on the onewheel and a few onewheel reviews it occurred to me that onewheels are super dangerous and they have a lot of other caviats. Like SW and etc. Soooooooooooooooo I went with making a skateboard bc it seems way more fun and less of a SW hassle, but more of a HW hassle, in which I’m more comfortable. So I’ve began with researching how skateboards work and tried finding inspiration. At first I found a video explaining how turning works. And after that tried finding inspiration on the turning mechanism. At first I haven’t found much but after I’ve found a great video by Czech creator making his own mountain board! He said that it weights wayyyyyyyyyyy too much, so I’m going to make it out of aluminium extrusion like I’ve originaly intened for FOSSwheel. And there was CAD. At first I’ve tried sketching up the deck (Before much research). And nothing worked. And after that I have found the mountain board along with a cad model and I was hooked, so I’ve sketched it out of aluminium extrusion and then started transfering it into CAD. :yay I love how this project is going RN."}, {"post_id": 49197, "ts": "2026-08-17T21:00:38Z", "hours": 2.8261, "text": "OH this is a first devlog. I’ve stared by a lot of research, like it began a year ago when I’ve seen a video of a guy making his own onewheel out of an old hoverboard. Not to mention that I was timkering with howerboards for like four years. https://www.youtube.com/watch?v=SdHUSAQd6hc Also I’ve ridden OneWheel at Open Sauce which was amazing, also while signing a waiver lol - it was my first time in the states So I’ve began by researching all about it. And I still haven’t fell into the OneWheel rabbit hole. Yeah after research I’ve began working on the CAD for this project. it should be well documented as it’s supposed to be in the FOSS OSHW spirit. First were the 20x40 extrusions for which I have found a dxf file and with the help of some tutorial extruded … after trying to find a plugin for it - well sometimes the best solution is the simpliest. Then found the motors on grabcad along with the tire. And that’s it for now. Like I wouldhave continued but today was pretty packed. PS: I’m building a prototype OneWheel in parallel with the scaps I have laying around to learn from the mistakes and make it better. I now know that plastic wheels along with making the tire airless raised a bunch of challenges."}]...
|
Title: HoverCruiser by @Toma_Kuchta | Stardance
D Title: HoverCruiser by @Toma_Kuchta | Stardance
Devlogs:
OH this is a first devlog. I’ve stared by a lot of research, like it began a year ago when I’ve seen a video of a guy making his own onewheel out of an old hoverboard. Not to mention that I was timkering with howerboards for like four years. https://www.youtube.com/watch?v=SdHUSAQd6hc Also I’ve ridden OneWheel at Open Sauce which was amazing, also while signing a waiver lol - it was my first time in the states So I’ve began by researching all about it. And I still haven’t fell into the OneWheel rabbit hole. Yeah after research I’ve began working on the CAD for this project. it should be well documented as it’s supposed to be in the FOSS OSHW spirit. First were the 20x40 extrusions for which I have found a dxf file and with the help of some tutorial extruded … after trying to find a plugin for it - well sometimes the best solution is the simpliest. Then found the motors on grabcad along with the tire. And that’s it for now. Like I wouldhave continued but today was pretty packed. PS: I’m building a prototype OneWheel in parallel with the scaps I have laying around to learn from the mistakes and make it better. I now know that plastic wheels along with making the tire airless raised a bunch of challenges.
Oh I’ve got too locked in! So after a bit of design on the onewheel and a few onewheel reviews it occurred to me that onewheels are super dangerous and they have a lot of other caviats. Like SW and etc. Soooooooooooooooo I went with making a skateboard bc it seems way more fun and less of a SW hassle, but more of a HW hassle, in which I’m more comfortable. So I’ve began with researching how skateboards work and tried finding inspiration. At first I found a video explaining how turning works. And after that tried finding inspiration on the turning mechanism. At first I haven’t found much but after I’ve found a great video by Czech creator making his own mountain board! He said that it weights wayyyyyyyyyyy too much, so I’m going to make it out of aluminium extrusion like I’ve originaly intened for FOSSwheel. And there was CAD. At first I’ve tried sketching up the deck (Before much research). And nothing worked. And after that I have found the mountain board along with a cad model and I was hooked, so I’ve sketched it out of aluminium extrusion and then started transfering it into CAD. :yay I love how this project is going RN.
I’ve been working on the axle! It’s pretty hard but its going on nicely. Also I’m taking inspiration from the czech guy. The bases of this mechanism were from the czech guy and trampa trucks. Alo set colors for different manufacturing tecniques. Blue and orange - CNC gray - AL extrusion Green - bought RED - mirror It looks to be solid atleast I hope. Also I wanted to complete thw whole axle assembly but stardance cut me off. Also I’m running out of time a bit. 3 days to go and I still need to do way more.
Noice the axle assembly is finally designed! I have mirrored the other sides but the mirror for everything mirrored but it didn’t mirror the parts I was mirroring before GGs.
the top and bottom cover is on! it took me way too long, but I’ve managed to model it. The flat part was pretty good but the holes were a nightmare as I needed to start from a corner and not the middle. but I like it.
AaaAaAaAaaAAaaahhh got way too stuck on the ESC. So basically I wanted to merge one cheap FOCer to for it to have 2 channels but that turned out to be the wrong rabbit hole bc I got way too deep and with 3 days left I lost a substantial time. But on the other hand I’ve learnt about git submodules, older version of KiCAD and porting them to newer ones and type FOC!er! And I also wanted to make quite a bit of changes to justify it bc I can’t submit others project’s to HC! So I wanted to add USBc make the board 4 layer for better heat disapation make it 2ch and ideally run it with just one mcu. and all of it was thrown out of the window as I wasn’t able to make it work in short time frame. No worries thought.
Basically I’m finishing up! It’s actually turning out great. Oh the price it’s like $1500 but I’ve managed to slash it to something like $500 by using parts I already have at hand. The CAD model is now completed and looks it should be final. I had a lot of issues with containers in FreeCAD bc part mirrors are like eating up the base geomerty - I was able to overcome this by making copies of the base geometries, but I lost the colors though. Next up is the wiring of the electronics. I’ve thought of using cheap FOCer ESCs because they are better and smoother but once price and second integration issues. So at the end I’ve opted in for the origianl ESCs with a standard RC reciever, it isn’t as clean and beutifull as with the VESCs but it should do. BTW: edited the draft devlog, also how did it do so well bc it has like 45 views and 2 likes. And secondly I’m super sleepy rn.
Even thought I didn’t feel as productive I’ve done a lot of polishing of the project and added Fasteners to BOM, made technical drawings and exported everything needed for building to a folder. The fasteners were pretty relaxing, because it was a pretty simple task and I had searched for in on a supplier site and then pasted over some random din number and other stuff. After that I had reviewed the BOM and found out that i was missing the silicon cabling so I’ve asked gemini and it had a great idea of choosing a local model shop instead of aliexpress and it was cheaper and better quality! I wouldn’t have looked there otherwise but this time it worked out perfectly. And while I was at it i have also checked of they have other parts and they had it and you wouldn’t have guessed it - it was actually also cheaper. And after a lot of small tweaks, I felt like it’s all done! So instead of shipping rn I had made technical drawings! It will help everyone get the scale of this project and help them with building it. I’m super exited to actually start making it!!!!!!...
|
1792601471.7154486
|
1793206271.7154486
|
|
51089
|
aadityakumarsah by @aadityakumarsah | Stardance
|
aadityakumarsah
|
0
|
38.98
|
0
|
[]
|
[{"post_id": 49882, "ts": "202 [{"post_id": 49882, "ts": "2026-08-18T20:42:29Z", "hours": 38.9803, "text": "i build my portfolio that looks really cool… i used codex for adding that real cursor movement.. check it out guysss… https://aadityakumarsah.pages.dev/"}]...
|
Title: aadityakumarsah by @aadityakumarsah | Stard Title: aadityakumarsah by @aadityakumarsah | Stardance
Devlogs:
i build my portfolio that looks really cool… i used codex for adding that real cursor movement.. check it out guysss… https://aadityakumarsah.pages.dev/...
|
1792655577.7120838
|
1793260377.7120838
|
|
31445
|
Robotic Arm by @shashvat | Stardance
|
shashvat
|
0
|
38.93
|
0
|
[]
|
[{"post_id": 44949, "ts": "202 [{"post_id": 44949, "ts": "2026-08-11T01:40:34Z", "hours": 3.6514, "text": "Devlog – Day 18 Date: August 9, 2026 Time Worked: 2 hours Today I fixed the wiring issue from my previous session. After tracing through the circuit, I found that the connections were mixed up. Once I corrected the wiring, the servos started responding properly. I then worked with the Bluepad32 library and wrote code that allows an Xbox controller’s joysticks and buttons to control the servos. I ran into several setup and communication issues, but I worked through them and completed the full controller code. With the wiring fixed and the code completed, the project is now ready for the physical build once funding is approved. Next Steps Order the required parts. Begin 3D printing the robotic arm components. Start assembling the arm."}, {"post_id": 44092, "ts": "2026-08-09T17:00:21Z", "hours": 2.2172, "text": "Devlog – Day 17 Date: August 8, 2026 Time Worked: 2 hours Today I started learning how to wire and program servos using an ESP32 in Cirkit. I began with simple push buttons instead of immediately using Bluepad32 and a gaming controller so I could understand the basic wiring and servo control first. I successfully got one servo working, confirming that my basic wiring and code were correct. I also identified a wiring issue with the other servos that I wasn’t able to fix today. I learned more about ESP32 pins, servo-control functions, and how the different components need to be connected. Next Steps Fix the wiring issue with the other servos. Continue practicing servo control. Start learning how to use Bluepad32 with a gaming controller."}, {"post_id": 36573, "ts": "2026-07-28T19:40:48Z", "hours": 8.0378, "text": "Devlog – Day 1 Date: July 27, 2026 Time Worked: 4 hours Today I began planning my custom quadcopter drone project by researching how the entire system works before selecting any parts. I learned how the flight controller, ESCs, motors, GPS, receiver, battery, and power distribution board work together, and compared different options for building a custom transmitter. By the end of the session, I had established the project’s main goals, selected the overall system architecture, and identified the next components to research. Next Steps Select the drone hardware. Research the custom transmitter electronics. Create a complete bill of materials. Begin designing the transmitter enclosure. Devlog – Day 2 Date: July 28, 2026 Time Worked: 4 hours Today I finalized the major hardware for both the drone and the custom controller. I selected the flight stack, motors, propellers, battery, GPS module, and the controller electronics, including the ESP32-C3, HC-12 radio module, battery, charging circuit, and joysticks. I also finalized the project’s electrical architecture, estimated the total project cost, and prepared to move into the CAD design phase. Next Steps Design the carbon fiber drone frame. Design the custom controller enclosure. Create the wiring diagrams. Note: I am posting these updates in my Robotics Arm project section because I accidentally recorded the project time there."}, {"post_id": 35597, "ts": "2026-07-27T04:04:06Z", "hours": 1.7844, "text": "Day 16 – Robotics Arm Project Time Worked: 1 hour 47 min Today I focused on improving the realism and accuracy of my robotic arm CAD assembly. The M3 screw holes and brass heat-set insert mounting points were already designed, so I created CAD models of the actual M3 screws and brass heat-set inserts and added them into the assembly. Adding the hardware models helped me visualize how the final robotic arm will be assembled and gave a more accurate representation of the finished design. While adding these components, I noticed a few small design issues that were not obvious before. Checking the screws and inserts against the parts helped me verify clearances, mounting positions, and overall fit. I fixed these issues before printing to prevent problems during assembly. Next Steps Apply for the Stardance grant once the application system is available again. Submit the design application when the form is working. Order the parts after confirming the budget. Begin the physical build once the parts arrive."}, {"post_id": 34989, "ts": "2026-07-26T04:13:11Z", "hours": 2.5011, "text": "Day 15 – Robotics Arm Project Time Worked: 2.5 hours Today I finalized the bill of materials (BOM) for my robotic arm project and confirmed that all of the required components had been selected. I replaced several Amazon.com items with Amazon.ca alternatives to reduce shipping costs and added a 5x20mm inline fuse kit to protect the ESP32. I also verified that my selected wire and MG90S servos matched my design requirements, so no CAD changes are needed. By the end of the session, the project cost was estimated at $257.10 CAD, and the planning stage was essentially complete. Next Steps: Make the final CAD improvements. Apply for the project grant. Order the parts once funding is approved. Begin the physical build after the parts arrive."}, {"post_id": 34440, "ts": "2026-07-25T04:48:52Z", "hours": 2.76, "text": "Day 14 — Robotic Arm Project Time spent: 2.5 hours Today I worked on creating an animation of my robotic arm to better visualize how all of the joints move together before building the physical prototype. I explored several approaches, including exporting the CAD model for simulation in PyBullet, but ran into issues with the assembly not exporting correctly due to missing joint definitions and material properties. Instead, I used Onshape’s Gear Relation feature to synchronize the movement of multiple joints, allowing me to create a smooth animation driven by a single input. This gave me a simple way to demonstrate the arm’s motion and better understand how the overall mechanism behaves. Next, I’ll continue refining the CAD assembly, prepare the design for 3D printing, and complete the remaining project documentation."}, {"post_id": 33869, "ts": "2026-07-24T04:18:55Z", "hours": 3.2172, "text": "Day 13 — Robotics Arm Project Time spent: 3 hours Today I shifted my focus from designing new parts to improving and validating the existing CAD model. I reviewed every component of the robotic arm, corrected several design issues, and refined parts to improve their fit and overall manufacturability. I also planned the wire routing for the arm, making sure each joint would have enough slack for its full range of motion while reducing the risk of wires being pinched during operation. To finish the session, I began preparing the arm for simulation by exporting the assembly from Onshape using the onshape-to-robot exporter. During this process, I discovered that my assembly mates and material properties still need to be configured correctly before the robot can be successfully simulated in PyBullet. Next, I’ll fix the assembly mates, assign materials to every part, and begin testing the robotic arm in simulation."}, {"post_id": 33326, "ts": "2026-07-23T04:16:34Z", "hours": 2.3856, "text": "Day 12 — Robotics Arm Project Time spent: 2 hours Today I finished troubleshooting the remaining gear meshing issues and completed the full CAD assembly of the robotic arm. After correcting both the gear center distance and tooth alignment, the gears meshed consistently throughout their full range of motion. With those issues resolved, the entire assembly is now functional. The base, shoulder, elbow, wrist, and gripper all move as intended, and the gear-driven parallelogram gripper operates correctly. Next, I’ll perform a final review of every part by checking dimensions against the actual hardware specifications, make any final adjustments if needed, and finish the bill of materials before preparing the design for manufacturing."}, {"post_id": 32684, "ts": "2026-07-22T00:15:49Z", "hours": 4.5364, "text": "Day 11 — Robotics Arm Project Time spent: 4 hours Today’s focus was on finishing the robotic arm’s gripper. After working through several design and assembly issues, I completed a gear-driven parallelogram gripper that keeps the jaws parallel as they open and close. Most of the session was spent troubleshooting gear meshing and assembly constraints. After adjusting the gear alignment and correcting the center distance, the mechanism operated smoothly. I also removed an unnecessary assembly constraint that was causing conflicts, allowing the four-bar linkage to function as intended. Next, I’ll address the remaining issues discovered during testing, finish the full arm assembly, and continue validating the gripper’s motion before moving on to manufacturing."}, {"post_id": 32172, "ts": "2026-07-21T04:53:00Z", "hours": 2.6186, "text": "Day 10 — Robotic Arm Design Time spent: 2 hours 25 minutes Today’s work was focused on designing the robotic arm’s gripper. I finalized the parallel-jaw gripper design after comparing various end-effector options over the past two days. Most of my time was spent positioning the servo inside the gripper housing and designing the gear mechanism that opens and closes the jaws while ensuring everything fit together correctly. Next, I’ll finish the remaining gripper components, verify the gear alignment, and continue completing the full CAD assembly."}, {"post_id": 31484, "ts": "2026-07-19T21:55:50Z", "hours": 4.2011, "text": "Day 9 — Robotics Arm Project Spent: 4 hours Today I finished designing the wrist section of the robotic arm and continued refining the overall CAD model. I also spent time researching different claw and gripper designs to determine which type would be the best fit for handling small, lightweight objects. A large portion of today’s work involved revisiting earlier CAD parts to add missing details, verify dimensions, and improve the overall assembly. I also searched for manufacturer dimension sheets to make sure the parts matched the hardware I plan to use. While assembling the base, I ran into a gear meshing issue where the 18-tooth and 24-tooth gears were interfering at certain rotation angles. After checking the gear ratio, module, and alignment, I narrowed the problem down to the center distance being slightly too tight. I’m now testing a slightly larger spacing to provide additional clearance and reduce the chance of binding. Next, I’ll finish testing the updated gear spacing, choose a final gripper design, and continue designing the end effector before completing the remaining CAD work."}, {"post_id": 30951, "ts": "2026-07-18T23:21:51Z", "hours": 1.0167, "text": "Day 8 — Robotic Arm Project Spent: 1 hour Today I compared the remaining servo options for the robotic arm and decided to replace the MG996R servos with DS3225MG servos. The DS3225MG provides significantly more torque (about 25 kg·cm), is waterproof, and uses metal gears, all while costing less than the MG996R. Since the body dimensions and mounting hole pattern are very similar, I won’t need to redesign any of the existing brackets. I also spent some time optimizing the CAD model by removing unnecessary material from the arm segments. The goal was to reduce filament usage while keeping strength in the areas that experience the highest loads, such as the joints and mounting points. The CAD assembly is now roughly 80% complete. Next, I’ll continue assembling the remaining components and complete the overall arm assembly before moving on to the next stage of the project."}]...
|
Title: Robotic Arm by @shashvat | Stardance
Devlo Title: Robotic Arm by @shashvat | Stardance
Devlogs:
Day 8 — Robotic Arm Project Spent: 1 hour Today I compared the remaining servo options for the robotic arm and decided to replace the MG996R servos with DS3225MG servos. The DS3225MG provides significantly more torque (about 25 kg·cm), is waterproof, and uses metal gears, all while costing less than the MG996R. Since the body dimensions and mounting hole pattern are very similar, I won’t need to redesign any of the existing brackets. I also spent some time optimizing the CAD model by removing unnecessary material from the arm segments. The goal was to reduce filament usage while keeping strength in the areas that experience the highest loads, such as the joints and mounting points. The CAD assembly is now roughly 80% complete. Next, I’ll continue assembling the remaining components and complete the overall arm assembly before moving on to the next stage of the project.
Day 9 — Robotics Arm Project Spent: 4 hours Today I finished designing the wrist section of the robotic arm and continued refining the overall CAD model. I also spent time researching different claw and gripper designs to determine which type would be the best fit for handling small, lightweight objects. A large portion of today’s work involved revisiting earlier CAD parts to add missing details, verify dimensions, and improve the overall assembly. I also searched for manufacturer dimension sheets to make sure the parts matched the hardware I plan to use. While assembling the base, I ran into a gear meshing issue where the 18-tooth and 24-tooth gears were interfering at certain rotation angles. After checking the gear ratio, module, and alignment, I narrowed the problem down to the center distance being slightly too tight. I’m now testing a slightly larger spacing to provide additional clearance and reduce the chance of binding. Next, I’ll finish testing the updated gear spacing, choose a final gripper design, and continue designing the end effector before completing the remaining CAD work.
Day 10 — Robotic Arm Design Time spent: 2 hours 25 minutes Today’s work was focused on designing the robotic arm’s gripper. I finalized the parallel-jaw gripper design after comparing various end-effector options over the past two days. Most of my time was spent positioning the servo inside the gripper housing and designing the gear mechanism that opens and closes the jaws while ensuring everything fit together correctly. Next, I’ll finish the remaining gripper components, verify the gear alignment, and continue completing the full CAD assembly.
Day 11 — Robotics Arm Project Time spent: 4 hours Today’s focus was on finishing the robotic arm’s gripper. After working through several design and assembly issues, I completed a gear-driven parallelogram gripper that keeps the jaws parallel as they open and close. Most of the session was spent troubleshooting gear meshing and assembly constraints. After adjusting the gear alignment and correcting the center distance, the mechanism operated smoothly. I also removed an unnecessary assembly constraint that was causing conflicts, allowing the four-bar linkage to function as intended. Next, I’ll address the remaining issues discovered during testing, finish the full arm assembly, and continue validating the gripper’s motion before moving on to manufacturing.
Day 12 — Robotics Arm Project Time spent: 2 hours Today I finished troubleshooting the remaining gear meshing issues and completed the full CAD assembly of the robotic arm. After correcting both the gear center distance and tooth alignment, the gears meshed consistently throughout their full range of motion. With those issues resolved, the entire assembly is now functional. The base, shoulder, elbow, wrist, and gripper all move as intended, and the gear-driven parallelogram gripper operates correctly. Next, I’ll perform a final review of every part by checking dimensions against the actual hardware specifications, make any final adjustments if needed, and finish the bill of materials before preparing the design for manufacturing.
Day 13 — Robotics Arm Project Time spent: 3 hours Today I shifted my focus from designing new parts to improving and validating the existing CAD model. I reviewed every component of the robotic arm, corrected several design issues, and refined parts to improve their fit and overall manufacturability. I also planned the wire routing for the arm, making sure each joint would have enough slack for its full range of motion while reducing the risk of wires being pinched during operation. To finish the session, I began preparing the arm for simulation by exporting the assembly from Onshape using the onshape-to-robot exporter. During this process, I discovered that my assembly mates and material properties still need to be configured correctly before the robot can be successfully simulated in PyBullet. Next, I’ll fix the assembly mates, assign materials to every part, and begin testing the robotic arm in simulation.
Day 14 — Robotic Arm Project Time spent: 2.5 hours Today I worked on creating an animation of my robotic arm to better visualize how all of the joints move together before building the physical prototype. I explored several approaches, including exporting the CAD model for simulation in PyBullet, but ran into issues with the assembly not exporting correctly due to missing joint definitions and material properties. Instead, I used Onshape’s Gear Relation feature to synchronize the movement of multiple joints, allowing me to create a smooth animation driven by a single input. This gave me a simple way to demonstrate the arm’s motion and better understand how the overall mechanism behaves. Next, I’ll continue refining the CAD assembly, prepare the design for 3D printing, and complete the remaining project documentation.
Day 15 – Robotics Arm Project Time Worked: 2.5 hours Today I finalized the bill of materials (BOM) for my robotic arm project and confirmed that all of the required components had been selected. I replaced several Amazon.com items with Amazon.ca alternatives to reduce shipping costs and added a 5x20mm inline fuse kit to protect the ESP32. I also verified that my selected wire and MG90S servos matched my design requirements, so no CAD changes are needed. By the end of the session, the project cost was estimated at $257.10 CAD, and the planning stage was essentially complete. Next Steps: Make the final CAD improvements. Apply for the project grant. Order the parts once funding is approved. Begin the physical build after the parts arrive.
Day 16 – Robotics Arm Project Time Worked: 1 hour 47 min Today I focused on improving the realism and accuracy of my robotic arm CAD assembly. The M3 screw holes and brass heat-set insert mounting points were already designed, so I created CAD models of the actual M3 screws and brass heat-set inserts and added them into the assembly. Adding the hardware models helped me visualize how the final robotic arm will be assembled and gave a more accurate representation of the finished design. While adding these components, I noticed a few small design issues that were not obvious before. Checking the screws and inserts against the parts helped me verify clearances, mounting positions, and overall fit. I fixed these issues before printing to prevent problems during assembly. Next Steps Apply for the Stardance grant once the application system is available again. Submit the design application when the form is working. Order the parts after confirming the budget. Begin the physical build once the parts arrive.
Devlog – Day 1 Date: July 27, 2026 Time Worked: 4 hours Today I began planning my custom quadcopter drone project by researching how the entire system works before selecting any parts. I learned how the flight controller, ESCs, motors, GPS, receiver, battery, and power distribution board work together, and compared different options for building a custom transmitter. By the end of the session, I had established the project’s main goals, selected the overall system architecture, and identified the next components to research. Next Steps Select the drone hardware. Research the custom transmitter electronics. Create a complete bill of materials. Begin designing the transmitter enclosure. Devlog – Day 2 Date: July 28, 2026 Time Worked: 4 hours Today I finalized the major hardware for both the drone and the custom controller. I selected the flight stack, motors, propellers, battery, GPS module, and the controller electronics, including the ESP32-C3, HC-12 radio module, battery, charging circuit, and joysticks. I also finalized the project’s electrical architecture, estimated the total project cost, and prepared to move into the CAD design phase. Next Steps Design the carbon fiber drone frame. Design the custom controller enclosure. Create the wiring diagrams. Note: I am posting these updates in my Robotics Arm project section because I accidentally recorded the project time there.
Devlog – Day 17 Date: August 8, 2026 Time Worked: 2 hours Today I started learning how to wire and program servos using an ESP32 in Cirkit. I began with simple push buttons instead of immediately using Bluepad32 and a gaming controller so I could understand the basic wiring and servo control first. I successfully got one servo working, confirming that my basic wiring and code were correct. I also identified a wiring issue with the other servos that I wasn’t able to fix today. I learned more about ESP32 pins, servo-control functions, and how the different components need to be connected. Next Steps Fix the wiring issue with the other servos. Continue practicing servo control. Start learning how to use Bluepad32 with a gaming controller.
Devlog – Day 18 Date: August 9, 2026 Time Worked: 2 hours Today I fixed the wiring issue from my previous session. After tracing through the circuit, I found that the connections were mixed up. Once I corrected the wiring, the servos started responding properly. I then worked with the Bluepad32 library and wrote code that allows an Xbox controller’s joysticks and buttons to control the servos. I ran into several setup and communication issues, but I worked through them and completed the full controller code. With the wiring fixed and the code completed, the project is now ready for the physical build once funding is approved. Next Steps Order the required parts. Begin 3D printing the robotic arm components. Start assembling the arm....
|
1793191900.562953
|
1793796700.562953
|
|
47715
|
MailOnAPI by @Drew_Fitzgerald | Stardance
|
Drew_Fitzgerald
|
1
|
38.79
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-15T02:16:59Z", "hours": 29.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I’ve made an email server, email client and an IMAP server to allow it to be used in external email clients. The IMAP server is quite feature ful to 2003 standards, um not recent standards it is a custom implementation of RFC3501 which is from 2003 but it was only made obsolete in 2022 and is still used by gmail for it’s IMAP so it’s still very well supported. Right now I’m using Resend as the email service to send out emails but the implementation makes it very easy to support more.", "repo": "https://github.com/Sheep26/MailOnAPI", "demo": "https://mail.drewfitzgerald.co.nz"}]...
|
[{"post_id": 76982, "ts": "202 [{"post_id": 76982, "ts": "2026-10-05T08:08:31Z", "hours": 2.9119, "text": "Many improvements to the code and WE GOT ATTACHMENTS WORKING IN IMAP."}, {"post_id": 75043, "ts": "2026-09-28T23:50:28Z", "hours": 6.8733, "text": "We added the search command and improved the code quite signifigantly."}, {"post_id": 68380, "ts": "2026-09-15T01:06:50Z", "hours": 0.3844, "text": "Today we finished TLS WOOO. Now we actually have a secure IMAP server."}, {"post_id": 68002, "ts": "2026-09-14T11:09:28Z", "hours": 0.9003, "text": "We’ve pretty much finished our IMAP integration, we’ve added copy and expunge today and fixed our idle handler."}, {"post_id": 67889, "ts": "2026-09-14T05:57:27Z", "hours": 5.5586, "text": "I reworked the way we manage things listening in to the socket to add a proper listener module instead of having it all in the handle command function. The handle command function worked until now but now that we want commands that expect more data than just one line we do need to expand it to something more streamlined. Commands can now register listeners on the feed from the socket and remove them as they please in order for them to get the required data. We also added a few commands and Idling which allows email clients to idle instead of just sit and poll the server for new mail. I kinda changed the process buffer function so that it can dynamicly figure out if the newline is crlf or lf instead of guess and so it includes that in it’s output. Because we now have listeners we can now add the append command and it will recieve a stream of data from the listener."}, {"post_id": 66332, "ts": "2026-09-12T03:17:30Z", "hours": 1.1906, "text": "I allowed our IMAP parser to be able to understand parenthasis WOO, i had to change a little bit with our fetch function because it didn’t expect that and I added some more IMAP commands our command repertoire now looks like this."}, {"post_id": 65220, "ts": "2026-09-10T06:12:50Z", "hours": 2.4739, "text": "Users can now change their username, we also made many changes to the fetch function in the IMAP server to make it work properly. haha"}, {"post_id": 62680, "ts": "2026-09-06T05:13:18Z", "hours": 2.9642, "text": "IMAP Server WOOOOO! Today I made an IMAP server for the email server/client so it can be used with say Thunderbird. Now there’s a very very basic implementation but it’s there and you can read emails. WOO."}, {"post_id": 62050, "ts": "2026-09-05T08:47:23Z", "hours": 2.3347, "text": "I significantly improved the code for mailboxes. Now we have table for mailboxes and I also made it more clear which mailbox you’re currently in. This makes it easier for me to eventually implement IMAP."}, {"post_id": 61913, "ts": "2026-09-05T02:45:11Z", "hours": 1.6956, "text": "We have mailboxes now, you can move mail there and yeah."}, {"post_id": 55453, "ts": "2026-08-27T09:38:18Z", "hours": 1.2, "text": "We added custom mailboxes, you can now add and remove maliboxes but we can’t move emails there or setup filters."}, {"post_id": 53642, "ts": "2026-08-24T09:33:11Z", "hours": 1.5769, "text": "Today I completely revamped the way emails are stored in the database to make it better. I also added seen checking to mark emails as read. I added mail boxes as well instead of just inbox and sent so users can have custom mailboxes."}, {"post_id": 48724, "ts": "2026-08-17T07:52:59Z", "hours": 0.6217, "text": "We got replies working WOO, we can send emails, reply, recieve replies and continue on reply chains."}, {"post_id": 48056, "ts": "2026-08-16T10:34:05Z", "hours": 0.9753, "text": "We got attachments working WOOO"}, {"post_id": 47918, "ts": "2026-08-16T05:57:14Z", "hours": 0.6972, "text": "We got viewing our sent emails working"}, {"post_id": 47403, "ts": "2026-08-15T09:57:02Z", "hours": 1.4622, "text": "We can send emails from a ui now WOOO"}, {"post_id": 47337, "ts": "2026-08-15T06:53:01Z", "hours": 0.6708, "text": "We can read our emails now."}, {"post_id": 47304, "ts": "2026-08-15T05:25:04Z", "hours": 1.8989, "text": "We’ve started building the inbox, we can view our emails and see when they were sent to us."}, {"post_id": 46833, "ts": "2026-08-14T11:05:59Z", "hours": 1.3553, "text": "We added the Database, AND GOT RECIEVING EMAILS WORKING WOOOO"}, {"post_id": 46799, "ts": "2026-08-14T09:39:53Z", "hours": 1.11, "text": "We got sending emails, WOOO. No accounts yet but we can send emails over stmp."}]...
|
Title: MailOnAPI by @Drew_Fitzgerald | Stardance
Title: MailOnAPI by @Drew_Fitzgerald | Stardance
Devlogs:
We got sending emails, WOOO. No accounts yet but we can send emails over stmp.
We added the Database, AND GOT RECIEVING EMAILS WORKING WOOOO
We’ve started building the inbox, we can view our emails and see when they were sent to us.
We can read our emails now.
We can send emails from a ui now WOOO
We got viewing our sent emails working
We got attachments working WOOO
We got replies working WOO, we can send emails, reply, recieve replies and continue on reply chains.
Today I completely revamped the way emails are stored in the database to make it better. I also added seen checking to mark emails as read. I added mail boxes as well instead of just inbox and sent so users can have custom mailboxes.
We added custom mailboxes, you can now add and remove maliboxes but we can’t move emails there or setup filters.
We have mailboxes now, you can move mail there and yeah.
I significantly improved the code for mailboxes. Now we have table for mailboxes and I also made it more clear which mailbox you’re currently in. This makes it easier for me to eventually implement IMAP.
IMAP Server WOOOOO! Today I made an IMAP server for the email server/client so it can be used with say Thunderbird. Now there’s a very very basic implementation but it’s there and you can read emails. WOO.
Users can now change their username, we also made many changes to the fetch function in the IMAP server to make it work properly. haha
I allowed our IMAP parser to be able to understand parenthasis WOO, i had to change a little bit with our fetch function because it didn’t expect that and I added some more IMAP commands our command repertoire now looks like this.
I reworked the way we manage things listening in to the socket to add a proper listener module instead of having it all in the handle command function. The handle command function worked until now but now that we want commands that expect more data than just one line we do need to expand it to something more streamlined. Commands can now register listeners on the feed from the socket and remove them as they please in order for them to get the required data. We also added a few commands and Idling which allows email clients to idle instead of just sit and poll the server for new mail. I kinda changed the process buffer function so that it can dynamicly figure out if the newline is crlf or lf instead of guess and so it includes that in it’s output. Because we now have listeners we can now add the append command and it will recieve a stream of data from the listener.
We’ve pretty much finished our IMAP integration, we’ve added copy and expunge today and fixed our idle handler.
Today we finished TLS WOOO. Now we actually have a secure IMAP server.
We added the search command and improved the code quite signifigantly.
Many improvements to the code and WE GOT ATTACHMENTS WORKING IN IMAP.
Ships:
I’ve made an email server, email client and an IMAP server to allow it to be used in external email clients. The IMAP server is quite feature ful to 2003 standards, um not recent standards it is a custom implementation of RFC3501 which is from 2003 but it was only made obsolete in 2022 and is still used by gmail for it’s IMAP so it’s still very well supported. Right now I’m using Resend as the email service to send out emails but the implementation makes it very easy to support more....
|
1793145328.4923775
|
1793231728.4923775
|
|
50693
|
SpaceMount by @parkerrupe | Stardance
|
parkerrupe
|
0
|
38.79
|
0
|
[]
|
[{"post_id": 54862, "ts": "202 [{"post_id": 54862, "ts": "2026-08-26T01:51:39Z", "hours": 1.1667, "text": "Controls Planning, Preliminary Firmware/Drivers, Wiring Diagram, and Finishing Touches. Submission is upon us. Well, just me. I planned out the full control scheme in a spreadsheet so that I could keep track of it all. Top level is PINS https://github.com/nitr57/pins , which controls the entire shooting session, stages photos, etc. Plate solving is handled by ASTAP https://www.hnsky.org/astap.html . This is how the polar alignment mount figures out where it needs to move. Guiding is handled by PHD2 https://openphdguiding.org/ . This is how the equatorial mount figures out where it needs to move to look at targets and track them. Mid level is handled by Indiwebmanager https://github.com/knro/indiwebmanager . This hosts an INDI server that communicates control signals between PINS and my mount drivers. Then we have custom drivers https://github.com/ProgrammerTurtle/SpaceMount/tree/main/Control/drivers here that handle transllating control instructions from PINS into actual signals the SKR pico can parse. Lastly, the lowest level is the firmware on the SKR pico, which is here https://github.com/ProgrammerTurtle/SpaceMount/tree/main/Control/firmware . This is low level motor control, mainly. That’s it! The last two were written during this session. Lastly was the wiring diagram and final prep for submission. The diagram is pretty simple, thankfully. Otherwise I just double checked submission requirements and everything in my repo. I think this is the last entry before I ship. Godspeed!"}, {"post_id": 54282, "ts": "2026-08-25T06:25:29Z", "hours": 7.6167, "text": "Instruction Manuals! I wrote complete assembly instruction manuals for every part of this project. One for the Polar Mount, one for the Equatorial Mount, and one for the Guider Scope. The polar mount manual is 47 pages, the equatorial mount manual is 24 pages, and the guider scope manual is 15 pages. It took sooo much time but I am glad I did it as they are pretty neat to have! I doubt anybody will ever use them besides me but that’s ok! I actually discovered a few errors while I was doing it too, since I hadn’t spent as much time thinking about assembly. Mainly errors on the internals of my gearboxes, as assembly planning for those is a nightmare due to the complexity and sheer volume of parts. So, I am glad I took the time and discovered those before the full release/ship! Attached is one example page from each manual!"}, {"post_id": 53553, "ts": "2026-08-24T04:46:28Z", "hours": 4.32, "text": "BOM, Readme, Renders, Finishing touches, and More. This was a long session! I started off with some finishing touches here and there like an adapter plate for the arcaswiss mounting so that I can actually put this mount on a tripod. Then, I wrote the BOM. Boy oh boy. I thought i was doing so well on budget! Turns out, I am at the full 1000 dollars. Oops. I mean, when you think about it, this kind of setup commercially would be well over double that. So it isn’t actually that bad? But it is a bit rough. I was looking into some DIY imaging scope stuff earlier because I thought I had the budget spare but boy was I wrong. Anywho, I got the BOM done, including accurate counts of every single screw type. That isn’t something I have done before, but I feel like this project deserved the effort. Then I wrote the README and thus had to take some renders for it! I took one of the whole project and this really cool one of the gearbox exploded - they are attached to this devlog. I am pretty happy with how they came out. Anywho, we are getting very close to submission, I just need to write some preliminary firmware for the SKR pico. And then I think we are good to go? Not sure."}, {"post_id": 53399, "ts": "2026-08-23T22:48:13Z", "hours": 1.6167, "text": "Nonrotating Helical Focuser I designed a new focuser for my guide scope, a Non-Rotating Helical Focuser. This basically means there is a nut/dial that you spin and it pushes/pulls the lens WITHOUT rotating it. This keeps a much clearer image during focusing, thus making focusing easier and faster. I also designed an additonal mounting clamp option in the form of Mini-Vixen, in case I want to use that. I think I will end up using the first clamp I designed, but still. Time for the scary part - writing a BOM."}, {"post_id": 52809, "ts": "2026-08-23T04:58:59Z", "hours": 5.7742, "text": "Electronics! I designed the electronics assembly and guider scope for this project. The electronics assembly is an SKR pico with a Raspberry Pi 4b. I chose this pair because they are identically sized boards, so they stack well, and the SKR pico has 4 motor drivers, the exact number I need. The raspberry pi will allow for onboard plate solving/tracking control and lessen the need of always being connected to a laptop. I already own the pi and the skr pico is cheap enough. The two boards are mounting into one assembly and that gets mounted to the rear of the polar mount. I also added HDMI to CSI connectors for the polar mount camera so that I can just run an hdmi cable between the mount and my electronics, which will handle the motion way better and be way less fragile than using a long ribbon cable. So that’s nice! As for the guider scope. I am using an IMX290 camera sensor, a 182mm focal length 50mm diameter lens, and a custom wound carbon fiber tube for the body. This allows for higher rigidity and lower mass, and is completely overkill but it looks awesome. This scope is heavily inspired by the OpenAstroGuider scope but mine has a simpler focusing mechanism."}, {"post_id": 52038, "ts": "2026-08-22T02:19:14Z", "hours": 4.1056, "text": "I designed the Equatorial Mount section. For this, I just used two of my cycloidal gearboxes stacked at 90 degrees with a bit of fancy mounting. I honestly could have done something a lot more complex, but the fact of the matter is I don’t need to! I do worry a little about strength of my gearboxes, but that’s what iterating is for. Long story short, I got sidetracked for the first while of this recording by a red herring on an issue with my gearboxes. I was seeing concerning numbers on the calculator when it came to pressure angle on the gear teeth, but I determined that the calculator maybe can’t be trusted so I don’t know how accurate it is. I’m just gonna send it tbh, and if something goes wrong we iterate. The mount is made up of more 1/4” aluminum, this time with me trying to spice up the shape a little. I also used more Vixen mounting hardware on the output and mounting."}, {"post_id": 51413, "ts": "2026-08-21T03:14:35Z", "hours": 0.75, "text": "Finished up the polar mount. I added a camera module from aliexpress as well as some final structural touches to complete the mount. I decided that for tensioning I am going to try the fight during assembly thing, but if that doesn’t work out then I do have an aluminum extrusion crossbar that I added that I could either use to add tensioning or use the mounting holes of to add tensioning. Either way there are options to solve my problem. Now, I move on to equatorial."}, {"post_id": 51370, "ts": "2026-08-21T00:32:21Z", "hours": 2.5667, "text": "I designed the altitude axis in its entirety, minus belt tensioners and the alignment camera. It is constructed out of more lasercut aluminum and a few aluminum extrusions with minimal printed parts to maximize load capacity. I need to think of a clean way to do belt tensioning - maybe i just undersize the belt a bit and fight it during assembly? No clue. I will think about it."}, {"post_id": 50799, "ts": "2026-08-20T06:15:43Z", "hours": 2.7, "text": "Mount assembly and altitude work. I worked on integrating the gearbox into the mount, mounting the altitude motor, and then some more detailed work on the altitude axis. I have this cool idea to use a 4040 extrusion as the “shaft” with lasercut alu for the actual bearing interfacing part. I think it will be cool and hopefully will be quite strong. I added an aluminum plate to the bottom of the module as I felt iffy about all the weight being supported by plastic. So now, it gets 1/4” aluminum, and I am not worried in the slightest. It does make me need longer screws but thats ok."}, {"post_id": 50660, "ts": "2026-08-19T22:47:47Z", "hours": 2.2489, "text": "I designed a dual stage, 81:1 reduction cycloidal gearbox to replace the huge 41:1 from yesterday. Not only is this more compact (in xy), it is a much higher reduction. It should stall somewhere around 35-40 Nm, which is a great safety margin for this project. It uses two stacked 9:1 reductions (9x9=81)."}, {"post_id": 50594, "ts": "2026-08-19T20:13:06Z", "hours": 4.3167, "text": "I worked on a bit of gearing for the altitude axis, mainly adding pulleys, bearings, and the shaft, and then decided to make a custom cycloidal drive gearbox for the azimuth axis that bolts to a slew bearing, replacing the entire existing bearing assembly of thrust bearing with normal bearing and pulleys."}, {"post_id": 50018, "ts": "2026-08-19T01:23:59Z", "hours": 1.6114, "text": "Began work on SpaceMount today. I am starting off with the polar alignment portion of the mount since it is basically a high load turret. I am heavily inspired by the Zenit Align Mini https://zenit-astronomy.com/products/zenit-align-mini for this portion of the mount. I am unsure if it will be standalone from the main mount or not, though. Decent bit of research and some design."}]...
|
Title: SpaceMount by @parkerrupe | Stardance
Devl Title: SpaceMount by @parkerrupe | Stardance
Devlogs:
Began work on SpaceMount today. I am starting off with the polar alignment portion of the mount since it is basically a high load turret. I am heavily inspired by the Zenit Align Mini https://zenit-astronomy.com/products/zenit-align-mini for this portion of the mount. I am unsure if it will be standalone from the main mount or not, though. Decent bit of research and some design.
I worked on a bit of gearing for the altitude axis, mainly adding pulleys, bearings, and the shaft, and then decided to make a custom cycloidal drive gearbox for the azimuth axis that bolts to a slew bearing, replacing the entire existing bearing assembly of thrust bearing with normal bearing and pulleys.
I designed a dual stage, 81:1 reduction cycloidal gearbox to replace the huge 41:1 from yesterday. Not only is this more compact (in xy), it is a much higher reduction. It should stall somewhere around 35-40 Nm, which is a great safety margin for this project. It uses two stacked 9:1 reductions (9x9=81).
Mount assembly and altitude work. I worked on integrating the gearbox into the mount, mounting the altitude motor, and then some more detailed work on the altitude axis. I have this cool idea to use a 4040 extrusion as the “shaft” with lasercut alu for the actual bearing interfacing part. I think it will be cool and hopefully will be quite strong. I added an aluminum plate to the bottom of the module as I felt iffy about all the weight being supported by plastic. So now, it gets 1/4” aluminum, and I am not worried in the slightest. It does make me need longer screws but thats ok.
I designed the altitude axis in its entirety, minus belt tensioners and the alignment camera. It is constructed out of more lasercut aluminum and a few aluminum extrusions with minimal printed parts to maximize load capacity. I need to think of a clean way to do belt tensioning - maybe i just undersize the belt a bit and fight it during assembly? No clue. I will think about it.
Finished up the polar mount. I added a camera module from aliexpress as well as some final structural touches to complete the mount. I decided that for tensioning I am going to try the fight during assembly thing, but if that doesn’t work out then I do have an aluminum extrusion crossbar that I added that I could either use to add tensioning or use the mounting holes of to add tensioning. Either way there are options to solve my problem. Now, I move on to equatorial.
I designed the Equatorial Mount section. For this, I just used two of my cycloidal gearboxes stacked at 90 degrees with a bit of fancy mounting. I honestly could have done something a lot more complex, but the fact of the matter is I don’t need to! I do worry a little about strength of my gearboxes, but that’s what iterating is for. Long story short, I got sidetracked for the first while of this recording by a red herring on an issue with my gearboxes. I was seeing concerning numbers on the calculator when it came to pressure angle on the gear teeth, but I determined that the calculator maybe can’t be trusted so I don’t know how accurate it is. I’m just gonna send it tbh, and if something goes wrong we iterate. The mount is made up of more 1/4” aluminum, this time with me trying to spice up the shape a little. I also used more Vixen mounting hardware on the output and mounting.
Electronics! I designed the electronics assembly and guider scope for this project. The electronics assembly is an SKR pico with a Raspberry Pi 4b. I chose this pair because they are identically sized boards, so they stack well, and the SKR pico has 4 motor drivers, the exact number I need. The raspberry pi will allow for onboard plate solving/tracking control and lessen the need of always being connected to a laptop. I already own the pi and the skr pico is cheap enough. The two boards are mounting into one assembly and that gets mounted to the rear of the polar mount. I also added HDMI to CSI connectors for the polar mount camera so that I can just run an hdmi cable between the mount and my electronics, which will handle the motion way better and be way less fragile than using a long ribbon cable. So that’s nice! As for the guider scope. I am using an IMX290 camera sensor, a 182mm focal length 50mm diameter lens, and a custom wound carbon fiber tube for the body. This allows for higher rigidity and lower mass, and is completely overkill but it looks awesome. This scope is heavily inspired by the OpenAstroGuider scope but mine has a simpler focusing mechanism.
Nonrotating Helical Focuser I designed a new focuser for my guide scope, a Non-Rotating Helical Focuser. This basically means there is a nut/dial that you spin and it pushes/pulls the lens WITHOUT rotating it. This keeps a much clearer image during focusing, thus making focusing easier and faster. I also designed an additonal mounting clamp option in the form of Mini-Vixen, in case I want to use that. I think I will end up using the first clamp I designed, but still. Time for the scary part - writing a BOM.
BOM, Readme, Renders, Finishing touches, and More. This was a long session! I started off with some finishing touches here and there like an adapter plate for the arcaswiss mounting so that I can actually put this mount on a tripod. Then, I wrote the BOM. Boy oh boy. I thought i was doing so well on budget! Turns out, I am at the full 1000 dollars. Oops. I mean, when you think about it, this kind of setup commercially would be well over double that. So it isn’t actually that bad? But it is a bit rough. I was looking into some DIY imaging scope stuff earlier because I thought I had the budget spare but boy was I wrong. Anywho, I got the BOM done, including accurate counts of every single screw type. That isn’t something I have done before, but I feel like this project deserved the effort. Then I wrote the README and thus had to take some renders for it! I took one of the whole project and this really cool one of the gearbox exploded - they are attached to this devlog. I am pretty happy with how they came out. Anywho, we are getting very close to submission, I just need to write some preliminary firmware for the SKR pico. And then I think we are good to go? Not sure.
Instruction Manuals! I wrote complete assembly instruction manuals for every part of this project. One for the Polar Mount, one for the Equatorial Mount, and one for the Guider Scope. The polar mount manual is 47 pages, the equatorial mount manual is 24 pages, and the guider scope manual is 15 pages. It took sooo much time but I am glad I did it as they are pretty neat to have! I doubt anybody will ever use them besides me but that’s ok! I actually discovered a few errors while I was doing it too, since I hadn’t spent as much time thinking about assembly. Mainly errors on the internals of my gearboxes, as assembly planning for those is a nightmare due to the complexity and sheer volume of parts. So, I am glad I took the time and discovered those before the full release/ship! Attached is one example page from each manual!
Controls Planning, Preliminary Firmware/Drivers, Wiring Diagram, and Finishing Touches. Submission is upon us. Well, just me. I planned out the full control scheme in a spreadsheet so that I could keep track of it all. Top level is PINS https://github.com/nitr57/pins , which controls the entire shooting session, stages photos, etc. Plate solving is handled by ASTAP https://www.hnsky.org/astap.html . This is how the polar alignment mount figures out where it needs to move. Guiding is handled by PHD2 https://openphdguiding.org/ . This is how the equatorial mount figures out where it needs to move to look at targets and track them. Mid level is handled by Indiwebmanager https://github.com/knro/indiwebmanager . This hosts an INDI server that communicates control signals between PINS and my mount drivers. Then we have custom drivers https://github.com/ProgrammerTurtle/SpaceMount/tree/main/Control/drivers here that handle transllating control instructions from PINS into actual signals the SKR pico can parse. Lastly, the lowest level is the firmware on the SKR pico, which is here https://github.com/ProgrammerTurtle/SpaceMount/tree/main/Control/firmware . This is low level motor control, mainly. That’s it! The last two were written during this session. Lastly was the wiring diagram and final prep for submission. The diagram is pretty simple, thankfully. Otherwise I just double checked submission requirements and everything in my repo. I think this is the last entry before I ship. Godspeed!...
|
1792640883.74022
|
1793245683.74022
|
|
29889
|
Blender by @rajaryan1492007 | Stardance
|
rajaryan1492007
|
2
|
38.65
|
222
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-13T13:53:45Z", "hours": 28.0, "multiplier": 11.24, "payout": 208, "blessing": "neutral", "text": "i contribute to blender more for giving support for Android . So mostly i wrote fallback in vulkan and some other things . it was hard for and many time i forget to log and devlog but that it soon u will see android support . ref https://projects.blender.org/blender/blender/issues/162559 https://projects.blender.org/blender/blender/pulls/163126 https://projects.blender.org/blender/blender/pulls/162820 https://projects.blender.org/blender/blender/pulls/163630 https://projects.blender.org/blender/blender/pulls/163398 and this my last ship after that i will turn 19 year old at 14 sept soo byye :)", "repo": "https://github.com/blender/blender", "demo": "https://github.com/rajaryan2007/blender.git"}, {"ship_num": 2, "ts": "2026-07-05T10:31:53Z", "hours": 10.0, "multiplier": 1.41, "payout": 14, "blessing": "neutral", "text": "i Don’t know how explain about this but simply i contributed to blender it take lot of time i st blender code when i st my another project game engine compare to o3de and engine blender feel little easier bcuz i was little familier from st so i st making engine taking refernece from it as to mostly what i do is with ai or without i first understand math etc bcuz blender have too math etc but i left the part module and crazyspace type things and focus more on eevee and rendering i know devlog is less bcuz there nothing to say my self i don’t feel like it too confussing but some after asking maintainer etc i was able make pr and some get merged link https://github.com/blender/blender/commit/c706f68c68789be7a0576e0df8509f2b8388be8a https://projects.blender.org/blender/blender/pulls/160821 https://projects.blender.org/blender/blender/pulls/160420 https://projects.blender.org/blender/blender/pulls/160382", "repo": "https://github.com/blender/blender", "demo": "https://github.com/rajaryan2007/blender.git"}]...
|
[{"post_id": 69004, "ts": "202 [{"post_id": 69004, "ts": "2026-09-16T06:26:49Z", "hours": 0.6486, "text": "make fallback of dynamic rendering"}, {"post_id": 66843, "ts": "2026-09-12T19:19:19Z", "hours": 5.7239, "text": "made dynamic rendering optional for old hardware"}, {"post_id": 59923, "ts": "2026-09-01T23:10:19Z", "hours": 2.7592, "text": "added fallback of multiview"}, {"post_id": 56470, "ts": "2026-08-28T07:49:32Z", "hours": 19.2197, "text": "add logicop fallback and shaderClipdistance fallback in blender for andirod"}, {"post_id": 22747, "ts": "2026-07-05T10:18:18Z", "hours": 0.3308, "text": "other pr that i made"}, {"post_id": 20961, "ts": "2026-07-02T18:10:52Z", "hours": 9.68, "text": "blender contribution first pr merged"}]...
|
Title: Blender by @rajaryan1492007 | Stardance
De Title: Blender by @rajaryan1492007 | Stardance
Devlogs:
blender contribution first pr merged
other pr that i made
add logicop fallback and shaderClipdistance fallback in blender for andirod
added fallback of multiview
made dynamic rendering optional for old hardware
make fallback of dynamic rendering
Ships:
i Don’t know how explain about this but simply i contributed to blender it take lot of time i st blender code when i st my another project game engine compare to o3de and engine blender feel little easier bcuz i was little familier from st so i st making engine taking refernece from it as to mostly what i do is with ai or without i first understand math etc bcuz blender have too math etc but i left the part module and crazyspace type things and focus more on eevee and rendering i know devlog is less bcuz there nothing to say my self i don’t feel like it too confussing but some after asking maintainer etc i was able make pr and some get merged link https://github.com/blender/blender/commit/c706f68c68789be7a0576e0df8509f2b8388be8a https://projects.blender.org/blender/blender/pulls/160821 https://projects.blender.org/blender/blender/pulls/160420 https://projects.blender.org/blender/blender/pulls/160382
i contribute to blender more for giving support for Android . So mostly i wrote fallback in vulkan and some other things . it was hard for and many time i forget to log and devlog but that it soon u will see android support . ref https://projects.blender.org/blender/blender/issues/162559 https://projects.blender.org/blender/blender/pulls/163126 https://projects.blender.org/blender/blender/pulls/162820 https://projects.blender.org/blender/blender/pulls/163630 https://projects.blender.org/blender/blender/pulls/163398 and this my last ship after that i will turn 19 year old at 14 sept soo byye :)...
|
1793134460.0030534
|
1793220860.0030534
|
|
29657
|
CareAtlas by @Kalaivanicholan26 | Stardance
|
Kalaivanicholan26
|
0
|
38.57
|
0
|
[]
|
[{"post_id": 67633, "ts": "202 [{"post_id": 67633, "ts": "2026-09-13T19:39:50Z", "hours": 9.7981, "text": "So I finally finished my health Summary Feature. It checks whether a user has previously entered data; if not, it takes the user through five screens to add a condition, medication, allergies, history, and extra notes as needed. When they’re done, they press Done, and it displays all the information they’ve entered in little cards, with the ability to go back, edit, add, or delete information in a subsection without going through the full 5 screens again. If the user has previously entered data, take them to the page with the ability to edit, add, or delete. This feature ended up requiring about 9 files, which is why it has so many logged hours for this. I have some images below to show that the cards are blank because I didn’t want to make up any information or include personal information. The screens are also scrollable, so they might be cut off in the images. If you read through this, thank you for listening!"}, {"post_id": 62569, "ts": "2026-09-06T00:53:43Z", "hours": 9.8558, "text": "This is another feature for an app that I’m making, and it is a question builder for appointments. You pick an appointment type or clinical setting and specifics, and AI generates questions based on that information. For the Question Builder, I built the feature in Flutter using a stateful widget so the generated questions can dynamically appear and update on the screen. I created functions to send the user’s input to my backend API and process the returned questions so they can be displayed as a list of individual question cards. I also added state management to track when questions are being generated, store the generated questions, and update the UI without rebuilding the entire app manually. To make the interface easier to use, I implemented a dedicated scrollable section for the generated questions so users can browse through them while keeping the rest of the page in place. One of the main challenges was connecting the asynchronous API response to Flutter’s UI state and making sure the questions appeared correctly after the request finished. I’ve also started working on a health summary generated based on what a user enters. This is the first screen of information where a user adds all their medical conditions, with options to edit or delete. The health summary feature is still ongoing, but hopefully I’ll be back with a devlog soon for that! I don’t think it actually took me like 10 hours but thats how much is logged."}, {"post_id": 32134, "ts": "2026-07-21T02:55:05Z", "hours": 5.1803, "text": "📅 Milestone OverviewSuccessfully engineered a secure, full-stack, dual-language cloud data pipeline to deliver contextual, natural-language healthcare explanations. The architecture decouples the user interface from data processing nodes to guarantee compliance and protect core system secrets.🛠️ Technical ImplementationFrontend Matrix (Mobile Node): Programmed a responsive, single-screen conversation tree interface using Flutter and Dart. Integrated asynchronous network sockets to stream JSON transaction payloads natively.Backend Middleware (Gateway Node): Built a standalone server cluster using Python and Flask to intercept traffic, manage localized data operations, and act as a cryptographic firewall.Security & Compliance Framework: Configured isolated local environment vaults (.env) to eliminate source-code key extraction risks. Structured automated text-sanitization filters using Regular Expressions (RegEx) to strip personal identifiers before data transit.Context Bridge Logic: Implemented dynamic conversation-array mappings. The system appends historical assistant dialogue states directly into user payloads, preventing semantic prompt leaks and enabling complex follow-up reference trees.📈 Current Performance MetricsNetwork Status: Fully verified. Local loopback connections configured via localhost:8000/explain bypass local platform sandboxes smoothly.UI Responsiveness: Integrated asynchronous UI event bindings (setState) coupled with active scroll physics handlers to automatically snap viewports onto new runtime bubble components.Data Integrity: 100% accuracy achieved on edge-case follow-ups (e.g., multi-phase medical breakdowns) using strict factual temperature constraints (0.3).🚀 Next Flight Maneuvers: Migrate the local Python script cluster into an always-on cloud hosting platform architecture (Render/Railway). Integrate the AI Explanation module with the application’s pre-existing offline database reference screens."}, {"post_id": 29899, "ts": "2026-07-17T02:12:31Z", "hours": 12.8386, "text": "So for anyone new, I’ve been working on a healthcare app for personal interests. I made this function where you search for a lab test, enter your value, and analyze to get some facts and what your result means. This operates based on the data I have stored in one of the files in my projects, and it gets what’s needed based on the user’s number and test. There are also tiles for common tests if you’d rather not search, just to make it a little more fun. For the future, I want to be able to add a function where users can upload photos or screenshots and add a toggle to switch between unit measurements for certain tests because the units aren’t universal for each test. I’ll do that if I have time, though, because I’m also currently working on other features and will keep anyone interested updated. Also, it only took this long. I manually entered the data because I wanted my own database so I could control what was being output to keep answers medically accurate, and I get sidetracked. If you made it this far, thanks for listening!"}, {"post_id": 20855, "ts": "2026-07-02T15:55:34Z", "hours": 0.9006, "text": "I’m currently working on increasing the amount of vocabulary in my medical terms database for my Flutter-based app."}]...
|
Title: CareAtlas by @Kalaivanicholan26 | Stardance Title: CareAtlas by @Kalaivanicholan26 | Stardance
Devlogs:
I’m currently working on increasing the amount of vocabulary in my medical terms database for my Flutter-based app.
So for anyone new, I’ve been working on a healthcare app for personal interests. I made this function where you search for a lab test, enter your value, and analyze to get some facts and what your result means. This operates based on the data I have stored in one of the files in my projects, and it gets what’s needed based on the user’s number and test. There are also tiles for common tests if you’d rather not search, just to make it a little more fun. For the future, I want to be able to add a function where users can upload photos or screenshots and add a toggle to switch between unit measurements for certain tests because the units aren’t universal for each test. I’ll do that if I have time, though, because I’m also currently working on other features and will keep anyone interested updated. Also, it only took this long. I manually entered the data because I wanted my own database so I could control what was being output to keep answers medically accurate, and I get sidetracked. If you made it this far, thanks for listening!
📅 Milestone OverviewSuccessfully engineered a secure, full-stack, dual-language cloud data pipeline to deliver contextual, natural-language healthcare explanations. The architecture decouples the user interface from data processing nodes to guarantee compliance and protect core system secrets.🛠️ Technical ImplementationFrontend Matrix (Mobile Node): Programmed a responsive, single-screen conversation tree interface using Flutter and Dart. Integrated asynchronous network sockets to stream JSON transaction payloads natively.Backend Middleware (Gateway Node): Built a standalone server cluster using Python and Flask to intercept traffic, manage localized data operations, and act as a cryptographic firewall.Security & Compliance Framework: Configured isolated local environment vaults (.env) to eliminate source-code key extraction risks. Structured automated text-sanitization filters using Regular Expressions (RegEx) to strip personal identifiers before data transit.Context Bridge Logic: Implemented dynamic conversation-array mappings. The system appends historical assistant dialogue states directly into user payloads, preventing semantic prompt leaks and enabling complex follow-up reference trees.📈 Current Performance MetricsNetwork Status: Fully verified. Local loopback connections configured via localhost:8000/explain bypass local platform sandboxes smoothly.UI Responsiveness: Integrated asynchronous UI event bindings (setState) coupled with active scroll physics handlers to automatically snap viewports onto new runtime bubble components.Data Integrity: 100% accuracy achieved on edge-case follow-ups (e.g., multi-phase medical breakdowns) using strict factual temperature constraints (0.3).🚀 Next Flight Maneuvers: Migrate the local Python script cluster into an always-on cloud hosting platform architecture (Render/Railway). Integrate the AI Explanation module with the application’s pre-existing offline database reference screens.
This is another feature for an app that I’m making, and it is a question builder for appointments. You pick an appointment type or clinical setting and specifics, and AI generates questions based on that information. For the Question Builder, I built the feature in Flutter using a stateful widget so the generated questions can dynamically appear and update on the screen. I created functions to send the user’s input to my backend API and process the returned questions so they can be displayed as a list of individual question cards. I also added state management to track when questions are being generated, store the generated questions, and update the UI without rebuilding the entire app manually. To make the interface easier to use, I implemented a dedicated scrollable section for the generated questions so users can browse through them while keeping the rest of the page in place. One of the main challenges was connecting the asynchronous API response to Flutter’s UI state and making sure the questions appeared correctly after the request finished. I’ve also started working on a health summary generated based on what a user enters. This is the first screen of information where a user adds all their medical conditions, with options to edit or delete. The health summary feature is still ongoing, but hopefully I’ll be back with a devlog soon for that! I don’t think it actually took me like 10 hours but thats how much is logged.
So I finally finished my health Summary Feature. It checks whether a user has previously entered data; if not, it takes the user through five screens to add a condition, medication, allergies, history, and extra notes as needed. When they’re done, they press Done, and it displays all the information they’ve entered in little cards, with the ability to go back, edit, add, or delete information in a subsection without going through the full 5 screens again. If the user has previously entered data, take them to the page with the ability to edit, add, or delete. This feature ended up requiring about 9 files, which is why it has so many logged hours for this. I have some images below to show that the cards are blank because I didn’t want to make up any information or include personal information. The screens are also scrollable, so they might be cut off in the images. If you read through this, thank you for listening!...
|
1793166602.4549081
|
1793771402.4549081
|
|
66373
|
rocket by @e__l | Stardance
|
e__l
|
0
|
38.47
|
0
|
[]
|
[{"post_id": 74666, "ts": "202 [{"post_id": 74666, "ts": "2026-09-27T22:30:43Z", "hours": 38.4683, "text": "made a 3d rocket simulator"}]...
|
Title: rocket by @e__l | Stardance
Devlogs:
made Title: rocket by @e__l | Stardance
Devlogs:
made a 3d rocket simulator...
|
1793098276.3496318
|
1793703076.3496318
|
|
22304
|
A hexapod robot/spider robot by @Vedaprotoshredhq A hexapod robot/spider robot by @Vedaprotoshredhq | Stardance...
|
Vedaprotoshredhq
|
0
|
38.46
|
0
|
[]
|
[{"post_id": 37792, "ts": "202 [{"post_id": 37792, "ts": "2026-07-30T18:41:56Z", "hours": 2.7, "text": "STARTED WORKING ON MG90S HEXAPOD VERSION AGAIN! So, I started working on the mg90s hexapod version again and started and did a little bit of inverse kinematics to make it walk properly and give it good,smooth movement, and still will do more ."}, {"post_id": 30967, "ts": "2026-07-18T23:52:16Z", "hours": 0.3836, "text": "PLAYING GAME ON TRANSMITTER! Was just checking the oled and switch and joystick so thought of playing the classic snake game. Should I put a mini speaker/buzzer so that it makes a beep sound whenever any option is selected on the display? Subscribe YouTube Instagram"}, {"post_id": 30169, "ts": "2026-07-17T15:07:51Z", "hours": 2.85, "text": "HEXAPOD/SPIDER ROBOT WALKING!! Okay so it is walking but it’s trying to break its motors. Reducing ground clearance will help as motors won’t have to work more. So will do that but as I have started working on HEXAPOD/SPIDER ROBOT 2.O! ( https://stardance.hackclub.com/projects/22328 ) maybe I will be giving less time to this one but still I will try to make it walk properly and then I will have to control it using my transmitter ( https://stardance.hackclub.com/projects/22304/devlogs/22662 ) Subscribe YouTube Instagram"}, {"post_id": 28951, "ts": "2026-07-15T15:48:16Z", "hours": 2.05, "text": "HEXAPOD/SPIDER ROBOT TRYING TO WALK! So, it did tried walking but broke 3-4 servos, so will have to change the angle between femur and coxa and will have to replace broken motors. And can someone tell me in comments how to post video on devlog without shipping it as I haven’t completed the coding it yet, but it does walk a bit. Subscribe YouTube Instagram"}, {"post_id": 28523, "ts": "2026-07-14T20:42:36Z", "hours": 1.0667, "text": "CODING THE HEXAPOD/SPIDER ROBOT! So, I tried coding it to make it walk firstly, and of course it’s not working, so will try again, will try to figure out angles of all three joints and each leg."}, {"post_id": 27890, "ts": "2026-07-13T20:08:09Z", "hours": 1.1669, "text": "FINALLY HEXAPOD/SPIDER ROBOT COMPLETE! The hexapod and transmitter are fully assembled now just have to add receiver system to hexapod and will have to program both hexapod and transmitter. Subscribe YouTube Instagram"}, {"post_id": 27419, "ts": "2026-07-12T23:42:12Z", "hours": 6.075, "text": "LEGS OF HEXAPOD/SPIDER ROBOT! Finally got the legs of hexapod/spider robot, then started assembling them but the 1.7 mm holes for 2mm screws were too much tight so, manually had to increase holes size, then soldered some broken servo wires and changed internal gears of some servos and was finally able to complete all 6 legs! Subscribe YouTube Instagram"}, {"post_id": 26879, "ts": "2026-07-11T22:24:21Z", "hours": 1.8006, "text": "HEXAPOD/SPIDER ROBOT TRANSMITTER WIRRING FINALLY COMPLETED! Finally, the transmitter wiring is completed, now will have to code it and setup the receiver system for hexapod."}, {"post_id": 26685, "ts": "2026-07-11T16:53:43Z", "hours": 3.0067, "text": "POWERING THE TRANSMITTER FOR THE HEXAPOD/SPIDER ROBOT AND ADDING SCREEN! So, I used 2X 3.7v 18650 cells in parallel and then connected to step-up module to get 5v for ESP32 and NFR adapter, and I’m using TP4056 for charging and a battery level indicator and I still have to do the wiring of 0.96inch OLED display and the 3 push buttons."}, {"post_id": 26268, "ts": "2026-07-10T23:26:58Z", "hours": 5.4706, "text": "TRANSMITTER FOR THE HEXAPOD/SPIDER ROBOT!! So, I did basic wiring of the main transmitter for the hexapod/spider robot. I used ESP32 and 2x joystick modules and NRF24L01 adapter and NR2401 PA+LNA module, AND ADDAD A STEP-UP MODULE TO GIVE 5V POWER SUPPLLY TO ESP32 AS I WILL BE USING 2X 18650 cells to power it."}, {"post_id": 25317, "ts": "2026-07-09T15:15:03Z", "hours": 3.1506, "text": "TRANSMITTER FOR HEXAPOD/SPIDER ROBOT!! So, as I’m waiting for the leg chassis, so I thought to make a transmitter for the hexapod/spider robot, I used ESP32 DEVKIT V1 CORE 3.X as I only have that micro controller except A4RDUINO R4 MINIMA but as it’s been used for robot, so I used esp32. And I still have to make the connections of ESP32 and joystick and NRF24LD1 adapter."}, {"post_id": 24616, "ts": "2026-07-08T10:19:56Z", "hours": 0.7161, "text": "LAST PEICE OF HEXAPOD/SPIDER ROBOT CHASSIS! So, I made the last piece of hexapod/spider robot this is the tibia part of leg, and this is the final chassis we need to complete the whole hexapod/spider robot chassis. The tibia leg is curved so it won’t touch the femur and get more range of motion and has slot for wire of servo and support rod behind. now will get all the leg parts 3D printed from online 3D printing services."}, {"post_id": 24335, "ts": "2026-07-07T20:55:17Z", "hours": 0.7169, "text": "MAKIING THE FEMUR PART OF HEXAPOD/SPIIDER ROBOT LEG! So, I made the femur part of the hexapod/spider robot. It has two servo horn sockets so that we can put the hip servo and tibia servo horn in the sockets and the three holes in front are for adding the support which I made previously and at the back there’s a slot for the tibia motor wire and two holes so that it can hold the coxa and tibia chassis supports."}, {"post_id": 23438, "ts": "2026-07-06T12:20:59Z", "hours": 0.3167, "text": "HEXAPOD/SPIDER ROBOT BODY! Finally, received the body chassis of the hexapod/spider robot body, then I used zip ties to put the 300W 20A DC-DC BUCK CONVERTER and 2 PCA9685 boards in the lower body and will put the Arduino and other things in upper body, but I still don’t have any battery to power it, so for now I will use 2x 2 ampere 12v adapters to power it."}, {"post_id": 23330, "ts": "2026-07-06T06:49:27Z", "hours": 0.7169, "text": "MAKING COXA PART OFF THE HEXAPOD/SPIDER ROBOT. So, I made the coxa part of the hexapod/spider robot leg this part will be having two motors, one upper mg90s servo motor will sweep the leg left and right and another lower mg90s servo motor will lift and drop the leg."}, {"post_id": 23058, "ts": "2026-07-05T19:53:30Z", "hours": 0.4983, "text": "MADE SERVO HORN SUPPORT FOR FEMUR PART OF THE LEG. I made a support for femur part of leg to hold the servo horns on the femur, so they won’t come out of get loose when the leg is moving, it has 3 holes of 1.8 mm for the screws so that it can hold on to the femur part and made same hole and square like I made for the coxa support part so that the horn top supports get in the way when we will add support to femur part and hole to screw and unscrew the servo bolts."}, {"post_id": 21749, "ts": "2026-07-03T20:48:50Z", "hours": 0.8169, "text": "I was making the servo horn support for femur part of hexapod/spider robot leg and suddenly software closed and lookout also stopped recording and showed some error maybe because my software automatically stopped."}, {"post_id": 20863, "ts": "2026-07-02T16:12:53Z", "hours": 0.4336, "text": "CREATING SUPPORT FOR COXA MOTOR HORNS AND PLACING ORDERS FOR BOTH THE UPPER AND LOWER BODY CHASSIS. So, I made a support for coxa servo horns so that the servo horns won’t get loose or move from body when the robot will move legs it has 8.5mm hole so that we can screw servo without removing supports and 2 screw holes to stick the support to the body and the lower part of support has a rectangle with depth 2mm so that the supports on mg90s servo horns won’t get in way when we add the supports. and also, I ordered both the upper and lower chassis of body."}, {"post_id": 20057, "ts": "2026-07-01T15:48:44Z", "hours": 0.6342, "text": "MAKING THE LOWER BODY OF THE HEXAPOD/SPIDER ROBOT. This is the part 2/final part of making body for the robot, here I completed the lower body of the hexapod/spider robot. So, in the lower body we can put a 300W 20A DC to DC buck converter and 1 big or 2 small lipo batteries then the Arduino and 2 pca9685 boards will be in the upper body, or we can put 2 pca9685 and the buck converter in the lower body then 1 big or 2 small batteries and the Arduino will be in the upper body."}, {"post_id": 20016, "ts": "2026-07-01T14:46:33Z", "hours": 2.8683, "text": "MAKING THE LOWER BODY OF THE HEXAPOD/SPIDER ROBOT. This is the part 1 of making the lower body of the hexapod/spider robot, I wanted to record the whole designing process in one go but the lookout reached its limit and automatically stopped after 2hours 45minutes, so I will restart the lookout and will complete the whole lower body."}, {"post_id": 19099, "ts": "2026-06-30T10:11:16Z", "hours": 1.0211, "text": "DESIGNED TOP BODY OF MY HEXAPOD/SPIDER ROBOT. I made the top part of the hexapod robot body, this part holds the coxa motor’s servo horns, the walls are 2mm thick so that we can get light weight but strong body, and this body is for mg90s or sg90 servo motors, mg90s motors would be much better as they have torque of 2.2kg/cm. This body length and wreath can fit an Arduino and 2 PCA9685 boards and a 300W 20A DC-DC buck converter and 1 or 2 small lipo batteries."}]...
|
Title: A hexapod robot/spider robot by @Vedaprotos Title: A hexapod robot/spider robot by @Vedaprotoshredhq | Stardance
Devlogs:
DESIGNED TOP BODY OF MY HEXAPOD/SPIDER ROBOT. I made the top part of the hexapod robot body, this part holds the coxa motor’s servo horns, the walls are 2mm thick so that we can get light weight but strong body, and this body is for mg90s or sg90 servo motors, mg90s motors would be much better as they have torque of 2.2kg/cm. This body length and wreath can fit an Arduino and 2 PCA9685 boards and a 300W 20A DC-DC buck converter and 1 or 2 small lipo batteries.
MAKING THE LOWER BODY OF THE HEXAPOD/SPIDER ROBOT. This is the part 1 of making the lower body of the hexapod/spider robot, I wanted to record the whole designing process in one go but the lookout reached its limit and automatically stopped after 2hours 45minutes, so I will restart the lookout and will complete the whole lower body.
MAKING THE LOWER BODY OF THE HEXAPOD/SPIDER ROBOT. This is the part 2/final part of making body for the robot, here I completed the lower body of the hexapod/spider robot. So, in the lower body we can put a 300W 20A DC to DC buck converter and 1 big or 2 small lipo batteries then the Arduino and 2 pca9685 boards will be in the upper body, or we can put 2 pca9685 and the buck converter in the lower body then 1 big or 2 small batteries and the Arduino will be in the upper body.
CREATING SUPPORT FOR COXA MOTOR HORNS AND PLACING ORDERS FOR BOTH THE UPPER AND LOWER BODY CHASSIS. So, I made a support for coxa servo horns so that the servo horns won’t get loose or move from body when the robot will move legs it has 8.5mm hole so that we can screw servo without removing supports and 2 screw holes to stick the support to the body and the lower part of support has a rectangle with depth 2mm so that the supports on mg90s servo horns won’t get in way when we add the supports. and also, I ordered both the upper and lower chassis of body.
I was making the servo horn support for femur part of hexapod/spider robot leg and suddenly software closed and lookout also stopped recording and showed some error maybe because my software automatically stopped.
MADE SERVO HORN SUPPORT FOR FEMUR PART OF THE LEG. I made a support for femur part of leg to hold the servo horns on the femur, so they won’t come out of get loose when the leg is moving, it has 3 holes of 1.8 mm for the screws so that it can hold on to the femur part and made same hole and square like I made for the coxa support part so that the horn top supports get in the way when we will add support to femur part and hole to screw and unscrew the servo bolts.
MAKING COXA PART OFF THE HEXAPOD/SPIDER ROBOT. So, I made the coxa part of the hexapod/spider robot leg this part will be having two motors, one upper mg90s servo motor will sweep the leg left and right and another lower mg90s servo motor will lift and drop the leg.
HEXAPOD/SPIDER ROBOT BODY! Finally, received the body chassis of the hexapod/spider robot body, then I used zip ties to put the 300W 20A DC-DC BUCK CONVERTER and 2 PCA9685 boards in the lower body and will put the Arduino and other things in upper body, but I still don’t have any battery to power it, so for now I will use 2x 2 ampere 12v adapters to power it.
MAKIING THE FEMUR PART OF HEXAPOD/SPIIDER ROBOT LEG! So, I made the femur part of the hexapod/spider robot. It has two servo horn sockets so that we can put the hip servo and tibia servo horn in the sockets and the three holes in front are for adding the support which I made previously and at the back there’s a slot for the tibia motor wire and two holes so that it can hold the coxa and tibia chassis supports.
LAST PEICE OF HEXAPOD/SPIDER ROBOT CHASSIS! So, I made the last piece of hexapod/spider robot this is the tibia part of leg, and this is the final chassis we need to complete the whole hexapod/spider robot chassis. The tibia leg is curved so it won’t touch the femur and get more range of motion and has slot for wire of servo and support rod behind. now will get all the leg parts 3D printed from online 3D printing services.
TRANSMITTER FOR HEXAPOD/SPIDER ROBOT!! So, as I’m waiting for the leg chassis, so I thought to make a transmitter for the hexapod/spider robot, I used ESP32 DEVKIT V1 CORE 3.X as I only have that micro controller except A4RDUINO R4 MINIMA but as it’s been used for robot, so I used esp32. And I still have to make the connections of ESP32 and joystick and NRF24LD1 adapter.
TRANSMITTER FOR THE HEXAPOD/SPIDER ROBOT!! So, I did basic wiring of the main transmitter for the hexapod/spider robot. I used ESP32 and 2x joystick modules and NRF24L01 adapter and NR2401 PA+LNA module, AND ADDAD A STEP-UP MODULE TO GIVE 5V POWER SUPPLLY TO ESP32 AS I WILL BE USING 2X 18650 cells to power it.
POWERING THE TRANSMITTER FOR THE HEXAPOD/SPIDER ROBOT AND ADDING SCREEN! So, I used 2X 3.7v 18650 cells in parallel and then connected to step-up module to get 5v for ESP32 and NFR adapter, and I’m using TP4056 for charging and a battery level indicator and I still have to do the wiring of 0.96inch OLED display and the 3 push buttons.
HEXAPOD/SPIDER ROBOT TRANSMITTER WIRRING FINALLY COMPLETED! Finally, the transmitter wiring is completed, now will have to code it and setup the receiver system for hexapod.
LEGS OF HEXAPOD/SPIDER ROBOT! Finally got the legs of hexapod/spider robot, then started assembling them but the 1.7 mm holes for 2mm screws were too much tight so, manually had to increase holes size, then soldered some broken servo wires and changed internal gears of some servos and was finally able to complete all 6 legs! Subscribe YouTube Instagram
FINALLY HEXAPOD/SPIDER ROBOT COMPLETE! The hexapod and transmitter are fully assembled now just have to add receiver system to hexapod and will have to program both hexapod and transmitter. Subscribe YouTube Instagram
CODING THE HEXAPOD/SPIDER ROBOT! So, I tried coding it to make it walk firstly, and of course it’s not working, so will try again, will try to figure out angles of all three joints and each leg.
HEXAPOD/SPIDER ROBOT TRYING TO WALK! So, it did tried walking but broke 3-4 servos, so will have to change the angle between femur and coxa and will have to replace broken motors. And can someone tell me in comments how to post video on devlog without shipping it as I haven’t completed the coding it yet, but it does walk a bit. Subscribe YouTube Instagram
HEXAPOD/SPIDER ROBOT WALKING!! Okay so it is walking but it’s trying to break its motors. Reducing ground clearance will help as motors won’t have to work more. So will do that but as I have started working on HEXAPOD/SPIDER ROBOT 2.O! ( https://stardance.hackclub.com/projects/22328 ) maybe I will be giving less time to this one but still I will try to make it walk properly and then I will have to control it using my transmitter ( https://stardance.hackclub.com/projects/22304/devlogs/22662 ) Subscribe YouTube Instagram
PLAYING GAME ON TRANSMITTER! Was just checking the oled and switch and joystick so thought of playing the classic snake game. Should I put a mini speaker/buzzer so that it makes a beep sound whenever any option is selected on the display? Subscribe YouTube Instagram
STARTED WORKING ON MG90S HEXAPOD VERSION AGAIN! So, I started working on the mg90s hexapod version again and started and did a little bit of inverse kinematics to make it walk properly and give it good,smooth movement, and still will do more ....
|
1792716848.506846
|
1793321648.506846
|
|
35149
|
Wingspan for Pterodactyl by @brahmtejsawhney | Sta Wingspan for Pterodactyl by @brahmtejsawhney | Stardance...
|
brahmtejsawhney
|
2
|
38.44
|
680
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-17T07:32:22Z", "hours": 14.0, "multiplier": 17.93, "payout": 246, "blessing": "neutral", "text": "Hello! If you are new here, welcome! This is my flagship project called Wingspan, It’s used by system administrators and infrastructure managers to manage their virtual servers in bulk rather than one by one. This project works in the terminal with AMAZING Terminal UI! This is my second ship. I have worked on making the Server Purge Function, to easily delete servers in large quantities. In my previous ships, I worked on making the basics of the code and functions to index and search the database. I have received extremely positive comments for this project, and i’m really proud of making it! Do star it on github if you like this one!", "repo": "https://github.com/brahmtej2009/wingspan", "demo": "https://github.com/brahmtej2009/Wingspan/blob/main/SHIPWRIGHTS.md"}, {"ship_num": 2, "ts": "2026-09-23T10:49:52Z", "hours": 24.0, "multiplier": 18.44, "payout": 434, "blessing": "neutral", "text": "Welcome to WingSpan, A project to bulk manage your self hosted hardware on pterodactyl. Easily search through servers, get detailed information, export lists based on precise filtering and more! It is made for people like me, who manage hundreds of servers daily, and need to perform bulk actions on them. Its posted on frictionless mission because it would make my life really easy as it automates a lot of my work and would save me a LOT of clicks! cant wait for you to try it out! <3", "repo": "https://github.com/brahmtej2009/wingspan", "demo": "https://github.com/brahmtej2009/Wingspan/blob/main/SHIPWRIGHTS.md"}]...
|
[{"post_id": 80768, "ts": "202 [{"post_id": 80768, "ts": "2026-10-18T18:48:38Z", "hours": 0.4375, "text": "ps: not an official devlog, just an update Show and Tell + Super Star This was another great show and tell, and OMG SUPER STAR! Thanks @Lazyllama ❤️ Ty guys, rly grateful!! Image shows me submitting to Show and Tell and 2nd Image showing my Super Star!"}, {"post_id": 80312, "ts": "2026-10-17T07:27:32Z", "hours": 2.9072, "text": "Devlog 19 Show and Tell #1 WINNER Project! 🏆 Progress Done Purge function has been completely created. I have worked on API Request Error Catching in duration of this devlog. I have integrated all the standard practices and error catching which is required, and now the program displays the error and a solution to fix it. Also, it tracks if there are any errors due to wingspan itself, and provides resolution! Great Stuff! I also started work on User Purge Function, which i’ll release in the ship after shipping Server Purge. There was a bug in the release file, which prevented auto update in windows. Fixed that. Features Added/Worked on Better API Requests to Pterodactyl Rate Limit detector and queue Error Catching and Resolution Server Purge Function Completed Started work on User Purge What new I learnt I learnt to work with industry standard error catching I learnt to make better API systems I learnt to work with queues and rate limiters I learnt to use DELETE Protocol What I would be working on Completing Documentation till here Shipping till Server Purge AI Declaration Claude was used to find out bug in release file only. No AI was used in code during the span of this devlog. All places where AI was used in code, is mentioned properly in the source code. The attached image shows the Release Page of the project, project homepage and some lovely previous votes screenshots."}, {"post_id": 79114, "ts": "2026-10-12T18:33:47Z", "hours": 2.0575, "text": "Devlog 18 Progress Done Purge feature is now functional. Server purges are working as expected. I have added 4 purge methods. Parameters are Forced/Unforced, and Verified and Unverified.So, FV,FU,UV,UU. When you choose unforced method, it would ensure a clean deletion, and ensure the entire data is wiped. On a forced delete, it would delete it from frontend, and only attempt to clean it entirely. Force method is useful to delete servers whose nodes have been discontinued, or conditions where unforced wouldnt work. Verified feature ensures that the purge process goes as close to the expected outcome as possible, and if anything is detected which shouldnt be so, wingspan would prompt you there, so you can take manual action right there on the spot while it purges. Unverified means that wingspan would try its best to delete all the servers given in the importlist and would not prompt the user in case of discrepancies. Features Added/Worked on Import Verification Server Name Live Verification Completed Beta Purge Function Updated Menu to allow Purge Function Wingspan now needs an Admin API key with Full Perms (Readonly no longer works) What I would be working on Bugchecking all the features I made Attempting to delete some servers in massive quantities. Starting work on User Purge Function Do changes in README.md for the new purge function documentation. Find a good reliable Pterodactyl API Docs Website. AI Declaration No AI was used in code in the duration of this devlog. All places where AI was used in code, is mentioned properly in the source code. The attached image shows the Graphical UI of the Purge Function along with the questions it asks."}, {"post_id": 78414, "ts": "2026-10-10T18:32:47Z", "hours": 3.1958, "text": "Devlog 17 Show and Tell #1 WINNER Project! 🏆 Progress Done Ship Approved! Yay! Also, Show and Tell Winner! So, during the span of this devlog, I have worked on creating release files for this project, in a way that they do not have to be updated everr! Also, I have worked on the Purge Function, and have completed the server list import, and have made major changes in server list export function, which now exports minimally required data only for security reasons. Also, I have made quite a lot of confirmations that the person has to fill in order for the servers to actually get deleted, which is a good practice so a person doesnt anciently delete their entire pterodactyl. Also, I have worked on advanced logging in the import system and a very smart directory checker. Also, exporting now adds the panel’s URL on top of the export file, so a wingspan session linked to another panel does not perform critical actions on wrong servers. It properly verifies the import file and gives a clear warning if needed. Features Added/Worked on Export Function Major Changes New Import Function Improved logging Purge Function Increased security and confirmations before taking critical actions. What new I learnt I learnt to export files I learnt to import files I learnt security and integrity tactics to prevent unwanted destruction I learnt to do better logging What I would be working on Completing server purge function Starting work on user purge function AI Declaration No AI was used in code in the duration of this devlog. All places where AI was used in code, is mentioned properly in the source code. The attached file shows and older video I recorded of me using the project."}, {"post_id": 77037, "ts": "2026-10-05T13:23:55Z", "hours": 5.5469, "text": "Devlog 16 Progress Done The project is still on its reviewing stage, in the meantime, I have worked on releasing the executable release for both windows and linux. The executables are internally dynamic, so it updates to the latest wingspan version on every boot. Alongside, I have also worked on a lot of bugfixes, added more detailed logging, Autoboot after Setup and more. I have also worked on the purge function, specifically on the server purge feature. I have completed the export function and import function for the server lists. So server lists could be imported to action functions. I have also worked on reducing the boot time for linux, and on a fresh install, its as little as 5 seconds for the complete install and setup. I’ll be releasing more things after the ship gets approved! Features Added/Worked on Enhanced Logging System Added Release Executables/Binaries Added Auto Updater Added Importer Function for exported server-lists Fixed bugs and slight performance enhancement for windows Massive performance enhancement for linux What new I learnt I learnt to make a formal logging system I learnt to create binaries of python I learnt how to export and import and edit csv I learnt to optimize code on linux I learnt to make Auto Updaters and Version Checkers What I would be working on Completing server purge function Improving performance for windows systems Adding verification of exports while importing them Warnings before destructive action AI Declaration No AI was used in code in the duration of this devlog. AI was used in helping me with creating the executables from the code. All places where AI was used in code, is mentioned properly in the source code. The attached image shows the Release Page of the project, Purge Window Screenshots and Export File Content Screenshots."}, {"post_id": 72609, "ts": "2026-09-23T10:33:51Z", "hours": 2.5994, "text": "Changelog Repo Created on Git, Code Uploaded. V1: Added: Server & Info Fn. Welcome to wingspan folks! <3"}, {"post_id": 71935, "ts": "2026-09-21T20:20:07Z", "hours": 4.2222, "text": "Devlog 14 Progress Done I know this is a very delayed devlog, I had my exams mid way. I’m into the 20th hour of the project, most of the stuff is made. API System is ready, most of the code which would be shared across multiple functions is ready. First function, of Bulk Search and server lookup is also complete. Server lookup function has a really cool UI. Alongside with that, I have also added export option to the Bulk Server Search, you can use the exported file on other functions which take actions on server. Features Added/Worked on Completed Bulk Search and Server Lookup Added server list export Added Shipwrights Docs (Readme for shipwrights) Worked on fixing bugs and README What new I learnt I learnt to work with CSV files I learnt to spoof responses to provide hardcoded outputs (For shipwrights testing) I learnt how to read and save data into json and env I learnt to add images into my Readme AI Declaration A little bit AI was used in CSV saving mechanics, so its saved in a way so could be read back easily for processing later. Server Lookup’s UI was heavily created with help of AI, as I was not able to achieve that high information density without use of AI. Rest, updates in README and SHIPWRIGHTS.md were all done by hand with 0% AI. The attached image shows the new Server Lookup UI, new readme with banner and terminal header, shipwrights file, csv file output."}, {"post_id": 36602, "ts": "2026-07-28T20:22:42Z", "hours": 0.5042, "text": "Devlog 13 Progress Done I did not do much today as the schedule was really busy, I have done a little bit of debugging and bughunting by testing with different kinds of server eggs and parameters on pterodactyl. I have not found any major issue yet, there were some little issues with server search function where some parameters would not show up, that is fixed. Rest, I also am working on the server info function and the readme. Features Added/Worked on Finished with Server Search Worked on CSV Export Started work on Server Info Function AI Declaration No AI Used for this devlog period The attached photos show the new updates to the readme and docs."}, {"post_id": 36001, "ts": "2026-07-27T20:15:25Z", "hours": 1.0306, "text": "Devlog 12 Progress Done I am now making the Server Info function, which provides all the server information in one very well managed panel. Thanks to my fellow developer @stef [U0823APHVK7], I got to know that most of the pterodactyl API docs out there are AI generated and are mostly inaccurate. The accurate one is: https://pterodactyl-api.redbanana.dev I have also experienced issues with Pterodactyl itself, not working right with parameter based data fetching, Il work more on it as most likely its some my side issue. I am also working on adding some kind of live table display right into the terminal to beautifully display the data from the Server Info function. Features Added/Worked on Finished with Server Search Worked on CSV Export Started work on Server Info Function AI Declaration No AI Used for this devlog period The attached video show the preview pics of the new Server Info function."}, {"post_id": 35424, "ts": "2026-07-26T20:28:47Z", "hours": 0.6428, "text": "Devlog 11 Progress Done Im in the 14th Hour of the project, and I have worked on the readme. I have written installation process, and scopes of this project. Also, I have added credits as required. All content is human written, no AI used. Features Added/Worked on Added Readme AI Declaration No AI Used for this devlog period The attached video show the preview pics of the readme."}, {"post_id": 34748, "ts": "2026-07-25T18:37:48Z", "hours": 1.3872, "text": "Devlog 10 Progress Done Im in the 13th hour of the project, and have completely finished the first feature of Searching and Indexing servers. This feature allows you to search from bulk server lists and filter out servers based on all the parameters. It also works with any extension which you may add in future which adds more parameters in the panel, its universally compatible. Next, I would be working on the Purge function, on which we would be using the Search and Info function, to export a csv list and import it into the purgetool to eliminate servers. Features Added/Worked on Refined menus and controls Added more colors Added support for complete universal API [Explained above] Finished with the first function of the software What new I learnt I learnt to work with APIs I learnt to manage big data I learnt to make really complicated nested loops I learnt to convert Json and Lists from 2D to 1D AI Declaration A little bit of AI was used to automate repetitive tasks to save time in the search and info function, where filter rules had to be created for each datatype separately and code was mostly same as I written by hand. AI was used to just change variable names and fit it for other datatypes. AI was also used for debugging and checking if everything works alright. Wherever AI was used, has an AI marker in the source code. The attached video show the first working function which is filtering servers based on user inputs."}, {"post_id": 34235, "ts": "2026-07-24T19:23:32Z", "hours": 0.445, "text": "Devlog 9 Progress Done Im working on the final parts of the first function, that is filtering and exporting. Next I would be moving onto purge manager and related functions which are more useful in real life. Input of the ID parameter was giving vague errors when provided with ranges, It took me a lot of debugging to find the source of the issue, and that was a string was being compared to an int (str<int) in a part of code where I didnt typecast. That is fixed now. AI Declaration Close to None AI was used for this devlog. The attached images show the accepted input of the ID field when put with a range."}, {"post_id": 33694, "ts": "2026-07-23T20:23:16Z", "hours": 0.3294, "text": "Devlog 8 Progress Done Im done with Search and Info function’s basics. Only export options and other advanced options are left to be created. This is a really little 15 minute devlog to mark the achievement of the first actual usable feature in the program, which took me about 11 hours, and this project would be having about 20 of such large functions, making this an extremely detailed and big project. In this devlog, I also want to thank each and every follower of mine, for taking interest in my project and supporting me! Thankyou. AI Declaration Close to None AI was used for this devlog. Everything was done by hand for self learning and improvement. The attached images show the Banner of project."}, {"post_id": 33143, "ts": "2026-07-22T19:44:20Z", "hours": 1.6344, "text": "Devlog 7 Progress Done Im into the 12th hour of the project, and I have done a lot of progress on the first function, which is search and info. I have worked on the parameter search option which is an extremely bulky work as im making it compatible with future upgrades and any extra addons that the user may have which cause changes in the API, I’m adding dynamic automatic support for new fields too for search, while taking all inputs and performing operations in the terminal. I am completely AVOIDING AI for this devlog, and focusing on complete self improvement and understanding of such deeply nested code structures. This is a partial devlog, meaning it doesnt mark a completion of a feature. AI Declaration Close to None AI was used for this devlog. Everything was done by hand for self learning and improvement. The attached images show the home page, followed by the new Search from Parameters Mode…"}, {"post_id": 32494, "ts": "2026-07-21T18:30:08Z", "hours": 3.0075, "text": "Devlog 6 Progress Done Its the 11th hour into the project and the progress is booming! I have started working on the interactive menus of the program. I have also started work on the first function, which is “Search and Info”, in which you can select parameters to search from, and it performs bulk search for you, which you can export to a file, or use in the program internally to trigger actions, or get detailed info about. I have also added terminal ui from curses in this, for the parameter selector, and it looks really good! I also worked on algorithms which convert data from pterodactyl to a usable format for mass bulk searching. I am making it in a way that some of the load is shared on the pterodactyl server side for filtering, and the rest is done on machine running this program, so I can minimize the rate limiting and divide load among both the machines for bulk processing and improve speed. For example, basic filter arguments are run on pterodactyl server’s side (Handled built in by pterodactyl), whereas advanced parameter searches are done on user side as generally user’s own system has more threads and is much better than the pterodactyl webserver. Features Added/Worked on Made menus and sections for first function Worked on algorithms to convert api responses to filterable data Worked on UI by adding curses based parameter selector Made first function, Search and Info What new I learnt I learnt to work with massive data and make algorithms to convert to usable data I learnt to make my first usable intractable terminal UI from curses I learnt to divide operations and perform load balancing for such bulk data AI Declaration Close to None AI was used for this devlog. All the algorithms which were made, where made completely by hand. AI was used for research purposes for curses as its a new field for me. All code blocks where AI has been used are marked in source code! The attached images show the home page, followed by new menus, along with the parameter selector and more…"}, {"post_id": 31424, "ts": "2026-07-19T19:41:27Z", "hours": 1.7656, "text": "Devlog 5 Progress Done Its about the 8th hour into the project, Since around the past 1 hour, I have been reading and understanding the entire pterodactyl API. Learning everything from sending requests to sorting data according to needs. Not much progress was done on the main project, though I did a lot of testing in temp files and had a lot of learning. What new I learnt I learnt to use RestJS API system of Pterodactyl I learnt to use Requests in Python I learnt to capture data and filter/manipulate it from APIs I learnt to manage rate limits and error codes Sources Pterodactyl API Docs: https://pterodactyl-api-docs.netvpx.com/docs/intro AI Declaration No AI was used for the period of this devlog. Most of the work was only done for understanding and learning purposes which was done in temp files which is essential for the project’s development. The attached images show the pterodactyl AI docs which I am reading and testing."}, {"post_id": 30613, "ts": "2026-07-18T10:19:26Z", "hours": 2.2778, "text": "Devlog 4 Progress Done Its about the 6th hour into the project, I have worked on making a terminal UI on which you can click up and down arrows and space button to select servers from a list to do actions. I did not work on actual API yet, thats kept for the last, currently I am working on data sorting and filter functions and more. I also made a cool banner for the project! Sorry for the late devlog, took a lot of time debugging and learning this one. Features Added/Worked on Made a cool image banner on canva [No AI] Worked on filtering functions Worked on a better terminal UI with curses Made HomePage What new I learnt I learnt Graphic Design with Canva I learnt to work with Curses to make terminal UI I learnt to capture button clicks on terminal for functions AI Declaration Close to None AI was used for this devlog. I used AI to understand how the curses library works and how to make it perform actions on button clicks. Also, the tech-pterodactyl symbol on the banner was made with AI as I couldnt find a similar icon on the internet. The attached images show the new banner, followed by the homepage and terminal selector UI demo."}, {"post_id": 28897, "ts": "2026-07-15T14:28:47Z", "hours": 1.6511, "text": "Devlog 3 Progress Done Its the 3rd hour into the project, and I have worked on adding args feature (specifically for linux users) and have worked on the project’s banner and interactive setup menu. I have also added verification in the setup fields to ensure that the user fills in correct information, and even guides the user if wrong keys are entered after 2 tries. Alongside with it, I added colors and made a cool ASCII banner. I also added the system to make venv automatically on first boot (supported on both linux/windows) for those who are running the code directly uncompiled. Features Added/Worked on Added Colorful ASCII Banner [Check Attached Image] Added field verification for setup- Added Args support, Eg. wingspan setup Improved POST Added Auto Venv and Dependency Installer What new I learnt I learnt to work with ASCII Color Codes I learnt to make args on python I learnt how to work with Venv I learnt to work with Terminal Commands from python to install dependencies AI Declaration AI was used for this devlog period for generating the automatic venv and dependencies installer, and making it compatible for both linux and windows at the same time. AI was also used to help with the Args function as I have not had any experience with it before. The attached images show the program running on both Linux and Windows. First screenshot shows the automatic dependencies installer in action, followed by images of the new banner and guide text if the user enters wrong api key multiple times."}, {"post_id": 28503, "ts": "2026-07-14T19:58:23Z", "hours": 1.5825, "text": "Devlog 2 Progress Done Its been about the first hour into the project, and I have well planned everything and have started working on execution. I have started with the linux versions (CMD ONLY), because I dont have experience with GUI Apps and compiling to executables. I have started on configuration tool, which asks the user for all required API Keys and creates the config files and sets up the installation. I have also worked on a standard automatic dependency downloader, so it runs its own venv on boot, downloads its dependencies there, and runs normally. I would not be compiling it into an executable, so you can take and run it on linux, and copy paste it and run it on windows without any platform change issues. I also set up python library, “logging”, to provide proper logs of every action, because it would be important for the users if anything goes wrong or they need history of the tool’s actions. I have also added an entire system testing feature (POST) which triggers when the program is turned on. This is to ensure that no issues come while critical server actions are being performed by the software. It also checks if all the configs are built right. Features Added/Worked on Added Logging System Added Self Config tool Added dependency resolver Added a POST Test What new I learnt I learnt to work with logging library I learnt different logging levels I learnt how to read and save data into json and env I learnt to work with venv & auto pip installers I learnt that stardance has a 4000 char limit on devlogs I learnt to make a cool startup animation with ASCII I learnt to make a cool looking UI in terminal for config page AI Declaration AI was used to make a big empty blueprint list of all functions which I have to code, which makes the work easy as it allows me to visualize the functions pending to create and those which are done. AI was used in ASCII Animation’s character generation. The attached image shows the ASCII Animation, and then some pics of the AutoConfig window, asking the user to enter the details to perform setup."}, {"post_id": 28444, "ts": "2026-07-14T18:06:10Z", "hours": 0.4731, "text": "Devlog 1 Project Details 1. The point/scope of this project So, this is going to be a project for all the hosting owners and homelab operators, who have to manually control/edit each server on pterodactyl to do basic actions which is the same to be done on multiple servers. If you dont know, Pterodactyl is a game/server hosting control panel which gives you a good UI to make your stuff easier to control and all.. but it does lack bulk change features, and there arent much addons for it, and addons also dont work well and get deleted everytime we upgrade the panel, which is a mess. 2. My Solution for the problem I would be making a standalone windows app + a linux cmd app which uses pterodactyl API to perform actions. It would provide a very comprehensive UI to specifically allow for bulk actions and add features which arent there in normal pterodactyl. 3. Features of my project After extensive planning and discussion with several other hosting/homelab owners, I have gathered a list of features which everyone require and would use on a regular basis if there was an app for it. So, my app would have the following features: Bulk Suspend/Unsuspend Bulk Delete Selective Purge Backup download Bulk resource change, or Copy 1 server’s resources and paste to multiple servers. Bulk Reinstall Bulk Transfer Settings page for storing api keys and more. Email notifications to notify users for bulk actions if scheduled. [Planned for a later stage, to be released with other matching updates] Make a management tab in which all node’s real specs are shown, and heavy overloading or other parameter of servers are shown. Il take suggestions from UI of Proxmox and Proxmox Datacenter manager as thats a really good UI with a lot of pterodactyl usable features. User management features like Bulk Email, Bulk user delete, Specific User Purge (Like delete those without any server), User Clear (Clear all servers of a user) The complete flagship feature of panel speed booster, which does all required purges and makes panel faster Update monitor, so users can safely and reliably update their wingspan installation and get prompted whenever a new release is put. 4. Who am I/What do I do? I am Brahmtej Singh, a Python Developer, usually working with devops projects like automations and things, so this kinda project is a perfect fit of what I like to do! Im the founder of HostingKarle, I started with a pledge of providing a safe place to my customers. There are a lot LOT of scams out there in IT/Hosting sector, and I wish to change that. I always prioritized customer experience and trust building, and I also support developers by providing Free hosting services to support their development and projects! AI Use in Project and Other Details I am always very clear with AI Use, I believe to use it as a helping tool to navigate through complex logic building and automate repetitive tasks. All my AI use is properly logged and would be attached in every devlog, though I try my best to write what I know by hand. If you ever wish to contribute or to provide feedback on my work, please feel free to conact me on slack, ID: U0AJ2DDJ996 I always write all my devlogs by hand, every single detail is hand written and not passed through any AI tool, not even for grammatical or syntaxial fixing. My devlogs are mainly formatted like this: Introduction to what I did What new I learnt Project Impact / Upcoming Changes AI Use Declaration Attached Photo Description Thankyou for taking interest in my project. The attached image shows a screenshot of my current and future targets, written and planned out. This much text wouldnt fit in the text space, so had to attach a screenshot of the text planning. (First 15 Minutes into creation)"}]...
|
Title: Wingspan for Pterodactyl by @brahmtejsawhne Title: Wingspan for Pterodactyl by @brahmtejsawhney | Stardance
Devlogs:
Devlog 1 Project Details 1. The point/scope of this project So, this is going to be a project for all the hosting owners and homelab operators, who have to manually control/edit each server on pterodactyl to do basic actions which is the same to be done on multiple servers. If you dont know, Pterodactyl is a game/server hosting control panel which gives you a good UI to make your stuff easier to control and all.. but it does lack bulk change features, and there arent much addons for it, and addons also dont work well and get deleted everytime we upgrade the panel, which is a mess. 2. My Solution for the problem I would be making a standalone windows app + a linux cmd app which uses pterodactyl API to perform actions. It would provide a very comprehensive UI to specifically allow for bulk actions and add features which arent there in normal pterodactyl. 3. Features of my project After extensive planning and discussion with several other hosting/homelab owners, I have gathered a list of features which everyone require and would use on a regular basis if there was an app for it. So, my app would have the following features: Bulk Suspend/Unsuspend Bulk Delete Selective Purge Backup download Bulk resource change, or Copy 1 server’s resources and paste to multiple servers. Bulk Reinstall Bulk Transfer Settings page for storing api keys and more. Email notifications to notify users for bulk actions if scheduled. [Planned for a later stage, to be released with other matching updates] Make a management tab in which all node’s real specs are shown, and heavy overloading or other parameter of servers are shown. Il take suggestions from UI of Proxmox and Proxmox Datacenter manager as thats a really good UI with a lot of pterodactyl usable features. User management features like Bulk Email, Bulk user delete, Specific User Purge (Like delete those without any server), User Clear (Clear all servers of a user) The complete flagship feature of panel speed booster, which does all required purges and makes panel faster Update monitor, so users can safely and reliably update their wingspan installation and get prompted whenever a new release is put. 4. Who am I/What do I do? I am Brahmtej Singh, a Python Developer, usually working with devops projects like automations and things, so this kinda project is a perfect fit of what I like to do! Im the founder of HostingKarle, I started with a pledge of providing a safe place to my customers. There are a lot LOT of scams out there in IT/Hosting sector, and I wish to change that. I always prioritized customer experience and trust building, and I also support developers by providing Free hosting services to support their development and projects! AI Use in Project and Other Details I am always very clear with AI Use, I believe to use it as a helping tool to navigate through complex logic building and automate repetitive tasks. All my AI use is properly logged and would be attached in every devlog, though I try my best to write what I know by hand. If you ever wish to contribute or to provide feedback on my work, please feel free to conact me on slack, ID: U0AJ2DDJ996 I always write all my devlogs by hand, every single detail is hand written and not passed through any AI tool, not even for grammatical or syntaxial fixing. My devlogs are mainly formatted like this: Introduction to what I did What new I learnt Project Impact / Upcoming Changes AI Use Declaration Attached Photo Description Thankyou for taking interest in my project. The attached image shows a screenshot of my current and future targets, written and planned out. This much text wouldnt fit in the text space, so had to attach a screenshot of the text planning. (First 15 Minutes into creation)
Devlog 2 Progress Done Its been about the first hour into the project, and I have well planned everything and have started working on execution. I have started with the linux versions (CMD ONLY), because I dont have experience with GUI Apps and compiling to executables. I have started on configuration tool, which asks the user for all required API Keys and creates the config files and sets up the installation. I have also worked on a standard automatic dependency downloader, so it runs its own venv on boot, downloads its dependencies there, and runs normally. I would not be compiling it into an executable, so you can take and run it on linux, and copy paste it and run it on windows without any platform change issues. I also set up python library, “logging”, to provide proper logs of every action, because it would be important for the users if anything goes wrong or they need history of the tool’s actions. I have also added an entire system testing feature (POST) which triggers when the program is turned on. This is to ensure that no issues come while critical server actions are being performed by the software. It also checks if all the configs are built right. Features Added/Worked on Added Logging System Added Self Config tool Added dependency resolver Added a POST Test What new I learnt I learnt to work with logging library I learnt different logging levels I learnt how to read and save data into json and env I learnt to work with venv & auto pip installers I learnt that stardance has a 4000 char limit on devlogs I learnt to make a cool startup animation with ASCII I learnt to make a cool looking UI in terminal for config page AI Declaration AI was used to make a big empty blueprint list of all functions which I have to code, which makes the work easy as it allows me to visualize the functions pending to create and those which are done. AI was used in ASCII Animation’s character generation. The attached image shows the ASCII Animation, and then some pics of the AutoConfig window, asking the user to enter the details to perform setup.
Devlog 3 Progress Done Its the 3rd hour into the project, and I have worked on adding args feature (specifically for linux users) and have worked on the project’s banner and interactive setup menu. I have also added verification in the setup fields to ensure that the user fills in correct information, and even guides the user if wrong keys are entered after 2 tries. Alongside with it, I added colors and made a cool ASCII banner. I also added the system to make venv automatically on first boot (supported on both linux/windows) for those who are running the code directly uncompiled. Features Added/Worked on Added Colorful ASCII Banner [Check Attached Image] Added field verification for setup- Added Args support, Eg. wingspan setup Improved POST Added Auto Venv and Dependency Installer What new I learnt I learnt to work with ASCII Color Codes I learnt to make args on python I learnt how to work with Venv I learnt to work with Terminal Commands from python to install dependencies AI Declaration AI was used for this devlog period for generating the automatic venv and dependencies installer, and making it compatible for both linux and windows at the same time. AI was also used to help with the Args function as I have not had any experience with it before. The attached images show the program running on both Linux and Windows. First screenshot shows the automatic dependencies installer in action, followed by images of the new banner and guide text if the user enters wrong api key multiple times.
Devlog 4 Progress Done Its about the 6th hour into the project, I have worked on making a terminal UI on which you can click up and down arrows and space button to select servers from a list to do actions. I did not work on actual API yet, thats kept for the last, currently I am working on data sorting and filter functions and more. I also made a cool banner for the project! Sorry for the late devlog, took a lot of time debugging and learning this one. Features Added/Worked on Made a cool image banner on canva [No AI] Worked on filtering functions Worked on a better terminal UI with curses Made HomePage What new I learnt I learnt Graphic Design with Canva I learnt to work with Curses to make terminal UI I learnt to capture button clicks on terminal for functions AI Declaration Close to None AI was used for this devlog. I used AI to understand how the curses library works and how to make it perform actions on button clicks. Also, the tech-pterodactyl symbol on the banner was made with AI as I couldnt find a similar icon on the internet. The attached images show the new banner, followed by the homepage and terminal selector UI demo.
Devlog 5 Progress Done Its about the 8th hour into the project, Since around the past 1 hour, I have been reading and understanding the entire pterodactyl API. Learning everything from sending requests to sorting data according to needs. Not much progress was done on the main project, though I did a lot of testing in temp files and had a lot of learning. What new I learnt I learnt to use RestJS API system of Pterodactyl I learnt to use Requests in Python I learnt to capture data and filter/manipulate it from APIs I learnt to manage rate limits and error codes Sources Pterodactyl API Docs: https://pterodactyl-api-docs.netvpx.com/docs/intro AI Declaration No AI was used for the period of this devlog. Most of the work was only done for understanding and learning purposes which was done in temp files which is essential for the project’s development. The attached images show the pterodactyl AI docs which I am reading and testing.
Devlog 6 Progress Done Its the 11th hour into the project and the progress is booming! I have started working on the interactive menus of the program. I have also started work on the first function, which is “Search and Info”, in which you can select parameters to search from, and it performs bulk search for you, which you can export to a file, or use in the program internally to trigger actions, or get detailed info about. I have also added terminal ui from curses in this, for the parameter selector, and it looks really good! I also worked on algorithms which convert data from pterodactyl to a usable format for mass bulk searching. I am making it in a way that some of the load is shared on the pterodactyl server side for filtering, and the rest is done on machine running this program, so I can minimize the rate limiting and divide load among both the machines for bulk processing and improve speed. For example, basic filter arguments are run on pterodactyl server’s side (Handled built in by pterodactyl), whereas advanced parameter searches are done on user side as generally user’s own system has more threads and is much better than the pterodactyl webserver. Features Added/Worked on Made menus and sections for first function Worked on algorithms to convert api responses to filterable data Worked on UI by adding curses based parameter selector Made first function, Search and Info What new I learnt I learnt to work with massive data and make algorithms to convert to usable data I learnt to make my first usable intractable terminal UI from curses I learnt to divide operations and perform load balancing for such bulk data AI Declaration Close to None AI was used for this devlog. All the algorithms which were made, where made completely by hand. AI was used for research purposes for curses as its a new field for me. All code blocks where AI has been used are marked in source code! The attached images show the home page, followed by new menus, along with the parameter selector and more…
Devlog 7 Progress Done Im into the 12th hour of the project, and I have done a lot of progress on the first function, which is search and info. I have worked on the parameter search option which is an extremely bulky work as im making it compatible with future upgrades and any extra addons that the user may have which cause changes in the API, I’m adding dynamic automatic support for new fields too for search, while taking all inputs and performing operations in the terminal. I am completely AVOIDING AI for this devlog, and focusing on complete self improvement and understanding of such deeply nested code structures. This is a partial devlog, meaning it doesnt mark a completion of a feature. AI Declaration Close to None AI was used for this devlog. Everything was done by hand for self learning and improvement. The attached images show the home page, followed by the new Search from Parameters Mode…
Devlog 8 Progress Done Im done with Search and Info function’s basics. Only export options and other advanced options are left to be created. This is a really little 15 minute devlog to mark the achievement of the first actual usable feature in the program, which took me about 11 hours, and this project would be having about 20 of such large functions, making this an extremely detailed and big project. In this devlog, I also want to thank each and every follower of mine, for taking interest in my project and supporting me! Thankyou. AI Declaration Close to None AI was used for this devlog. Everything was done by hand for self learning and improvement. The attached images show the Banner of project.
Devlog 9 Progress Done Im working on the final parts of the first function, that is filtering and exporting. Next I would be moving onto purge manager and related functions which are more useful in real life. Input of the ID parameter was giving vague errors when provided with ranges, It took me a lot of debugging to find the source of the issue, and that was a string was being compared to an int (str<int) in a part of code where I didnt typecast. That is fixed now. AI Declaration Close to None AI was used for this devlog. The attached images show the accepted input of the ID field when put with a range.
Devlog 10 Progress Done Im in the 13th hour of the project, and have completely finished the first feature of Searching and Indexing servers. This feature allows you to search from bulk server lists and filter out servers based on all the parameters. It also works with any extension which you may add in future which adds more parameters in the panel, its universally compatible. Next, I would be working on the Purge function, on which we would be using the Search and Info function, to export a csv list and import it into the purgetool to eliminate servers. Features Added/Worked on Refined menus and controls Added more colors Added support for complete universal API [Explained above] Finished with the first function of the software What new I learnt I learnt to work with APIs I learnt to manage big data I learnt to make really complicated nested loops I learnt to convert Json and Lists from 2D to 1D AI Declaration A little bit of AI was used to automate repetitive tasks to save time in the search and info function, where filter rules had to be created for each datatype separately and code was mostly same as I written by hand. AI was used to just change variable names and fit it for other datatypes. AI was also used for debugging and checking if everything works alright. Wherever AI was used, has an AI marker in the source code. The attached video show the first working function which is filtering servers based on user inputs.
Devlog 11 Progress Done Im in the 14th Hour of the project, and I have worked on the readme. I have written installation process, and scopes of this project. Also, I have added credits as required. All content is human written, no AI used. Features Added/Worked on Added Readme AI Declaration No AI Used for this devlog period The attached video show the preview pics of the readme.
Devlog 12 Progress Done I am now making the Server Info function, which provides all the server information in one very well managed panel. Thanks to my fellow developer @stef [U0823APHVK7], I got to know that most of the pterodactyl API docs out there are AI generated and are mostly inaccurate. The accurate one is: https://pterodactyl-api.redbanana.dev I have also experienced issues with Pterodactyl itself, not working right with parameter based data fetching, Il work more on it as most likely its some my side issue. I am also working on adding some kind of live table display right into the terminal to beautifully display the data from the Server Info function. Features Added/Worked on Finished with Server Search Worked on CSV Export Started work on Server Info Function AI Declaration No AI Used for this devlog period The attached video show the preview pics of the new Server Info function.
Devlog 13 Progress Done I did not do much today as the schedule was really busy, I have done a little bit of debugging and bughunting by testing with different kinds of server eggs and parameters on pterodactyl. I have not found any major issue yet, there were some little issues with server search function where some parameters would not show up, that is fixed. Rest, I also am working on the server info function and the readme. Features Added/Worked on Finished with Server Search Worked on CSV Export Started work on Server Info Function AI Declaration No AI Used for this devlog period The attached photos show the new updates to the readme and docs.
Devlog 14 Progress Done I know this is a very delayed devlog, I had my exams mid way. I’m into the 20th hour of the project, most of the stuff is made. API System is ready, most of the code which would be shared across multiple functions is ready. First function, of Bulk Search and server lookup is also complete. Server lookup function has a really cool UI. Alongside with that, I have also added export option to the Bulk Server Search, you can use the exported file on other functions which take actions on server. Features Added/Worked on Completed Bulk Search and Server Lookup Added server list export Added Shipwrights Docs (Readme for shipwrights) Worked on fixing bugs and README What new I learnt I learnt to work with CSV files I learnt to spoof responses to provide hardcoded outputs (For shipwrights testing) I learnt how to read and save data into json and env I learnt to add images into my Readme AI Declaration A little bit AI was used in CSV saving mechanics, so its saved in a way so could be read back easily for processing later. Server Lookup’s UI was heavily created with help of AI, as I was not able to achieve that high information density without use of AI. Rest, updates in README and SHIPWRIGHTS.md were all done by hand with 0% AI. The attached image shows the new Server Lookup UI, new readme with banner and terminal header, shipwrights file, csv file output.
Changelog Repo Created on Git, Code Uploaded. V1: Added: Server & Info Fn. Welcome to wingspan folks! <3
Devlog 16 Progress Done The project is still on its reviewing stage, in the meantime, I have worked on releasing the executable release for both windows and linux. The executables are internally dynamic, so it updates to the latest wingspan version on every boot. Alongside, I have also worked on a lot of bugfixes, added more detailed logging, Autoboot after Setup and more. I have also worked on the purge function, specifically on the server purge feature. I have completed the export function and import function for the server lists. So server lists could be imported to action functions. I have also worked on reducing the boot time for linux, and on a fresh install, its as little as 5 seconds for the complete install and setup. I’ll be releasing more things after the ship gets approved! Features Added/Worked on Enhanced Logging System Added Release Executables/Binaries Added Auto Updater Added Importer Function for exported server-lists Fixed bugs and slight performance enhancement for windows Massive performance enhancement for linux What new I learnt I learnt to make a formal logging system I learnt to create binaries of python I learnt how to export and import and edit csv I learnt to optimize code on linux I learnt to make Auto Updaters and Version Checkers What I would be working on Completing server purge function Improving performance for windows systems Adding verification of exports while importing them Warnings before destructive action AI Declaration No AI was used in code in the duration of this devlog. AI was used in helping me with creating the executables from the code. All places where AI was used in code, is mentioned properly in the source code. The attached image shows the Release Page of the project, Purge Window Screenshots and Export File Content Screenshots.
Devlog 17 Show and Tell #1 WINNER Project! 🏆 Progress Done Ship Approved! Yay! Also, Show and Tell Winner! So, during the span of this devlog, I have worked on creating release files for this project, in a way that they do not have to be updated everr! Also, I have worked on the Purge Function, and have completed the server list import, and have made major changes in server list export function, which now exports minimally required data only for security reasons. Also, I have made quite a lot of confirmations that the person has to fill in order for the servers to actually get deleted, which is a good practice so a person doesnt anciently delete their entire pterodactyl. Also, I have worked on advanced logging in the import system and a very smart directory checker. Also, exporting now adds the panel’s URL on top of the export file, so a wingspan session linked to another panel does not perform critical actions on wrong servers. It properly verifies the import file and gives a clear warning if needed. Features Added/Worked on Export Function Major Changes New Import Function Improved logging Purge Function Increased security and confirmations before taking critical actions. What new I learnt I learnt to export files I learnt to import files I learnt security and integrity tactics to prevent unwanted destruction I learnt to do better logging What I would be working on Completing server purge function Starting work on user purge function AI Declaration No AI was used in code in the duration of this devlog. All places where AI was used in code, is mentioned properly in the source code. The attached file shows and older video I recorded of me using the project.
Devlog 18 Progress Done Purge feature is now functional. Server purges are working as expected. I have added 4 purge methods. Parameters are Forced/Unforced, and Verified and Unverified.So, FV,FU,UV,UU. When you choose unforced method, it would ensure a clean deletion, and ensure the entire data is wiped. On a forced delete, it would delete it from frontend, and only attempt to clean it entirely. Force method is useful to delete servers whose nodes have been discontinued, or conditions where unforced wouldnt work. Verified feature ensures that the purge process goes as close to the expected outcome as possible, and if anything is detected which shouldnt be so, wingspan would prompt you there, so you can take manual action right there on the spot while it purges. Unverified means that wingspan would try its best to delete all the servers given in the importlist and would not prompt the user in case of discrepancies. Features Added/Worked on Import Verification Server Name Live Verification Completed Beta Purge Function Updated Menu to allow Purge Function Wingspan now needs an Admin API key with Full Perms (Readonly no longer works) What I would be working on Bugchecking all the features I made Attempting to delete some servers in massive quantities. Starting work on User Purge Function Do changes in README.md for the new purge function documentation. Find a good reliable Pterodactyl API Docs Website. AI Declaration No AI was used in code in the duration of this devlog. All places where AI was used in code, is mentioned properly in the source code. The attached image shows the Graphical UI of the Purge Function along with the questions it asks.
Devlog 19 Show and Tell #1 WINNER Project! 🏆 Progress Done Purge function has been completely created. I have worked on API Request Error Catching in duration of this devlog. I have integrated all the standard practices and error catching which is required, and now the program displays the error and a solution to fix it. Also, it tracks if there are any errors due to wingspan itself, and provides resolution! Great Stuff! I also started work on User Purge Function, which i’ll release in the ship after shipping Server Purge. There was a bug in the release file, which prevented auto update in windows. Fixed that. Features Added/Worked on Better API Requests to Pterodactyl Rate Limit detector and queue Error Catching and Resolution Server Purge Function Completed Started work on User Purge What new I learnt I learnt to work with industry standard error catching I learnt to make better API systems I learnt to work with queues and rate limiters I learnt to use DELETE Protocol What I would be working on Completing Documentation till here Shipping till Server Purge AI Declaration Claude was used to find out bug in release file only. No AI was used in code during the span of this devlog. All places where AI was used in code, is mentioned properly in the source code. The attached image shows the Release Page of the project, project homepage and some lovely previous votes screenshots.
ps: not an official devlog, just an update Show and Tell + Super Star This was another great show and tell, and OMG SUPER STAR! Thanks @Lazyllama ❤️ Ty guys, rly grateful!! Image shows me submitting to Show and Tell and 2nd Image showing my Super Star!
Ships:
Welcome to WingSpan, A project to bulk manage your self hosted hardware on pterodactyl. Easily search through servers, get detailed information, export lists based on precise filtering and more! It is made for people like me, who manage hundreds of servers daily, and need to perform bulk actions on them. Its posted on frictionless mission because it would make my life really easy as it automates a lot of my work and would save me a LOT of clicks! cant wait for you to try it out! <3
Hello! If you are new here, welcome! This is my flagship project called Wingspan, It’s used by system administrators and infrastructure managers to manage their virtual servers in bulk rather than one by one. This project works in the terminal with AMAZING Terminal UI! This is my second ship. I have worked on making the Server Purge Function, to easily delete servers in large quantities. In my previous ships, I worked on making the basics of the code and functions to index and search the database. I have received extremely positive comments for this project, and i’m really proud of making it! Do star it on github if you like this one!...
|
1793152192.2668588
|
1793238592.2668588
|
|
28856
|
Server Loaded by @damienzarich | Stardance
|
damienzarich
|
0
|
38.37
|
0
|
[]
|
[{"post_id": 33650, "ts": "202 [{"post_id": 33650, "ts": "2026-07-23T18:48:24Z", "hours": 9.8197, "text": "created the app on inno as a downloadable file and styled the electron to have a custom side scroll bar and top bar to match with the sleek asthetic"}, {"post_id": 30615, "ts": "2026-07-18T10:30:06Z", "hours": 9.0961, "text": "created the error checking to see if the servers ip address that you selected is valid or not. If not the server will not be added to the list along with your file."}, {"post_id": 25286, "ts": "2026-07-09T14:00:07Z", "hours": 10.3092, "text": "Fixed the select and reset buttons and gave them each an animation when loading up your files. Select button will give you error if it cannot find your server files."}, {"post_id": 22025, "ts": "2026-07-04T08:38:47Z", "hours": 4.0183, "text": "I just finished adding the last two cards the latency and quick file cards. The latency file will give you info on the servers overall ping as well as highest ping. The quick file card will allow you to edit the properties of your server along with being able to open your servers rot directory."}, {"post_id": 20685, "ts": "2026-07-02T10:43:27Z", "hours": 1.9197, "text": "It works! bars now accurately display system metrics such as cpu and memory usage for your entire system.(Used ai to help me troubleshoot fetching system resources"}, {"post_id": 19812, "ts": "2026-07-01T06:24:04Z", "hours": 3.2086, "text": "created my base layout for the statistics of the server and set it up on electron. Now im going to continue to work on the json so it can accurately read your servers statistics like ping and memory usage."}]...
|
Title: Server Loaded by @damienzarich | Stardance
Title: Server Loaded by @damienzarich | Stardance
Devlogs:
created my base layout for the statistics of the server and set it up on electron. Now im going to continue to work on the json so it can accurately read your servers statistics like ping and memory usage.
It works! bars now accurately display system metrics such as cpu and memory usage for your entire system.(Used ai to help me troubleshoot fetching system resources
I just finished adding the last two cards the latency and quick file cards. The latency file will give you info on the servers overall ping as well as highest ping. The quick file card will allow you to edit the properties of your server along with being able to open your servers rot directory.
Fixed the select and reset buttons and gave them each an animation when loading up your files. Select button will give you error if it cannot find your server files.
created the error checking to see if the servers ip address that you selected is valid or not. If not the server will not be added to the list along with your file.
created the app on inno as a downloadable file and styled the electron to have a custom side scroll bar and top bar to match with the sleek asthetic...
|
1793202718.845774
|
1793807518.845774
|
|
52522
|
AmritaNav by @Avmovito | Stardance
|
Avmovito
|
0
|
38.36
|
0
|
[]
|
[{"post_id": 52590, "ts": "202 [{"post_id": 52590, "ts": "2026-08-22T19:44:59Z", "hours": 38.3578, "text": "created this project after June 1st. Initially, I planned to build a service-provider website for my campus. However, while developing it, I wasn’t satisfied with the design and overall theme. It looked too much like something generated by AI, especially since I had actually used AI to generate the initial reference image. Later, I decided to redesign the website using my college’s official color theme and give the project a more authentic and personalized look. So, I changed the overall theme and continued developing the project from there. I have already documented my current development progress in my notes/log. I hope you all like the final result! the last screenshot is the current project theme and idea $day1$ today we have created the image we need to build the website and logo it took about 1.8 hour and we also created the home page $day2$ today i completed the home page of the web site which went super smooth but still then are not reponseve designs and also no interaction is also added i took only 40m of brosing to find the corect icons $sevirce page$ today i created the service page i was so smooth the only think that takes some time almost 39m is finding the correct logos and converting the file type $portfolio page$ today i created the portfolio page it was not yet completed i need work on the js that will be done after the all pages are created $another day$ Today I created the pricing page, also I wrote JS for the pricing page, CSS animation, and JS for the portfolio page $The Change$ Actually i didn’t like the theme of the website so i switch the porpose of the wesite also now project turned in to a campous navigation website"}]...
|
Title: AmritaNav by @Avmovito | Stardance
Devlogs Title: AmritaNav by @Avmovito | Stardance
Devlogs:
created this project after June 1st. Initially, I planned to build a service-provider website for my campus. However, while developing it, I wasn’t satisfied with the design and overall theme. It looked too much like something generated by AI, especially since I had actually used AI to generate the initial reference image. Later, I decided to redesign the website using my college’s official color theme and give the project a more authentic and personalized look. So, I changed the overall theme and continued developing the project from there. I have already documented my current development progress in my notes/log. I hope you all like the final result! the last screenshot is the current project theme and idea $day1$ today we have created the image we need to build the website and logo it took about 1.8 hour and we also created the home page $day2$ today i completed the home page of the web site which went super smooth but still then are not reponseve designs and also no interaction is also added i took only 40m of brosing to find the corect icons $sevirce page$ today i created the service page i was so smooth the only think that takes some time almost 39m is finding the correct logos and converting the file type $portfolio page$ today i created the portfolio page it was not yet completed i need work on the js that will be done after the all pages are created $another day$ Today I created the pricing page, also I wrote JS for the pricing page, CSS animation, and JS for the portfolio page $The Change$ Actually i didn’t like the theme of the website so i switch the porpose of the wesite also now project turned in to a campous navigation website...
|
1792712871.0963802
|
1793317671.0963802
|
|
26693
|
Numpad by @Mouse | Stardance
|
Mouse
|
0
|
38.35
|
0
|
[]
|
[{"post_id": 39260, "ts": "202 [{"post_id": 39260, "ts": "2026-08-02T03:38:29Z", "hours": 1.775, "text": "Worked on fixing several bugs in the README (list indentation, non-HTML lists staying unrecognised, sub-elements possessing different margins) and finished the guide. There isn’t anything left to do other than add images of the final product as well as a video, but since that can’t be done yet, this’ll be the last devlog for a while."}, {"post_id": 38688, "ts": "2026-08-01T06:25:24Z", "hours": 1.7667, "text": "Added the keycaps to the 3D mockup. Finding them was kind of a pain, since I had to reference the Stream Deck to Google Lense the DSA keycaps (when it turned out that it was in the parts list). Finished the credits section in the README too, and now I have the guide left."}, {"post_id": 38606, "ts": "2026-08-01T02:44:01Z", "hours": 1.3833, "text": "Added 4 of the M3x16mm screws to the CAD mockup. Worked on the images and added a list of parts+tools needed to build the numpad for yourself. Fun fact, the screws were VERY hard to find since on popular sites like GrabCAD, there were no appropriate screws (either incorrect driver heads, head shape, dimensions or missing threads). Eventually managed to find a suitable model at McMaster-Carr."}, {"post_id": 38010, "ts": "2026-07-31T04:19:43Z", "hours": 2.1, "text": "Finished adding all of the production files (CAD, PCB stuff and firmware) and worked on the README (including most of the images except the actual photos which were included in a new assets folder). Turns out there was a bunch of stuff I forgot to do, which includes but isn’t limited to: a guide, screws in the mockup, list of parts and several more README touch-ups."}, {"post_id": 37414, "ts": "2026-07-30T03:32:54Z", "hours": 1.5336, "text": "Updated the README and added placeholders for future renderings after the firmware is completed. On that note, the QMK setup was completed and the firmware (keyboard.json for the layout and keymap.c for the keymaps) was built. All that’s left is polish that I’ll complete next session."}, {"post_id": 29962, "ts": "2026-07-17T05:33:11Z", "hours": 1.7667, "text": "Organised the files needed for shipping the project, installed the QMK dependencies and created a repository for the project. This step took a while since OneDrive was clashing with Git, causing rested repositories and requiring a clean sweep of the .git folder."}, {"post_id": 29350, "ts": "2026-07-16T07:21:39Z", "hours": 1.6006, "text": "Added a USB-C cable to the mockup. The alignment needed some fiddling with since apparently a USB-C port is a rounded rectangle where the radius is <1/2 of its height, but the connector has the radius equal to 1/2 its height, creating a capsule shape. I should now be able to start on the firmware."}, {"post_id": 28766, "ts": "2026-07-15T07:25:52Z", "hours": 1.8172, "text": "Finished organising all sheet bodies and normal bodies in the PCB directory. I unioned an insane quantity (e.g. the XIAO had ~30 bodies), but sheet bodies (and non-contacting bodies) are not able to be unioned, hence the organisation required. I should be essentially done with the mockup (a few finishing touches left) and I might be able to start on the firmware."}, {"post_id": 28145, "ts": "2026-07-14T08:00:13Z", "hours": 3.9667, "text": "Added the PCB to the mockup. This took quite a while, since the first time I tried it, I found out that due to the 0.1 mm grid I was using, the spacing of the keyswitches was 19 mm instead of the default (and correct to real life) 19.05 mm. This had to be painstakingly adjusted due to the fact that each row and column had to be moved up/right by its 0.05(ID-1) mm. All of the traces (but luckily none of the components (other than the keyswitches of course (and the diodes too (this leaves just the XIAO, could’ve just said that))) due to the fact that the XIAO is in the bottom left (hence the movement towards the top right)). I found a few other minor misalignments of pin heights and trace heights (widths too) in the process. The width and height of the PCB then had to be adjusted (Edge.cuts in KiCad and the variables in Shapr3D). When I finally began aligning everything again (by using the align tool on SW0’s large pin hole and an alignment cylinder made on top of the plate), I found out that there had to be a gap between the PCB and the plate due to the unorthodox 3 mm plate thickness. I did a bit of research and asked AI, with which cross-referencing the hardware list and the screw lengths led me to believe that 3.5 mm was the depth of the gap. However, it turned out to be false (it was 2.15, found through z-aligning the plastic bump on SW0 and the PCB). I then found out that I’d forgotten to correct 3 rows (out of 4) and had forgotten about SW0’s row existing, meaning I had to go through the same process of shifting 9 keyswitches by 0.05 mm (along with their traces (but none of the diodes since no horizontal shifting was done)). When I went back to the z-alignment, I realised that there were 2 “floating” layers above the top of the substrate layer of the PCB (a soldermask and silkscreen). I found the soldermask to be the coat of paint and assumed the silkscreen to be a projection of the copper layer, meaning that I had to align the plastic bumps to the soldermask layer. I hypothesise that the explanation for the “floating” effect of the “flat” layer is that KiCad isn’t advanced/comprehensive enough to make the soldermask its real size, and to compensate and keep it a 3D body (that looks like a flat layer) they just put the top layer in its correct position and the bottom one infinitesimally close to it instead of at the proper substrate core. This would’ve explained why it was measured as having no thickness as well as appearing as a floating layer (it’s too small for Shapr3D to measure (fun fact: zooming in way beyond the minimum 0.001 mm grid size did reveal some thickness)). The diodes also clipped the plate, however, this turned out to be because of the 1 mm gap between the diode and the PCB that’s standard for machine-manufactured PCBs (which obviously won’t happen in real life while hand-soldering). Apologies for the rant, had to do it to explain the 4 hours taken for this step. *this is in section view to show the PCB with the rest of the components better."}, {"post_id": 25819, "ts": "2026-07-10T09:01:22Z", "hours": 1.4833, "text": "Added the keyswitches to the Shapr3D mockup, and everything fits perfectly. The quirks of the alignment tool made this decently hard to achieve since I wasn’t able to just draw corresponding faces and set their coordinates equal to each other."}, {"post_id": 25734, "ts": "2026-07-10T05:25:02Z", "hours": 0.7003, "text": "Bugfixed to allow for the XIAO’s 3D mockup to be loaded. Turns out the footprint designer had nicknamed the path for the XIAO “footprints”, which made for several errors to be thrown if the path was more aptly named something like “XIAO”."}, {"post_id": 25718, "ts": "2026-07-10T04:40:17Z", "hours": 3.8686, "text": "Worked on the CAD mockup of the PCB by modifying the root footprints. In the process, I was able to organise the user files as per KiCad syntax, which should help when shipping the project."}, {"post_id": 23404, "ts": "2026-07-06T10:42:57Z", "hours": 0.8167, "text": "Made small trace adjustments to the PCB (but I should be done). I’ll have to adjust the case and account for the fact that the switches aren’t centred, but that’s tomorrow’s problem."}, {"post_id": 23385, "ts": "2026-07-06T09:43:44Z", "hours": 2.3003, "text": "Reworked the whole PCB since I forgot that front and back layers existed. Also updated the CAD model, however, forgot to record it and 50 minutes of my time was lost (though that was before the rework)."}, {"post_id": 21956, "ts": "2026-07-04T04:57:24Z", "hours": 1.6003, "text": "Finished updating the PCB and now there should be no more changes to be made. The case has also been updated, although there aren’t any noticeable differences due to the fact that the only changes made were to accommodate the newly finished PCB."}, {"post_id": 19885, "ts": "2026-07-01T09:44:22Z", "hours": 1.0503, "text": "Worked on the mockup (added the keyswitches) and rotated the XIAO for an actually feasible angle. I’ll need to add the XIAO in the mockup tomorrow. I also need to reroute the row and column global pads since now the order of the traces needs to be flipped."}, {"post_id": 19853, "ts": "2026-07-01T08:00:00Z", "hours": 0.9833, "text": "Finished designing the case for the keyboard. I’ll have to add a USB insert later, but that will be completed along with the mockup. The PCB looks fine, but before printing the case at home, I’ll double check it with the measurements of the PCB to ensure corrections can be made."}, {"post_id": 19833, "ts": "2026-07-01T06:57:35Z", "hours": 0.8833, "text": "Made minor changes to the layout of the tracks and decreased the footprint of the whole PCB. Turns out there was yet ANOTHER pad that I’d forgotten to connect (don’t ask how)."}, {"post_id": 19752, "ts": "2026-07-01T04:21:20Z", "hours": 3.95, "text": "Decided to take the time to reroute the whole thing. Originally, it was for aesthetics and maintainability, but then an hour in, I realised I’d forgotten to connect SW7 and had to restart. Realised that the “optimal” layout was concentric traces corresponding to switch numbers in descending order. Still have a bit more to do but that’s in terms of proximity of the tracks but decided that this was enough for the day."}, {"post_id": 18246, "ts": "2026-06-29T10:06:29Z", "hours": 1.0, "text": "Finished tracing all of the plates, which was a pain. Initially, the pin order on the XIAO was messed up (which, with the help of AI and the spacepad reference turned out to be misplaced junctions). The tracing took several tries to get a good layout, which I’m (mostly) satisfied with. It isn’t optimal, but I’ll take it. I guess I’m moving onto the (too) familiar CAD next session for the case design."}, {"post_id": 17475, "ts": "2026-06-28T08:43:25Z", "hours": 1.4, "text": "Finished working on the schematics for the upgraded 10-key macropad. Funnily enough, a decent amount of time was spent formatting all of the text (with the help of some “research”) since for the longest time, I couldn’t figure out how to make the font size smaller. Almost forgot to horizontally flip the diodes xd. Thanks to the spacepad project for inspiration for the structure of the key matrix (goes to show just how much of a novice I am when it comes to PCB design)."}, {"post_id": 17408, "ts": "2026-06-28T05:30:18Z", "hours": 0.6003, "text": "Created the schematics of and wired the example 3-switch PCB. Somehow managed to spend 5 minutes figuring out how to assign footprints to parts (turns out you just have to double-click). Next, I’ll have to add more switches (7 more for a numpad), but that will have to wait."}]...
|
Title: Numpad by @Mouse | Stardance
Devlogs:
Crea Title: Numpad by @Mouse | Stardance
Devlogs:
Created the schematics of and wired the example 3-switch PCB. Somehow managed to spend 5 minutes figuring out how to assign footprints to parts (turns out you just have to double-click). Next, I’ll have to add more switches (7 more for a numpad), but that will have to wait.
Finished working on the schematics for the upgraded 10-key macropad. Funnily enough, a decent amount of time was spent formatting all of the text (with the help of some “research”) since for the longest time, I couldn’t figure out how to make the font size smaller. Almost forgot to horizontally flip the diodes xd. Thanks to the spacepad project for inspiration for the structure of the key matrix (goes to show just how much of a novice I am when it comes to PCB design).
Finished tracing all of the plates, which was a pain. Initially, the pin order on the XIAO was messed up (which, with the help of AI and the spacepad reference turned out to be misplaced junctions). The tracing took several tries to get a good layout, which I’m (mostly) satisfied with. It isn’t optimal, but I’ll take it. I guess I’m moving onto the (too) familiar CAD next session for the case design.
Decided to take the time to reroute the whole thing. Originally, it was for aesthetics and maintainability, but then an hour in, I realised I’d forgotten to connect SW7 and had to restart. Realised that the “optimal” layout was concentric traces corresponding to switch numbers in descending order. Still have a bit more to do but that’s in terms of proximity of the tracks but decided that this was enough for the day.
Made minor changes to the layout of the tracks and decreased the footprint of the whole PCB. Turns out there was yet ANOTHER pad that I’d forgotten to connect (don’t ask how).
Finished designing the case for the keyboard. I’ll have to add a USB insert later, but that will be completed along with the mockup. The PCB looks fine, but before printing the case at home, I’ll double check it with the measurements of the PCB to ensure corrections can be made.
Worked on the mockup (added the keyswitches) and rotated the XIAO for an actually feasible angle. I’ll need to add the XIAO in the mockup tomorrow. I also need to reroute the row and column global pads since now the order of the traces needs to be flipped.
Finished updating the PCB and now there should be no more changes to be made. The case has also been updated, although there aren’t any noticeable differences due to the fact that the only changes made were to accommodate the newly finished PCB.
Reworked the whole PCB since I forgot that front and back layers existed. Also updated the CAD model, however, forgot to record it and 50 minutes of my time was lost (though that was before the rework).
Made small trace adjustments to the PCB (but I should be done). I’ll have to adjust the case and account for the fact that the switches aren’t centred, but that’s tomorrow’s problem.
Worked on the CAD mockup of the PCB by modifying the root footprints. In the process, I was able to organise the user files as per KiCad syntax, which should help when shipping the project.
Bugfixed to allow for the XIAO’s 3D mockup to be loaded. Turns out the footprint designer had nicknamed the path for the XIAO “footprints”, which made for several errors to be thrown if the path was more aptly named something like “XIAO”.
Added the keyswitches to the Shapr3D mockup, and everything fits perfectly. The quirks of the alignment tool made this decently hard to achieve since I wasn’t able to just draw corresponding faces and set their coordinates equal to each other.
Added the PCB to the mockup. This took quite a while, since the first time I tried it, I found out that due to the 0.1 mm grid I was using, the spacing of the keyswitches was 19 mm instead of the default (and correct to real life) 19.05 mm. This had to be painstakingly adjusted due to the fact that each row and column had to be moved up/right by its 0.05(ID-1) mm. All of the traces (but luckily none of the components (other than the keyswitches of course (and the diodes too (this leaves just the XIAO, could’ve just said that))) due to the fact that the XIAO is in the bottom left (hence the movement towards the top right)). I found a few other minor misalignments of pin heights and trace heights (widths too) in the process. The width and height of the PCB then had to be adjusted (Edge.cuts in KiCad and the variables in Shapr3D). When I finally began aligning everything again (by using the align tool on SW0’s large pin hole and an alignment cylinder made on top of the plate), I found out that there had to be a gap between the PCB and the plate due to the unorthodox 3 mm plate thickness. I did a bit of research and asked AI, with which cross-referencing the hardware list and the screw lengths led me to believe that 3.5 mm was the depth of the gap. However, it turned out to be false (it was 2.15, found through z-aligning the plastic bump on SW0 and the PCB). I then found out that I’d forgotten to correct 3 rows (out of 4) and had forgotten about SW0’s row existing, meaning I had to go through the same process of shifting 9 keyswitches by 0.05 mm (along with their traces (but none of the diodes since no horizontal shifting was done)). When I went back to the z-alignment, I realised that there were 2 “floating” layers above the top of the substrate layer of the PCB (a soldermask and silkscreen). I found the soldermask to be the coat of paint and assumed the silkscreen to be a projection of the copper layer, meaning that I had to align the plastic bumps to the soldermask layer. I hypothesise that the explanation for the “floating” effect of the “flat” layer is that KiCad isn’t advanced/comprehensive enough to make the soldermask its real size, and to compensate and keep it a 3D body (that looks like a flat layer) they just put the top layer in its correct position and the bottom one infinitesimally close to it instead of at the proper substrate core. This would’ve explained why it was measured as having no thickness as well as appearing as a floating layer (it’s too small for Shapr3D to measure (fun fact: zooming in way beyond the minimum 0.001 mm grid size did reveal some thickness)). The diodes also clipped the plate, however, this turned out to be because of the 1 mm gap between the diode and the PCB that’s standard for machine-manufactured PCBs (which obviously won’t happen in real life while hand-soldering). Apologies for the rant, had to do it to explain the 4 hours taken for this step. *this is in section view to show the PCB with the rest of the components better.
Finished organising all sheet bodies and normal bodies in the PCB directory. I unioned an insane quantity (e.g. the XIAO had ~30 bodies), but sheet bodies (and non-contacting bodies) are not able to be unioned, hence the organisation required. I should be essentially done with the mockup (a few finishing touches left) and I might be able to start on the firmware.
Added a USB-C cable to the mockup. The alignment needed some fiddling with since apparently a USB-C port is a rounded rectangle where the radius is <1/2 of its height, but the connector has the radius equal to 1/2 its height, creating a capsule shape. I should now be able to start on the firmware.
Organised the files needed for shipping the project, installed the QMK dependencies and created a repository for the project. This step took a while since OneDrive was clashing with Git, causing rested repositories and requiring a clean sweep of the .git folder.
Updated the README and added placeholders for future renderings after the firmware is completed. On that note, the QMK setup was completed and the firmware (keyboard.json for the layout and keymap.c for the keymaps) was built. All that’s left is polish that I’ll complete next session.
Finished adding all of the production files (CAD, PCB stuff and firmware) and worked on the README (including most of the images except the actual photos which were included in a new assets folder). Turns out there was a bunch of stuff I forgot to do, which includes but isn’t limited to: a guide, screws in the mockup, list of parts and several more README touch-ups.
Added 4 of the M3x16mm screws to the CAD mockup. Worked on the images and added a list of parts+tools needed to build the numpad for yourself. Fun fact, the screws were VERY hard to find since on popular sites like GrabCAD, there were no appropriate screws (either incorrect driver heads, head shape, dimensions or missing threads). Eventually managed to find a suitable model at McMaster-Carr.
Added the keycaps to the 3D mockup. Finding them was kind of a pain, since I had to reference the Stream Deck to Google Lense the DSA keycaps (when it turned out that it was in the parts list). Finished the credits section in the README too, and now I have the guide left.
Worked on fixing several bugs in the README (list indentation, non-HTML lists staying unrecognised, sub-elements possessing different margins) and finished the guide. There isn’t anything left to do other than add images of the final product as well as a video, but since that can’t be done yet, this’ll be the last devlog for a while....
|
1792745524.920237
|
1793350324.920237
|
|
6199
|
Selfmail by @henri | Stardance
|
henri
|
0
|
38.14
|
0
|
[]
|
[{"post_id": 48965, "ts": "202 [{"post_id": 48965, "ts": "2026-08-17T15:25:24Z", "hours": 17.9675, "text": "I worked on Authentication, a github sign in, a better layout and improved settings pages."}, {"post_id": 18253, "ts": "2026-06-29T10:26:56Z", "hours": 15.3358, "text": "I’ve created a new panel to compose a new email, and I’ve improved the settings menu."}, {"post_id": 1518, "ts": "2026-06-03T16:26:18Z", "hours": 4.8367, "text": "I started working on a compose dialog to create and send a new email to somebody. It contains an selection menu for the address, and a markdown (wysiwyg) editor for the email body."}]...
|
Title: Selfmail by @henri | Stardance
Devlogs:
I Title: Selfmail by @henri | Stardance
Devlogs:
I started working on a compose dialog to create and send a new email to somebody. It contains an selection menu for the address, and a markdown (wysiwyg) editor for the email body.
I’ve created a new panel to compose a new email, and I’ve improved the settings menu.
I worked on Authentication, a github sign in, a better layout and improved settings pages....
|
1792551226.6741402
|
1793156026.6741402
|
|
47079
|
agribot by @malek_sameh61 | Stardance
|
malek_sameh61
|
0
|
38.04
|
0
|
[]
|
[{"post_id": 80254, "ts": "202 [{"post_id": 80254, "ts": "2026-10-16T22:43:38Z", "hours": 6.1072, "text": "I FINALLY FINISHED THE PCB!!!! Finally, after 2 months, I finished the entire PCB. It has been a long journey, and I learned a lot in it. I hope you like my work. I know it’s not the best thing, but I gave it my best, and I think that what matters most is hope you like my project and comment. :) Bye-bye"}, {"post_id": 76102, "ts": "2026-10-02T10:09:58Z", "hours": 14.1619, "text": "i finally finished the updated schmatics and the assignment for the footprint and now the last step that remains is completing the footprint and traces and the silk screen"}, {"post_id": 58184, "ts": "2026-08-30T15:18:56Z", "hours": 9.7356, "text": "THE AGRIBOT PCB FOOTPRINT (i am getting cooked) In the last few days I have been working on the AgriBot motion board in KiCad and have reduced the number of DRC violations from 191 to zero. I found that 173 of the violations were due to one particular setting, namely the fact that the default netclass had a 1 mm pad with a 0.9 mm drill, which made me feel like the biggest idiot in the world since it left only a 0.05 mm annular ring for each via. After I changed the drill size to 0.6 mm, all of those errors vanished. The trace which I had been looking for during the last few days wasn’t really there—it was a missing via. Each of the two sections of the 12v run ended at the same place, one on the front layer and the other on the back layer, but they weren’t connected. This type of error is easy to overlook since the trace appears complete at first sight. Following that, I changed the fuse holder footprints and put their pads directly onto the existing routes. This resulted in six short circuits on the 12 V rails and on ground. I also realised that fuse (f3) is entirely bypassed since the same net is used on both sides. At the moment I have no intention of carrying out these changes, but I’ll most likely rebuild the whole board since I want to replace the motor drivers and add a few new features. Most of the routing will also be done over again. So yes, If you have been lucky these last few days plz pass some I really need your luck."}, {"post_id": 47455, "ts": "2026-08-15T11:58:50Z", "hours": 8.0397, "text": "My GREENSHIFT rover schematics are FINALLY DONE one of the most annoying and ragebaiting sessions of all time in kicad but finally got it done. This is the pcb for my project thats called GREENSHIFT its a farm rover that helps you inyour farm and helps you take care of it i just finished the schematics, and i really dont know how i did it with out breaking the screen kicad crashed 2 times and i had to do all of this 3 times, but at least it’s done. I will run ERC and than start routing plz wish me luck because i think I am going crazy"}]...
|
Title: agribot by @malek_sameh61 | Stardance
Devl Title: agribot by @malek_sameh61 | Stardance
Devlogs:
My GREENSHIFT rover schematics are FINALLY DONE one of the most annoying and ragebaiting sessions of all time in kicad but finally got it done. This is the pcb for my project thats called GREENSHIFT its a farm rover that helps you inyour farm and helps you take care of it i just finished the schematics, and i really dont know how i did it with out breaking the screen kicad crashed 2 times and i had to do all of this 3 times, but at least it’s done. I will run ERC and than start routing plz wish me luck because i think I am going crazy
THE AGRIBOT PCB FOOTPRINT (i am getting cooked) In the last few days I have been working on the AgriBot motion board in KiCad and have reduced the number of DRC violations from 191 to zero. I found that 173 of the violations were due to one particular setting, namely the fact that the default netclass had a 1 mm pad with a 0.9 mm drill, which made me feel like the biggest idiot in the world since it left only a 0.05 mm annular ring for each via. After I changed the drill size to 0.6 mm, all of those errors vanished. The trace which I had been looking for during the last few days wasn’t really there—it was a missing via. Each of the two sections of the 12v run ended at the same place, one on the front layer and the other on the back layer, but they weren’t connected. This type of error is easy to overlook since the trace appears complete at first sight. Following that, I changed the fuse holder footprints and put their pads directly onto the existing routes. This resulted in six short circuits on the 12 V rails and on ground. I also realised that fuse (f3) is entirely bypassed since the same net is used on both sides. At the moment I have no intention of carrying out these changes, but I’ll most likely rebuild the whole board since I want to replace the motor drivers and add a few new features. Most of the routing will also be done over again. So yes, If you have been lucky these last few days plz pass some I really need your luck.
i finally finished the updated schmatics and the assignment for the footprint and now the last step that remains is completing the footprint and traces and the silk screen
I FINALLY FINISHED THE PCB!!!! Finally, after 2 months, I finished the entire PCB. It has been a long journey, and I learned a lot in it. I hope you like my work. I know it’s not the best thing, but I gave it my best, and I think that what matters most is hope you like my project and comment. :) Bye-bye...
|
1793166701.1969202
|
1793771501.1969202
|
|
4414
|
Remote Access Trojan by @soloplanet | Stardance
|
soloplanet
|
1
|
38.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-01T00:05:54Z", "hours": 38.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a RAT and experimented with shellcode loading. Things I found hard were obfuscating the app, learning how to use indirect syscalls and trying to evade detection. I am proud of getting my best attempt (tar2.0) at best to evade 4/71 detections which were primarily high positive ML engines and Crowdstrike (only 60% confidence) (this eventually increased to 9/71 due to signatures).", "repo": "https://github.com/MasterGoop2000/rat-project/", "demo": "https://github.com/MasterGoop2000/rat-project/releases/tag/v1.0"}]...
|
[{"post_id": 75757, "ts": "202 [{"post_id": 75757, "ts": "2026-09-30T23:54:04Z", "hours": 35.9075, "text": "Shellcode loader"}, {"post_id": 1353, "ts": "2026-06-03T09:49:17Z", "hours": 1.8203, "text": "Remote Access Trojan"}]...
|
Title: Remote Access Trojan by @soloplanet | Stard Title: Remote Access Trojan by @soloplanet | Stardance
Devlogs:
Remote Access Trojan
Shellcode loader
Ships:
I made a RAT and experimented with shellcode loading. Things I found hard were obfuscating the app, learning how to use indirect syscalls and trying to evade detection. I am proud of getting my best attempt (tar2.0) at best to evade 4/71 detections which were primarily high positive ML engines and Crowdstrike (only 60% confidence) (this eventually increased to 9/71 due to signatures)....
|
1793148501.7879965
|
1793234901.7879965
|
|
4470
|
Edge-AI Home Monitoring System by @Greg_ios | Star Edge-AI Home Monitoring System by @Greg_ios | Stardance...
|
Greg_ios
|
3
|
38.0
|
612
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T08:49:56Z", "hours": 18.0, "multiplier": 17.56, "payout": 308, "blessing": "neutral", "text": "Most smart homes are leased, not owned. Every command you send travels to a cloud you don’t control, owned by a company with interests misaligned to yours. This system proves that meaningful control of your physical space doesn’t require surrendering it to a vendor. Edge-AI Home Monitoring is a locally-governed, vendor-independent home automation platform designed to answer: can a household be sovereign over its own infrastructure?", "repo": "https://github.com/travletothefurureprogramming/Edge-AI-Home-Monitoring-System", "demo": "https://edgeaihomemonitoringsystem.carrd.co/"}, {"ship_num": 2, "ts": "2026-06-30T20:49:56Z", "hours": 11.0, "multiplier": 16.61, "payout": 175, "blessing": "neutral", "text": "Over the past few weeks, Edge-AI Home Monitoring System has evolved from a basic smart home controller into a much more capable home automation platform. New Features Added YOLO-based security monitoring Integrated Telegram bot for remote alerts and device control Added support for Tapo Smart Bulbs Added support for Tapo Smart Plugs Added support for Philips Hue devices Added support for Yeelight devices Added support for LG Smart TVs Added Remote PC Control & Monitoring Infrastructure Improvements Built a full Flask server backend Added a responsive Web Dashboard Improved setup process with automated setup scripts Reworked documentation and README Reliability Improvements Refactored multiple modules with structured exception handling Added better logging and debugging tools Improved API responses and backend stability Enhanced scalability for future device integrations The project is now much closer to becoming a complete privacy-first edge AI smart home hub capable of controlling multiple device ecosystems from a single interface.", "repo": "https://github.com/travletothefurureprogramming/Edge-AI-Home-Monitoring-System", "demo": "https://edgeaihomemonitoringsystem.carrd.co/"}, {"ship_num": 3, "ts": "2026-06-03T14:57:54Z", "hours": 9.0, "multiplier": 15.16, "payout": 129, "blessing": "neutral", "text": "I have made an Edge-AI Home Monitoring System. It is a privacy-first, edge-AI home automation hub using Linux, Flask, and real-time control to orchestrate smart devices.", "repo": "https://github.com/travletothefurureprogramming/Edge-AI-Home-Monitoring-System", "demo": "https://edgeaihomemonitoringsystem.carrd.co/"}]...
|
[{"post_id": 30918, "ts": "202 [{"post_id": 30918, "ts": "2026-07-18T22:06:31Z", "hours": 2.7133, "text": "🧪 Reliability & CI Improvements This update also focuses on improving the project’s reliability and development workflow. What’s New Added 20 Pytest test cases covering the core functionality of the system, helping verify that critical components behave correctly and reducing the risk of regressions. Configured GitHub Actions to automatically execute the entire test suite after every commit and pull request, ensuring new changes don’t break existing functionality. Why It Matters Automated testing and Continuous Integration (CI) make the project more robust, maintainable, and production-ready. Every code change is now automatically validated before it becomes part of the project, providing faster feedback during development and increasing confidence in future updates."}, {"post_id": 29426, "ts": "2026-07-16T11:26:44Z", "hours": 2.9903, "text": "🐳 Docker Setup: 100% Functional Docker support for the Edge-AI Home Monitoring System is now fully working end-to-end. What’s New First-Run Setup via HTML : Instead of manual configuration steps, the very first launch now opens a lightweight HTML setup page that walks through the initial configuration once (credentials, device registration basics, etc.). After this one-time run, it’s never needed again — the container remembers everything through the persisted config volumes. One Command to Rule Them All : The whole system — Flask backend, Docker container, and now the first-run setup — is launched with a single script: Windows: start.bat Linux: start.sh No more manually running docker compose , checking dependencies, or following multi-step instructions. Just run the script for your OS and the entire stack comes up ready to use. Why It Matters This closes the loop on the Docker migration from a few devlogs ago. Before, Docker removed the Python/venv/dependency headaches but still required knowing the right compose commands. Now the onboarding experience is genuinely “clone → run one script → done,” with the HTML first-run page handling the last bit of manual setup that used to require touching config files by hand."}, {"post_id": 27850, "ts": "2026-07-13T18:59:41Z", "hours": 1.8536, "text": "🚀 One of the Biggest Updates: Docker-Based Setup & Minimal Installation The Edge-AI Home Monitoring System has just received its most significant infrastructure overhaul yet! We have completely re-engineered the deployment workflow. Instead of dealing with manual environment configurations, matching Python versions, and tracking down dependency conflicts, the entire ecosystem can now be spun up instantly with a single command. 🐳 What’s New: Containerized Architecture By migrating the platform to a fully containerized backend , we’ve moved away from fragile local setups closer to a production-grade deployment. Key Improvements: Isolated Environment: The Flask backend and all its core libraries run inside an isolated Docker container, completely immune to host-system configuration drifts. Automated Dependency Management: All heavy-lifting dependencies are resolved and cached automatically inside the image. State & Configuration Persistence: Your custom devices_config.json , automation rules, and local database models are securely mapped via Docker volumes, meaning they persist perfectly across container restarts and updates. High Portability: Moving the hub from a development PC to a dedicated home server (like a Fedora Linux box or a Raspberry Pi) is now completely seamless. ⚡ Setup: Before vs. After The difference in onboarding friction is night and day. Look at how the installation footprint has shrunk: Old Manual Setup New Docker Workflow ❌ Install Python manually & match versions 📦 Pre-configured runtime environment ❌ Create virtual environments ( venv ) 📦 Isolated container filesystems ❌ Debug pip dependency conflicts 📦 One-time automated image build ❌ Manually set environment variables 📦 Declarative configuration via Compose ❌ Run background scripts step-by-step 📦 Single-command multi-service launch The New Minimal Installation Path: Now, launching your privacy-first smart home hub requires nothing more than standard container tools: # Clone the repository git clone https://github.com/travletothefurureprogramming/Edge-AI-Home-Monitoring-System # Navigate to the project root cd Edge-AI-Home-Monitoring-System # Spin up the entire system in detached mode docker compose up -d"}, {"post_id": 27230, "ts": "2026-07-12T16:46:07Z", "hours": 0.7819, "text": "UI Modernization & Native Sonos Integration 🎵🎨 A massive structural and visual update has landed! The Edge-AI Home Monitoring System dashboard has been rewritten into a production-grade, single-page interface using the modern Inter typeface family. Alongside this visual overhaul, we are introducing native, local-only support for Sonos Smart Audio Devices . What’s New 1. High-End Minimalist UI & CSS Token Architecture The new interface shifts away from crowded layouts to a highly scannable, component-driven architecture featuring a strict color and spacing utility system built directly into :root . Unified Palette System: Built entirely on minimal token foundations: light-mode canvas backgrounds ( #fafafa ), precise surface modules ( #ffffff ), and structural crisp border outlines ( #e7e7e7 / #d9d9d9 ). Blur-Effects Navigation Header ( .topbar ): A sticky system header utilizing backdrop-filter: blur(8px) that embeds the new brand mark ( A Home ) alongside a live status strip displaying the total device count, registered automations, and an immediate visual green heartbeat indicator ( .live-dot ). Decoupled Grid Control ( .grid ): Devices are rendered dynamically using a responsive auto-fill layout ( minmax(240px, 1fr) ) with explicit styling classes for device actions ( .btn.on for soft green feedback, .btn.off for soft red, and .btn.accent for special triggers). Asynchronous AI Assistant Component ( .ai-panel ): A dedicated section housing the local LLM interaction logic, optimized with a smooth CSS-animated text typing loop ( @keyframes dotfade ) to indicate processing states without blocking UI interactions. 2. Native Sonos Smart Audio Core Integration Audio control joins our local device tree. The system now natively communicates with Sonos devices over the local network via unified backend hooks, matching our privacy-first design patterns. The control grid maps the specific target API endpoints directly to native UI inputs, enabling immediate transmission of core execution parameters: play — Resumes audio streaming ( .btn.on ) pause — Pauses current media layout tracking stop — Breaks audio buffering completely ( .btn.off ) volume_up & volume_down — Alters hardware volume steps Real-Time “Now Playing” UI Subview Sonos control cards now dynamically build and inject an interactive media HUD element ( .now-playing ). Dynamic Media Binding: Communicates with the new /api/music/current endpoint via explicit POST JSON payloads ( { room, type, number, command: 'get', device } ). Visual Playback Flags: Implements dynamic active toggles ( .now-playing.playing ) that shift asset opacity states depending on network audio feedback. Non-Blocking Control Pulls: The inline manual update button ( .np-refresh ) relies on an isolated asynchronous CSS loop wrapper ( @keyframes spin ) allowing updates without triggering full dashboard asset re-renders."}, {"post_id": 27152, "ts": "2026-07-12T13:36:12Z", "hours": 0.6378, "text": "Samsung Smart TV Support Added 📺 The Edge-AI Home Monitoring System now includes full support for Samsung Smart TVs running Tizen OS, expanding the platform’s smart device ecosystem with another major TV manufacturer. This integration uses the Samsung TV WebSocket API, allowing the system to communicate directly with compatible TVs over the local network without requiring additional hardware such as IR blasters. What’s New Added a new Samsung TV backend integration using the samsungtvws Python library. Implemented support for: Power control (ON/OFF) Remote key commands Volume control Device information retrieval Samsung TVs are now registered as a native device type inside the system, following the same architecture used by other integrations such as LG WebOS, Daikin, Tapo, Hue, Yeelight, Shelly, and Broadlink. Why It Matters Until now, TV support was mainly focused on LG Smart TVs and IR-controlled televisions through Broadlink. With Samsung Smart TV support, the system can now directly control another major smart TV ecosystem using its official network interface. This improves: Response time compared to IR control Local-only communication (no cloud dependency) Compatibility with more homes Technical Details The integration communicates with Samsung TVs through: Samsung Tizen WebSocket API Local network TCP communication Device authentication pairing The system keeps the same device abstraction model used by the rest of the project, making Samsung TVs behave like any other controllable smart device. Challenges Some challenges during implementation: Handling Samsung’s first-time pairing approval system Managing WebSocket connections reliably Ensuring compatibility between different Tizen TV models Mapping Samsung remote key codes into the existing device command structure Next Steps Future improvements: Add automatic Samsung TV discovery Add real-time TV status feedback (power state, current app, volume) Add voice assistant commands for Samsung TVs - Add more controls Samsung Smart TVs are now another fully supported platform in the Edge-AI Home Monitoring System, bringing the project closer to becoming a complete privacy-first smart home hub."}, {"post_id": 26718, "ts": "2026-07-11T17:52:05Z", "hours": 0.8892, "text": "Full Broadlink Universal Remote Support The Edge-AI Home Monitoring System now includes complete support for Broadlink Universal Remotes , allowing the platform not only to learn IR commands but also to transmit them directly to infrared-controlled devices. What’s New Added a dedicated Broadlink backend integration for sending stored IR commands. Implemented a new /api/broadlink endpoint for controlling Broadlink devices from the dashboard and automation engine. Added a Broadlink device class responsible for: Connecting and authenticating with Broadlink RM-series devices. Reading learned IR codes from broadlink_codes.json . Sending IR packets using device.send_data() . Full support for controlling: TVs Air Conditioners TV Decoders / Set-Top Boxes Broadlink devices are now treated like any other supported smart device and can be used throughout the entire system. Why It Matters This is a major milestone because the system is no longer limited to devices with official APIs. Thousands of legacy appliances—including older televisions, air conditioners, and cable/satellite decoders—can now be integrated into the smart home ecosystem using only their existing infrared remote controls. Users can control these devices from: The Web Dashboard Automation Rules Future Voice Assistant integrations Any API client connected to the system This significantly expands compatibility while maintaining the project’s privacy-first, local-control philosophy. Challenges IR packets must be converted back into raw byte format before transmission. Maintaining synchronization between learned codes and registered Broadlink devices remains important as the number of supported devices grows. Multiple Broadlink hubs on the same network still require a device selection mechanism, which will be addressed in a future update. Next Steps Add automatic Broadlink hub discovery and selection. Integrate Broadlink commands into the Rule Engine as event triggers. Add support for macro commands (multiple IR signals with delays). Improve the dashboard with command management and testing tools."}, {"post_id": 26187, "ts": "2026-07-10T20:47:59Z", "hours": 1.8417, "text": "Broadlink IR Learning App + Voice Guidance in Setup The Edge-AI Home Monitoring System now has its own tool for learning IR signals, as well as voice guidance throughout the setup process. What’s Added Broadlink IR Learning App New desktop application (customtkinter) that connects to a Broadlink device (RM-series) via broadlink.discover() and authenticates automatically. Device type selection (TV / AC / Decoder) with dynamic list of commands depending on the type (on/off, channel up/down, volume, direction, menu, etc.). “Learn & Save” function: Broadlink enters learning mode, waits for the signal from the real remote control and saves the hex packet. The signals are stored in two places: broadlink_codes.json — file-library of all codes per room/device/command. devices_config.json — so that the device is automatically registered as an entry in the system’s main config, with flag is_broadlink_device: true . Voice Guidance in Setup Wizard Added text-to-speech (via pyttsx4 , in a separate thread so as not to block the UI) to each step of the setup wizard: installing dependencies, downloading AI model, creating password, setting Tailscale, Telegram token/chat ID, and registering devices. Each device type during registration (Tapo, Philips Hue, Shelly, Broadlink, etc.) now “explains” vocally which fields need to be filled in, making the process more accessible for someone who is setting up the system for the first time without reading documentation. Also added broadlink as a new device type in the setup wizard dropdown, which opens the Learning App directly when selected. Why It Matters Until now, the system only supported devices with official APIs (Tapo, Hue, Yeelight, LG WebOS, Daikin). Many “dumb” devices at home (old ACs, decoders, TVs without smart features) are controlled only via IR remote — the Broadlink learning app paves the way to integrate virtually any device with an IR remote into the ecosystem, without the need for a special library per brand. Voice guidance also makes setup more accessible — less need to read README step by step, the system tells you what to do live. Challenges async_connect of the Kasa class has incorrect syntax ( await self.device = ... instead of self.device = await ... ) — same problem as previous devlog, still pending. In the Learning App, the device data is temporarily stored in two separate files ( broadlink_codes.json and devices_config.json ) — care must be taken to ensure that they do not become out of sync if a write fails in the middle. The Broadlink device is always identified as devices[0] by broadlink.discover() — if there are multiple Broadlink devices on the network, the app will always connect to the first one found, without selection. TTS requires CoInitialize / CoUninitialize on each thread (Windows-specific), which makes the code less portable to other OSes. Next Steps Full support for sending signals via Broadlink devices (not just learning) — i.e. new /api/broadlink endpoint and Broadlink class in the backend that will read the stored hex codes from broadlink_codes.json and send them via device.send_data() . Integrate Broadlink devices as actions in the Rule Engine, so they can be used in automations like any other device. Wiring emit_device_event to Broadlink sends, so they can also be trigger sources. Fix bug in Kasa.async_connect before any other work on Kasa progresses."}, {"post_id": 25929, "ts": "2026-07-10T12:59:31Z", "hours": 0.6778, "text": "Kasa (TP-Link) Support Added The Edge-AI Home Monitoring System now supports TP-Link Kasa smart plugs/switches, using the python-kasa library’s async Discover API for device communication. What’s New New Kasa class that discovers a device by IP via Discover.discover_single() (with optional username/password for cloud-authenticated devices) and wraps turn_on / turn_off / execute_command behind the same asyncio.run() pattern already used for Daikin and the Tapo devices. New /api/kasa endpoint, gated behind @auth.login_required like the rest of the device APIs. Registered kasa in DEVICE_ENDPOINTS and wired it into create_device_action , so Kasa devices can already be used as automation actions from day one. Added send_kasa and send_daikin helper functions alongside the other device senders, for consistency across the codebase. Why This Matters Kasa is one of the most common smart plug ecosystems out there, so this adds another affordable device family to the system without needing a proprietary hub — anything plugged into a Kasa switch can now be turned on/off from the dashboard or from an automation rule, the same way Tapo and Shelly devices already are. Challenges Ran into a syntax issue in async_connect : await self.device = Discover.discover_single(...) isn’t valid — assignment has to come first, i.e. self.device = await Discover.discover_single(...) . Needs fixing before this can actually run. handle_kasa currently points at a config path ( /config/device_config.json ) that doesn’t match the filename ( devices_config.json ) or the relative-path convention used by every other handler — needs to be corrected to \"config/devices_config.json\" . Same route also references data[\"Room\"][room][dev_type][number][ip] with ip unquoted (a variable reference instead of the string key \"ip\" ), which will throw a NameError rather than the intended KeyError . emit_device_event still isn’t wired into the Kasa (or Shelly) handler, so — same as the other non-TV devices — Kasa state changes can’t yet act as automation triggers. Next Steps Fix the await /assignment order bug in Kasa.async_connect , the config path, and the unquoted \"ip\" key in /api/kasa before testing against a real device. Wire emit_device_event into Kasa, Shelly, and the remaining handlers so any device can act as both an action and a trigger. Once event emission is consistent across all device types, move on to energy monitoring for the Tapo smart plugs."}, {"post_id": 25885, "ts": "2026-07-10T11:31:06Z", "hours": 0.695, "text": "Shelly Support Added The Edge-AI Home Monitoring System now supports Shelly smart relays, using the ShellyPy library to control relay-based devices (plugs, switches, etc.) over the local network. What’s New New Shelly class wrapping ShellyPy.Shelly , with turn_on_relay / turn_off_relay methods and an execute_command dispatcher for on / off commands. New /api/shelly endpoint that reads the device’s IP and relay_number from devices_config.json and forwards the command to the relay. Registered shelly in DEVICE_ENDPOINTS and wired it into create_device_action , so Shelly devices can already be used as automation actions (schedule or event triggered), same as every other device type. Why This Matters Shelly relays are a common, cheap way to add “dumb” appliances into the automation system — a fan, a boiler, anything behind a relay can now be toggled from the dashboard or from a rule, without needing a dedicated smart-device ecosystem. Challenges Noticed /api/shelly is currently missing the @auth.login_required decorator that every other device endpoint has — since authentication was added, this is the one route that slipped through. Needs to be fixed before this ships anywhere network-exposed. Shelly relays are addressed by relay_number rather than an id /model like the other integrations, so the config schema needed a small variation ( relay_number field) instead of reusing the existing device pattern exactly. emit_device_event isn’t wired into the Shelly handler yet, so — like the other non-TV devices — a Shelly state change can’t currently act as a trigger for other automations. Next Steps Add the missing @auth.login_required to /api/shelly . Wire emit_device_event into the Shelly (and remaining) handlers so any device can be both an action and a trigger source. Once event emission is consistent across all device types, move on to energy monitoring for the Tapo smart plugs."}, {"post_id": 25861, "ts": "2026-07-10T10:45:47Z", "hours": 0.7478, "text": "Device-Triggered Chaining: Automations Now React to Device State Changes The Rule Engine already supported schedule triggers and one hardcoded event source (the YOLO “person_detected” signal). This update adds a much more general capability: automations can now trigger off of any device state change , not just security events. What’s New Added emit_device_event(room, dev_type, command), a helper that builds an event name in the form {room} {dev_type} {command} (e.g. living_room_lg_tv_on) and forwards it to AutomationManager.trigger_event. Wired this into the /api/tv endpoint: every time a TV command succeeds, the system now emits an event describing exactly what just happened. This means a rule can be created like “when the Living Room TV turns on → turn on the Living Room lights” without any new trigger type — it reuses the same event-rule machinery already built for the security pipeline. Event names are deterministic and human-readable, so building new automations from the dashboard just means picking the right device + command combo as the trigger. Why This Matters Until now, “smart” behavior meant either a fixed schedule or a single special-cased sensor event. This generalizes the pattern: any device action can become a trigger for any other device action, which is the actual foundation of “automation chaining” (TV on → lights on, plug on → AC on, etc.) rather than a one-off integration. Challenges emit_device_event is currently only called from the TV handler. The Tapo, Philips Hue, Yeelight, and Daikin handlers don’t emit events yet, so right now only TV state changes can kick off a chain — everything else is still a dead end as a trigger source. This is the next thing to close. Needed to be careful that emitting the event happens after the command actually succeeds, not just after it’s requested, so a failed TV command doesn’t fire a chain based on a state change that never happened. Next Steps Add emit_device_event calls to the remaining device handlers (Tapo light/LED strip, Hue, Yeelight, Daikin) so any device can act as a trigger, not just TVs. Once persistence for automation actions is fully solid across restarts, move on to energy monitoring for the Tapo smart plugs."}, {"post_id": 23760, "ts": "2026-07-06T21:49:22Z", "hours": 0.7892, "text": "Automations are Live: Schedules & Event Triggers The Rule Engine I mentioned as “next steps” in the last few devlogs is now fully working. The Edge-AI Home Monitoring System can now react on its own, without me touching the dashboard. What’s New New AutomationManager class that manages rules independently of the Flask request lifecycle, running on its own background thread Schedule triggers : fire any device action at a specific time of day (cron-based under the hood, e.g. “turn off all lights at 23:30”) Event triggers : fire actions the moment something happens in the system — currently wired up to the YOLO security pipeline, so a rule can say “when a person is detected, turn on the living room lights” Automations are managed straight from the dashboard: add a rule (pick a device, a command, and either a time or an event), see the active list, delete on demand — no need to touch the config files by hand Rules persist to disk, so they survive a server restart Challenges The trickiest part wasn’t the scheduling logic itself — it was making sure automation actions don’t accidentally go through the same path as normal API requests. Since every device endpoint is gated behind session-based login, having the automation thread call itself over HTTP triggered 401s (a background thread has no browser session, obviously). Fixed by having automation actions call the device classes directly instead of looping back through HTTP — cleaner and faster anyway, since it skips a full request round-trip for something that’s technically internal. Next Steps Energy monitoring for the Tapo smart plugs, so automations can eventually be built around actual consumption data too."}, {"post_id": 23432, "ts": "2026-07-06T12:12:20Z", "hours": 0.7306, "text": "Create Autoation Manager class"}, {"post_id": 23410, "ts": "2026-07-06T10:52:32Z", "hours": 0.8403, "text": "Added Daikin AC Support The Edge-AI Home Monitoring System now extends into climate control. I’ve added full support for Daikin air conditioners, using the pydaikin library for asynchronous communication with the device over the network. What’s New New DaikinAC class with full control: on/off, increase/decrease temperature, and mode switching (auto, cool, heat, dry, fan) New /api/daikin endpoint for device communication Integrated into the same authentication pattern used across the whole system ( @auth.login_required ), so no new device ecosystem opens a security gap Dashboard controls for Daikin devices, including a mode selection dropdown Challenges Since pydaikin is fully asynchronous (async context managers), each client call had to be wrapped with asyncio.run() to fit into the rest of the synchronous Flask backend — the same approach used for the Tapo devices. Next Steps Rule Engine / Automations system, followed by energy monitoring for the Tapo smart plugs."}, {"post_id": 23380, "ts": "2026-07-06T09:40:25Z", "hours": 0.3508, "text": "Improving the Project Structure One of the biggest challenges in the project was the lack of organization. As the codebase grew, it became harder to navigate and maintain. Today I reorganized the project into a much cleaner structure, making the code easier to understand, extend, and maintain. While there’s still room for improvement, this is a solid step toward a more scalable architecture. What’s Next? Add automation features. Implement energy consumption monitoring for Tapo devices."}, {"post_id": 23116, "ts": "2026-07-05T21:29:56Z", "hours": 0.9906, "text": "Added Authentication System Up until now, the dashboard and all API endpoints were completely open to anyone on the network — a serious problem for a system that controls cameras, smart devices, and even has Remote PC Control capabilities. I implemented a single-admin authentication layer using Flask sessions and password hashing (werkzeug), gating access behind a login page. Key changes: Added a /login route with session-based authentication Passwords are hashed (never stored in plain text) using pbkdf2:sha256 Wrapped every sensitive route with a @login_required decorator — dashboard, device control APIs, camera toggle, and system/remote-PC endpoints API routes return a clean 401 Unauthorized instead of redirecting, so the frontend can handle it gracefully Sessions auto-expire, requiring re-login after a set period This closes the biggest security gap in the project — previously, anyone with access to the local network or Tailscale IP could control devices or the PC without any barrier. Now, all of that is locked behind credentials only I know. Next steps: Rule engine for automations (trigger-based actions), followed by energy monitoring for Tapo smart plugs."}, {"post_id": 15904, "ts": "2026-06-25T21:00:48Z", "hours": 1.1647, "text": "One of the biggest improvements in this update is the error handling system. Originally, the project had very minimal error management, which could lead to unstable behavior and unclear debugging. I refactored multiple modules to introduce structured exception handling, improved logging, and more consistent API responses. This makes the system significantly more stable and easier to debug in real-world usage."}, {"post_id": 15616, "ts": "2026-06-25T12:18:35Z", "hours": 0.5661, "text": "Integration of Remote PC Control & Monitoring into Edge-AI Home Monitoring System. This way the user can control the system remotely. There is a problem with the management of Processes due to an error in the backend."}, {"post_id": 7988, "ts": "2026-06-13T10:14:41Z", "hours": 0.3117, "text": "I added support for Yeelight. It may have only taken me 15 minutes but that was because the Yeelight library I used was very simple. Also because the system is easily extensible I managed to do it in a very short time."}, {"post_id": 7979, "ts": "2026-06-13T09:46:03Z", "hours": 0.7483, "text": "Add fully suppourt for phue devices"}, {"post_id": 7959, "ts": "2026-06-13T08:58:51Z", "hours": 0.2869, "text": "Make the main class and logic for the Philips Hue lights"}, {"post_id": 4423, "ts": "2026-06-07T19:02:12Z", "hours": 0.5789, "text": "Add suppourt for Tapo Smart Plugs"}, {"post_id": 2743, "ts": "2026-06-05T14:46:14Z", "hours": 0.3408, "text": "Add model selection for tapo led strip and tapo light bulbs and make a more clear README.md"}, {"post_id": 2730, "ts": "2026-06-05T14:17:19Z", "hours": 0.6944, "text": "Setup the server! The project will be fully ready soon!!!"}, {"post_id": 2703, "ts": "2026-06-05T12:30:07Z", "hours": 0.5861, "text": "A better setup and run for servers and a more clear README.md"}, {"post_id": 2689, "ts": "2026-06-05T11:33:31Z", "hours": 1.47, "text": "Make a functional server App"}, {"post_id": 2100, "ts": "2026-06-04T13:04:12Z", "hours": 0.7119, "text": "LG TVs in Edge AI Home Monitoring System from now!!!!!!"}, {"post_id": 2071, "ts": "2026-06-04T11:56:50Z", "hours": 0.5139, "text": "Working on LG TV suppourt"}, {"post_id": 2060, "ts": "2026-06-04T11:23:24Z", "hours": 1.1203, "text": "From now Edge-AI Home Monitoring System suppourt tapo smart bulbs!!!!"}, {"post_id": 1538, "ts": "2026-06-03T16:50:58Z", "hours": 0.5186, "text": "Make a telegram bot for easily security and device control"}, {"post_id": 1509, "ts": "2026-06-03T16:05:24Z", "hours": 0.9681, "text": "Making a sequrity system using YOLO and Telegram"}, {"post_id": 1467, "ts": "2026-06-03T14:56:45Z", "hours": 0.5039, "text": "Make a better README.md file and finalize the setup proccess"}, {"post_id": 1426, "ts": "2026-06-03T13:37:14Z", "hours": 0.7961, "text": "Make better readme"}, {"post_id": 1394, "ts": "2026-06-03T12:31:57Z", "hours": 1.1769, "text": "Make a setup script"}, {"post_id": 1370, "ts": "2026-06-03T11:15:13Z", "hours": 1.5264, "text": "Make an app for easy use of AI and also ad functional control for the L900 tapo ledstrip"}, {"post_id": 1343, "ts": "2026-06-03T09:16:06Z", "hours": 1.48, "text": "A new modern dashboard and more devices"}, {"post_id": 757, "ts": "2026-06-02T12:08:30Z", "hours": 1.3436, "text": "Performance Optimization & Frontend Integration After intensive testing, the communication system with Android TV devices has been fully upgraded. The latency observed in command execution has been eliminated, and the project now features its own Web Dashboard. Key Achievements: ADB Server Persistence: Resolved the critical issue regarding the continuous restart of the ADB server. By adopting the Registry Pattern, connections are now maintained (persistent), drastically reducing response time from 5+ seconds to near-zero (real-time). Scalability: The backend has been developed to support the simultaneous control of multiple Android TVs. The system now dynamically manages connections via a central dictionary, allowing for the addition of unlimited devices through devices.json. Frontend Dashboard: Developed a minimal and responsive interface (HTML/JS) that provides full device control. Communication with the server is now handled via the Fetch API with proper CORS and JSON payload handling. Robust Error Handling: Upgraded the error reporting mechanism. The server now actively monitors module status and allows for automatic reset in case of connection restoration. Next Steps: Integration of real-time status feedback to monitor whether a TV is ON/OFF directly on the dashboard. Further optimization of utils.py for more secure inter-module communication."}, {"post_id": 723, "ts": "2026-06-02T09:50:03Z", "hours": 1.6753, "text": "Establishing the Backend Infrastructure for Edge AI Home Monitoring System Today, I successfully built the core communication layer for my Edge AI Home Monitoring System. I focused on creating a robust backend using Flask, enabling the system to act as a central hub for my home devices. Key Achievements: API Orchestration: Developed Flask endpoints (/api/light and /api/tv) to handle state management and device control requests efficiently. Hardware Integration: Implemented an abstraction layer for AndroidTV control, allowing the server to issue commands like power toggles, volume adjustment, and channel navigation over the network. Dynamic Configuration: Built a utility module to handle JSON-based device mapping, ensuring the system can scale easily by reading device IPs and types from a central devices.json configuration file. Logging System: Integrated a custom logger to monitor command execution in real-time, which is essential for debugging my edge-computing setup. Next Steps: Now that the server is successfully running and handling commands, the next phase is to add more devices and create the frontend dashboard."}]...
|
Title: Edge-AI Home Monitoring System by @Greg_ios Title: Edge-AI Home Monitoring System by @Greg_ios | Stardance
Devlogs:
Establishing the Backend Infrastructure for Edge AI Home Monitoring System Today, I successfully built the core communication layer for my Edge AI Home Monitoring System. I focused on creating a robust backend using Flask, enabling the system to act as a central hub for my home devices. Key Achievements: API Orchestration: Developed Flask endpoints (/api/light and /api/tv) to handle state management and device control requests efficiently. Hardware Integration: Implemented an abstraction layer for AndroidTV control, allowing the server to issue commands like power toggles, volume adjustment, and channel navigation over the network. Dynamic Configuration: Built a utility module to handle JSON-based device mapping, ensuring the system can scale easily by reading device IPs and types from a central devices.json configuration file. Logging System: Integrated a custom logger to monitor command execution in real-time, which is essential for debugging my edge-computing setup. Next Steps: Now that the server is successfully running and handling commands, the next phase is to add more devices and create the frontend dashboard.
Performance Optimization & Frontend Integration After intensive testing, the communication system with Android TV devices has been fully upgraded. The latency observed in command execution has been eliminated, and the project now features its own Web Dashboard. Key Achievements: ADB Server Persistence: Resolved the critical issue regarding the continuous restart of the ADB server. By adopting the Registry Pattern, connections are now maintained (persistent), drastically reducing response time from 5+ seconds to near-zero (real-time). Scalability: The backend has been developed to support the simultaneous control of multiple Android TVs. The system now dynamically manages connections via a central dictionary, allowing for the addition of unlimited devices through devices.json. Frontend Dashboard: Developed a minimal and responsive interface (HTML/JS) that provides full device control. Communication with the server is now handled via the Fetch API with proper CORS and JSON payload handling. Robust Error Handling: Upgraded the error reporting mechanism. The server now actively monitors module status and allows for automatic reset in case of connection restoration. Next Steps: Integration of real-time status feedback to monitor whether a TV is ON/OFF directly on the dashboard. Further optimization of utils.py for more secure inter-module communication.
A new modern dashboard and more devices
Make an app for easy use of AI and also ad functional control for the L900 tapo ledstrip
Make a setup script
Make better readme
Make a better README.md file and finalize the setup proccess
Making a sequrity system using YOLO and Telegram
Make a telegram bot for easily security and device control
From now Edge-AI Home Monitoring System suppourt tapo smart bulbs!!!!
Working on LG TV suppourt
LG TVs in Edge AI Home Monitoring System from now!!!!!!
Make a functional server App
A better setup and run for servers and a more clear README.md
Setup the server! The project will be fully ready soon!!!
Add model selection for tapo led strip and tapo light bulbs and make a more clear README.md
Add suppourt for Tapo Smart Plugs
Make the main class and logic for the Philips Hue lights
Add fully suppourt for phue devices
I added support for Yeelight. It may have only taken me 15 minutes but that was because the Yeelight library I used was very simple. Also because the system is easily extensible I managed to do it in a very short time.
Integration of Remote PC Control & Monitoring into Edge-AI Home Monitoring System. This way the user can control the system remotely. There is a problem with the management of Processes due to an error in the backend.
One of the biggest improvements in this update is the error handling system. Originally, the project had very minimal error management, which could lead to unstable behavior and unclear debugging. I refactored multiple modules to introduce structured exception handling, improved logging, and more consistent API responses. This makes the system significantly more stable and easier to debug in real-world usage.
Added Authentication System Up until now, the dashboard and all API endpoints were completely open to anyone on the network — a serious problem for a system that controls cameras, smart devices, and even has Remote PC Control capabilities. I implemented a single-admin authentication layer using Flask sessions and password hashing (werkzeug), gating access behind a login page. Key changes: Added a /login route with session-based authentication Passwords are hashed (never stored in plain text) using pbkdf2:sha256 Wrapped every sensitive route with a @login_required decorator — dashboard, device control APIs, camera toggle, and system/remote-PC endpoints API routes return a clean 401 Unauthorized instead of redirecting, so the frontend can handle it gracefully Sessions auto-expire, requiring re-login after a set period This closes the biggest security gap in the project — previously, anyone with access to the local network or Tailscale IP could control devices or the PC without any barrier. Now, all of that is locked behind credentials only I know. Next steps: Rule engine for automations (trigger-based actions), followed by energy monitoring for Tapo smart plugs.
Improving the Project Structure One of the biggest challenges in the project was the lack of organization. As the codebase grew, it became harder to navigate and maintain. Today I reorganized the project into a much cleaner structure, making the code easier to understand, extend, and maintain. While there’s still room for improvement, this is a solid step toward a more scalable architecture. What’s Next? Add automation features. Implement energy consumption monitoring for Tapo devices.
Added Daikin AC Support The Edge-AI Home Monitoring System now extends into climate control. I’ve added full support for Daikin air conditioners, using the pydaikin library for asynchronous communication with the device over the network. What’s New New DaikinAC class with full control: on/off, increase/decrease temperature, and mode switching (auto, cool, heat, dry, fan) New /api/daikin endpoint for device communication Integrated into the same authentication pattern used across the whole system ( @auth.login_required ), so no new device ecosystem opens a security gap Dashboard controls for Daikin devices, including a mode selection dropdown Challenges Since pydaikin is fully asynchronous (async context managers), each client call had to be wrapped with asyncio.run() to fit into the rest of the synchronous Flask backend — the same approach used for the Tapo devices. Next Steps Rule Engine / Automations system, followed by energy monitoring for the Tapo smart plugs.
Create Autoation Manager class
Automations are Live: Schedules & Event Triggers The Rule Engine I mentioned as “next steps” in the last few devlogs is now fully working. The Edge-AI Home Monitoring System can now react on its own, without me touching the dashboard. What’s New New AutomationManager class that manages rules independently of the Flask request lifecycle, running on its own background thread Schedule triggers : fire any device action at a specific time of day (cron-based under the hood, e.g. “turn off all lights at 23:30”) Event triggers : fire actions the moment something happens in the system — currently wired up to the YOLO security pipeline, so a rule can say “when a person is detected, turn on the living room lights” Automations are managed straight from the dashboard: add a rule (pick a device, a command, and either a time or an event), see the active list, delete on demand — no need to touch the config files by hand Rules persist to disk, so they survive a server restart Challenges The trickiest part wasn’t the scheduling logic itself — it was making sure automation actions don’t accidentally go through the same path as normal API requests. Since every device endpoint is gated behind session-based login, having the automation thread call itself over HTTP triggered 401s (a background thread has no browser session, obviously). Fixed by having automation actions call the device classes directly instead of looping back through HTTP — cleaner and faster anyway, since it skips a full request round-trip for something that’s technically internal. Next Steps Energy monitoring for the Tapo smart plugs, so automations can eventually be built around actual consumption data too.
Device-Triggered Chaining: Automations Now React to Device State Changes The Rule Engine already supported schedule triggers and one hardcoded event source (the YOLO “person_detected” signal). This update adds a much more general capability: automations can now trigger off of any device state change , not just security events. What’s New Added emit_device_event(room, dev_type, command), a helper that builds an event name in the form {room} {dev_type} {command} (e.g. living_room_lg_tv_on) and forwards it to AutomationManager.trigger_event. Wired this into the /api/tv endpoint: every time a TV command succeeds, the system now emits an event describing exactly what just happened. This means a rule can be created like “when the Living Room TV turns on → turn on the Living Room lights” without any new trigger type — it reuses the same event-rule machinery already built for the security pipeline. Event names are deterministic and human-readable, so building new automations from the dashboard just means picking the right device + command combo as the trigger. Why This Matters Until now, “smart” behavior meant either a fixed schedule or a single special-cased sensor event. This generalizes the pattern: any device action can become a trigger for any other device action, which is the actual foundation of “automation chaining” (TV on → lights on, plug on → AC on, etc.) rather than a one-off integration. Challenges emit_device_event is currently only called from the TV handler. The Tapo, Philips Hue, Yeelight, and Daikin handlers don’t emit events yet, so right now only TV state changes can kick off a chain — everything else is still a dead end as a trigger source. This is the next thing to close. Needed to be careful that emitting the event happens after the command actually succeeds, not just after it’s requested, so a failed TV command doesn’t fire a chain based on a state change that never happened. Next Steps Add emit_device_event calls to the remaining device handlers (Tapo light/LED strip, Hue, Yeelight, Daikin) so any device can act as a trigger, not just TVs. Once persistence for automation actions is fully solid across restarts, move on to energy monitoring for the Tapo smart plugs.
Shelly Support Added The Edge-AI Home Monitoring System now supports Shelly smart relays, using the ShellyPy library to control relay-based devices (plugs, switches, etc.) over the local network. What’s New New Shelly class wrapping ShellyPy.Shelly , with turn_on_relay / turn_off_relay methods and an execute_command dispatcher for on / off commands. New /api/shelly endpoint that reads the device’s IP and relay_number from devices_config.json and forwards the command to the relay. Registered shelly in DEVICE_ENDPOINTS and wired it into create_device_action , so Shelly devices can already be used as automation actions (schedule or event triggered), same as every other device type. Why This Matters Shelly relays are a common, cheap way to add “dumb” appliances into the automation system — a fan, a boiler, anything behind a relay can now be toggled from the dashboard or from a rule, without needing a dedicated smart-device ecosystem. Challenges Noticed /api/shelly is currently missing the @auth.login_required decorator that every other device endpoint has — since authentication was added, this is the one route that slipped through. Needs to be fixed before this ships anywhere network-exposed. Shelly relays are addressed by relay_number rather than an id /model like the other integrations, so the config schema needed a small variation ( relay_number field) instead of reusing the existing device pattern exactly. emit_device_event isn’t wired into the Shelly handler yet, so — like the other non-TV devices — a Shelly state change can’t currently act as a trigger for other automations. Next Steps Add the missing @auth.login_required to /api/shelly . Wire emit_device_event into the Shelly (and remaining) handlers so any device can be both an action and a trigger source. Once event emission is consistent across all device types, move on to energy monitoring for the Tapo smart plugs.
Kasa (TP-Link) Support Added The Edge-AI Home Monitoring System now supports TP-Link Kasa smart plugs/switches, using the python-kasa library’s async Discover API for device communication. What’s New New Kasa class that discovers a device by IP via Discover.discover_single() (with optional username/password for cloud-authenticated devices) and wraps turn_on / turn_off / execute_command behind the same asyncio.run() pattern already used for Daikin and the Tapo devices. New /api/kasa endpoint, gated behind @auth.login_required like the rest of the device APIs. Registered kasa in DEVICE_ENDPOINTS and wired it into create_device_action , so Kasa devices can already be used as automation actions from day one. Added send_kasa and send_daikin helper functions alongside the other device senders, for consistency across the codebase. Why This Matters Kasa is one of the most common smart plug ecosystems out there, so this adds another affordable device family to the system without needing a proprietary hub — anything plugged into a Kasa switch can now be turned on/off from the dashboard or from an automation rule, the same way Tapo and Shelly devices already are. Challenges Ran into a syntax issue in async_connect : await self.device = Discover.discover_single(...) isn’t valid — assignment has to come first, i.e. self.device = await Discover.discover_single(...) . Needs fixing before this can actually run. handle_kasa currently points at a config path ( /config/device_config.json ) that doesn’t match the filename ( devices_config.json ) or the relative-path convention used by every other handler — needs to be corrected to "config/devices_config.json" . Same route also references data["Room"][room][dev_type][number][ip] with ip unquoted (a variable reference instead of the string key "ip" ), which will throw a NameError rather than the intended KeyError . emit_device_event still isn’t wired into the Kasa (or Shelly) handler, so — same as the other non-TV devices — Kasa state changes can’t yet act as automation triggers. Next Steps Fix the await /assignment order bug in Kasa.async_connect , the config path, and the unquoted "ip" key in /api/kasa before testing against a real device. Wire emit_device_event into Kasa, Shelly, and the remaining handlers so any device can act as both an action and a trigger. Once event emission is consistent across all device types, move on to energy monitoring for the Tapo smart plugs.
Broadlink IR Learning App + Voice Guidance in Setup The Edge-AI Home Monitoring System now has its own tool for learning IR signals, as well as voice guidance throughout the setup process. What’s Added Broadlink IR Learning App New desktop application (customtkinter) that connects to a Broadlink device (RM-series) via broadlink.discover() and authenticates automatically. Device type selection (TV / AC / Decoder) with dynamic list of commands depending on the type (on/off, channel up/down, volume, direction, menu, etc.). “Learn & Save” function: Broadlink enters learning mode, waits for the signal from the real remote control and saves the hex packet. The signals are stored in two places: broadlink_codes.json — file-library of all codes per room/device/command. devices_config.json — so that the device is automatically registered as an entry in the system’s main config, with flag is_broadlink_device: true . Voice Guidance in Setup Wizard Added text-to-speech (via pyttsx4 , in a separate thread so as not to block the UI) to each step of the setup wizard: installing dependencies, downloading AI model, creating password, setting Tailscale, Telegram token/chat ID, and registering devices. Each device type during registration (Tapo, Philips Hue, Shelly, Broadlink, etc.) now “explains” vocally which fields need to be filled in, making the process more accessible for someone who is setting up the system for the first time without reading documentation. Also added broadlink as a new device type in the setup wizard dropdown, which opens the Learning App directly when selected. Why It Matters Until now, the system only supported devices with official APIs (Tapo, Hue, Yeelight, LG WebOS, Daikin). Many “dumb” devices at home (old ACs, decoders, TVs without smart features) are controlled only via IR remote — the Broadlink learning app paves the way to integrate virtually any device with an IR remote into the ecosystem, without the need for a special library per brand. Voice guidance also makes setup more accessible — less need to read README step by step, the system tells you what to do live. Challenges async_connect of the Kasa class has incorrect syntax ( await self.device = ... instead of self.device = await ... ) — same problem as previous devlog, still pending. In the Learning App, the device data is temporarily stored in two separate files ( broadlink_codes.json and devices_config.json ) — care must be taken to ensure that they do not become out of sync if a write fails in the middle. The Broadlink device is always identified as devices[0] by broadlink.discover() — if there are multiple Broadlink devices on the network, the app will always connect to the first one found, without selection. TTS requires CoInitialize / CoUninitialize on each thread (Windows-specific), which makes the code less portable to other OSes. Next Steps Full support for sending signals via Broadlink devices (not just learning) — i.e. new /api/broadlink endpoint and Broadlink class in the backend that will read the stored hex codes from broadlink_codes.json and send them via device.send_data() . Integrate Broadlink devices as actions in the Rule Engine, so they can be used in automations like any other device. Wiring emit_device_event to Broadlink sends, so they can also be trigger sources. Fix bug in Kasa.async_connect before any other work on Kasa progresses.
Full Broadlink Universal Remote Support The Edge-AI Home Monitoring System now includes complete support for Broadlink Universal Remotes , allowing the platform not only to learn IR commands but also to transmit them directly to infrared-controlled devices. What’s New Added a dedicated Broadlink backend integration for sending stored IR commands. Implemented a new /api/broadlink endpoint for controlling Broadlink devices from the dashboard and automation engine. Added a Broadlink device class responsible for: Connecting and authenticating with Broadlink RM-series devices. Reading learned IR codes from broadlink_codes.json . Sending IR packets using device.send_data() . Full support for controlling: TVs Air Conditioners TV Decoders / Set-Top Boxes Broadlink devices are now treated like any other supported smart device and can be used throughout the entire system. Why It Matters This is a major milestone because the system is no longer limited to devices with official APIs. Thousands of legacy appliances—including older televisions, air conditioners, and cable/satellite decoders—can now be integrated into the smart home ecosystem using only their existing infrared remote controls. Users can control these devices from: The Web Dashboard Automation Rules Future Voice Assistant integrations Any API client connected to the system This significantly expands compatibility while maintaining the project’s privacy-first, local-control philosophy. Challenges IR packets must be converted back into raw byte format before transmission. Maintaining synchronization between learned codes and registered Broadlink devices remains important as the number of supported devices grows. Multiple Broadlink hubs on the same network still require a device selection mechanism, which will be addressed in a future update. Next Steps Add automatic Broadlink hub discovery and selection. Integrate Broadlink commands into the Rule Engine as event triggers. Add support for macro commands (multiple IR signals with delays). Improve the dashboard with command management and testing tools.
Samsung Smart TV Support Added 📺 The Edge-AI Home Monitoring System now includes full support for Samsung Smart TVs running Tizen OS, expanding the platform’s smart device ecosystem with another major TV manufacturer. This integration uses the Samsung TV WebSocket API, allowing the system to communicate directly with compatible TVs over the local network without requiring additional hardware such as IR blasters. What’s New Added a new Samsung TV backend integration using the samsungtvws Python library. Implemented support for: Power control (ON/OFF) Remote key commands Volume control Device information retrieval Samsung TVs are now registered as a native device type inside the system, following the same architecture used by other integrations such as LG WebOS, Daikin, Tapo, Hue, Yeelight, Shelly, and Broadlink. Why It Matters Until now, TV support was mainly focused on LG Smart TVs and IR-controlled televisions through Broadlink. With Samsung Smart TV support, the system can now directly control another major smart TV ecosystem using its official network interface. This improves: Response time compared to IR control Local-only communication (no cloud dependency) Compatibility with more homes Technical Details The integration communicates with Samsung TVs through: Samsung Tizen WebSocket API Local network TCP communication Device authentication pairing The system keeps the same device abstraction model used by the rest of the project, making Samsung TVs behave like any other controllable smart device. Challenges Some challenges during implementation: Handling Samsung’s first-time pairing approval system Managing WebSocket connections reliably Ensuring compatibility between different Tizen TV models Mapping Samsung remote key codes into the existing device command structure Next Steps Future improvements: Add automatic Samsung TV discovery Add real-time TV status feedback (power state, current app, volume) Add voice assistant commands for Samsung TVs - Add more controls Samsung Smart TVs are now another fully supported platform in the Edge-AI Home Monitoring System, bringing the project closer to becoming a complete privacy-first smart home hub.
UI Modernization & Native Sonos Integration 🎵🎨 A massive structural and visual update has landed! The Edge-AI Home Monitoring System dashboard has been rewritten into a production-grade, single-page interface using the modern Inter typeface family. Alongside this visual overhaul, we are introducing native, local-only support for Sonos Smart Audio Devices . What’s New 1. High-End Minimalist UI & CSS Token Architecture The new interface shifts away from crowded layouts to a highly scannable, component-driven architecture featuring a strict color and spacing utility system built directly into :root . Unified Palette System: Built entirely on minimal token foundations: light-mode canvas backgrounds ( #fafafa ), precise surface modules ( #ffffff ), and structural crisp border outlines ( #e7e7e7 / #d9d9d9 ). Blur-Effects Navigation Header ( .topbar ): A sticky system header utilizing backdrop-filter: blur(8px) that embeds the new brand mark ( A Home ) alongside a live status strip displaying the total device count, registered automations, and an immediate visual green heartbeat indicator ( .live-dot ). Decoupled Grid Control ( .grid ): Devices are rendered dynamically using a responsive auto-fill layout ( minmax(240px, 1fr) ) with explicit styling classes for device actions ( .btn.on for soft green feedback, .btn.off for soft red, and .btn.accent for special triggers). Asynchronous AI Assistant Component ( .ai-panel ): A dedicated section housing the local LLM interaction logic, optimized with a smooth CSS-animated text typing loop ( @keyframes dotfade ) to indicate processing states without blocking UI interactions. 2. Native Sonos Smart Audio Core Integration Audio control joins our local device tree. The system now natively communicates with Sonos devices over the local network via unified backend hooks, matching our privacy-first design patterns. The control grid maps the specific target API endpoints directly to native UI inputs, enabling immediate transmission of core execution parameters: play — Resumes audio streaming ( .btn.on ) pause — Pauses current media layout tracking stop — Breaks audio buffering completely ( .btn.off ) volume_up & volume_down — Alters hardware volume steps Real-Time “Now Playing” UI Subview Sonos control cards now dynamically build and inject an interactive media HUD element ( .now-playing ). Dynamic Media Binding: Communicates with the new /api/music/current endpoint via explicit POST JSON payloads ( { room, type, number, command: 'get', device } ). Visual Playback Flags: Implements dynamic active toggles ( .now-playing.playing ) that shift asset opacity states depending on network audio feedback. Non-Blocking Control Pulls: The inline manual update button ( .np-refresh ) relies on an isolated asynchronous CSS loop wrapper ( @keyframes spin ) allowing updates without triggering full dashboard asset re-renders.
🚀 One of the Biggest Updates: Docker-Based Setup & Minimal Installation The Edge-AI Home Monitoring System has just received its most significant infrastructure overhaul yet! We have completely re-engineered the deployment workflow. Instead of dealing with manual environment configurations, matching Python versions, and tracking down dependency conflicts, the entire ecosystem can now be spun up instantly with a single command. 🐳 What’s New: Containerized Architecture By migrating the platform to a fully containerized backend , we’ve moved away from fragile local setups closer to a production-grade deployment. Key Improvements: Isolated Environment: The Flask backend and all its core libraries run inside an isolated Docker container, completely immune to host-system configuration drifts. Automated Dependency Management: All heavy-lifting dependencies are resolved and cached automatically inside the image. State & Configuration Persistence: Your custom devices_config.json , automation rules, and local database models are securely mapped via Docker volumes, meaning they persist perfectly across container restarts and updates. High Portability: Moving the hub from a development PC to a dedicated home server (like a Fedora Linux box or a Raspberry Pi) is now completely seamless. ⚡ Setup: Before vs. After The difference in onboarding friction is night and day. Look at how the installation footprint has shrunk: Old Manual Setup New Docker Workflow ❌ Install Python manually & match versions 📦 Pre-configured runtime environment ❌ Create virtual environments ( venv ) 📦 Isolated container filesystems ❌ Debug pip dependency conflicts 📦 One-time automated image build ❌ Manually set environment variables 📦 Declarative configuration via Compose ❌ Run background scripts step-by-step 📦 Single-command multi-service launch The New Minimal Installation Path: Now, launching your privacy-first smart home hub requires nothing more than standard container tools: # Clone the repository git clone https://github.com/travletothefurureprogramming/Edge-AI-Home-Monitoring-System # Navigate to the project root cd Edge-AI-Home-Monitoring-System # Spin up the entire system in detached mode docker compose up -d
🐳 Docker Setup: 100% Functional Docker support for the Edge-AI Home Monitoring System is now fully working end-to-end. What’s New First-Run Setup via HTML : Instead of manual configuration steps, the very first launch now opens a lightweight HTML setup page that walks through the initial configuration once (credentials, device registration basics, etc.). After this one-time run, it’s never needed again — the container remembers everything through the persisted config volumes. One Command to Rule Them All : The whole system — Flask backend, Docker container, and now the first-run setup — is launched with a single script: Windows: start.bat Linux: start.sh No more manually running docker compose , checking dependencies, or following multi-step instructions. Just run the script for your OS and the entire stack comes up ready to use. Why It Matters This closes the loop on the Docker migration from a few devlogs ago. Before, Docker removed the Python/venv/dependency headaches but still required knowing the right compose commands. Now the onboarding experience is genuinely “clone → run one script → done,” with the HTML first-run page handling the last bit of manual setup that used to require touching config files by hand.
🧪 Reliability & CI Improvements This update also focuses on improving the project’s reliability and development workflow. What’s New Added 20 Pytest test cases covering the core functionality of the system, helping verify that critical components behave correctly and reducing the risk of regressions. Configured GitHub Actions to automatically execute the entire test suite after every commit and pull request, ensuring new changes don’t break existing functionality. Why It Matters Automated testing and Continuous Integration (CI) make the project more robust, maintainable, and production-ready. Every code change is now automatically validated before it becomes part of the project, providing faster feedback during development and increasing confidence in future updates.
Ships:
I have made an Edge-AI Home Monitoring System. It is a privacy-first, edge-AI home automation hub using Linux, Flask, and real-time control to orchestrate smart devices.
Over the past few weeks, Edge-AI Home Monitoring System has evolved from a basic smart home controller into a much more capable home automation platform. New Features Added YOLO-based security monitoring Integrated Telegram bot for remote alerts and device control Added support for Tapo Smart Bulbs Added support for Tapo Smart Plugs Added support for Philips Hue devices Added support for Yeelight devices Added support for LG Smart TVs Added Remote PC Control & Monitoring Infrastructure Improvements Built a full Flask server backend Added a responsive Web Dashboard Improved setup process with automated setup scripts Reworked documentation and README Reliability Improvements Refactored multiple modules with structured exception handling Added better logging and debugging tools Improved API responses and backend stability Enhanced scalability for future device integrations The project is now much closer to becoming a complete privacy-first edge AI smart home hub capable of controlling multiple device ecosystems from a single interface.
Most smart homes are leased, not owned. Every command you send travels to a cloud you don’t control, owned by a company with interests misaligned to yours. This system proves that meaningful control of your physical space doesn’t require surrendering it to a vendor. Edge-AI Home Monitoring is a locally-governed, vendor-independent home automation platform designed to answer: can a household be sovereign over its own infrastructure?...
|
1793134513.7648993
|
1793220913.7648993
|
|
7338
|
PC Stats by @dubbyy | Stardance
|
dubbyy
|
1
|
38.0
|
349
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T00:15:30Z", "hours": 38.0, "multiplier": 10.53, "payout": 349, "blessing": "neutral", "text": "Taken from my last devlog: … I’ve been making an app to track information about how I use my computer, and a companion website to display the data. Right now, it logs every click, as well as the positions and dimensions of apps every 5 minutes. The dashboard website then displays that data in a variety of interesting ways. The collection takes a long time and only works on Linux, so I’m using the dashboard as the demo. You can find the collector on the GithTub. The most challenging part was figuring out how to collect the data, especially the clicks, however I think I spent the most time on the dashboard. It was my first time using Javascript for something complex, so I’m pretty happy with how it turned out I hope you enjoy :)", "repo": "https://github.com/dubbyy1/pc-stats", "demo": "https://pc-stats.dubbyy.com/?db=https%3A%2F%2Fraw.githubusercontent.com%2Fdubbyy1%2Fpc-stats%2Fmain%2Fexamples%2Fstats.db"}]...
|
[{"post_id": 17266, "ts": "202 [{"post_id": 17266, "ts": "2026-06-28T00:01:16Z", "hours": 2.095, "text": "FINISHED Its finally finished! If you don’t know, I’ve been making an app to track information about how I use my computer, and a companion website to display the data. Right now, it logs every click, as well as the positions and dimensions of apps every 5 minutes. The dashboard website then displays that data in a variety of interesting ways. The collector is now (in theory) compatible with the majority of Linux desktops (sorry Windows users, maybe next year). I also added a small config file. Right now this only stores the window-snapshot interval, which you can change through the UI. I originally planned on adding a list of apps to ignore, but there were too many problems. Primarily, I wasn’t sure how to reliably handle the focused app being blocked without making it null, which is very messy, and the whole thing seemed too complicated for a feature I’m don’t really plan on using. I also considered making it a frontend filter, but chose not to for a similar reason. Once again, you can try it yourself here with my data. If you want to collect your own data, you can download the collector here (note: you need to give your user input permissions for this to detect clicks, more details in the README). I’ve only tested this on my machine (KDE Wayland) so if you have a different setup, tell me how it goes! Afterword I had a lot of fun making this. This was my deepest dive into web development yet and I learned so much. This is also the first time I’ve shipped a project for public use, which was a has been a valuable experience. I could definitely do more with this (more config, more charts, more data), and I do plan on revisiting it in the future, but I think this is a good place to leave it for now. Thanks for reading, see you next project :)"}, {"post_id": 17047, "ts": "2026-06-27T17:53:20Z", "hours": 15.2803, "text": "Day ?? - New Features! After 15 hours (got a bit carried away) the next feature is (mostly) finished! You can now monitor and display window data. Every 5 minutes, the collector logs what apps are open and their positions on screen, which you can then visualize on the dashboard. I thought it would be interesting to combine the click data and the window data in some way, but I decided against it. The reason being that I technically don’t know what app the user clicked since it could have changed in the 5 minutes. To collect the data I had to run a separate KWin script to get around the restrictions, same as with the clicks. This script gave me the windows as JSON, which I then stored in 2 SQLite tables. One containing general info (one entry per snapshot), and the other containing info about specific windows. The second major change is the collector’s new UI. It was a relatively small addition, but it makes the whole experience a lot smoother. It also uses the same UI library I was already using to get the monitor configuration which was nice. Finally, the dashboard now stores the database in cache so everything is preserved when you reload. This change was mostly for me, because having to re-upload the file every time I changed the code got really annoying. What’s Next There’s a few finishing touches I need to add before shipping, Specifically: Compatibility (KDE only right now) Config options (Snapshot frequency, apps to ignore, etc) Possibly more window features yap I definitely could have done all this way faster but I spent a lot of time fiddling, trying to fully understand everything. Now between the KWin scripts and the dashboard I have a much deeper understanding of Javascript than before which will help in the future. Hopefully I can ship this today or tomorrow so I can start working on my next project"}, {"post_id": 10289, "ts": "2026-06-16T22:34:09Z", "hours": 6.7747, "text": "Days 5 + 6? Changes I added filters for time and button type to make it more interactive. I also added new charts, specifically pie charts for button and monitor usage, and bar charts for hourly and daily activity. I used chart.js to make the charts, because it makes the programming way simpler while still giving me full control. The final change was reworking the heatmap again. instead of each click being an individual element, they’re now drawn on a canvas which boosts performance significantly. Try it! What’s Next Now that the dashboard is mostly finished. I want to add some quality of life things (namely caching the database so I don’t have to reupload it every time) before adding the next feature. Speaking of, the next feature is going to track what applications are open at what times, which I think will make for some really interesting data."}, {"post_id": 4535, "ts": "2026-06-07T21:35:10Z", "hours": 5.6419, "text": "Day 4 - Cleanup Changes Cleaned up the UI a lot. I like the new heatmap visualization a lot, but it’s a bit slow so I’ll continue to experiment with it. I optimized the backend a lot, it used to block a full CPU core but now it sleeps properly when idling. I also expanded compatibility to other Linux environments. This was actually way simpler than I expected, I just happened to start with KDE which is really complex for some reason. Notes The dashboard is now live on my website , which you can test with this sample data . My aim right now is to get the project ship-ready, and then add features one by one."}, {"post_id": 3823, "ts": "2026-06-06T21:37:25Z", "hours": 3.3017, "text": "Day 3 - Dashboard Today I started making the dashboard, to present the data. I decided to make it a website and have the user upload their data. This makes demoing a lot easier, as well as being good for compatibility. Right now it’s a very bare bones prototype with only a heatmap, but all the set up for reading the data should be finished, which means I can focus on polishing the UI and adding features. I also fixed some bugs in the backend. Previously the code would fail if your mouse disconnected, but now it can handle disconnects and reconnects, as well as detect multiple mice at the same time."}, {"post_id": 2918, "ts": "2026-06-05T20:23:31Z", "hours": 3.0511, "text": "Day 2 Continuing work on my data collection project. Yesterday finished the core of the first feature — a click heatmap. Today was mostly polish and fixing the structure to make shipping easier when the time comes. Changes Organisation Instead of having everything in one big ugly python file, I created a module and separated all each part into it’s own file. This will make things much easier as I continue to add new features. As well as organising the python code, the project uses a JavaScript script to get the position of the mouse, and a bash script to run it. Neither of these can be packaged, so I updated the code to generate the JS file in the user’s share directory and run it directly from python. Compatibility The original code was highly specific to my setup, and couldn’t be shipped. The fix came in two parts. I previously had my exact model of mouse hard-coded, so I added the ability to detect what mouse the user has The code only worked for my specific Window Manager. This is still the case, but I added the structure to detect the WM and adjust for it. I plan on adding support for other’s in the coming days Storage All data is now stored persistently in an SQLite database. In the future this will be read and displayed by the dashboard program. What’s Next Create the dashboard to start displaying data Expand compatibility to other Linux systems (might take a while)"}, {"post_id": 2454, "ts": "2026-06-04T23:05:57Z", "hours": 2.2456, "text": "Day 1 Making an app to track a bunch of data about how i use my computer. Currently trying to make a heatmap of where i click the most. No UI yet because getting the mouse position on Wayland took wayyy too long to figure out"}]...
|
Title: PC Stats by @dubbyy | Stardance
Devlogs:
D Title: PC Stats by @dubbyy | Stardance
Devlogs:
Day 1 Making an app to track a bunch of data about how i use my computer. Currently trying to make a heatmap of where i click the most. No UI yet because getting the mouse position on Wayland took wayyy too long to figure out
Day 2 Continuing work on my data collection project. Yesterday finished the core of the first feature — a click heatmap. Today was mostly polish and fixing the structure to make shipping easier when the time comes. Changes Organisation Instead of having everything in one big ugly python file, I created a module and separated all each part into it’s own file. This will make things much easier as I continue to add new features. As well as organising the python code, the project uses a JavaScript script to get the position of the mouse, and a bash script to run it. Neither of these can be packaged, so I updated the code to generate the JS file in the user’s share directory and run it directly from python. Compatibility The original code was highly specific to my setup, and couldn’t be shipped. The fix came in two parts. I previously had my exact model of mouse hard-coded, so I added the ability to detect what mouse the user has The code only worked for my specific Window Manager. This is still the case, but I added the structure to detect the WM and adjust for it. I plan on adding support for other’s in the coming days Storage All data is now stored persistently in an SQLite database. In the future this will be read and displayed by the dashboard program. What’s Next Create the dashboard to start displaying data Expand compatibility to other Linux systems (might take a while)
Day 3 - Dashboard Today I started making the dashboard, to present the data. I decided to make it a website and have the user upload their data. This makes demoing a lot easier, as well as being good for compatibility. Right now it’s a very bare bones prototype with only a heatmap, but all the set up for reading the data should be finished, which means I can focus on polishing the UI and adding features. I also fixed some bugs in the backend. Previously the code would fail if your mouse disconnected, but now it can handle disconnects and reconnects, as well as detect multiple mice at the same time.
Day 4 - Cleanup Changes Cleaned up the UI a lot. I like the new heatmap visualization a lot, but it’s a bit slow so I’ll continue to experiment with it. I optimized the backend a lot, it used to block a full CPU core but now it sleeps properly when idling. I also expanded compatibility to other Linux environments. This was actually way simpler than I expected, I just happened to start with KDE which is really complex for some reason. Notes The dashboard is now live on my website , which you can test with this sample data . My aim right now is to get the project ship-ready, and then add features one by one.
Days 5 + 6? Changes I added filters for time and button type to make it more interactive. I also added new charts, specifically pie charts for button and monitor usage, and bar charts for hourly and daily activity. I used chart.js to make the charts, because it makes the programming way simpler while still giving me full control. The final change was reworking the heatmap again. instead of each click being an individual element, they’re now drawn on a canvas which boosts performance significantly. Try it! What’s Next Now that the dashboard is mostly finished. I want to add some quality of life things (namely caching the database so I don’t have to reupload it every time) before adding the next feature. Speaking of, the next feature is going to track what applications are open at what times, which I think will make for some really interesting data.
Day ?? - New Features! After 15 hours (got a bit carried away) the next feature is (mostly) finished! You can now monitor and display window data. Every 5 minutes, the collector logs what apps are open and their positions on screen, which you can then visualize on the dashboard. I thought it would be interesting to combine the click data and the window data in some way, but I decided against it. The reason being that I technically don’t know what app the user clicked since it could have changed in the 5 minutes. To collect the data I had to run a separate KWin script to get around the restrictions, same as with the clicks. This script gave me the windows as JSON, which I then stored in 2 SQLite tables. One containing general info (one entry per snapshot), and the other containing info about specific windows. The second major change is the collector’s new UI. It was a relatively small addition, but it makes the whole experience a lot smoother. It also uses the same UI library I was already using to get the monitor configuration which was nice. Finally, the dashboard now stores the database in cache so everything is preserved when you reload. This change was mostly for me, because having to re-upload the file every time I changed the code got really annoying. What’s Next There’s a few finishing touches I need to add before shipping, Specifically: Compatibility (KDE only right now) Config options (Snapshot frequency, apps to ignore, etc) Possibly more window features yap I definitely could have done all this way faster but I spent a lot of time fiddling, trying to fully understand everything. Now between the KWin scripts and the dashboard I have a much deeper understanding of Javascript than before which will help in the future. Hopefully I can ship this today or tomorrow so I can start working on my next project
FINISHED Its finally finished! If you don’t know, I’ve been making an app to track information about how I use my computer, and a companion website to display the data. Right now, it logs every click, as well as the positions and dimensions of apps every 5 minutes. The dashboard website then displays that data in a variety of interesting ways. The collector is now (in theory) compatible with the majority of Linux desktops (sorry Windows users, maybe next year). I also added a small config file. Right now this only stores the window-snapshot interval, which you can change through the UI. I originally planned on adding a list of apps to ignore, but there were too many problems. Primarily, I wasn’t sure how to reliably handle the focused app being blocked without making it null, which is very messy, and the whole thing seemed too complicated for a feature I’m don’t really plan on using. I also considered making it a frontend filter, but chose not to for a similar reason. Once again, you can try it yourself here with my data. If you want to collect your own data, you can download the collector here (note: you need to give your user input permissions for this to detect clicks, more details in the README). I’ve only tested this on my machine (KDE Wayland) so if you have a different setup, tell me how it goes! Afterword I had a lot of fun making this. This was my deepest dive into web development yet and I learned so much. This is also the first time I’ve shipped a project for public use, which was a has been a valuable experience. I could definitely do more with this (more config, more charts, more data), and I do plan on revisiting it in the future, but I think this is a good place to leave it for now. Thanks for reading, see you next project :)
Ships:
Taken from my last devlog: … I’ve been making an app to track information about how I use my computer, and a companion website to display the data. Right now, it logs every click, as well as the positions and dimensions of apps every 5 minutes. The dashboard website then displays that data in a variety of interesting ways. The collection takes a long time and only works on Linux, so I’m using the dashboard as the demo. You can find the collector on the GithTub. The most challenging part was figuring out how to collect the data, especially the clicks, however I think I spent the most time on the dashboard. It was my first time using Javascript for something complex, so I’m pretty happy with how it turned out I hope you enjoy :)...
|
1793224415.9524486
|
1793310815.9524486
|
|
17293
|
Slayie by @arfa_mariyam | Stardance
|
arfa_mariyam
|
3
|
38.0
|
531
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T07:48:06Z", "hours": 9.0, "multiplier": 16.78, "payout": 147, "blessing": "neutral", "text": "I released Phase 5 of Slayie, my terminal-based ASCII Dungeon Crawler RPG written in C++. After receiving feedback that people on Linux and Mac also wanted to try the game, I expanded the project to include full cross-platform support. Along with the 10x10 dungeon map, WASD controls, obstacle walls (#), gold coins ($), health potions (H), Goblin combat encounters (E), and persistent save/load features, the game now provides native ready-to-run binaries for Windows, Linux, and macOS. What was challenging: Building standalone binaries for platforms I don’t physically own ;) I didn’t have a Mac or Linux machine, so I learned how to configure GitHub Actions workflows to compile native Linux and macOS binaries in the cloud using cloud runners. I also had to make sure file execution permissions (chmod +x) and terminal instructions were clearly documented so non-Windows users wouldn’t encounter permission errors. What I am proud of: I’m really proud of taking community feedback seriously and turning a Windows-only CLI project into a true cross-platform game. Seeing the exact same C++ codebase build cleanly and run across Windows, Ubuntu, and macOS terminal environments feels like a huge accomplishment. How to test it: Go to the latest GitHub release (v5.0.0): https://github.com/ArfaMariyam/Slayie/releases Windows: Download and double-click SLAYIE.exe. Linux / Mac: Download slayie-linux or slayie-macos. In your terminal, run chmod +x slayie-linux (or macOS), then ./slayie-linux. Choose 1 to start a new game or 2 to load your previous save file. Use W, A, S, D (followed by Enter) to move, press K anytime to save your game state, defeat enemies (E), and reach the exit door (D)! Hope you enjoy testing it on whichever platform you use :)", "repo": "https://github.com/ArfaMariyam/Slayie", "demo": "https://github.com/ArfaMariyam/Slayie/releases"}, {"ship_num": 2, "ts": "2026-09-05T10:50:11Z", "hours": 9.0, "multiplier": 18.16, "payout": 197, "blessing": "neutral", "text": "What I made: I completed the final phase of Slayie, my terminal-based ASCII Dungeon Crawler RPG written in native C++. On top of exploring the 10x10 grid map, dodging solid walls (#), collecting gold coins ($), and drinking potions (H), I added enemy Goblin encounters (E) with combat damage, a game-over screen if your health drops to 0, and a full file save/load system so you can save your progress and resume anytime from local storage. What was challenging: Implementing file handling with to save and load the game state. I had to figure out how to save not just the player stats (playerX, playerY, playerHealth, goldCount), but also loop through the entire 2D dungeon array (dungeon[10][10]) row by row into slayie_save.txt. Making sure that picked-up items and defeated enemies didn’t respawn after reloading a save took quite a bit of debugging. What I am proud of: I’m really proud of finishing all 4 milestones of the roadmap from a blank file to a fully complete RPG. Having working grid movement, collision barriers, real-time stat tracking, combat encounters, and persistent text-file saving all compiled into a single executable file that anyone can play feels amazing :) How to test it: Download the compiled SLAYIE.exe from my GitHub repository’s latest release (v4.0.0). Double-click SLAYIE.exe to run it directly in your terminal. Select 1 to start a new run or 2 to load your previous save file. Use W, A, S, D (followed by Enter) to move your character, press K anytime to save your progress, defeat enemies (E), and reach the exit door (D)! Hope you enjoy it :)", "repo": "https://github.com/ArfaMariyam/Slayie", "demo": "https://github.com/ArfaMariyam/Slayie/releases"}, {"ship_num": 3, "ts": "2026-08-25T11:45:32Z", "hours": 20.0, "multiplier": 9.0, "payout": 187, "blessing": "neutral", "text": "What I made: I built Slayie, a terminal based ASCII Dungeon Crawler RPG written in native C++. It renders an interactive 10x10 dungeon grid where you control a character (@) using WASD keys, navigate around solid boundary and obstacle walls (#), collect gold coins ($), drink health potions (H) to restore health, and try to reach the exit door (D). What was challenging: As a beginner learning C++, working with 2D array coordinates (dungeon[10][10]) was the trickiest part. I initially mixed up rows (Y-axis) and columns (X-axis), which caused movement keys to move in reverse and item pickups to wipe the wrong map tiles. Writing predictive collision checks so the player stops before hitting a wall took a lot of trial, error, and debugging. What I am proud of: I’m really proud of turning basic programming fundamentals (nested loops, 2D arrays, and conditional branches) into an actual interactive game with real-time stats. Building a complete game loop from scratch and compiling a working .exe file that runs with one click feels awesome :) How to test it: Download the compiled index.exe from my GitHub repository’s latest release. Double-click index.exe to run it directly in your terminal. Use W, A, S, D (followed by Enter) to move your character around the map, collect items, and find the D door. Hope you enjoy it :)", "repo": "https://github.com/ArfaMariyam/Slayie", "demo": "https://github.com/ArfaMariyam/Slayie/releases"}]...
|
[{"post_id": 65248, "ts": "202 [{"post_id": 65248, "ts": "2026-09-10T07:39:30Z", "hours": 8.7703, "text": "Phase 5 of Slayie is live •⩊• After going through peer review feedback on Stardance, I saw that players using Linux and Mac also wanted to test the game. I added a 5th phase to provide cross-platform support by compiling native standalone binaries (slayie-linux and slayie-macos) and attaching them to the GitHub release alongside SLAYIE.exe. I also added terminal execution permissions (chmod +x) and quick source build commands in the README so anyone can run Slayie regardless of their OS"}, {"post_id": 62094, "ts": "2026-09-05T10:44:09Z", "hours": 9.0578, "text": "Phase 4 of Slayie is officially complete! I Added enemy encounters (E) that trigger combat and deal 25 damage to the player, along with a full game-over screen if your health drops to 0. Also built a file save and load system using so pressing K writes all stats and the current map grid into slayie_save.txt, letting you restore your exact progress from the main menu."}, {"post_id": 54388, "ts": "2026-08-25T11:37:41Z", "hours": 12.7342, "text": "Phase 3 of Slayie is complete! Added collectible Gold coins ($) and Health Potions (H) across the dungeon floor. Stepping on a gold tile grants +10 coins, while potions heal +20 HP up to the 100 HP max limit. After picking up an item, the tile is cleared to floor (.) so items can’t be looted twice."}, {"post_id": 41177, "ts": "2026-08-05T06:59:56Z", "hours": 5.5186, "text": "Just completed Phase 2 of Slayie! Converted the map into a full 2D array matrix (dungeon[10][10]) to store real wall layouts and obstacle data. Added solid boundary walls (#), interior obstacles, and built collision detection so the player @ can’t walk through walls. Also added an exit door (D) at (8, 8) to clear the dungeon, and fixed a movement math bug where pressing S was moving the player in reverse!"}, {"post_id": 35765, "ts": "2026-07-27T12:24:47Z", "hours": 1.93, "text": "Slayie’s Phase 1 Complete: 10x10 ASCII Grid & WASD Movement Framework! Today I kicked off my new project, Slayie (a terminal-based ASCII Dungeon Crawler RPG in C++), and finished Phase 1! What I built: Rendered a 10x10 grid map on the terminal using nested loops, with the player represented by the @ icon. Implemented live coordinate tracking for (playerX, playerY). Built WASD keyboard controls (W Up, S Down, A Left, D Right) and a Q key to exit. Added boundary checks so the player can’t move off the map edges. Added a live stats dashboard showing Health (HP) and Gold coins."}]...
|
Title: Slayie by @arfa_mariyam | Stardance
Devlog Title: Slayie by @arfa_mariyam | Stardance
Devlogs:
Slayie’s Phase 1 Complete: 10x10 ASCII Grid & WASD Movement Framework! Today I kicked off my new project, Slayie (a terminal-based ASCII Dungeon Crawler RPG in C++), and finished Phase 1! What I built: Rendered a 10x10 grid map on the terminal using nested loops, with the player represented by the @ icon. Implemented live coordinate tracking for (playerX, playerY). Built WASD keyboard controls (W Up, S Down, A Left, D Right) and a Q key to exit. Added boundary checks so the player can’t move off the map edges. Added a live stats dashboard showing Health (HP) and Gold coins.
Just completed Phase 2 of Slayie! Converted the map into a full 2D array matrix (dungeon[10][10]) to store real wall layouts and obstacle data. Added solid boundary walls (#), interior obstacles, and built collision detection so the player @ can’t walk through walls. Also added an exit door (D) at (8, 8) to clear the dungeon, and fixed a movement math bug where pressing S was moving the player in reverse!
Phase 3 of Slayie is complete! Added collectible Gold coins ($) and Health Potions (H) across the dungeon floor. Stepping on a gold tile grants +10 coins, while potions heal +20 HP up to the 100 HP max limit. After picking up an item, the tile is cleared to floor (.) so items can’t be looted twice.
Phase 4 of Slayie is officially complete! I Added enemy encounters (E) that trigger combat and deal 25 damage to the player, along with a full game-over screen if your health drops to 0. Also built a file save and load system using so pressing K writes all stats and the current map grid into slayie_save.txt, letting you restore your exact progress from the main menu.
Phase 5 of Slayie is live •⩊• After going through peer review feedback on Stardance, I saw that players using Linux and Mac also wanted to test the game. I added a 5th phase to provide cross-platform support by compiling native standalone binaries (slayie-linux and slayie-macos) and attaching them to the GitHub release alongside SLAYIE.exe. I also added terminal execution permissions (chmod +x) and quick source build commands in the README so anyone can run Slayie regardless of their OS
Ships:
What I made: I built Slayie, a terminal based ASCII Dungeon Crawler RPG written in native C++. It renders an interactive 10x10 dungeon grid where you control a character (@) using WASD keys, navigate around solid boundary and obstacle walls (#), collect gold coins ($), drink health potions (H) to restore health, and try to reach the exit door (D). What was challenging: As a beginner learning C++, working with 2D array coordinates (dungeon[10][10]) was the trickiest part. I initially mixed up rows (Y-axis) and columns (X-axis), which caused movement keys to move in reverse and item pickups to wipe the wrong map tiles. Writing predictive collision checks so the player stops before hitting a wall took a lot of trial, error, and debugging. What I am proud of: I’m really proud of turning basic programming fundamentals (nested loops, 2D arrays, and conditional branches) into an actual interactive game with real-time stats. Building a complete game loop from scratch and compiling a working .exe file that runs with one click feels awesome :) How to test it: Download the compiled index.exe from my GitHub repository’s latest release. Double-click index.exe to run it directly in your terminal. Use W, A, S, D (followed by Enter) to move your character around the map, collect items, and find the D door. Hope you enjoy it :)
What I made: I completed the final phase of Slayie, my terminal-based ASCII Dungeon Crawler RPG written in native C++. On top of exploring the 10x10 grid map, dodging solid walls (#), collecting gold coins ($), and drinking potions (H), I added enemy Goblin encounters (E) with combat damage, a game-over screen if your health drops to 0, and a full file save/load system so you can save your progress and resume anytime from local storage. What was challenging: Implementing file handling with to save and load the game state. I had to figure out how to save not just the player stats (playerX, playerY, playerHealth, goldCount), but also loop through the entire 2D dungeon array (dungeon[10][10]) row by row into slayie_save.txt. Making sure that picked-up items and defeated enemies didn’t respawn after reloading a save took quite a bit of debugging. What I am proud of: I’m really proud of finishing all 4 milestones of the roadmap from a blank file to a fully complete RPG. Having working grid movement, collision barriers, real-time stat tracking, combat encounters, and persistent text-file saving all compiled into a single executable file that anyone can play feels amazing :) How to test it: Download the compiled SLAYIE.exe from my GitHub repository’s latest release (v4.0.0). Double-click SLAYIE.exe to run it directly in your terminal. Select 1 to start a new run or 2 to load your previous save file. Use W, A, S, D (followed by Enter) to move your character, press K anytime to save your progress, defeat enemies (E), and reach the exit door (D)! Hope you enjoy it :)
I released Phase 5 of Slayie, my terminal-based ASCII Dungeon Crawler RPG written in C++. After receiving feedback that people on Linux and Mac also wanted to try the game, I expanded the project to include full cross-platform support. Along with the 10x10 dungeon map, WASD controls, obstacle walls (#), gold coins ($), health potions (H), Goblin combat encounters (E), and persistent save/load features, the game now provides native ready-to-run binaries for Windows, Linux, and macOS. What was challenging: Building standalone binaries for platforms I don’t physically own ;) I didn’t have a Mac or Linux machine, so I learned how to configure GitHub Actions workflows to compile native Linux and macOS binaries in the cloud using cloud runners. I also had to make sure file execution permissions (chmod +x) and terminal instructions were clearly documented so non-Windows users wouldn’t encounter permission errors. What I am proud of: I’m really proud of taking community feedback seriously and turning a Windows-only CLI project into a true cross-platform game. Seeing the exact same C++ codebase build cleanly and run across Windows, Ubuntu, and macOS terminal environments feels like a huge accomplishment. How to test it: Go to the latest GitHub release (v5.0.0): https://github.com/ArfaMariyam/Slayie/releases Windows: Download and double-click SLAYIE.exe. Linux / Mac: Download slayie-linux or slayie-macos. In your terminal, run chmod +x slayie-linux (or macOS), then ./slayie-linux. Choose 1 to start a new game or 2 to load your previous save file. Use W, A, S, D (followed by Enter) to move, press K anytime to save your game state, defeat enemies (E), and reach the exit door (D)! Hope you enjoy testing it on whichever platform you use :)...
|
1792878583.2367184
|
1793742583.2367184
|
|
30561
|
No Let by @ethmarks | Stardance
|
ethmarks
|
2
|
38.0
|
499
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-09T00:10:21Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "No Let: a JS puzzle site where you aren’t allowed to use let or anything with mutable state. This second ship was about implementing the fantastic suggestions in the feedback I got from my first ship. I added anti-hardcoding checks to stop people from cheesing the puzzles I added two new levels, including a very difficult one I added confetti and visual feedback when a user completes a puzzle I added a favicon …Plus a handful of small tweaks and improvements I’m looking forward to reading the feedback I get this time :)", "repo": "https://github.com/ethmarks/nolet", "demo": "https://ethmarks.github.io/nolet/"}, {"ship_num": 2, "ts": "2026-07-09T21:55:18Z", "hours": 28.0, "multiplier": 18.96, "payout": 499, "blessing": "neutral", "text": "No Let is a JavaScript puzzle site where you have to use pure functional programming, which means that you aren’t allowed to use let variables or anything else with mutable state. I learned how to use QuickJS-emscripten, Prism code editor, and AcornJS, all of which are skills that I intend to reuse for later projects. I also learned a lot about pure functional programming itself while designing the puzzles. I’m especially proud of how the linter/test messages smoothly animate in and out. The animation itself was just a simple slide transition with Svelte, but in order to make it work I had to refactor and unify the error message generation into one big array, which was unexpectedly difficult.", "repo": "https://github.com/ethmarks/nolet", "demo": "https://ethmarks.github.io/nolet/"}]...
|
[{"post_id": 64518, "ts": "202 [{"post_id": 64518, "ts": "2026-09-08T23:57:42Z", "hours": 0.6822, "text": "Final devlog before ship #2 I added difficulty ratings for each puzzle I moved the logic/linter output (aka the checklist) right above the “run” button because it makes more sense there I updated the README and added some screenshots"}, {"post_id": 63280, "ts": "2026-09-07T00:56:34Z", "hours": 2.1544, "text": "How the heck did this take 2 hours… All that I did in this devlog was improve the Conway’s Game of Life puzzle a bit. I rewrote some of the starter and solution code for simplicity (I can’t believe I forgot about the .flatMap() method), and I also wrote a bunch of comments that explain the starter code and solution code. Next, I think I’ll add a difficulty indicator for the puzzles. I think I’ll probably be ready to re-ship after that!"}, {"post_id": 60511, "ts": "2026-09-02T21:57:40Z", "hours": 4.1878, "text": "Hi! It’s been a while. Again. The highlight of this devlog is the new puzzle: Conway’s Game of Life. In the feedback on my first ship, several people mentioned that they wanted more challenging levels. Well, here ya go! This puzzle is much more complex, and it also doesn’t lend itself well to functional programming, so you have to get creative in order to make the linter happy. Personally, after I designed the puzzle and wrote the starter code, it took me over 45 minutes to write the solution code. It’s pretty difficult, so hopefully it’ll satisfy the users who want a challenge. I also made a few smaller changes: I removed dev.css’s light mode, because all the rest of my styling is meant for dark mode I set Maple Mono as the preferred font, but I intentionally made it only work if you already have Maple Mono installed, because I know that not everybody likes it I added a special message if you try to run empty code Next, I think I’ll start adding comments to some of the starter code and solution code. I think it’d be helpful for users who aren’t as familiar with JavaScript or function programming, so that they can more easily get acquainted with the starter code, and so that they can learn how the solution works if they choose to use it."}, {"post_id": 43738, "ts": "2026-08-09T04:43:58Z", "hours": 1.0986, "text": "I made a new puzzle! The puzzle involves implementing a Caesar cipher. That’s it, actually. It’s certainly not a very difficult puzzle, but it does contribute to puzzle variety. Also, do you notice the new favicon? No more Svelte logo!"}, {"post_id": 42385, "ts": "2026-08-07T02:27:16Z", "hours": 0.4897, "text": "…i think the user would have more feedback/satisfaction if upon completion, something else happens to let them know they successfully completed a puzzle, something like confetti, or even just the “run” button changing color/text When the puzzle states changes to “passed” (meaning the logic test and linter both passed) from some other status, I made it trigger a confetti effect via canvas-confetti and made the run button turn green. Next, I’m probably going to make a favicon."}, {"post_id": 42359, "ts": "2026-08-07T01:15:08Z", "hours": 0.4586, "text": "One thing: I can just cheese everything by changing the output manually. I recommend you use multiple test cases so i can not just type “return 6” and complete the task. I added secretInput values to the rest of the puzzles to fix the hardcoding cheese. I also mentioned the anti-hardcoding in the README. Next, I’m going to work on adding some confetti and whatnot for when the user’s code passes both the logic test and the linter."}, {"post_id": 41006, "ts": "2026-08-04T21:57:16Z", "hours": 0.7825, "text": "Hi again! It’s been a while. I’m coming back to No Let because when I shipped it the first time, the lovely people who rated it took the time to write really thoughtful feedback and suggest great actionable improvements. So i thought it’d be fun to implement your suggestions (and also I was bored). Here are some excerpts from the feedback I got: One thing: I can just cheese everything by changing the output manually. I recommend you use multiple test cases so i can not just type “return 6” and complete the task. Anyway, my biggest critique would be the lack of levels. I think that adding tiers of difficulty, along with 10-15 more levels would take this project to the highest possible level. …svelte favicon ;)… …i think the user would have more feedback/satisfaction if upon completion, something else happens to let them know they successfully completed a puzzle, something like confetti, or even just the “run” button changing color/text I intend to fix/implement each one of these. With the exception of the “10-15 levels” one; that’s a bit more than I’m willing to make, but I will add some new puzzles. So far, I’ve started implementing the first suggestion. I’m creating secretInput values for each puzzle, and in the test function, after it evaluates the input (which is publicly displayed), it runs the code again using the secretInput . If the code passes the input check but fails the secretInput check, it fails the logic test with this message: Failed secret anti-hardcoding check. You need to generalize your logic. I’ve only added secretInput s for two puzzles so far, so the work is still ongoing."}, {"post_id": 25055, "ts": "2026-07-09T00:36:32Z", "hours": 3.2028, "text": "I wrote the README and also fixed a minor performance bug. Because Prism code editor only initializes once Svelte finishes hydrating, there’s a delay of a few hundred milliseconds between when the page becomes visible and when the editor initializes. This caused a layout shift on each puzzle page, which was making Lighthouse take away a few points in the performance category. So I precalculated the height of each puzzle editor in advance and applied that minimum height to the placeholder text. This fixed the layout shift, so now Lighthouse gives the site perfect 100s in performance, best practices, and SEO, which is cool."}, {"post_id": 24392, "ts": "2026-07-07T22:22:32Z", "hours": 0.7942, "text": "I just added some error handling for infinite loops and infinite recursion. Before, if you wrote while (true) {} in the editor and pressed run, it would permanently lock up the UI and crash the browser tab. Now the logic test just interrupts the execution after 1000ms and fails your code for taking too long. Likewise, if you wrote const r=()=>r();r(); and ran it, QuickJS would silently throw an uncaught error and the logic test would be stuck at “Waiting…” forever. Now it just instantly fails the code because it recurses too deeply and QuickJS can’t execute it. I’m probably going to ship No Let soon, unless I have more puzzle ideas, find more bugs to patch, or think of more features to add."}, {"post_id": 23943, "ts": "2026-07-07T04:44:58Z", "hours": 3.4903, "text": "I spent the last 3.5 hours making a single puzzle. It’s the hardest puzzle yet and took the most time to create, and by a lot. The puzzle is called Headcount, and it involves extracting a total count from a deeply-nested data object. I considered using nested arrays instead, but that would have a pretty trivial solution: return input.flat(Infinity).length . JS has far fewer built-in utilities for manipulating objects than it does for arrays, so I figured that using objects would pose more of a challenge, which I think it does. You can play the new puzzle here: https://ethmarks.github.io/nolet/headcount ."}, {"post_id": 23703, "ts": "2026-07-06T20:13:38Z", "hours": 1.945, "text": "I added more puzzles and wrote a congrats page for users who finish the whole site. The congrats page finally gave me the excuse to reference xkcd 1312 , which I’d been dying to do since I started this project. Next, I just need to make more puzzles. I have 4 so far, which I don’t think is nearly enough. Puzzle design is really hard though."}, {"post_id": 23105, "ts": "2026-07-05T21:00:44Z", "hours": 11.4647, "text": "I’ve made a lot of progress since my last devlog. I’d say that No Let is basically feature-complete now. All that’s left to do is adding polish and creating a bunch more puzzles. You can try No Let right now at https://ethmarks.github.io/nolet/ . Here are some of the highlights of the changes in this devlog. I added the Output.svelte component that runs the logic test and the linter and outputs their results into a human-readable HTML list. I also made it use Svelte’s slide transition , which required a lot of refactoring . I made each puzzle a separate page. I was originally planning on making the site an SPA, but I decided that a MPA was probably a better fit. Because the puzzles are defined as classes and not as separate Svelte routes, I had to add a dynamic route. I’m using SvelteKit’s static adapter because I prefer static sites, but that meant that I had to tell SvelteKit which pages to prerender. I added description text and suggested solutions for each puzzle. The descriptions provide instructions, tips, and flavor text, and the solutions should keep users from getting stuck or frustrated. But most of the work I did has been refactors, fixes, and creating new puzzles."}, {"post_id": 22007, "ts": "2026-07-04T07:34:27Z", "hours": 6.9069, "text": "So my idea for this project is that it’s a JavaScript puzzle site which forces you to use pure functional programming , which means that you aren’t allowed to use let or anything else with mutable state. Basically, pure functional programming says that you should never ever reassign variables after you declare them. Ever. Because you can’t reassign variables, you also can’t increment counters, which means that it’s impossible to use for loops. The same logic applies to while loops, and to a few other things. These extremely restrictive self-imposed limitations force you to do things the functional programming way, which involves lambda calculus, recursive functions, currying, etc. I think that this project will have four main parts. I’ve been working on it for about 7 hours and I’ve made some good progress, but there’s still a lot to do. Running the user’s code and reading the result. I can just wrap quickjs-emscripten and remove a few built-in methods like Math.random() that are considered “impure” by functional programming because they’re non-deterministic. Linting the user’s code to check if it uses any banned syntax like let . I can use acornjs to parse the code into an AST, then applying a bunch of custom rules to it. Allowing the user to write their code. The conventional choice would be to use Monaco or CodeMirror, but they’re extremely heavy and I don’t like VSCode anyways, so I’m going with Prism code editor , which is much lighter and in my opinion nicer. Having puzzles for the user to complete. Each puzzle should have a test function that can check if the code logic is correct, and also should have some initial code that has correct logic but fails the linting because it uses let and whatnot. Right now I have minimal versions of parts 1, 2, and 3. They do work (mostly), but they’re missing features and don’t integrate well with each other."}]...
|
Title: No Let by @ethmarks | Stardance
Devlogs:
S Title: No Let by @ethmarks | Stardance
Devlogs:
So my idea for this project is that it’s a JavaScript puzzle site which forces you to use pure functional programming , which means that you aren’t allowed to use let or anything else with mutable state. Basically, pure functional programming says that you should never ever reassign variables after you declare them. Ever. Because you can’t reassign variables, you also can’t increment counters, which means that it’s impossible to use for loops. The same logic applies to while loops, and to a few other things. These extremely restrictive self-imposed limitations force you to do things the functional programming way, which involves lambda calculus, recursive functions, currying, etc. I think that this project will have four main parts. I’ve been working on it for about 7 hours and I’ve made some good progress, but there’s still a lot to do. Running the user’s code and reading the result. I can just wrap quickjs-emscripten and remove a few built-in methods like Math.random() that are considered “impure” by functional programming because they’re non-deterministic. Linting the user’s code to check if it uses any banned syntax like let . I can use acornjs to parse the code into an AST, then applying a bunch of custom rules to it. Allowing the user to write their code. The conventional choice would be to use Monaco or CodeMirror, but they’re extremely heavy and I don’t like VSCode anyways, so I’m going with Prism code editor , which is much lighter and in my opinion nicer. Having puzzles for the user to complete. Each puzzle should have a test function that can check if the code logic is correct, and also should have some initial code that has correct logic but fails the linting because it uses let and whatnot. Right now I have minimal versions of parts 1, 2, and 3. They do work (mostly), but they’re missing features and don’t integrate well with each other.
I’ve made a lot of progress since my last devlog. I’d say that No Let is basically feature-complete now. All that’s left to do is adding polish and creating a bunch more puzzles. You can try No Let right now at https://ethmarks.github.io/nolet/ . Here are some of the highlights of the changes in this devlog. I added the Output.svelte component that runs the logic test and the linter and outputs their results into a human-readable HTML list. I also made it use Svelte’s slide transition , which required a lot of refactoring . I made each puzzle a separate page. I was originally planning on making the site an SPA, but I decided that a MPA was probably a better fit. Because the puzzles are defined as classes and not as separate Svelte routes, I had to add a dynamic route. I’m using SvelteKit’s static adapter because I prefer static sites, but that meant that I had to tell SvelteKit which pages to prerender. I added description text and suggested solutions for each puzzle. The descriptions provide instructions, tips, and flavor text, and the solutions should keep users from getting stuck or frustrated. But most of the work I did has been refactors, fixes, and creating new puzzles.
I added more puzzles and wrote a congrats page for users who finish the whole site. The congrats page finally gave me the excuse to reference xkcd 1312 , which I’d been dying to do since I started this project. Next, I just need to make more puzzles. I have 4 so far, which I don’t think is nearly enough. Puzzle design is really hard though.
I spent the last 3.5 hours making a single puzzle. It’s the hardest puzzle yet and took the most time to create, and by a lot. The puzzle is called Headcount, and it involves extracting a total count from a deeply-nested data object. I considered using nested arrays instead, but that would have a pretty trivial solution: return input.flat(Infinity).length . JS has far fewer built-in utilities for manipulating objects than it does for arrays, so I figured that using objects would pose more of a challenge, which I think it does. You can play the new puzzle here: https://ethmarks.github.io/nolet/headcount .
I just added some error handling for infinite loops and infinite recursion. Before, if you wrote while (true) {} in the editor and pressed run, it would permanently lock up the UI and crash the browser tab. Now the logic test just interrupts the execution after 1000ms and fails your code for taking too long. Likewise, if you wrote const r=()=>r();r(); and ran it, QuickJS would silently throw an uncaught error and the logic test would be stuck at “Waiting…” forever. Now it just instantly fails the code because it recurses too deeply and QuickJS can’t execute it. I’m probably going to ship No Let soon, unless I have more puzzle ideas, find more bugs to patch, or think of more features to add.
I wrote the README and also fixed a minor performance bug. Because Prism code editor only initializes once Svelte finishes hydrating, there’s a delay of a few hundred milliseconds between when the page becomes visible and when the editor initializes. This caused a layout shift on each puzzle page, which was making Lighthouse take away a few points in the performance category. So I precalculated the height of each puzzle editor in advance and applied that minimum height to the placeholder text. This fixed the layout shift, so now Lighthouse gives the site perfect 100s in performance, best practices, and SEO, which is cool.
Hi again! It’s been a while. I’m coming back to No Let because when I shipped it the first time, the lovely people who rated it took the time to write really thoughtful feedback and suggest great actionable improvements. So i thought it’d be fun to implement your suggestions (and also I was bored). Here are some excerpts from the feedback I got: One thing: I can just cheese everything by changing the output manually. I recommend you use multiple test cases so i can not just type “return 6” and complete the task. Anyway, my biggest critique would be the lack of levels. I think that adding tiers of difficulty, along with 10-15 more levels would take this project to the highest possible level. …svelte favicon ;)… …i think the user would have more feedback/satisfaction if upon completion, something else happens to let them know they successfully completed a puzzle, something like confetti, or even just the “run” button changing color/text I intend to fix/implement each one of these. With the exception of the “10-15 levels” one; that’s a bit more than I’m willing to make, but I will add some new puzzles. So far, I’ve started implementing the first suggestion. I’m creating secretInput values for each puzzle, and in the test function, after it evaluates the input (which is publicly displayed), it runs the code again using the secretInput . If the code passes the input check but fails the secretInput check, it fails the logic test with this message: Failed secret anti-hardcoding check. You need to generalize your logic. I’ve only added secretInput s for two puzzles so far, so the work is still ongoing.
One thing: I can just cheese everything by changing the output manually. I recommend you use multiple test cases so i can not just type “return 6” and complete the task. I added secretInput values to the rest of the puzzles to fix the hardcoding cheese. I also mentioned the anti-hardcoding in the README. Next, I’m going to work on adding some confetti and whatnot for when the user’s code passes both the logic test and the linter.
…i think the user would have more feedback/satisfaction if upon completion, something else happens to let them know they successfully completed a puzzle, something like confetti, or even just the “run” button changing color/text When the puzzle states changes to “passed” (meaning the logic test and linter both passed) from some other status, I made it trigger a confetti effect via canvas-confetti and made the run button turn green. Next, I’m probably going to make a favicon.
I made a new puzzle! The puzzle involves implementing a Caesar cipher. That’s it, actually. It’s certainly not a very difficult puzzle, but it does contribute to puzzle variety. Also, do you notice the new favicon? No more Svelte logo!
Hi! It’s been a while. Again. The highlight of this devlog is the new puzzle: Conway’s Game of Life. In the feedback on my first ship, several people mentioned that they wanted more challenging levels. Well, here ya go! This puzzle is much more complex, and it also doesn’t lend itself well to functional programming, so you have to get creative in order to make the linter happy. Personally, after I designed the puzzle and wrote the starter code, it took me over 45 minutes to write the solution code. It’s pretty difficult, so hopefully it’ll satisfy the users who want a challenge. I also made a few smaller changes: I removed dev.css’s light mode, because all the rest of my styling is meant for dark mode I set Maple Mono as the preferred font, but I intentionally made it only work if you already have Maple Mono installed, because I know that not everybody likes it I added a special message if you try to run empty code Next, I think I’ll start adding comments to some of the starter code and solution code. I think it’d be helpful for users who aren’t as familiar with JavaScript or function programming, so that they can more easily get acquainted with the starter code, and so that they can learn how the solution works if they choose to use it.
How the heck did this take 2 hours… All that I did in this devlog was improve the Conway’s Game of Life puzzle a bit. I rewrote some of the starter and solution code for simplicity (I can’t believe I forgot about the .flatMap() method), and I also wrote a bunch of comments that explain the starter code and solution code. Next, I think I’ll add a difficulty indicator for the puzzles. I think I’ll probably be ready to re-ship after that!
Final devlog before ship #2 I added difficulty ratings for each puzzle I moved the logic/linter output (aka the checklist) right above the “run” button because it makes more sense there I updated the README and added some screenshots
Ships:
No Let is a JavaScript puzzle site where you have to use pure functional programming, which means that you aren’t allowed to use let variables or anything else with mutable state. I learned how to use QuickJS-emscripten, Prism code editor, and AcornJS, all of which are skills that I intend to reuse for later projects. I also learned a lot about pure functional programming itself while designing the puzzles. I’m especially proud of how the linter/test messages smoothly animate in and out. The animation itself was just a simple slide transition with Svelte, but in order to make it work I had to refactor and unify the error message generation into one big array, which was unexpectedly difficult.
No Let: a JS puzzle site where you aren’t allowed to use let or anything with mutable state. This second ship was about implementing the fantastic suggestions in the feedback I got from my first ship. I added anti-hardcoding checks to stop people from cheesing the puzzles I added two new levels, including a very difficult one I added confetti and visual feedback when a user completes a puzzle I added a favicon …Plus a handful of small tweaks and improvements I’m looking forward to reading the feedback I get this time :)...
|
1793127240.641565
|
1793213640.641565
|
|
32857
|
Personal Portfolio Website by @Sourish-D | Stardan Personal Portfolio Website by @Sourish-D | Stardance...
|
Sourish-D
|
1
|
38.0
|
444
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-28T16:54:04Z", "hours": 38.0, "multiplier": 12.86, "payout": 444, "blessing": "neutral", "text": "I made a site to showcase my projects, achievements, and skills using React, Vite, and deployed on Vercel. Initially, I planned to make this on HTML, CSS, and JS but then realized there were a lot of repeated components, and that adding more in the future would be a lot harder, so I made a full switch to react. This also allowed me to make use of state fields which made the animations so much easier. The API connections are also a little bit difficult at the moment, the leetcode API especially tends to lose it’s tokens really quickly and I tried circumventing that using local cache but it doesn’t seem to be working exactly as intended. I’ll probably fix that in the future, but the Last.FM (The music section) and the Github APIs work as intended. But yeah, I’m proud of the animations and the responsive design, and I believe this is the best site I’ve made. So, without further delay, welcome to my personal website!", "repo": "https://github.com/Sourish-D/Portfolio-Website", "demo": "https://my-portfolio-pi-sand-83.vercel.app/"}]...
|
[{"post_id": 56648, "ts": "202 [{"post_id": 56648, "ts": "2026-08-28T14:20:44Z", "hours": 7.8725, "text": "Final Devlog Before Ship! There was a LOT of changes I made in this devlog, mostly in preparation for ship. First, I added the Github and Leetcode API connections. Next, I made the site responsive, allowing phones and tablets to be able to view the site Afterwards, I did a LOT of refactoring in the code and reviewing the requirements to ship Changed the .readme file Found out that I was making HORRIBLE commit names and tried changing it and found out rebasing ruins your entire history and gave up on that Refactored my code to make it a cleaner (Found out what refactoring means too) Changed the Github and Leetcode APIs AGAIN because it kept running into rate limits But now it’s done and I believe ready to ship!"}, {"post_id": 54713, "ts": "2026-08-25T19:45:55Z", "hours": 2.9658, "text": "Beginning of backend! Today I managed to get the back-end started with Vercel and now I have Last.FM API integration! At first, I tried using Spotify for the API but then I found out it requires premium, so I decided to switch over to Last.FM for the statistics. Back-end integration was a HASSLE, it took me forever to find out that I had to put the .env.local api keys in the vercel page as well."}, {"post_id": 54145, "ts": "2026-08-24T23:44:22Z", "hours": 8.8431, "text": "This devlog, I added a bunch of animations and began styling. As you scroll, the arms move components on/off the screen and I added a parchment and gold border theme to all the blocks. Soon, I’m going to change it to have a more consistent and varied theme, and then I’ll connect the APIs."}, {"post_id": 47206, "ts": "2026-08-14T23:37:01Z", "hours": 13.0169, "text": "Devlog 3 I decided to change site from HTML / CSS to React. This was because I just like the React framework a lot more and it’ll make it easier to update it in the future. I also changed the entire structure of the page, adding a background and projects page. For now, it’s all in simple colors and styling, but soon I’ll add an opus magnum (video game) theme across the whole site. Currently I have basic animations, as I apply the theme across the site I may add several smaller animations just to add to the ‘mechanical’ feel of it. I also have to begin API integration with Spotify, Github, etc. to complete the site. The video is just a quick run-through of everything."}, {"post_id": 26254, "ts": "2026-07-10T22:43:55Z", "hours": 2.5003, "text": "Added Certificates Page and Web Dev Projects page. Modified the top bar a bit and added many more assets. The last stretch includes re-learning how to open my old java projects that use mySQL (I got locked out 😭😭) and to add a page talking about my current projects, stuff about the ESP2."}, {"post_id": 25097, "ts": "2026-07-09T02:38:17Z", "hours": 2.3428, "text": "Today, we began the project. Creating the home-bar and the drop-down associated with. Also began working on the “about me” section. Will work towards adding more information in that section. Tomorrow, will work on the certificates and languages pages."}]...
|
Title: Personal Portfolio Website by @Sourish-D | Title: Personal Portfolio Website by @Sourish-D | Stardance
Devlogs:
Today, we began the project. Creating the home-bar and the drop-down associated with. Also began working on the “about me” section. Will work towards adding more information in that section. Tomorrow, will work on the certificates and languages pages.
Added Certificates Page and Web Dev Projects page. Modified the top bar a bit and added many more assets. The last stretch includes re-learning how to open my old java projects that use mySQL (I got locked out 😭😭) and to add a page talking about my current projects, stuff about the ESP2.
Devlog 3 I decided to change site from HTML / CSS to React. This was because I just like the React framework a lot more and it’ll make it easier to update it in the future. I also changed the entire structure of the page, adding a background and projects page. For now, it’s all in simple colors and styling, but soon I’ll add an opus magnum (video game) theme across the whole site. Currently I have basic animations, as I apply the theme across the site I may add several smaller animations just to add to the ‘mechanical’ feel of it. I also have to begin API integration with Spotify, Github, etc. to complete the site. The video is just a quick run-through of everything.
This devlog, I added a bunch of animations and began styling. As you scroll, the arms move components on/off the screen and I added a parchment and gold border theme to all the blocks. Soon, I’m going to change it to have a more consistent and varied theme, and then I’ll connect the APIs.
Beginning of backend! Today I managed to get the back-end started with Vercel and now I have Last.FM API integration! At first, I tried using Spotify for the API but then I found out it requires premium, so I decided to switch over to Last.FM for the statistics. Back-end integration was a HASSLE, it took me forever to find out that I had to put the .env.local api keys in the vercel page as well.
Final Devlog Before Ship! There was a LOT of changes I made in this devlog, mostly in preparation for ship. First, I added the Github and Leetcode API connections. Next, I made the site responsive, allowing phones and tablets to be able to view the site Afterwards, I did a LOT of refactoring in the code and reviewing the requirements to ship Changed the .readme file Found out that I was making HORRIBLE commit names and tried changing it and found out rebasing ruins your entire history and gave up on that Refactored my code to make it a cleaner (Found out what refactoring means too) Changed the Github and Leetcode APIs AGAIN because it kept running into rate limits But now it’s done and I believe ready to ship!
Ships:
I made a site to showcase my projects, achievements, and skills using React, Vite, and deployed on Vercel. Initially, I planned to make this on HTML, CSS, and JS but then realized there were a lot of repeated components, and that adding more in the future would be a lot harder, so I made a full switch to react. This also allowed me to make use of state fields which made the animations so much easier. The API connections are also a little bit difficult at the moment, the leetcode API especially tends to lose it’s tokens really quickly and I tried circumventing that using local cache but it doesn’t seem to be working exactly as intended. I’ll probably fix that in the future, but the Last.FM (The music section) and the Github APIs work as intended. But yeah, I’m proud of the animations and the responsive design, and I believe this is the best site I’ve made. So, without further delay, welcome to my personal website!...
|
1793105587.8921962
|
1793191987.8921962
|
|
37145
|
Floppy FS (File System) by @UmarFarooq | Stardance
|
UmarFarooq
|
1
|
38.0
|
322
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-02T17:35:30Z", "hours": 38.0, "multiplier": 16.91, "payout": 322, "blessing": "neutral", "text": "Floppy FS is a file system that runs entirely in the browser. It has two modes, UI and terminal. here are its features: UI: Create files and folders. Different type of files (text, image and video, pdf and word files supported). Right click anywhere on the screen to open context menu and perform actions. Right click on a file to perform actions on that specific file. Breadcrumb is available to show exactly where is the user. Floppy Notepad available to edit text files. Floppy Image Viewer available to view image files. Floppy Video Player for playing videos. Floppy PDF Viewer for reading PDFs. Displaying notifications using react-hot-toast . A search bar to search files in current directory. Full CRUD functionality is available. Unique icon for each type of file. Copy/Cut > Paste functionality is available thorugh context menu. Grid/List view available. View details for files/folders in list view. Sort by name, date created and size. Download files. For folders, it downloads the zip file. Terminal: Dark themed terminal for moving around the file system. ls -la for displaying all the files/folders in current directory. cat <file> for viewing the content stored in file. cd <folder> for changing directory. touch <file> for creating files. mkdir <folder> for creating folders. rm <target> for deleting file or folder. rename <old> <new> for renaming files/folders. cat <file> for viewing content of text files. edit <file> for opening file in the editor. tree for viewing tree view of the folder. export <file> for downloading files. clear for clearing the terminal.", "repo": "https://github.com/Umar-Farooq-5757/floppy-fs", "demo": "https://floppyfs.vercel.app/"}]...
|
[{"post_id": 60361, "ts": "202 [{"post_id": 60361, "ts": "2026-09-02T17:27:56Z", "hours": 5.8117, "text": "Here is the Final devlog before shipping. Added a bunch of new features and improved UI/UX. Features added: Sort by name, date created and size. Download files. For folders, it downloads the zip file. Grid/List view available. View details for files/folders in list view. Added support for pdf files and word documents. Included size property with every file/folder. New commands in terminal: rename <old> <new> for renaming files/folders. tree for viewing tree view of the folder. export <file> for downloading files."}, {"post_id": 58788, "ts": "2026-08-31T11:15:20Z", "hours": 4.1461, "text": "Welcome to devlog #7 of Floppy FS. I’ve added a bunch of new terminal commands and added Copy/Cut > Paste functionality in the UI mode. Right click to open context menu and perform copy/cut > paste. New terminal commands: touch <filename> for creating files. mkdir <foldername> for creating folders. rm <target> for deleting file or folder. edit <filename> for opening file in the editor."}, {"post_id": 57542, "ts": "2026-08-29T18:31:11Z", "hours": 7.8792, "text": "Introducing terminal mode. Now, you can move around the Floppy File System and perform actions using terminal commands. Available commands for now: ls for displaying all the files/folders in current directory. cat <filename> for viewing the content stored in file. cd <foldername> for changing directory. clear for clearing the terminal. More commands will be added soon. I’m actively working on this project."}, {"post_id": 55481, "ts": "2026-08-27T11:07:09Z", "hours": 2.9756, "text": "Here’s the devlog #5 of Floppy File System. The UX is improved (pressing enter when creating new file or folder creates them). Plus, users can also rename files and folders now by right clicking the file or folder and then selecting rename from context menu. And some improvements in utility functions."}, {"post_id": 54949, "ts": "2026-08-26T11:30:06Z", "hours": 6.6528, "text": "Welcome to devlog #4. Here are the changes and new features I’ve added: Now, the support for image and video files is added. Created “Floppy Image Viewer” for viewing images. Added filename extensions (.txt, .png, .mp4)"}, {"post_id": 53024, "ts": "2026-08-23T12:31:17Z", "hours": 1.6842, "text": "Welcome to devlog #3 of Floppy File System. Here are the changes for this devlog. The whole CRUD (Create, Read, Update, Delete) functionality is working now. Designed two custom context menus. The general one for whole screeen. And a node specific context menu: When you right click on a file or folder, you can perform actions on it. The breadcrumb is working now. You can click on any folder name in the breadcrumb section (section to the left of search box) to jump directly to that folder."}, {"post_id": 52567, "ts": "2026-08-22T19:04:14Z", "hours": 1.5283, "text": "Here is the devlog #2 of Floppy FS. I have updated a little bit UI and added some features: Changed the icon of files and folders like windows file explorer. Now, you can actually edit the content of text files. Also, added the search functionality for searching files and folders. Notifications are available now for feedback of important actions."}, {"post_id": 52124, "ts": "2026-08-22T06:48:14Z", "hours": 7.3875, "text": "Welcome to the first devlog of Floppy FS, a file system that runs entirely in the browser. Here are the features that I have completed building: Create files and folders. View files/folders as a grid view like windows file explorer. Notepad UI for viewing file contents. Custom context menu available for performing actions. Storing all the data in browser’s indexed db."}]...
|
Title: Floppy FS (File System) by @UmarFarooq | St Title: Floppy FS (File System) by @UmarFarooq | Stardance
Devlogs:
Welcome to the first devlog of Floppy FS, a file system that runs entirely in the browser. Here are the features that I have completed building: Create files and folders. View files/folders as a grid view like windows file explorer. Notepad UI for viewing file contents. Custom context menu available for performing actions. Storing all the data in browser’s indexed db.
Here is the devlog #2 of Floppy FS. I have updated a little bit UI and added some features: Changed the icon of files and folders like windows file explorer. Now, you can actually edit the content of text files. Also, added the search functionality for searching files and folders. Notifications are available now for feedback of important actions.
Welcome to devlog #3 of Floppy File System. Here are the changes for this devlog. The whole CRUD (Create, Read, Update, Delete) functionality is working now. Designed two custom context menus. The general one for whole screeen. And a node specific context menu: When you right click on a file or folder, you can perform actions on it. The breadcrumb is working now. You can click on any folder name in the breadcrumb section (section to the left of search box) to jump directly to that folder.
Welcome to devlog #4. Here are the changes and new features I’ve added: Now, the support for image and video files is added. Created “Floppy Image Viewer” for viewing images. Added filename extensions (.txt, .png, .mp4)
Here’s the devlog #5 of Floppy File System. The UX is improved (pressing enter when creating new file or folder creates them). Plus, users can also rename files and folders now by right clicking the file or folder and then selecting rename from context menu. And some improvements in utility functions.
Introducing terminal mode. Now, you can move around the Floppy File System and perform actions using terminal commands. Available commands for now: ls for displaying all the files/folders in current directory. cat <filename> for viewing the content stored in file. cd <foldername> for changing directory. clear for clearing the terminal. More commands will be added soon. I’m actively working on this project.
Welcome to devlog #7 of Floppy FS. I’ve added a bunch of new terminal commands and added Copy/Cut > Paste functionality in the UI mode. Right click to open context menu and perform copy/cut > paste. New terminal commands: touch <filename> for creating files. mkdir <foldername> for creating folders. rm <target> for deleting file or folder. edit <filename> for opening file in the editor.
Here is the Final devlog before shipping. Added a bunch of new features and improved UI/UX. Features added: Sort by name, date created and size. Download files. For folders, it downloads the zip file. Grid/List view available. View details for files/folders in list view. Added support for pdf files and word documents. Included size property with every file/folder. New commands in terminal: rename <old> <new> for renaming files/folders. tree for viewing tree view of the folder. export <file> for downloading files.
Ships:
Floppy FS is a file system that runs entirely in the browser. It has two modes, UI and terminal. here are its features: UI: Create files and folders. Different type of files (text, image and video, pdf and word files supported). Right click anywhere on the screen to open context menu and perform actions. Right click on a file to perform actions on that specific file. Breadcrumb is available to show exactly where is the user. Floppy Notepad available to edit text files. Floppy Image Viewer available to view image files. Floppy Video Player for playing videos. Floppy PDF Viewer for reading PDFs. Displaying notifications using react-hot-toast . A search bar to search files in current directory. Full CRUD functionality is available. Unique icon for each type of file. Copy/Cut > Paste functionality is available thorugh context menu. Grid/List view available. View details for files/folders in list view. Sort by name, date created and size. Download files. For folders, it downloads the zip file. Terminal: Dark themed terminal for moving around the file system. ls -la for displaying all the files/folders in current directory. cat <file> for viewing the content stored in file. cd <folder> for changing directory. touch <file> for creating files. mkdir <folder> for creating folders. rm <target> for deleting file or folder. rename <old> <new> for renaming files/folders. cat <file> for viewing content of text files. edit <file> for opening file in the editor. tree for viewing tree view of the folder. export <file> for downloading files. clear for clearing the terminal....
|
1793123658.825474
|
1793210058.825474
|
|
37455
|
MacForms by @tonymac129 | Stardance
|
tonymac129
|
1
|
38.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T03:17:27Z", "hours": 38.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I finally finished MacForms, an extensive, customizable, and feature-rich form creation tool for you to create surveys, forms, and quizzes with question options like multiple choice, multiple select, short answer, long answer, and more! To use it, simply sign in to a MacWeb account or select guest mode (which hopefully reduces voting friction). There are also a lot of different form settings for presentation, response management, quiz accuracy, visibility, and public/private forms, as well as options to invite collaborators to work on and manage the form together. You can browse other people’s forms and search your own forms as well. You can also visualize and view response statistics and individual responses with graphs and question response lists. The entire platform supports light/dark mode, smooth animations and transition effects, responsive design, accessibility, and SEO, as well as other quality of life improvements that hopefully make the website’s UI and UX more intuitive and user friendly. The codebase is surprisingly complex (and poorly organized :( , but I somehow managed to make everything work as expected. I really had a lot of fun working on and trying out this project myself, so hopefully yall will like it too :)", "repo": "https://github.com/Mac-Web/macforms", "demo": "https://macforms.macweb.app"}]...
|
[{"post_id": 81391, "ts": "202 [{"post_id": 81391, "ts": "2026-10-21T03:10:05Z", "hours": 0.9758, "text": "Quick final devlog before shipping!!! I finally finished all the features, customization, and everything else I planned to implement for MacForms after working (but mostly procrastinating) on it for more than 3 months ! I have no clue why this wasn’t done earlier, but I added a multiple select option for multiple choice questions to allow respondents to select multiple options (which also works with quizzes and other edge cases) Similarly, I also added an option to mark free response/text questions as having a long answer to render a textarea instead of the normal input field for more customization I already added most of these features while planning out the types and schemas, but somehow never implemented it, so it was kind of confusing but I was able to create them more quickly and easily that I’d expected Added guest mode so yall can actually try out the form engine without signing up (is that low enough friction for you guys ) Updated styling and readme Polished some other stuff for shipping! I’ve already wasted so much of Stardance’s extension not shipping any of my projects , so I panicked when I realized there was only 10 days left and forced myself to actually get to work and finish this project, hopefully you’ll enjoy and like it as much as I do :)"}, {"post_id": 78807, "ts": "2026-10-11T17:45:46Z", "hours": 2.6433, "text": "Individual responses and form options You can now also see, select, and manage each individual response to view in detail instead of only seeing summary graphs/tables of all the responses combined There’s a new dropdown on the form responses page where you can either view the summary stats/answers of all responses (default), or select every individual response to view its answer to each question, submission/edit date and time, accuracy (if the form is a quiz), as well as an option to delete the response after confirmation to make viewing responses easier and more useful If you make your form a quiz and designate certain questions as having correct answers, you can now finally select one or multiple options to all be correct for each question! This took a surprisingly long time since I had to fix a lot of bugs based on the old system Added sorting, filtering, and ordering dropdowns and options to the public form browse page to make finding and viewing different forms a lot easier I just realized there are a few bugs in prod while recording the video, so looks like more fun bug fixing in the next devlog Updated types and backend schemas to accept the new options Updated styling and colors I am now dedicating most of my time on (really amazing event btw), so I can only work on trying to finish and ship my Stardance projects on the little time I have on weekends, so hopefully I’ll be able to ship MacForms this weekend and finally finish my other Stardance projects before it ends"}, {"post_id": 76896, "ts": "2026-10-04T23:55:06Z", "hours": 3.3086, "text": "A bunch of small additions and changes! Added the Browse tab where you can see all the published public forms that other people made on MacForms! You can explore all the different forms easily with the search bar Finally added a nav search bar that actually works (instead of the old placeholder) by querying the new API endpoint for either your own forms or other people’s public forms so you can access everything faster and more easily Search results are matched by both title and description to be more useful, and your own forms take you directly to the edit page while others’ forms take you to the form filling page Added a bunch of smooth animations and transition effects for page loads, interactions, and search/filter results to improve user experience and interactivity Added responsive design on all the pages and components so MacForms is accessible and functional on all screen sizes Added feature description sections, icons, and buttons on the home landing page I have no idea why this was even a thing before, but now you can actually access the form pages and fill out the forms without being logged in Apparently my thought all get requests had to pass the auth gate or something, but now it’s fixed Removed the Settings tab (not form settings), because I couldn’t figure out anything to put there since I already have account settings on MacWeb, a separate form settings tab, and a dark/light mode toggle Updated styling and layout Fixed a few display bugs"}, {"post_id": 72023, "ts": "2026-09-22T00:50:01Z", "hours": 4.1978, "text": "MacForms is back: form settings and light mode! After taking a break from working on MacForms for 2 months to work on other projects, prepare for school, and do a lot of other stuff, I’m finally back to developing this project and getting it ready to ship before Stardance ends in 9 days! (plz extend the end date ) In this pretty massive devlog, I added a new settings tab to the form editing page where you can customize the published form’s presentation and many other options here are the settings I implemented, there might be other important stuff I forgot: whether to shuffle questions randomly whether to shuffle the multiple choice options for each question a custom background color for the top banner allow respondents to submit another response allow respondents to edit their submitted responses Because I couldn’t figure out a way (if there is one) to implement the last 2 without using accounts or cookies, if a form has either of the 2 enabled, you’ll need to sign in first to fill out the form Added a light/dark mode toggle option to the nav user dropdown menu for you to easily customize the site’s appearance and switch between light and dark modes Since I had to manually go through basically every component and page of the entire platform to modify the elements’ Tailwind classes for this, it also gave me a chance to refresh my memory of the project’s structure and how it works because I was gone for so long Going through all the files and testing the 2 modes was a long and tedious process, but the result turned out pretty well, both are consistent and visually appealing, and there’s also a smooth color transition Added a top loading indicator bar to improve the UX since some pages take a bit to load and the site may look unresponsive without the loading bar Fixed a few math bugs with 0s and NaNs and display bugs with the colors, layout, placeholder, and other styling Because Stardance is ending so soon and because of my procrastination and laziness, I’m going to have to cut a lot of the originally planned features before shipping since I have another big project to ship, so hopefully I can finish some last few features and polish MacForms and ship it soon!"}, {"post_id": 37716, "ts": "2026-07-30T16:54:37Z", "hours": 1.9336, "text": "Publish & share form You can now publish and share your forms for the rest of the world to see and fill out! Clicking on the publish button on the tool bar now opens a modal where you can either publish/unpublish the form or copy the link and send it to people If the form is already published, you can see its public link and an option to shorten it. Shortening it creates a unique 8-digit shortcut id for the form that redirects you to the main form (I’m planning on shortening it even more by buying a cool short domain or something, but that’s probably not gonna happen any time soon) You can also unpublish the form after a confirmation warning by clicking on the unpublish button If the form hasn’t been published yet, you can publish it by clicking on the publish button (in case this isn’t already obvious ) Updated some permissions so collaborators can also manage the form’s publication visibility status (instead of only the owner) Updated schema and types"}, {"post_id": 37141, "ts": "2026-07-29T17:06:56Z", "hours": 2.0547, "text": "Score distribution & autosave Added a quiz results summary section on the responses tab that shows some useful statistics about the scores as well as a histogram showing the score distribution if your form is a quiz It dynamically calculates scores based on the latest updated quiz, then organizes them and calculates their mean, median, min, and max in percentages It also renders a custom histogram with bins of 10 ranging from 0 to 100 so you can visualize how well your respondents did in one glance (server rendered + no Chart.js or external libraries = almost instantaneous load time) The histogram also shows the percentages of scores, and you can see how many responses are in each bin by hovering over the bar There’s also a view scores button that displays a modal showing each individual score Added autosave for editing forms that autosaves the entire form in the background every minute without revalidating the frontend to ensure smooth UX. The bar also shows the autosave status for a few seconds telling you it autosaved Added collaborator access so they can actually edit and manage the form and view responses without getting redirected. Updated some backend operations to ensure permissions are correct as well Fixed form editing so it actually updates the form and each question individually instead of creating a completely new set of it and neglecting the originally existing relations (~50 lines of code for one database transaction , but Prisma is actually so nice 🥹) Added filters and sort methods for shared forms vs forms you own (shared forms now display on the forms page)"}, {"post_id": 36789, "ts": "2026-07-29T02:03:54Z", "hours": 2.9133, "text": "Invite collaborators & update form You can now invite collaborators that will have access to edit the form, see its responses, and manage its settings! Only the form owner/creator can delete the form and invite and remove people, but invited people can basically do everything else On the invite modal page, you can search for MacWeb accounts by their name, email, or about through an API endpoint I added, and select multiple people to invite to the form at once Once you send out the invitation, you’ll see the users added to the form on the modal, and you can remove their access by clicking on the trash icon as well There isn’t real time form collaborative editing (at least not yet, though I don’t plan on overcomplicating a simple form app to be like Google Forms ), but changes you make to the form are revalidated the moment you click on save You can now actually edit and update your form by going to the edit tab and editing the form and its questions. This was actually fairly easy to implement since I just had to use the component used for the form creation page and update a few things Optimized database operations and API calls Updated schema and types Updated styling"}, {"post_id": 36475, "ts": "2026-07-28T16:42:14Z", "hours": 3.4131, "text": "Edit form & response pages Finally added the form editing page where you’ll be able to edit the entire form (title, description, questions, etc.), view response summaries and statistics, and configure its submission settings and other defaults When you click on one of your forms on the forms tab, you get redirected to the edit page that has a top utility bar with the form’s name displayed (you can rename the form by clicking on it) and 3 tabs for you to switch between edit, response, and settings modes On the right of the bar, there’s also an invite button, a preview form button, and a publish button (currently doesn’t work yet ) Clicking on the invite button opens a modal where you can either invite another MacWeb account to be a permanent collaborator (of course it doesn’t work yet), or generate a one-time single-use invite link/code that allows anyone (with or without an account) with the access code to edit the form using a custom access token cookie that expires after an hour Making this cookie access thing work was actually a bit more complicated than I thought, so I spent some time debugging the logic but it was pretty fun When you use the access code to edit a form, a page shows up confirming the access, and invalidates the code after confirming When you click on the responses tab, you can see all the responses and answers grouped by question to make visualizing and summarizing people’s responses a lot easier (definitely didn’t take inspo from Google Forms ) If the question is multiple choice, it shows how many responses each option got with percentages and presents it in sort of a bar graph If the question is free responses, it just lists each response Added placeholder tabs for editing and settings Added SEO for these tabs Updated types and schema Updated styling"}, {"post_id": 36034, "ts": "2026-07-27T21:08:54Z", "hours": 1.2928, "text": "Sorting & filtering Added sorting, filtering, and ordering dropdowns to the forms page so you can better browse and search through your forms! You can sort the forms by name, date created, type, starred, and more, and you can filter them by quiz, starred, private, and open. You can change the display order between descending and ascending as well Added form starring so you can now star/favorite/pin your most important forms directly by clicking on the star icon on the form card, or by clicking on the star option in the popup menu Added icons to form cards to better display the form’s information and attributes Added an access lock page for private forms that prompts for the access code, and it only shows the questions and allows you to fill out the form after verifying successfully Added a form not open page that shows if a form isn’t open (isn’t published), but if you’re the owner you can still see it with preview mode Updated schema and types Updated layout and styling"}, {"post_id": 35556, "ts": "2026-07-27T02:15:20Z", "hours": 2.9525, "text": "Form management & quizzes Added the Forms page where you can browse, search, view, and manage all the forms you created (you’ll be able to filter and sort them to browse and search through them more easily in the future) Each form is displayed as a card with a placeholder icon, title, shortened description preview, and creation date listed When you click on the 3 dots option button a menu shows up where you can edit the form (takes you to edit page), preview it (takes you to submission page but in preview mode), or delete it Preview mode only activates when you own the form, are logged in, and the link has the preview search param. In this mode, you can fill out the questions but can’t submit it, and you can go back to the edit page by clicking on the x icon When you click on delete, a confirmation modal shows up, and only deletes your form after confirmation so you don’t accidentally delete stuff Added quiz mode to forms so you can create quizzes with correct answers (for both multiple choice and free response questions) and see how your respondents do! On the quiz creation page, you can check the quiz checkbox to turn the form into a quiz, and you can customize each question individually to either accept a correct answer (multiselect coming soon) or to allow all choices If you fill out a form that’s a quiz, you will be able to see your score and accuracy (but not the correct answer) after submitting it Implementing the logic and types for quizzes was kind of a pain but I still managed to fix all the weird edge case bugs Added both static and dynamically generated SEO metadata across all pages on MacForms to make the site more accessible and user friendly Added a placeholder settings page You can now delete questions after a confirmation modal on the form creation page if you have multiple questions Updated styling and types Updated README This is a pretty big update that covers a ton of features, so the video is 3 minutes long and I had to compress it like 2 times…"}, {"post_id": 35426, "ts": "2026-07-26T20:31:56Z", "hours": 2.69, "text": "Form responses Added an actual public facing form submission page where anyone (regardless of whether or not they’re logged in) can fill out a form and submit their response On the response submission page, you can see the form’s title, description, creation date, all the questions and their choices/inputs rendered correctly, a submit button that submits your response, and a clear button that will clear everything you filled in after showing a confirmation modal If you haven’t filled out all the required fields before submitting, it shows a helpful warning message that tells you to fill out the options You can deselect your choice for a multiple choice question if it’s not required by clicking on the same choice again (but this isn’t allowed for required questions because duh ) Public/private forms aren’t implemented yet so the moment you create a form it’s respondable by anyone Once you submit your response, a response confirmation page will display confirming your submission, and it also shows an edit response option, as well as a submit another response option Response editing works by adding a search param with your response id after the form page path, so it dynamically fetches your response data and fills it in automatically The submit another response option just refreshes the page to create a new blank response state object Added a different layout for the form submission page (since nav and footer aren’t needed), so I had to reorganize the routes and folders into logical groups to make different layouts work Added schema and types for response data Updated styling and navigation"}, {"post_id": 34381, "ts": "2026-07-25T01:33:02Z", "hours": 3.0203, "text": "Form submission & auth Finally added backend form submission so when you click on save on the form creation page after filling in all the values, it gets created and added to the database When you click on save, MacForms validates all your new form’s values (title, description, etc.), as well as each question’s choices to make sure everything’s filled out properly If you’re missing fields or something isn’t validated, a helpful error message will appear telling you what to fix Once you successfully submit the new form, you get redirected to the form editing page where you will be able to edit it, change its settings, check the preview, and publish it (the page isn’t implemented yet) You can also delete options/choices for multiple choice questions, as long as there’s at least one available choice If you’re logged in, you can see your profile icon displayed on the right of the nav bar, and clicking on it opens a menu where you can view your account profile (redirects you back to MacWeb), toggle light/dark mode (doesn’t work yet), and log out I spent a ton of time trying to debug and make the log out thing work because of this entire cross subdomain auth thing that just makes everything super complicated and frustrating, but I figured it out and fixed it by changing a few auth configs Designed and added the MacForms logo (just a list icon on a green background) to the nav bar and the site favicon. The design is pretty terrible, hopefully I’ll come up with a better design Also spent a lot of time testing to ensure the app, especially auth, works both locally in dev environment and in production Added a helper function to fetch form data from Prisma, destructure and sanitize the data, and do some conditional typing to match the types and ensure type safety Updated README to be more informative on dev setup since there’s quite a few steps for setup and I don’t wanna forget them in the future Updated schema and types"}, {"post_id": 33842, "ts": "2026-07-24T02:42:42Z", "hours": 5.1803, "text": "Form creation & homepage I forgot to add devlogs for a couple days, so this devlog will be a bit long and cover a ton of changes Added a basic homepage with a hero that has a title, description, and some call to action buttons, and a few sections that are just placeholder text and images for now to fill the layout Added a navigation bar at the top with links to a few pages and an interactive search bar that doesn’t actually work yet (since there’s nothing to search) Copied the MacWeb footer and changed some links and styling to add the footer Auth isn’t completely set up yet, so a few things aren’t being displayed properly. Even if you’re not logged in, you can still access the form creation page, it just doesn’t do anything yet On the form creation page (that is a form itself), you can fill in the form’s name, description, visibility (making it private requires an access code, which you can generate or type in manually), and whether it’s accepting responses You can add new questions by clicking on the add question card, which shows a new question where you can select its type (only multiple and text are supported right now), set the question and description, set it as required/optional, and add answer choices or set the input placeholder depending on the question type The backend for making and publishing forms isn’t set up yet, so it’s only the frontend that doesn’t actually do anything Adding types for the form, questions, and answer choices was a huge pain because I had to set up a type map, extract its keys, and use them to dynamically construct type unions and some other advanced stuff for to dynamically infer option types based on the question type, and it was a huge headache to figure out Updated Prisma schema and added other types Updated styling and navigation"}, {"post_id": 31522, "ts": "2026-07-20T00:22:55Z", "hours": 1.3511, "text": "MacForms: simple but customizable form creation tool I’m building MacForms, an easy to use form creation tool with a lot of features and customization! This is actually a subapp of my online platform MacWeb with many different apps you can try out I started this app because I have to make a form for a few people to fill out, and instead of using Google Forms or Notion like a weirdo, I decided to make my own form tool and use it to make the form like a totally normal person Since this is a subapp of the main platform, it shares the same auth and database system with the other apps, so I had to update and migrate a ton of stuff on the root domain before I could start working on this app The auth system was also challenging to configure properly, but I figured out how to share cookie sessions across subdomains for my account system after a few hours of painful debugging After the root domain was migrated and updated properly, I could finally start working on MacForms and set up the project and its dependencies Currently there isn’t much since auth took so much time to work, but the hardest part is finished, so hopefully the rest of development will be smoother Also set up some DNS and Vercel records for the real domain to work"}]...
|
Title: MacForms by @tonymac129 | Stardance
Devlog Title: MacForms by @tonymac129 | Stardance
Devlogs:
MacForms: simple but customizable form creation tool I’m building MacForms, an easy to use form creation tool with a lot of features and customization! This is actually a subapp of my online platform MacWeb with many different apps you can try out I started this app because I have to make a form for a few people to fill out, and instead of using Google Forms or Notion like a weirdo, I decided to make my own form tool and use it to make the form like a totally normal person Since this is a subapp of the main platform, it shares the same auth and database system with the other apps, so I had to update and migrate a ton of stuff on the root domain before I could start working on this app The auth system was also challenging to configure properly, but I figured out how to share cookie sessions across subdomains for my account system after a few hours of painful debugging After the root domain was migrated and updated properly, I could finally start working on MacForms and set up the project and its dependencies Currently there isn’t much since auth took so much time to work, but the hardest part is finished, so hopefully the rest of development will be smoother Also set up some DNS and Vercel records for the real domain to work
Form creation & homepage I forgot to add devlogs for a couple days, so this devlog will be a bit long and cover a ton of changes Added a basic homepage with a hero that has a title, description, and some call to action buttons, and a few sections that are just placeholder text and images for now to fill the layout Added a navigation bar at the top with links to a few pages and an interactive search bar that doesn’t actually work yet (since there’s nothing to search) Copied the MacWeb footer and changed some links and styling to add the footer Auth isn’t completely set up yet, so a few things aren’t being displayed properly. Even if you’re not logged in, you can still access the form creation page, it just doesn’t do anything yet On the form creation page (that is a form itself), you can fill in the form’s name, description, visibility (making it private requires an access code, which you can generate or type in manually), and whether it’s accepting responses You can add new questions by clicking on the add question card, which shows a new question where you can select its type (only multiple and text are supported right now), set the question and description, set it as required/optional, and add answer choices or set the input placeholder depending on the question type The backend for making and publishing forms isn’t set up yet, so it’s only the frontend that doesn’t actually do anything Adding types for the form, questions, and answer choices was a huge pain because I had to set up a type map, extract its keys, and use them to dynamically construct type unions and some other advanced stuff for to dynamically infer option types based on the question type, and it was a huge headache to figure out Updated Prisma schema and added other types Updated styling and navigation
Form submission & auth Finally added backend form submission so when you click on save on the form creation page after filling in all the values, it gets created and added to the database When you click on save, MacForms validates all your new form’s values (title, description, etc.), as well as each question’s choices to make sure everything’s filled out properly If you’re missing fields or something isn’t validated, a helpful error message will appear telling you what to fix Once you successfully submit the new form, you get redirected to the form editing page where you will be able to edit it, change its settings, check the preview, and publish it (the page isn’t implemented yet) You can also delete options/choices for multiple choice questions, as long as there’s at least one available choice If you’re logged in, you can see your profile icon displayed on the right of the nav bar, and clicking on it opens a menu where you can view your account profile (redirects you back to MacWeb), toggle light/dark mode (doesn’t work yet), and log out I spent a ton of time trying to debug and make the log out thing work because of this entire cross subdomain auth thing that just makes everything super complicated and frustrating, but I figured it out and fixed it by changing a few auth configs Designed and added the MacForms logo (just a list icon on a green background) to the nav bar and the site favicon. The design is pretty terrible, hopefully I’ll come up with a better design Also spent a lot of time testing to ensure the app, especially auth, works both locally in dev environment and in production Added a helper function to fetch form data from Prisma, destructure and sanitize the data, and do some conditional typing to match the types and ensure type safety Updated README to be more informative on dev setup since there’s quite a few steps for setup and I don’t wanna forget them in the future Updated schema and types
Form responses Added an actual public facing form submission page where anyone (regardless of whether or not they’re logged in) can fill out a form and submit their response On the response submission page, you can see the form’s title, description, creation date, all the questions and their choices/inputs rendered correctly, a submit button that submits your response, and a clear button that will clear everything you filled in after showing a confirmation modal If you haven’t filled out all the required fields before submitting, it shows a helpful warning message that tells you to fill out the options You can deselect your choice for a multiple choice question if it’s not required by clicking on the same choice again (but this isn’t allowed for required questions because duh ) Public/private forms aren’t implemented yet so the moment you create a form it’s respondable by anyone Once you submit your response, a response confirmation page will display confirming your submission, and it also shows an edit response option, as well as a submit another response option Response editing works by adding a search param with your response id after the form page path, so it dynamically fetches your response data and fills it in automatically The submit another response option just refreshes the page to create a new blank response state object Added a different layout for the form submission page (since nav and footer aren’t needed), so I had to reorganize the routes and folders into logical groups to make different layouts work Added schema and types for response data Updated styling and navigation
Form management & quizzes Added the Forms page where you can browse, search, view, and manage all the forms you created (you’ll be able to filter and sort them to browse and search through them more easily in the future) Each form is displayed as a card with a placeholder icon, title, shortened description preview, and creation date listed When you click on the 3 dots option button a menu shows up where you can edit the form (takes you to edit page), preview it (takes you to submission page but in preview mode), or delete it Preview mode only activates when you own the form, are logged in, and the link has the preview search param. In this mode, you can fill out the questions but can’t submit it, and you can go back to the edit page by clicking on the x icon When you click on delete, a confirmation modal shows up, and only deletes your form after confirmation so you don’t accidentally delete stuff Added quiz mode to forms so you can create quizzes with correct answers (for both multiple choice and free response questions) and see how your respondents do! On the quiz creation page, you can check the quiz checkbox to turn the form into a quiz, and you can customize each question individually to either accept a correct answer (multiselect coming soon) or to allow all choices If you fill out a form that’s a quiz, you will be able to see your score and accuracy (but not the correct answer) after submitting it Implementing the logic and types for quizzes was kind of a pain but I still managed to fix all the weird edge case bugs Added both static and dynamically generated SEO metadata across all pages on MacForms to make the site more accessible and user friendly Added a placeholder settings page You can now delete questions after a confirmation modal on the form creation page if you have multiple questions Updated styling and types Updated README This is a pretty big update that covers a ton of features, so the video is 3 minutes long and I had to compress it like 2 times…
Sorting & filtering Added sorting, filtering, and ordering dropdowns to the forms page so you can better browse and search through your forms! You can sort the forms by name, date created, type, starred, and more, and you can filter them by quiz, starred, private, and open. You can change the display order between descending and ascending as well Added form starring so you can now star/favorite/pin your most important forms directly by clicking on the star icon on the form card, or by clicking on the star option in the popup menu Added icons to form cards to better display the form’s information and attributes Added an access lock page for private forms that prompts for the access code, and it only shows the questions and allows you to fill out the form after verifying successfully Added a form not open page that shows if a form isn’t open (isn’t published), but if you’re the owner you can still see it with preview mode Updated schema and types Updated layout and styling
Edit form & response pages Finally added the form editing page where you’ll be able to edit the entire form (title, description, questions, etc.), view response summaries and statistics, and configure its submission settings and other defaults When you click on one of your forms on the forms tab, you get redirected to the edit page that has a top utility bar with the form’s name displayed (you can rename the form by clicking on it) and 3 tabs for you to switch between edit, response, and settings modes On the right of the bar, there’s also an invite button, a preview form button, and a publish button (currently doesn’t work yet ) Clicking on the invite button opens a modal where you can either invite another MacWeb account to be a permanent collaborator (of course it doesn’t work yet), or generate a one-time single-use invite link/code that allows anyone (with or without an account) with the access code to edit the form using a custom access token cookie that expires after an hour Making this cookie access thing work was actually a bit more complicated than I thought, so I spent some time debugging the logic but it was pretty fun When you use the access code to edit a form, a page shows up confirming the access, and invalidates the code after confirming When you click on the responses tab, you can see all the responses and answers grouped by question to make visualizing and summarizing people’s responses a lot easier (definitely didn’t take inspo from Google Forms ) If the question is multiple choice, it shows how many responses each option got with percentages and presents it in sort of a bar graph If the question is free responses, it just lists each response Added placeholder tabs for editing and settings Added SEO for these tabs Updated types and schema Updated styling
Invite collaborators & update form You can now invite collaborators that will have access to edit the form, see its responses, and manage its settings! Only the form owner/creator can delete the form and invite and remove people, but invited people can basically do everything else On the invite modal page, you can search for MacWeb accounts by their name, email, or about through an API endpoint I added, and select multiple people to invite to the form at once Once you send out the invitation, you’ll see the users added to the form on the modal, and you can remove their access by clicking on the trash icon as well There isn’t real time form collaborative editing (at least not yet, though I don’t plan on overcomplicating a simple form app to be like Google Forms ), but changes you make to the form are revalidated the moment you click on save You can now actually edit and update your form by going to the edit tab and editing the form and its questions. This was actually fairly easy to implement since I just had to use the component used for the form creation page and update a few things Optimized database operations and API calls Updated schema and types Updated styling
Score distribution & autosave Added a quiz results summary section on the responses tab that shows some useful statistics about the scores as well as a histogram showing the score distribution if your form is a quiz It dynamically calculates scores based on the latest updated quiz, then organizes them and calculates their mean, median, min, and max in percentages It also renders a custom histogram with bins of 10 ranging from 0 to 100 so you can visualize how well your respondents did in one glance (server rendered + no Chart.js or external libraries = almost instantaneous load time) The histogram also shows the percentages of scores, and you can see how many responses are in each bin by hovering over the bar There’s also a view scores button that displays a modal showing each individual score Added autosave for editing forms that autosaves the entire form in the background every minute without revalidating the frontend to ensure smooth UX. The bar also shows the autosave status for a few seconds telling you it autosaved Added collaborator access so they can actually edit and manage the form and view responses without getting redirected. Updated some backend operations to ensure permissions are correct as well Fixed form editing so it actually updates the form and each question individually instead of creating a completely new set of it and neglecting the originally existing relations (~50 lines of code for one database transaction , but Prisma is actually so nice 🥹) Added filters and sort methods for shared forms vs forms you own (shared forms now display on the forms page)
Publish & share form You can now publish and share your forms for the rest of the world to see and fill out! Clicking on the publish button on the tool bar now opens a modal where you can either publish/unpublish the form or copy the link and send it to people If the form is already published, you can see its public link and an option to shorten it. Shortening it creates a unique 8-digit shortcut id for the form that redirects you to the main form (I’m planning on shortening it even more by buying a cool short domain or something, but that’s probably not gonna happen any time soon) You can also unpublish the form after a confirmation warning by clicking on the unpublish button If the form hasn’t been published yet, you can publish it by clicking on the publish button (in case this isn’t already obvious ) Updated some permissions so collaborators can also manage the form’s publication visibility status (instead of only the owner) Updated schema and types
MacForms is back: form settings and light mode! After taking a break from working on MacForms for 2 months to work on other projects, prepare for school, and do a lot of other stuff, I’m finally back to developing this project and getting it ready to ship before Stardance ends in 9 days! (plz extend the end date ) In this pretty massive devlog, I added a new settings tab to the form editing page where you can customize the published form’s presentation and many other options here are the settings I implemented, there might be other important stuff I forgot: whether to shuffle questions randomly whether to shuffle the multiple choice options for each question a custom background color for the top banner allow respondents to submit another response allow respondents to edit their submitted responses Because I couldn’t figure out a way (if there is one) to implement the last 2 without using accounts or cookies, if a form has either of the 2 enabled, you’ll need to sign in first to fill out the form Added a light/dark mode toggle option to the nav user dropdown menu for you to easily customize the site’s appearance and switch between light and dark modes Since I had to manually go through basically every component and page of the entire platform to modify the elements’ Tailwind classes for this, it also gave me a chance to refresh my memory of the project’s structure and how it works because I was gone for so long Going through all the files and testing the 2 modes was a long and tedious process, but the result turned out pretty well, both are consistent and visually appealing, and there’s also a smooth color transition Added a top loading indicator bar to improve the UX since some pages take a bit to load and the site may look unresponsive without the loading bar Fixed a few math bugs with 0s and NaNs and display bugs with the colors, layout, placeholder, and other styling Because Stardance is ending so soon and because of my procrastination and laziness, I’m going to have to cut a lot of the originally planned features before shipping since I have another big project to ship, so hopefully I can finish some last few features and polish MacForms and ship it soon!
A bunch of small additions and changes! Added the Browse tab where you can see all the published public forms that other people made on MacForms! You can explore all the different forms easily with the search bar Finally added a nav search bar that actually works (instead of the old placeholder) by querying the new API endpoint for either your own forms or other people’s public forms so you can access everything faster and more easily Search results are matched by both title and description to be more useful, and your own forms take you directly to the edit page while others’ forms take you to the form filling page Added a bunch of smooth animations and transition effects for page loads, interactions, and search/filter results to improve user experience and interactivity Added responsive design on all the pages and components so MacForms is accessible and functional on all screen sizes Added feature description sections, icons, and buttons on the home landing page I have no idea why this was even a thing before, but now you can actually access the form pages and fill out the forms without being logged in Apparently my thought all get requests had to pass the auth gate or something, but now it’s fixed Removed the Settings tab (not form settings), because I couldn’t figure out anything to put there since I already have account settings on MacWeb, a separate form settings tab, and a dark/light mode toggle Updated styling and layout Fixed a few display bugs
Individual responses and form options You can now also see, select, and manage each individual response to view in detail instead of only seeing summary graphs/tables of all the responses combined There’s a new dropdown on the form responses page where you can either view the summary stats/answers of all responses (default), or select every individual response to view its answer to each question, submission/edit date and time, accuracy (if the form is a quiz), as well as an option to delete the response after confirmation to make viewing responses easier and more useful If you make your form a quiz and designate certain questions as having correct answers, you can now finally select one or multiple options to all be correct for each question! This took a surprisingly long time since I had to fix a lot of bugs based on the old system Added sorting, filtering, and ordering dropdowns and options to the public form browse page to make finding and viewing different forms a lot easier I just realized there are a few bugs in prod while recording the video, so looks like more fun bug fixing in the next devlog Updated types and backend schemas to accept the new options Updated styling and colors I am now dedicating most of my time on (really amazing event btw), so I can only work on trying to finish and ship my Stardance projects on the little time I have on weekends, so hopefully I’ll be able to ship MacForms this weekend and finally finish my other Stardance projects before it ends
Quick final devlog before shipping!!! I finally finished all the features, customization, and everything else I planned to implement for MacForms after working (but mostly procrastinating) on it for more than 3 months ! I have no clue why this wasn’t done earlier, but I added a multiple select option for multiple choice questions to allow respondents to select multiple options (which also works with quizzes and other edge cases) Similarly, I also added an option to mark free response/text questions as having a long answer to render a textarea instead of the normal input field for more customization I already added most of these features while planning out the types and schemas, but somehow never implemented it, so it was kind of confusing but I was able to create them more quickly and easily that I’d expected Added guest mode so yall can actually try out the form engine without signing up (is that low enough friction for you guys ) Updated styling and readme Polished some other stuff for shipping! I’ve already wasted so much of Stardance’s extension not shipping any of my projects , so I panicked when I realized there was only 10 days left and forced myself to actually get to work and finish this project, hopefully you’ll enjoy and like it as much as I do :)
Ships:
I finally finished MacForms, an extensive, customizable, and feature-rich form creation tool for you to create surveys, forms, and quizzes with question options like multiple choice, multiple select, short answer, long answer, and more! To use it, simply sign in to a MacWeb account or select guest mode (which hopefully reduces voting friction). There are also a lot of different form settings for presentation, response management, quiz accuracy, visibility, and public/private forms, as well as options to invite collaborators to work on and manage the form together. You can browse other people’s forms and search your own forms as well. You can also visualize and view response statistics and individual responses with graphs and question response lists. The entire platform supports light/dark mode, smooth animations and transition effects, responsive design, accessibility, and SEO, as well as other quality of life improvements that hopefully make the website’s UI and UX more intuitive and user friendly. The codebase is surprisingly complex (and poorly organized :( , but I somehow managed to make everything work as expected. I really had a lot of fun working on and trying out this project myself, so hopefully yall will like it too :)...
|
1793156012.406571
|
1793242412.406571
|
|
38010
|
Nara.io by @gusin9113 | Stardance
|
gusin9113
|
1
|
38.0
|
212
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-24T18:19:42Z", "hours": 38.0, "multiplier": 6.73, "payout": 212, "blessing": "neutral", "text": "A performant diep.io clone written in Rust! Allows custom scripting through Lua. Currently supports the ‘Basic’ tank, and upgrades as you destroy shapes and other tanks!", "repo": "https://github.com/gurmehar-singh-2009/nara.io", "demo": "https://page.naraioserver.hackclub.app/"}]...
|
[{"post_id": 44270, "ts": "202 [{"post_id": 44270, "ts": "2026-08-09T22:14:57Z", "hours": 9.1622, "text": "Finalized a prototype game!! hey everyone, great news!! I have created the fundamental game!! I will post a link to play in a few days. additional dev logs will come with more info on what was developed with better documentation :)"}, {"post_id": 41576, "ts": "2026-08-05T21:25:49Z", "hours": 3.6733, "text": "general devlog - made a Home Screen, added a dark theme, and did some work on the server. hey everyone, attached are images for you to see! a lot of the work was on the server so this is as much as I can show. attributions to @Gideonthegreat for the banner used in the Home Screen!"}, {"post_id": 40480, "ts": "2026-08-04T01:20:21Z", "hours": 3.4444, "text": "server devlog #3 - completed the packet and server foundation! I worked on the network stuff and the server stuff. I still have to optimize my SoA setup to be ergonomic to work with. it was sort of rushed but all-in-all good progress. there were also some rewrites of core stuff (for example - rolling my own packet logic (maybe not the smartest move but its okay)). sorry for the code screenshot, there isn’t much else to show as its mostly backend stuff."}, {"post_id": 40045, "ts": "2026-08-03T12:20:03Z", "hours": 1.8822, "text": "server devlog #2 - Lua integration complete! hey everyone. for now I have finished all the Lua bs I wanted to do. it now supports events and commands! as well as the ability to spawn ingame entities. you can also change the values of entities at runtime to change how tanks look/behave!"}, {"post_id": 39735, "ts": "2026-08-02T21:55:21Z", "hours": 1.9658, "text": "server devlog #1 - Lua integration + writing a spatial hash. hey everyone! apparently my last project didnt get any stardust because I didnt devlog (and some people being unreasonable in their feedback). so here we go! over the past 6 hours (hackatime genuinely sucks - cant record my hours properly) I have worked on integrating Lua into my server. this is for runtime modification and future plugin support. I also developed a spatial hash following Teschner’s Spatial Hashing algorithm. I dont know how well this post will fair and I dont even know how to get a newline character in these posts, so I will cut it short for now. if you want I can always go more in depth in the comments - just ask! :)"}, {"post_id": 38227, "ts": "2026-07-31T15:00:38Z", "hours": 1.3275, "text": "Client prototype complete! Shifting focus to the server and networking system."}, {"post_id": 37358, "ts": "2026-07-30T00:43:28Z", "hours": 16.9142, "text": "Created initial skeleton for project. check out the GitHub! Attached is a render demo to test wgpu!"}]...
|
Title: Nara.io by @gusin9113 | Stardance
Devlogs: Title: Nara.io by @gusin9113 | Stardance
Devlogs:
Created initial skeleton for project. check out the GitHub! Attached is a render demo to test wgpu!
Client prototype complete! Shifting focus to the server and networking system.
server devlog #1 - Lua integration + writing a spatial hash. hey everyone! apparently my last project didnt get any stardust because I didnt devlog (and some people being unreasonable in their feedback). so here we go! over the past 6 hours (hackatime genuinely sucks - cant record my hours properly) I have worked on integrating Lua into my server. this is for runtime modification and future plugin support. I also developed a spatial hash following Teschner’s Spatial Hashing algorithm. I dont know how well this post will fair and I dont even know how to get a newline character in these posts, so I will cut it short for now. if you want I can always go more in depth in the comments - just ask! :)
server devlog #2 - Lua integration complete! hey everyone. for now I have finished all the Lua bs I wanted to do. it now supports events and commands! as well as the ability to spawn ingame entities. you can also change the values of entities at runtime to change how tanks look/behave!
server devlog #3 - completed the packet and server foundation! I worked on the network stuff and the server stuff. I still have to optimize my SoA setup to be ergonomic to work with. it was sort of rushed but all-in-all good progress. there were also some rewrites of core stuff (for example - rolling my own packet logic (maybe not the smartest move but its okay)). sorry for the code screenshot, there isn’t much else to show as its mostly backend stuff.
general devlog - made a Home Screen, added a dark theme, and did some work on the server. hey everyone, attached are images for you to see! a lot of the work was on the server so this is as much as I can show. attributions to @Gideonthegreat for the banner used in the Home Screen!
Finalized a prototype game!! hey everyone, great news!! I have created the fundamental game!! I will post a link to play in a few days. additional dev logs will come with more info on what was developed with better documentation :)
Ships:
A performant diep.io clone written in Rust! Allows custom scripting through Lua. Currently supports the ‘Basic’ tank, and upgrades as you destroy shapes and other tanks!...
|
1793123770.1123598
|
1793210170.1123598
|
|
39420
|
Mini Veshrown by @Cy | Stardance
|
Cy
|
1
|
38.0
|
350
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-16T22:42:49Z", "hours": 38.0, "multiplier": 9.1, "payout": 350, "blessing": "neutral", "text": "Mini Veshrown! A arena fantasy roguelike with many races and weapons to choose from. This is a early release of the game so many things will change (like the ui) and possibly there are some bugs. I had a blast creating this game and improving the little details like the rain but the hardest part had to be debugging the hitboxes which took a while. I am always up for ideas and critiques for this game, but in the end I hope you enjoy it! -Cy", "repo": "https://github.com/Cybrock9000/tinyrougelike", "demo": "https://cyberwolfgames.itch.io/mini-veshrown"}]...
|
[{"post_id": 48518, "ts": "202 [{"post_id": 48518, "ts": "2026-08-16T22:22:08Z", "hours": 5.1261, "text": "I am going to be busy for a bit so i have done some touchups to this game to make it playable and is now ready for a demo ship!!!"}, {"post_id": 43117, "ts": "2026-08-08T06:30:52Z", "hours": 6.8886, "text": "Man I have done quite a bit lately. One of the main things that I have done Is I have added screen shake to make hitting enemies more satisfying. I added “pets” which help attack. I added the first boss. I have started work on a moon cycle that gives the player different advantages based on the cycle (in full moon there is also blood moon, blue moon and solar eclipse). I have also added some secret things too. I think that is most of what I have done ;|. -Cy."}, {"post_id": 39903, "ts": "2026-08-03T06:17:18Z", "hours": 4.7597, "text": "Things have been going smoothly lately and I have been getting a lot done. One of the things I have started is races. so far there a only 4 playable races in the game right now (Human, Werewolf, Kitsune, Voidwalker) and I am currently making them have special attributes. I have added 2 new maps and a secret song that plays when you get a rare item (the song gives a hint on my next major game that I have been spending the whole year on). I made the rain more realistic by having each rain droplet go at a random speed. I have also been working on the magic system, specifically shadow magic. Thats all I can think of right now that I did today. This game is set on the world I have been creating: Pomehgza. So my end goal is to have it as close to that as possible. I have also decided that this game is not set in a certain era so there are no extinct races or other conflicts. welp that’s that. - Cy."}, {"post_id": 38684, "ts": "2026-08-01T06:05:48Z", "hours": 7.8294, "text": "I have done so much to the point where I probably wont even cover some of the stuff in this devlog. One of the main things is I added descriptions to items in the shop and when you choose your weapon. Ive added multiple new items that do cool things like the Torch will have a chance shoot out a flaming arrow when you attack (this stacks), and the Water Bottle that causes it to rain and damages enemy’s if they get splashed (this stacks too). I have added new weapons like the phoenix katana (that needs a nerf), crossbow and arcane staff. I have added a new enemy that sits there and shoots at you with shadow orbs that go mach 10. Also I have not posted the new map I mentioned in the last devlog to i added it here too. - Cy."}, {"post_id": 36227, "ts": "2026-07-28T05:15:24Z", "hours": 6.13, "text": "Ive been working on this a lot lately and added multiple features, like: homing projectiles, another map, slight development on the different races you can play, and 2 new swords (3 in total now). there is the default Sword with ok range and a 90 degree AOD cone, then there is the Rapier which has a tiny 20 degree AOD cone but far attack range (attack range buffs are doubled for this sword), and lastly there is the Great Sword which has a huge 180 degree AOD cone and double damage but attack range buffs are halved and has a short attack range too. I also added a very simple hud (just the health and wave right now). and that is about it. - Cy :)"}, {"post_id": 35059, "ts": "2026-07-26T07:34:56Z", "hours": 4.2867, "text": "I have done a lot of work today! I have removed the ai boid code and made something better (and more simpler). I have added a wave system, so when you kill all the enemies, you will be taken to the shop then back to the game. When you hit a enemy, particles will emit to make the enemy look like its bleeding. You can attack now with a feature that haunts all my projects: raycasting. I also added a song that I made the other day into this game that uses organs from my pipe organ sim too! (the first picture is the heavy WIP shop, and the second is the arena). I will start working on the Cobra programing language once its accepted and recommendations come in :)."}, {"post_id": 34472, "ts": "2026-07-25T06:29:58Z", "hours": 3.4331, "text": "first devlog of another project. I like to have 2-3 projects going at once so I dont loose interest in any. but anyway, I am making a tiny roguelike. I have normal enemys that chase you and then enemys that have boid ai and go in groups to attack you. I have many plans for this game and I hope I be able to finish it. (the cobra programing language and cyber game engine is still being worked on, the pipe organ simulation might get an update, but I think I call it finished)"}]...
|
Title: Mini Veshrown by @Cy | Stardance
Devlogs:
Title: Mini Veshrown by @Cy | Stardance
Devlogs:
first devlog of another project. I like to have 2-3 projects going at once so I dont loose interest in any. but anyway, I am making a tiny roguelike. I have normal enemys that chase you and then enemys that have boid ai and go in groups to attack you. I have many plans for this game and I hope I be able to finish it. (the cobra programing language and cyber game engine is still being worked on, the pipe organ simulation might get an update, but I think I call it finished)
I have done a lot of work today! I have removed the ai boid code and made something better (and more simpler). I have added a wave system, so when you kill all the enemies, you will be taken to the shop then back to the game. When you hit a enemy, particles will emit to make the enemy look like its bleeding. You can attack now with a feature that haunts all my projects: raycasting. I also added a song that I made the other day into this game that uses organs from my pipe organ sim too! (the first picture is the heavy WIP shop, and the second is the arena). I will start working on the Cobra programing language once its accepted and recommendations come in :).
Ive been working on this a lot lately and added multiple features, like: homing projectiles, another map, slight development on the different races you can play, and 2 new swords (3 in total now). there is the default Sword with ok range and a 90 degree AOD cone, then there is the Rapier which has a tiny 20 degree AOD cone but far attack range (attack range buffs are doubled for this sword), and lastly there is the Great Sword which has a huge 180 degree AOD cone and double damage but attack range buffs are halved and has a short attack range too. I also added a very simple hud (just the health and wave right now). and that is about it. - Cy :)
I have done so much to the point where I probably wont even cover some of the stuff in this devlog. One of the main things is I added descriptions to items in the shop and when you choose your weapon. Ive added multiple new items that do cool things like the Torch will have a chance shoot out a flaming arrow when you attack (this stacks), and the Water Bottle that causes it to rain and damages enemy’s if they get splashed (this stacks too). I have added new weapons like the phoenix katana (that needs a nerf), crossbow and arcane staff. I have added a new enemy that sits there and shoots at you with shadow orbs that go mach 10. Also I have not posted the new map I mentioned in the last devlog to i added it here too. - Cy.
Things have been going smoothly lately and I have been getting a lot done. One of the things I have started is races. so far there a only 4 playable races in the game right now (Human, Werewolf, Kitsune, Voidwalker) and I am currently making them have special attributes. I have added 2 new maps and a secret song that plays when you get a rare item (the song gives a hint on my next major game that I have been spending the whole year on). I made the rain more realistic by having each rain droplet go at a random speed. I have also been working on the magic system, specifically shadow magic. Thats all I can think of right now that I did today. This game is set on the world I have been creating: Pomehgza. So my end goal is to have it as close to that as possible. I have also decided that this game is not set in a certain era so there are no extinct races or other conflicts. welp that’s that. - Cy.
Man I have done quite a bit lately. One of the main things that I have done Is I have added screen shake to make hitting enemies more satisfying. I added “pets” which help attack. I added the first boss. I have started work on a moon cycle that gives the player different advantages based on the cycle (in full moon there is also blood moon, blue moon and solar eclipse). I have also added some secret things too. I think that is most of what I have done ;|. -Cy.
I am going to be busy for a bit so i have done some touchups to this game to make it playable and is now ready for a demo ship!!!
Ships:
Mini Veshrown! A arena fantasy roguelike with many races and weapons to choose from. This is a early release of the game so many things will change (like the ui) and possibly there are some bugs. I had a blast creating this game and improving the little details like the rain but the hardest part had to be debugging the hitboxes which took a while. I am always up for ideas and critiques for this game, but in the end I hope you enjoy it! -Cy...
|
1793120100.538011
|
1793206500.538011
|
|
39548
|
ContextIQ by @HAMZAALI | Stardance
|
HAMZAALI
|
1
|
38.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-05T15:16:27Z", "hours": 38.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "ContextIQ is a study assistant that turns any PDF textbook into something you can actually talk to. Upload a document, and the app chunks the text, embeds it using Google’s Gemini embedding model, and stores those vectors so it can pull the most relevant passages for whatever question you ask. A Groq-hosted LLM then uses that retrieved context to generate accurate, grounded answers instead of guessing from general knowledge — essentially a lightweight RAG (retrieval-augmented generation) pipeline wrapped in a simple Streamlit interface, built to make studying dense material faster and less painful.", "repo": "https://github.com/Hamzaali007/ContextIQ", "demo": "https://contextiq.hackclub.app/"}]...
|
[{"post_id": 40913, "ts": "202 [{"post_id": 40913, "ts": "2026-08-04T19:01:15Z", "hours": 8.1053, "text": "Final Devlog: Hi everyone , I have successfully completed the project and now I am going to submit this project."}, {"post_id": 39142, "ts": "2026-08-01T21:11:07Z", "hours": 8.7478, "text": "devlog #6: Hi everyone, I have a good news and bad news.While doing the logging i found out that the app had too many bugs so fixing those bugs costed me alot of time. The good news is that I have decided to implement some exciting new features like FOLLOW UP QUESTIONS and FLASH CARDS in ContextIQ this will take this project to the next level. I am currently half way through in implementing these features once I implement those features I will ship this project right away."}, {"post_id": 37785, "ts": "2026-07-30T18:22:09Z", "hours": 7.0489, "text": "Hello Everyone, I am back with an update. So today I have completed my frontend. Now I just have to debug and test the whole app to find any bugs. Once I am finished with the testing I will try to implement some new features to make it more attractive."}, {"post_id": 36890, "ts": "2026-07-29T08:23:59Z", "hours": 4.9328, "text": "ContextIQ : RAG Agent Update: Hi everyone! I am almost done with the backend now i am moving towards the frontend. The UI is one of the most important and the very first thing a user notices. I am trying to keep the UI minimal and to the point. will give you guys another update once I finish the UI as well."}, {"post_id": 35980, "ts": "2026-07-27T19:34:19Z", "hours": 6.7575, "text": "One of the most important milestones of ContextIQ is now complete—the entire document ingestion pipeline is up and running! 🎉This pipeline is responsible for transforming raw enterprise documents into an AI-ready knowledge base. Every document is loaded, cleaned, intelligently chunked, converted into vector embeddings, and stored inside Qdrant, making it ready for fast and accurate semantic retrieval.With the foundation in place, ContextIQ can now efficiently understand and search through large collections of documents. The next step is building the retrieval and reasoning pipeline that will enable the AI to generate accurate, context-aware answers with source citations.The brain is officially being built. 🧠⚡"}, {"post_id": 34795, "ts": "2026-07-25T19:49:39Z", "hours": 0.3181, "text": "Every great AI assistant starts with one challenge: it needs knowledge before it can answer questions.Today I built the document loading pipeline for ContextIQ. Instead of manually copying text into the AI, the system can now automatically read enterprise documents and prepare them for processing. This is the first step in transforming static PDFs into an intelligent knowledge base.Although it might seem simple, this stage is incredibly important. A reliable document loader ensures that the AI receives clean, structured information, laying the foundation for accurate retrieval and trustworthy responses later in the pipeline.Next up, I’ll be implementing smart chunking and embeddings so ContextIQ can understand and retrieve the most relevant information from large document collections."}, {"post_id": 34755, "ts": "2026-07-25T18:49:09Z", "hours": 2.1478, "text": "Meet ContextIQ: My first attempt at building an Enterprise-Grade RAG application. 🤖 From Portkey LLM Gateways to Logfire observability, I’m implementing the same tools used by professional AI engineers to ensure this system is robust, scalable, and secure. Stay tuned for the next update! 🛠️ #BuildInPublic #ContextIQ #HackathonLife"}]...
|
Title: ContextIQ by @HAMZAALI | Stardance
Devlogs Title: ContextIQ by @HAMZAALI | Stardance
Devlogs:
Meet ContextIQ: My first attempt at building an Enterprise-Grade RAG application. 🤖 From Portkey LLM Gateways to Logfire observability, I’m implementing the same tools used by professional AI engineers to ensure this system is robust, scalable, and secure. Stay tuned for the next update! 🛠️ #BuildInPublic #ContextIQ #HackathonLife
Every great AI assistant starts with one challenge: it needs knowledge before it can answer questions.Today I built the document loading pipeline for ContextIQ. Instead of manually copying text into the AI, the system can now automatically read enterprise documents and prepare them for processing. This is the first step in transforming static PDFs into an intelligent knowledge base.Although it might seem simple, this stage is incredibly important. A reliable document loader ensures that the AI receives clean, structured information, laying the foundation for accurate retrieval and trustworthy responses later in the pipeline.Next up, I’ll be implementing smart chunking and embeddings so ContextIQ can understand and retrieve the most relevant information from large document collections.
One of the most important milestones of ContextIQ is now complete—the entire document ingestion pipeline is up and running! 🎉This pipeline is responsible for transforming raw enterprise documents into an AI-ready knowledge base. Every document is loaded, cleaned, intelligently chunked, converted into vector embeddings, and stored inside Qdrant, making it ready for fast and accurate semantic retrieval.With the foundation in place, ContextIQ can now efficiently understand and search through large collections of documents. The next step is building the retrieval and reasoning pipeline that will enable the AI to generate accurate, context-aware answers with source citations.The brain is officially being built. 🧠⚡
ContextIQ : RAG Agent Update: Hi everyone! I am almost done with the backend now i am moving towards the frontend. The UI is one of the most important and the very first thing a user notices. I am trying to keep the UI minimal and to the point. will give you guys another update once I finish the UI as well.
Hello Everyone, I am back with an update. So today I have completed my frontend. Now I just have to debug and test the whole app to find any bugs. Once I am finished with the testing I will try to implement some new features to make it more attractive.
devlog #6: Hi everyone, I have a good news and bad news.While doing the logging i found out that the app had too many bugs so fixing those bugs costed me alot of time. The good news is that I have decided to implement some exciting new features like FOLLOW UP QUESTIONS and FLASH CARDS in ContextIQ this will take this project to the next level. I am currently half way through in implementing these features once I implement those features I will ship this project right away.
Final Devlog: Hi everyone , I have successfully completed the project and now I am going to submit this project.
Ships:
ContextIQ is a study assistant that turns any PDF textbook into something you can actually talk to. Upload a document, and the app chunks the text, embeds it using Google’s Gemini embedding model, and stores those vectors so it can pull the most relevant passages for whatever question you ask. A Groq-hosted LLM then uses that retrieved context to generate accurate, grounded answers instead of guessing from general knowledge — essentially a lightweight RAG (retrieval-augmented generation) pipeline wrapped in a simple Streamlit interface, built to make studying dense material faster and less painful....
|
1793087435.5774221
|
1793173835.5774221
|
|
43459
|
Commerce OS by @Kartikey26 | Stardance
|
Kartikey26
|
2
|
38.0
|
374
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-21T09:16:57Z", "hours": 19.0, "multiplier": 9.17, "payout": 174, "blessing": "neutral", "text": "Made major changes in UI completely changed how the website looks also added some fun features like add test order add new feature just to test how things would work in the future further will work on the backend part", "repo": "https://github.com/kartikeynegi25/commerce-os", "demo": "https://kartikeynegi25.github.io/commerce-os"}, {"ship_num": 2, "ts": "2026-08-09T11:45:27Z", "hours": 19.0, "multiplier": 10.69, "payout": 200, "blessing": "neutral", "text": "Shipped Commerce OS! Built a full multi-page e-commerce dashboard platform using HTML, Tailwind CSS, and plain JavaScript with live search/filtering across pages. What I made: Dashboard overview with key KPI cards (Revenue, Orders, Bot Actions) Inbox & conversation threads with channel-tagged messages and status badges Orders management & detailed order pages (#1240, #1229) Products catalog, Calls & Call-Conversation view, Invoices, and Settings Challenges & Learning: Wrote custom JavaScript live search filters across both table views and link-card layouts. Designed clean, consistent Tailwind layouts across 8+ different template pages. AI Declaration: Used AI (Claude/ChatGPT) for initial layout scaffolding and syntax assistance. All project architecture, manual edits, component styling, and JS filtering logic were reviewed, customized, and implemented directly in VS Code. To test: Navigate through the sidebar links (Inbox, Orders, Products, Calls, Invoices, Settings). Use the live search bar on the inbox or orders page to filter items in real time. Live Demo: https://kartikeynegi25.github.io/commerce-os", "repo": "https://github.com/kartikeynegi25/commerce-os", "demo": "https://kartikeynegi25.github.io/commerce-os"}]...
|
[{"post_id": 51528, "ts": "202 [{"post_id": 51528, "ts": "2026-08-21T09:11:18Z", "hours": 2.4992, "text": "Okay so improved the Products page added option to add test order and also improved settings page and fixed few bugs like our little sun was coming over the notification bell in mobile view"}, {"post_id": 49067, "ts": "2026-08-17T17:40:33Z", "hours": 5.4081, "text": "The old UI was looking super dry and clunky, so I ended up spending most of today completely redoing the styling and making it actually fun to use.Went for a warm, clean palette (forest greens + light sky blue and a bright sun), fixed up the mobile sidebar, and made the whole layout feel cohesive instead of just random boxes on a screen.Along with the design overhaul, I also added two cool fun features: Quick Reply Macro Bar: In the inbox, you can now just click quick templates (like sending a 10% discount, sharing tracking, or saying you’re checking stock) to reply instantly without typing the same thing again and again. Simulate Incoming Order Button: Added a test order button in the orders tab that drops in a random simulated customer order in real-time so I can test how new orders look on the dashboard. Cleaned up all the messy JavaScript behind it too so the code is actually easy to read and work with. Feels way better to click around now!"}, {"post_id": 45188, "ts": "2026-08-11T14:43:30Z", "hours": 5.0839, "text": "Spent the day tearing down the old dashboard UI and rebuilding it from the ground up as the old one was not liked by some :( and after redesigning the design was getting cluttered with duplicate mobile navbars, inconsistent headers, and weird nested border boxes everywhere—so I fixed it across every single page. Also made sure that site is still fully responsive and interactive using CSS and JavaScript wrote new lines of code to make the site more impressive also now you can click on notification bell and the profile avatar too and do try the website and make some changes in settings to see it work !!"}, {"post_id": 44572, "ts": "2026-08-10T12:51:15Z", "hours": 6.0303, "text": "Quick update on the dashboard. Spent the last session turning static UI mockups into a working, stateful app that actually saves changes across pages. Here’s what got done: Sitewide Profile & Business Sync: Hooked up the Settings form to localStorage. Updating the owner name, business name, or email now instantly updates the navbar, sidebar, and profile.html across every page. Working Interactivity & Storage: Fixed order status toggles (Paid, Fulfilled) and inbox reply threads. Now you can also download invoice pdf [ though its not a real one ;) ]. Also created a business profile page. Website feels much more like a real web app now rather than a static prototype. Ready for review!"}, {"post_id": 43920, "ts": "2026-08-09T11:26:05Z", "hours": 2.5958, "text": "Fixed mobile responsiveness across all pages. Cleaned up Tailwind grid breaks, fixed text overflowing on smaller screens, and adjusted sidebar padding so it collapses cleanly on mobile. Prototype is officially done !!"}, {"post_id": 43240, "ts": "2026-08-08T11:54:30Z", "hours": 1.775, "text": "made a new customers page where each customer gets a profile also worked on responsiveness of the website to work on different devices"}, {"post_id": 42915, "ts": "2026-08-07T21:37:50Z", "hours": 3.6189, "text": "Added sample call-conversation, made invoices and a demo settings page shell. Almost done with all the UI templates for the platform—just need to check for the responsiveness of the page and make UI enhancement and polish everything."}, {"post_id": 41842, "ts": "2026-08-06T09:41:37Z", "hours": 4.1533, "text": "Added live search filtering across the site!! Using actual JavaScript instead of just Tailwind styling. Had to write two separate filter functions since the Inbox uses link cards while the other pages use tables anyway also built out product and calls page—need to add call-conversation and invoices next!"}, {"post_id": 41292, "ts": "2026-08-05T12:52:42Z", "hours": 2.0439, "text": "Built out the order details pages for orders #1240 and #1229. Got the customer info, order details, item breakdown, and status UI fully styled."}, {"post_id": 40889, "ts": "2026-08-04T18:09:01Z", "hours": 1.5731, "text": "Finished inbox-conversation and orders page. Built out the chat interface, fed sample data, and made orders table layout. Next step is wiring up the products page."}, {"post_id": 40620, "ts": "2026-08-04T08:48:48Z", "hours": 1.6886, "text": "Finished up inbox.html today. Added sample data, message list, status badges which the user will see while seeing the inbox of its business from multiple sources. Next will add some sample conversation and move on to orders section."}, {"post_id": 40145, "ts": "2026-08-03T15:28:57Z", "hours": 1.2211, "text": "Just finished the basic layout for Commerce OS. Built the main dashboard shell, navigation and sidebar using Tailwind CSS. Now moving on to the inbox section. Excited to start this new journey!"}]...
|
Title: Commerce OS by @Kartikey26 | Stardance
Dev Title: Commerce OS by @Kartikey26 | Stardance
Devlogs:
Just finished the basic layout for Commerce OS. Built the main dashboard shell, navigation and sidebar using Tailwind CSS. Now moving on to the inbox section. Excited to start this new journey!
Finished up inbox.html today. Added sample data, message list, status badges which the user will see while seeing the inbox of its business from multiple sources. Next will add some sample conversation and move on to orders section.
Finished inbox-conversation and orders page. Built out the chat interface, fed sample data, and made orders table layout. Next step is wiring up the products page.
Built out the order details pages for orders #1240 and #1229. Got the customer info, order details, item breakdown, and status UI fully styled.
Added live search filtering across the site!! Using actual JavaScript instead of just Tailwind styling. Had to write two separate filter functions since the Inbox uses link cards while the other pages use tables anyway also built out product and calls page—need to add call-conversation and invoices next!
Added sample call-conversation, made invoices and a demo settings page shell. Almost done with all the UI templates for the platform—just need to check for the responsiveness of the page and make UI enhancement and polish everything.
made a new customers page where each customer gets a profile also worked on responsiveness of the website to work on different devices
Fixed mobile responsiveness across all pages. Cleaned up Tailwind grid breaks, fixed text overflowing on smaller screens, and adjusted sidebar padding so it collapses cleanly on mobile. Prototype is officially done !!
Quick update on the dashboard. Spent the last session turning static UI mockups into a working, stateful app that actually saves changes across pages. Here’s what got done: Sitewide Profile & Business Sync: Hooked up the Settings form to localStorage. Updating the owner name, business name, or email now instantly updates the navbar, sidebar, and profile.html across every page. Working Interactivity & Storage: Fixed order status toggles (Paid, Fulfilled) and inbox reply threads. Now you can also download invoice pdf [ though its not a real one ;) ]. Also created a business profile page. Website feels much more like a real web app now rather than a static prototype. Ready for review!
Spent the day tearing down the old dashboard UI and rebuilding it from the ground up as the old one was not liked by some :( and after redesigning the design was getting cluttered with duplicate mobile navbars, inconsistent headers, and weird nested border boxes everywhere—so I fixed it across every single page. Also made sure that site is still fully responsive and interactive using CSS and JavaScript wrote new lines of code to make the site more impressive also now you can click on notification bell and the profile avatar too and do try the website and make some changes in settings to see it work !!
The old UI was looking super dry and clunky, so I ended up spending most of today completely redoing the styling and making it actually fun to use.Went for a warm, clean palette (forest greens + light sky blue and a bright sun), fixed up the mobile sidebar, and made the whole layout feel cohesive instead of just random boxes on a screen.Along with the design overhaul, I also added two cool fun features: Quick Reply Macro Bar: In the inbox, you can now just click quick templates (like sending a 10% discount, sharing tracking, or saying you’re checking stock) to reply instantly without typing the same thing again and again. Simulate Incoming Order Button: Added a test order button in the orders tab that drops in a random simulated customer order in real-time so I can test how new orders look on the dashboard. Cleaned up all the messy JavaScript behind it too so the code is actually easy to read and work with. Feels way better to click around now!
Okay so improved the Products page added option to add test order and also improved settings page and fixed few bugs like our little sun was coming over the notification bell in mobile view
Ships:
Shipped Commerce OS! Built a full multi-page e-commerce dashboard platform using HTML, Tailwind CSS, and plain JavaScript with live search/filtering across pages. What I made: Dashboard overview with key KPI cards (Revenue, Orders, Bot Actions) Inbox & conversation threads with channel-tagged messages and status badges Orders management & detailed order pages (#1240, #1229) Products catalog, Calls & Call-Conversation view, Invoices, and Settings Challenges & Learning: Wrote custom JavaScript live search filters across both table views and link-card layouts. Designed clean, consistent Tailwind layouts across 8+ different template pages. AI Declaration: Used AI (Claude/ChatGPT) for initial layout scaffolding and syntax assistance. All project architecture, manual edits, component styling, and JS filtering logic were reviewed, customized, and implemented directly in VS Code. To test: Navigate through the sidebar links (Inbox, Orders, Products, Calls, Invoices, Settings). Use the live search bar on the inbox or orders page to filter items in real time. Live Demo: https://kartikeynegi25.github.io/commerce-os
Made major changes in UI completely changed how the website looks also added some fun features like add test order add new feature just to test how things would work in the future further will work on the backend part...
|
1793094494.81113
|
1793180894.81113
|
|
47767
|
Ultrasonic people counter and smart lights by @Mad Ultrasonic people counter and smart lights by @MadameLouise | Stardance...
|
MadameLouise
|
1
|
38.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-14T12:41:56Z", "hours": 38.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "It is a People Counter using Arduino UNO and an HC-SR04 Ultrasonic Sensor. Whenever a person passes in front of the sensor, the Arduino detects the movement, increases the count, and turns on an LED as an indication. Could use this counting people entering a house or room or can also be used in bus or vehicles. it displays the number of count on your device. Because this sensing is using ultrasound sensor by connecting an Led we can even make automatic light system which turns on when there are people and turns off when there are none", "repo": "https://github.com/AmruthaMuralidhar1/Notebook", "demo": ""}]...
|
[{"post_id": 46870, "ts": "202 [{"post_id": 46870, "ts": "2026-08-14T12:40:57Z", "hours": 37.9658, "text": "Ultrasonic people counter and smart lights"}]...
|
Title: Ultrasonic people counter and smart lights Title: Ultrasonic people counter and smart lights by @MadameLouise | Stardance
Devlogs:
Ultrasonic people counter and smart lights
Ships:
It is a People Counter using Arduino UNO and an HC-SR04 Ultrasonic Sensor. Whenever a person passes in front of the sensor, the Arduino detects the movement, increases the count, and turns on an LED as an indication. Could use this counting people entering a house or room or can also be used in bus or vehicles. it displays the number of count on your device. Because this sensing is using ultrasound sensor by connecting an Led we can even make automatic light system which turns on when there are people and turns off when there are none...
|
1793116394.2859676
|
1793202794.2859676
|