|
586
|
My awesome macropad! by @Samma | Stardance
|
Samma
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Samma | Stardance
|
1792550889.6190448
|
1793155689.6190448
|
|
585
|
Lumicore-Pro by @Ved | Stardance
|
Ved
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Lumicore-Pro by @Ved | Stardance
|
1792788645.3686128
|
1793393445.3686128
|
|
584
|
stardance! by @m | Stardance
|
m
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: stardance! by @m | Stardance
|
1792497195.011085
|
1793101995.011085
|
|
583
|
My first slack bot! by @zach | Stardance
|
zach
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @zach | Stardance
|
1792662805.0152173
|
1793267605.0152173
|
|
582
|
Q*Bert on FPGA by @MicahO | Stardance
|
MicahO
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Q*Bert on FPGA by @MicahO | Stardance
|
1792781558.7324657
|
1793386358.7324657
|
|
581
|
My awesome macropad! by @janosch | Stardance
|
janosch
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @janosch | Stardanc Title: My awesome macropad! by @janosch | Stardance...
|
1792774241.1738765
|
1793379041.1738765
|
|
580
|
Personal portfolio by @janosch | Stardance
|
janosch
|
0
|
5.65
|
0
|
[]
|
[{"post_id": 52256, "ts": "202 [{"post_id": 52256, "ts": "2026-08-22T11:04:55Z", "hours": 4.1989, "text": "Sorry for this long time between updates. But I had to go back to the drawing board, the very reason I’m designing this was to stand out be unique and creative. I think I finally found a direction to go into just some refining left. As you can see the colour scheme has changed dramatically, in addition to the typography and layout. I’m really curious for any feedback, so do let me know what your thinking."}, {"post_id": 4814, "ts": "2026-06-08T10:00:43Z", "hours": 1.1589, "text": "After getting the fundamental code files set up, I moved to Figma to design my website. Because without planning, how will I catch errors and make improvements and iterations quickly? It also allows me to actually see the website from my mind in real life."}, {"post_id": 239, "ts": "2026-06-01T11:19:49Z", "hours": 0.29, "text": "Hello World! I’m just getting started building my new portfolio. I need something that actually represents what I do. I’m really looking forward to this project and where it will go."}]...
|
Title: Personal portfolio by @janosch | Stardance
Title: Personal portfolio by @janosch | Stardance
Devlogs:
Hello World! I’m just getting started building my new portfolio. I need something that actually represents what I do. I’m really looking forward to this project and where it will go.
After getting the fundamental code files set up, I moved to Figma to design my website. Because without planning, how will I catch errors and make improvements and iterations quickly? It also allows me to actually see the website from my mind in real life.
Sorry for this long time between updates. But I had to go back to the drawing board, the very reason I’m designing this was to stand out be unique and creative. I think I finally found a direction to go into just some refining left. As you can see the colour scheme has changed dramatically, in addition to the typography and layout. I’m really curious for any feedback, so do let me know what your thinking....
|
1792558430.6130595
|
1793163230.6130595
|
|
579
|
Runik - Just Run It by @uv | Stardance
|
uv
|
0
|
44.74
|
0
|
[]
|
[{"post_id": 67688, "ts": "202 [{"post_id": 67688, "ts": "2026-09-13T21:17:48Z", "hours": 1.0225, "text": "Finished proxy - but I can’t use it I finished writing the proxy. I had to: Retrieve the provided containers internal IP Generate a random IPv6 address within the given prefix and add it using netlink Start a proxy, listening at the generated IPv6 for each port, and proxying it to the containers IP. This works, but unfortunately I can’t use it! My server provider, datalix, gives a /64 subnet for each VPS, but what they don’t tell you is that you can only have 10 routed IPv6 addresses! This is not enough, and I have to manually add the addresses anyways. This means that I can’t listen on the generated IP address, and also that I can’t give each container an IP. This is a big problem, because some applications (like a minecraft server) require a plain TCP connection, which does not work behind a reverse proxy since there is no hostname passed. My only option is to rent a dedicated server, which I can’t afford right now. So now I will continue work on other parts of the project, like making it viable and easy to deploy different services, offer one click apps/database and potentially work on a way provision servers from the cloud. Commits: Retrieve container IPv4 address on expose command Finish proxy"}, {"post_id": 66762, "ts": "2026-09-12T17:28:10Z", "hours": 1.2539, "text": "Finished proxy communication Wrote a library to make receiving and sending messages really simple. Uses unix sockets so they are pretty fast. The server is started in the background, then different commands are received through channels. On the client, the connection is started in the background but c.Start() waits for the connection to change to connected. Then messages can be sent, but the connection has to be sustained using c.Wait() which waits until the server disconnects. Now I can start work on querying the docker container for its internal ip address and proxying it. Commit"}, {"post_id": 66189, "ts": "2026-09-11T21:06:12Z", "hours": 0.3208, "text": "Started work on the proxy API Not much to show, but I started writing code to create a unix socket to listen for messages. I’ll need to pass a container name, and array of ports to publish. I’ll also have to figure out how to pick new ipv6 addresses"}, {"post_id": 65549, "ts": "2026-09-10T19:14:29Z", "hours": 5.9189, "text": "long time no see I kinda hit a roadblock and waiting till I got past it until posting a devlog, but that never happened. That roadblock was trying to give each container a public ipv6 address. I was trying to get docker to expose ports on a specific ipv6 address on each container, but no matter what I did there still ended up being port conflicts. I found a better alternative now though, which is writing a proxy service that binds to an ipv6 address, and forwards the traffic to the containers internal ipv4 address. This works, but now I need to write an API so my virtual server can specify a container name and ports to forward to a public address, and dynamically create these addresses I still worked on other stuff though, so here’s what I have changed: (Sorry for massive devlog) The docker virtual server now syncs products automatically to the platform. Before it had to be done through a cURL command. Add a default postgres url to configuration Add a Key-Value input (UI library) Add support support for Key Value inputs to platform Allow users to configure volumes Simplify virtual server configuration by removing suboptions Allow regex validation for text inputs Fixes for KV Input: 1 , 2 Add a README Disable email verification by default Style scrollbar on chrome Make error message more detailed Allow users to specify port protocol with regex validation Add a database utility to makefile"}, {"post_id": 41559, "ts": "2026-08-05T21:05:59Z", "hours": 2.9108, "text": "Lotta Features!: Toasts, Container Recreation, and Ability to reconfigure services Added toast messages - needed a better way to show error messages so I implemented toasts. These were implemented using a MutationObserver, which watches an element for changes, in this case for new nodes being added to it. This lets me automatically remove toasts after a certain time and fade them out. Using a MutationObserver allows toasts to be added using HATEOS (HTMX) instead of only being able to create toasts from JavaScript. Added the ability to reconfigure services. Before only the value was shown, but now you can update configuration and save it. Added an API endpoint so virtual servers could request new service configuration. Also reworked code to use toasts, and generally improved code quality by moving code into separate functions Added the option to recreate containers. This is needed to update the container image, and/or refresh configuration, for example new ports or even a different image. This depended on the changes in 2. Toasts Reconfigure services Recreate containers"}, {"post_id": 40014, "ts": "2026-08-03T11:17:27Z", "hours": 2.4128, "text": "Feature: Service Actions Virtual servers can now list actions for the user. This is fully programmatic, so when the virtual server sends statistics and links, it also responds with a list of actions like: { \"label\" : \"Stop\" , \"code\" : \"stop_container\" , \"type\" : ui.ButtonTypeDanger , \"confirm\" : { \"title\" : \"Are you sure you want to stop this container?\" , \"description\" : \"Application data may be lost.\" , \"button_label\" : \"Confirm\" } } Each action has an optional and configurable confirmation dialog. Doing it like this allows the virtual server to have different actions based on the status of the container for example, like start if its stopped and stop/restart if its running. I also added a loading indicator to all buttons, which shows whenever a HTMX request is being made. Sort links by name (to prevent them shuffling) Add service actions"}, {"post_id": 37176, "ts": "2026-07-29T18:01:06Z", "hours": 1.7853, "text": "Feature: Service overview page Shows the status and utilisation of the container, and also the links. The links are found by parsing the containers labels and extracting the traefik rules. Fixed a few issues with the docker manager: Only one manager was started but the channel width was 5, meaning only one service was handled at a time. Now I start 5 managers, so 5 containers are handled at once. Made it so loading services at start runs in the background as well, so the API is available a lot quicker Each port uses a different service name in traefik, not sure if this was an issue but could of potentially caused problems when a service has multiple ports Also added loading indicator and status dot components. Next I’ll implement manual start/stop of containers (general action buttons), then service deletion and then volumes Service overview page Loading indicator/status dot"}, {"post_id": 36815, "ts": "2026-07-29T03:18:36Z", "hours": 1.5131, "text": "Feature: Fully automatic reverse proxy I added support for configuring ports, then implemented the Traefik reverse proxy giving each port a unique (non random - based on service id and port) subdomain. The service is given automatic TLS (error due to self signed cert - when I deploy I will have a domain and use letsencrypt) Next I need to add a better display, so the link shows in app Commit"}, {"post_id": 36772, "ts": "2026-07-29T01:20:38Z", "hours": 0.4367, "text": "Feature: Parse and store multi-input values I allowed configuration of multi inputs, to set the min and max values/length of number/text inputs I parsed and stored the values on the backend, so they are now available to the virtual server I need to: Allow updating configuration after creation Figure out how to implement a reverse proxy with variable subdomains to expose ports Configure multiinputs Add parsing + storage"}, {"post_id": 36755, "ts": "2026-07-29T00:50:03Z", "hours": 1.14, "text": "Feature: Multi-Inputs I added an input to my ui library that lets you add infinite entries. Supports text/number types. Also fixed an issue where modals could overflow the screen. Built this so I can have better configuration for my docker service, i.e to set ports and volumes. Haven’t implemented the backend storage for these but the components work Commit"}, {"post_id": 36544, "ts": "2026-07-28T18:47:35Z", "hours": 0.5611, "text": "Feature: Tabs The service page looked pretty bad so I added tabs to my UI library. Commit"}, {"post_id": 36526, "ts": "2026-07-28T18:11:50Z", "hours": 0.6992, "text": "Feature: View all your services Doesn’t show much rn Had a nightmare figuring out why the service list was overflowing the page. Solution was somehow to but min-width: 0 on the container 😭 Commit"}, {"post_id": 34029, "ts": "2026-07-24T13:28:14Z", "hours": 1.3494, "text": "Feature: Load existing on services on start + async container manager I added an endpoint to the platform API ( GET /api/services ) that returns all of the clients services. On start, the virtual server will request services to run, and start them one concurrently using golangs channel features (containers to run are added to a queue where up to five containers are handled at a time) Add async container manager Add API endpoint and start containers on virtual server start"}, {"post_id": 33744, "ts": "2026-07-23T22:00:55Z", "hours": 1.2117, "text": "Feature: Run docker images I implemented the very basics of running a docker container, and added a logs endpoint Definitely need to improve the UI for the service page, and make a tabs component. Also need to make stuff async so I don’t wait for the image to pull Commit"}, {"post_id": 33681, "ts": "2026-07-23T20:00:50Z", "hours": 0.7214, "text": "Feature: Configuration groups I added the ability to set configuration groups. These are purely visual. A virtual server may set whether the options are visible by default. For example to hide addons or advanced config options Commit"}, {"post_id": 33660, "ts": "2026-07-23T19:12:56Z", "hours": 3.5064, "text": "Feature: Order services I implemented the backend for ordering a service. Diagram explaining flow Text scored with red has not been implemented yet It works by Storing the service and configuration in a database Sending a request to the virtual server to run the service (signing the message so the virtual server can trust it) This setup is pretty complicated but it allows for virtual servers to run virtually anything and have configuration options for all of it. I have yet to implement: Per addon pricing (e.g +1 credit for +1 GB RAM) Configuration groups, which would allow for sections of configuration (e.g simple, advanced, and addons) Advanced options (required, selects etc) A proper virtual server that actually runs stuff A good service page Implement service orders Disable spinners on number inputs"}, {"post_id": 32519, "ts": "2026-07-21T19:08:31Z", "hours": 0.7511, "text": "WIP Feature: Get service modal I implemented a modal that loads on click, and has all the addons/options of the service. I need to style number inputs better, and make it so servers can set min/max values and lengths Commit"}, {"post_id": 32420, "ts": "2026-07-21T16:24:31Z", "hours": 2.4522, "text": "Feature: Programmatic services You can now add services through an API, using a generated client id and secret. A server would call the API, passing a list of products to sync. You pass a name, description, unique code, a price and a pricing schedule (per hour, day, or month). You can also add addons with options, currently only text or numbers (e.g for additional RAM). I also added a page to view all available services. Next I’ll implement “getting” the service Add services API + page Show credit price"}, {"post_id": 30182, "ts": "2026-07-17T15:30:18Z", "hours": 0.6244, "text": "Feature: Disable email verification Added an env variable ( MAIL_ENABLE ) that will disable any email sending and functions like verification. With this enabled, signing up will automatically mark the account as verified and sign them in, skipping the verify step. Did this so I can develop entirely locally and without internet, I’m on holiday in the Outer Hebrides where internet isn’t great. Writing this on a 7 hour ferry Also changed the flags field from bigint -> integer to save space, I won’t need 64 bits) Disable Email Verification Fix silliness"}, {"post_id": 24406, "ts": "2026-07-07T22:51:56Z", "hours": 0.4258, "text": "Feature: API client secret regeneration You can now regenerate the client secret. Mostly copied code from the confirm deletion, tweaked to show the new secret after. Also improved error handling so now it should show an error message if something fails instead of sending the error into the void Commit"}, {"post_id": 24382, "ts": "2026-07-07T22:06:34Z", "hours": 0.6533, "text": "Feature: Delete API clients + Danger button I added a delete action to API clients, with a confirmation modal. This needed a new button type, danger. Next I will add a regenerate action, and then I guess I will have to work on a products API Danger button API client deletion"}, {"post_id": 24250, "ts": "2026-07-07T18:06:29Z", "hours": 0.8303, "text": "Feature: API Client creation + Copy Button I added a page to view, manage and create API clients. This is what the past couple of devlogs have been leading up to, there was a lot of interactivity required for this. These will be used to programmatically set up “virtual servers”, which will be able to register “products” to the platform, and receive services to deploy, and they manage where to deploy them, for example on the current server, or provision a VPS, or to GKE, or a docker swarm. I’m designing it to be as flexible as possible. I also added a copy button component Need to implement actions next, probably just delete Copy button Fix issue where close modal buttons would submit form Add copy button to kitchen sink (UI demo) Add API clients"}, {"post_id": 24208, "ts": "2026-07-07T16:55:24Z", "hours": 1.7847, "text": "Feature: Tables + Modals I added tables and modals to my UI library. I needed these for my next platform update. Tables were more annoying to implement than you’d expect, the browser makes them pretty hard to style. Modals on the other hand were pretty quick to implement, I just used my existing card component. My UI library is coming together pretty quickly, I’ve now implemented most of the components you’d need for a interactive website! Tables Modals"}, {"post_id": 23647, "ts": "2026-07-06T18:46:04Z", "hours": 0.9703, "text": "Feature: Sign Out + Alerts I added the ability to sign out, added a favicon, created a standard layout component. I also added four types of alerts to my UI library, and the associated colours. I’ve designed everything to be themeable. I needed this for my next update Add Sign Out Disable logging of read config Add layout component and favicon Added alerts and colours Disable text wrapping in sidebar"}, {"post_id": 23143, "ts": "2026-07-05T22:25:33Z", "hours": 0.4675, "text": "Feature: Account page I added the account page that shows after sign in/up. Sign out is not implemented yet. I also updated the sidebar styling, adding a gap between links and differentiating between active and inactive links. Commit"}, {"post_id": 23115, "ts": "2026-07-05T21:27:55Z", "hours": 0.7358, "text": "Feature: Sign In I added a sign in page, implemented session tokens, and fixed a few bugs I also made it so you are automatically signed in after verifying your account. This is secure because a verification session is only made after signing in or creating an account. Honestly I thought this would take longer to implement, but I have done this a million times before. Next I’ll implement the account page. Implement sign in and sessions Make the code input required Fix error message when entering wrong code Make verification sign you in Cleanup/remove verification session after use"}, {"post_id": 23053, "ts": "2026-07-05T19:49:29Z", "hours": 1.7281, "text": "Feature: Verification emails When you create an account, an email with the verification code gets sent. You are redirected to a verification page, where you can enter the code, submit and your account gets marked as verified. The page after verification is not implemented. To do this, I: Added a hidden input to the code input that contains the actual value Set up mail sending using AWS SES (over SMTP) Added a flags column to users, and created a flagset with a verified and admin flag Created verification sessions, which store the code, an expiry date and a unique identifier Next, I’ll implement signing in (with sessions) Commit 1 - hidden input Commit 2 - verification sessions, emails and flags"}, {"post_id": 22447, "ts": "2026-07-04T22:23:38Z", "hours": 1.1489, "text": "Feature: Code input + Verify Page I built a verification page (server side stuff not implemented yet) and to do this I build a custom code input. It automatically focusses the next input when typing, or the previous when backspacing. I also added support for pasting codes. In the video demo, after pasting the focus doesn’t go to the last input but I have since fixed this. Next up, I’ll set up SMTP with AWS SES and get verification working on the server side. Commit 1 - Code input and verify page Commit 2 - Handle backspace and focus to next input when pasting"}, {"post_id": 21830, "ts": "2026-07-03T23:24:41Z", "hours": 1.2767, "text": "Feature: Sign up! There a fair bit of set up involved with this. I had to: Add config with environment variables Set up postgres database (automatic schema migration) Restructure again So now you can create an account. You can’t do anything yet, and I need to implement the next step of the flow, which is to verify your email. Commit 1 - Setup config, database and pretty logging Commit 2 - Slight restructure Commit 3 - Implement sign up (with HTMX)"}, {"post_id": 21782, "ts": "2026-07-03T21:44:10Z", "hours": 0.3444, "text": "Feature: Ghost buttons Also fixed an issue where link buttons got displayed differently due to left over styles from the browser on buttons. Commit"}, {"post_id": 21761, "ts": "2026-07-03T21:07:57Z", "hours": 0.7631, "text": "Inputs I added inputs to my UI library and added fields to my sign up form Probably won’t keep the background but its fun. Second attachment is one of my mockups from a long time ago that I might try make the UI look like. Commit"}, {"post_id": 21719, "ts": "2026-07-03T20:14:06Z", "hours": 0.6161, "text": "Start work on platform I’m starting work on the Runik platform interface. To do this I restructured the code, added a “Full Page Card” component and created a basic sign up page"}, {"post_id": 20967, "ts": "2026-07-02T18:15:56Z", "hours": 0.8025, "text": "Minimise sidebar I implemented the minimise button on the sidebar! It backs to local storage so works through refreshes and different pages. Also provides a way to display difference things based on if the sidebar is maximised or not Commit"}, {"post_id": 20892, "ts": "2026-07-02T16:52:25Z", "hours": 1.0878, "text": "Sidebar and icons support! Currently the minimise sidebar button doesn’t work. I also need to add a section for bottom links. Forgot to mention in my previous devlog, some time wasn’t tracked because I was experimenting with the helix editor. Also, this project is only using CSS, not tailwindcss. Although tailwindcss is nice, I miss CSS selectors and I find it a bit silly to have a build step for CSS. Commit"}, {"post_id": 20836, "ts": "2026-07-02T15:26:34Z", "hours": 0.515, "text": "UI Library I started working on a UI library. For my other projects I wrote the UI from scratch, where I was repeating a lot of code, or used Daisyui, which I never really liked the look of. So instead, I’m writing my own UI library for templ (a templating language for golang) so I can get it right this time. So far I’ve added buttons, button rows and cards, and a “kitchen sink” demo. There are three types of buttons, primary, secondary and accent, with nice animations. Button rows can also be aligned left, right, or center."}]...
|
Title: Runik - Just Run It by @uv | Stardance
Dev Title: Runik - Just Run It by @uv | Stardance
Devlogs:
UI Library I started working on a UI library. For my other projects I wrote the UI from scratch, where I was repeating a lot of code, or used Daisyui, which I never really liked the look of. So instead, I’m writing my own UI library for templ (a templating language for golang) so I can get it right this time. So far I’ve added buttons, button rows and cards, and a “kitchen sink” demo. There are three types of buttons, primary, secondary and accent, with nice animations. Button rows can also be aligned left, right, or center.
Sidebar and icons support! Currently the minimise sidebar button doesn’t work. I also need to add a section for bottom links. Forgot to mention in my previous devlog, some time wasn’t tracked because I was experimenting with the helix editor. Also, this project is only using CSS, not tailwindcss. Although tailwindcss is nice, I miss CSS selectors and I find it a bit silly to have a build step for CSS. Commit
Minimise sidebar I implemented the minimise button on the sidebar! It backs to local storage so works through refreshes and different pages. Also provides a way to display difference things based on if the sidebar is maximised or not Commit
Start work on platform I’m starting work on the Runik platform interface. To do this I restructured the code, added a “Full Page Card” component and created a basic sign up page
Inputs I added inputs to my UI library and added fields to my sign up form Probably won’t keep the background but its fun. Second attachment is one of my mockups from a long time ago that I might try make the UI look like. Commit
Feature: Ghost buttons Also fixed an issue where link buttons got displayed differently due to left over styles from the browser on buttons. Commit
Feature: Sign up! There a fair bit of set up involved with this. I had to: Add config with environment variables Set up postgres database (automatic schema migration) Restructure again So now you can create an account. You can’t do anything yet, and I need to implement the next step of the flow, which is to verify your email. Commit 1 - Setup config, database and pretty logging Commit 2 - Slight restructure Commit 3 - Implement sign up (with HTMX)
Feature: Code input + Verify Page I built a verification page (server side stuff not implemented yet) and to do this I build a custom code input. It automatically focusses the next input when typing, or the previous when backspacing. I also added support for pasting codes. In the video demo, after pasting the focus doesn’t go to the last input but I have since fixed this. Next up, I’ll set up SMTP with AWS SES and get verification working on the server side. Commit 1 - Code input and verify page Commit 2 - Handle backspace and focus to next input when pasting
Feature: Verification emails When you create an account, an email with the verification code gets sent. You are redirected to a verification page, where you can enter the code, submit and your account gets marked as verified. The page after verification is not implemented. To do this, I: Added a hidden input to the code input that contains the actual value Set up mail sending using AWS SES (over SMTP) Added a flags column to users, and created a flagset with a verified and admin flag Created verification sessions, which store the code, an expiry date and a unique identifier Next, I’ll implement signing in (with sessions) Commit 1 - hidden input Commit 2 - verification sessions, emails and flags
Feature: Sign In I added a sign in page, implemented session tokens, and fixed a few bugs I also made it so you are automatically signed in after verifying your account. This is secure because a verification session is only made after signing in or creating an account. Honestly I thought this would take longer to implement, but I have done this a million times before. Next I’ll implement the account page. Implement sign in and sessions Make the code input required Fix error message when entering wrong code Make verification sign you in Cleanup/remove verification session after use
Feature: Account page I added the account page that shows after sign in/up. Sign out is not implemented yet. I also updated the sidebar styling, adding a gap between links and differentiating between active and inactive links. Commit
Feature: Sign Out + Alerts I added the ability to sign out, added a favicon, created a standard layout component. I also added four types of alerts to my UI library, and the associated colours. I’ve designed everything to be themeable. I needed this for my next update Add Sign Out Disable logging of read config Add layout component and favicon Added alerts and colours Disable text wrapping in sidebar
Feature: Tables + Modals I added tables and modals to my UI library. I needed these for my next platform update. Tables were more annoying to implement than you’d expect, the browser makes them pretty hard to style. Modals on the other hand were pretty quick to implement, I just used my existing card component. My UI library is coming together pretty quickly, I’ve now implemented most of the components you’d need for a interactive website! Tables Modals
Feature: API Client creation + Copy Button I added a page to view, manage and create API clients. This is what the past couple of devlogs have been leading up to, there was a lot of interactivity required for this. These will be used to programmatically set up “virtual servers”, which will be able to register “products” to the platform, and receive services to deploy, and they manage where to deploy them, for example on the current server, or provision a VPS, or to GKE, or a docker swarm. I’m designing it to be as flexible as possible. I also added a copy button component Need to implement actions next, probably just delete Copy button Fix issue where close modal buttons would submit form Add copy button to kitchen sink (UI demo) Add API clients
Feature: Delete API clients + Danger button I added a delete action to API clients, with a confirmation modal. This needed a new button type, danger. Next I will add a regenerate action, and then I guess I will have to work on a products API Danger button API client deletion
Feature: API client secret regeneration You can now regenerate the client secret. Mostly copied code from the confirm deletion, tweaked to show the new secret after. Also improved error handling so now it should show an error message if something fails instead of sending the error into the void Commit
Feature: Disable email verification Added an env variable ( MAIL_ENABLE ) that will disable any email sending and functions like verification. With this enabled, signing up will automatically mark the account as verified and sign them in, skipping the verify step. Did this so I can develop entirely locally and without internet, I’m on holiday in the Outer Hebrides where internet isn’t great. Writing this on a 7 hour ferry Also changed the flags field from bigint -> integer to save space, I won’t need 64 bits) Disable Email Verification Fix silliness
Feature: Programmatic services You can now add services through an API, using a generated client id and secret. A server would call the API, passing a list of products to sync. You pass a name, description, unique code, a price and a pricing schedule (per hour, day, or month). You can also add addons with options, currently only text or numbers (e.g for additional RAM). I also added a page to view all available services. Next I’ll implement “getting” the service Add services API + page Show credit price
WIP Feature: Get service modal I implemented a modal that loads on click, and has all the addons/options of the service. I need to style number inputs better, and make it so servers can set min/max values and lengths Commit
Feature: Order services I implemented the backend for ordering a service. Diagram explaining flow Text scored with red has not been implemented yet It works by Storing the service and configuration in a database Sending a request to the virtual server to run the service (signing the message so the virtual server can trust it) This setup is pretty complicated but it allows for virtual servers to run virtually anything and have configuration options for all of it. I have yet to implement: Per addon pricing (e.g +1 credit for +1 GB RAM) Configuration groups, which would allow for sections of configuration (e.g simple, advanced, and addons) Advanced options (required, selects etc) A proper virtual server that actually runs stuff A good service page Implement service orders Disable spinners on number inputs
Feature: Configuration groups I added the ability to set configuration groups. These are purely visual. A virtual server may set whether the options are visible by default. For example to hide addons or advanced config options Commit
Feature: Run docker images I implemented the very basics of running a docker container, and added a logs endpoint Definitely need to improve the UI for the service page, and make a tabs component. Also need to make stuff async so I don’t wait for the image to pull Commit
Feature: Load existing on services on start + async container manager I added an endpoint to the platform API ( GET /api/services ) that returns all of the clients services. On start, the virtual server will request services to run, and start them one concurrently using golangs channel features (containers to run are added to a queue where up to five containers are handled at a time) Add async container manager Add API endpoint and start containers on virtual server start
Feature: View all your services Doesn’t show much rn Had a nightmare figuring out why the service list was overflowing the page. Solution was somehow to but min-width: 0 on the container 😭 Commit
Feature: Tabs The service page looked pretty bad so I added tabs to my UI library. Commit
Feature: Multi-Inputs I added an input to my ui library that lets you add infinite entries. Supports text/number types. Also fixed an issue where modals could overflow the screen. Built this so I can have better configuration for my docker service, i.e to set ports and volumes. Haven’t implemented the backend storage for these but the components work Commit
Feature: Parse and store multi-input values I allowed configuration of multi inputs, to set the min and max values/length of number/text inputs I parsed and stored the values on the backend, so they are now available to the virtual server I need to: Allow updating configuration after creation Figure out how to implement a reverse proxy with variable subdomains to expose ports Configure multiinputs Add parsing + storage
Feature: Fully automatic reverse proxy I added support for configuring ports, then implemented the Traefik reverse proxy giving each port a unique (non random - based on service id and port) subdomain. The service is given automatic TLS (error due to self signed cert - when I deploy I will have a domain and use letsencrypt) Next I need to add a better display, so the link shows in app Commit
Feature: Service overview page Shows the status and utilisation of the container, and also the links. The links are found by parsing the containers labels and extracting the traefik rules. Fixed a few issues with the docker manager: Only one manager was started but the channel width was 5, meaning only one service was handled at a time. Now I start 5 managers, so 5 containers are handled at once. Made it so loading services at start runs in the background as well, so the API is available a lot quicker Each port uses a different service name in traefik, not sure if this was an issue but could of potentially caused problems when a service has multiple ports Also added loading indicator and status dot components. Next I’ll implement manual start/stop of containers (general action buttons), then service deletion and then volumes Service overview page Loading indicator/status dot
Feature: Service Actions Virtual servers can now list actions for the user. This is fully programmatic, so when the virtual server sends statistics and links, it also responds with a list of actions like: { "label" : "Stop" , "code" : "stop_container" , "type" : ui.ButtonTypeDanger , "confirm" : { "title" : "Are you sure you want to stop this container?" , "description" : "Application data may be lost." , "button_label" : "Confirm" } } Each action has an optional and configurable confirmation dialog. Doing it like this allows the virtual server to have different actions based on the status of the container for example, like start if its stopped and stop/restart if its running. I also added a loading indicator to all buttons, which shows whenever a HTMX request is being made. Sort links by name (to prevent them shuffling) Add service actions
Lotta Features!: Toasts, Container Recreation, and Ability to reconfigure services Added toast messages - needed a better way to show error messages so I implemented toasts. These were implemented using a MutationObserver, which watches an element for changes, in this case for new nodes being added to it. This lets me automatically remove toasts after a certain time and fade them out. Using a MutationObserver allows toasts to be added using HATEOS (HTMX) instead of only being able to create toasts from JavaScript. Added the ability to reconfigure services. Before only the value was shown, but now you can update configuration and save it. Added an API endpoint so virtual servers could request new service configuration. Also reworked code to use toasts, and generally improved code quality by moving code into separate functions Added the option to recreate containers. This is needed to update the container image, and/or refresh configuration, for example new ports or even a different image. This depended on the changes in 2. Toasts Reconfigure services Recreate containers
long time no see I kinda hit a roadblock and waiting till I got past it until posting a devlog, but that never happened. That roadblock was trying to give each container a public ipv6 address. I was trying to get docker to expose ports on a specific ipv6 address on each container, but no matter what I did there still ended up being port conflicts. I found a better alternative now though, which is writing a proxy service that binds to an ipv6 address, and forwards the traffic to the containers internal ipv4 address. This works, but now I need to write an API so my virtual server can specify a container name and ports to forward to a public address, and dynamically create these addresses I still worked on other stuff though, so here’s what I have changed: (Sorry for massive devlog) The docker virtual server now syncs products automatically to the platform. Before it had to be done through a cURL command. Add a default postgres url to configuration Add a Key-Value input (UI library) Add support support for Key Value inputs to platform Allow users to configure volumes Simplify virtual server configuration by removing suboptions Allow regex validation for text inputs Fixes for KV Input: 1 , 2 Add a README Disable email verification by default Style scrollbar on chrome Make error message more detailed Allow users to specify port protocol with regex validation Add a database utility to makefile
Started work on the proxy API Not much to show, but I started writing code to create a unix socket to listen for messages. I’ll need to pass a container name, and array of ports to publish. I’ll also have to figure out how to pick new ipv6 addresses
Finished proxy communication Wrote a library to make receiving and sending messages really simple. Uses unix sockets so they are pretty fast. The server is started in the background, then different commands are received through channels. On the client, the connection is started in the background but c.Start() waits for the connection to change to connected. Then messages can be sent, but the connection has to be sustained using c.Wait() which waits until the server disconnects. Now I can start work on querying the docker container for its internal ip address and proxying it. Commit
Finished proxy - but I can’t use it I finished writing the proxy. I had to: Retrieve the provided containers internal IP Generate a random IPv6 address within the given prefix and add it using netlink Start a proxy, listening at the generated IPv6 for each port, and proxying it to the containers IP. This works, but unfortunately I can’t use it! My server provider, datalix, gives a /64 subnet for each VPS, but what they don’t tell you is that you can only have 10 routed IPv6 addresses! This is not enough, and I have to manually add the addresses anyways. This means that I can’t listen on the generated IP address, and also that I can’t give each container an IP. This is a big problem, because some applications (like a minecraft server) require a plain TCP connection, which does not work behind a reverse proxy since there is no hostname passed. My only option is to rent a dedicated server, which I can’t afford right now. So now I will continue work on other parts of the project, like making it viable and easy to deploy different services, offer one click apps/database and potentially work on a way provision servers from the cloud. Commits: Retrieve container IPv4 address on expose command Finish proxy...
|
1792511693.9472222
|
1793116493.9472222
|
|
578
|
Cara Website by @SB | Stardance
|
SB
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Cara Website by @SB | Stardance
|
1792529273.0967221
|
1793134073.0967221
|
|
577
|
My first slack bot! by @SB | Stardance
|
SB
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @SB | Stardance
|
1792547462.133024
|
1793152262.133024
|
|
576
|
Ghost Proxy by @MH | Stardance
|
MH
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-08T18:08:58Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a proxy hub and game site.", "repo": "https://github.com/amazingcoder132/Ghost-Proxy", "demo": "https://amazingcoder132.github.io/Ghost-Proxy/"}]...
|
[{"post_id": 140, "ts": "2026- [{"post_id": 140, "ts": "2026-05-31T22:36:26Z", "hours": 0.3214, "text": "A Website that allows people to find games and proxies"}]...
|
Title: Ghost Proxy by @MH | Stardance
Devlogs:
A Title: Ghost Proxy by @MH | Stardance
Devlogs:
A Website that allows people to find games and proxies
Ships:
I made a proxy hub and game site....
|
1792975750.1550493
|
1793062150.1550493
|
|
575
|
KeyGenius by @Eugenius74 | Stardance
|
Eugenius74
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: KeyGenius by @Eugenius74 | Stardance
|
1792673302.7045476
|
1793278102.7045476
|
|
574
|
Untitled by @tengenrusei | Stardance
|
tengenrusei
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @tengenrusei | Stardance
|
1792918077.0374317
|
1793782077.0374317
|
|
573
|
My awesome macropad! by @tengenrusei | Stardance
|
tengenrusei
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @tengenrusei | Star Title: My awesome macropad! by @tengenrusei | Stardance...
|
1792918176.5484447
|
1793782176.5484447
|
|
572
|
My awesome macropad! by @zerooneshift | Stardance
|
zerooneshift
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @zerooneshift | Sta Title: My awesome macropad! by @zerooneshift | Stardance...
|
1792702427.891896
|
1793307227.891896
|
|
571
|
test project ? by @qcoral | Stardance
|
qcoral
|
1
|
27.1
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-01T14:46:25Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "testing ship", "repo": "https://github.com/hackclub/hackpad", "demo": ""}]...
|
[{"post_id": 38280, "ts": "202 [{"post_id": 38280, "ts": "2026-07-31T16:21:53Z", "hours": 25.0969, "text": "hihihih"}, {"post_id": 270, "ts": "2026-06-01T14:20:58Z", "hours": 2.0525, "text": "testing"}]...
|
Title: test project ? by @qcoral | Stardance
Devl Title: test project ? by @qcoral | Stardance
Devlogs:
testing
hihihih
Ships:
testing ship...
|
1792979557.2420874
|
1793065957.2420874
|
|
570
|
Mira by @Joker | Stardance
|
Joker
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Mira by @Joker | Stardance
|
1792727249.8490574
|
1793332049.8490574
|
|
569
|
Lore by @gameminder | Stardance
|
gameminder
|
0
|
2.48
|
0
|
[]
|
[{"post_id": 718, "ts": "2026- [{"post_id": 718, "ts": "2026-06-02T09:36:40Z", "hours": 2.4764, "text": "currently building a memory layer for ai agents that is context aware using knowledge graphs with entity relations. any more ides on this?"}]...
|
Title: Lore by @gameminder | Stardance
Devlogs:
c Title: Lore by @gameminder | Stardance
Devlogs:
currently building a memory layer for ai agents that is context aware using knowledge graphs with entity relations. any more ides on this?...
|
1792583393.6572468
|
1793188193.6572468
|
|
568
|
My awesome macropad! by @Sushmita | Stardance
|
Sushmita
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Sushmita | Stardan Title: My awesome macropad! by @Sushmita | Stardance...
|
1792925247.9542224
|
1793789247.9542224
|
|
567
|
Personal Website by @eli | Stardance
|
eli
|
0
|
0.67
|
0
|
[]
|
[{"post_id": 409, "ts": "2026- [{"post_id": 409, "ts": "2026-06-01T20:15:13Z", "hours": 0.6728, "text": "Made the base for my personal website! I used Gemini to help me build some example components I used to build my own!"}]...
|
Title: Personal Website by @eli | Stardance
Devlo Title: Personal Website by @eli | Stardance
Devlogs:
Made the base for my personal website! I used Gemini to help me build some example components I used to build my own!...
|
1792929095.5347948
|
1793793095.5347948
|
|
566
|
Personal Website by @stoinkety | Stardance
|
stoinkety
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Personal Website by @stoinkety | Stardance
|
1792586967.1582623
|
1793191767.1582623
|
|
565
|
Untitled by @olive | Stardance
|
olive
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @olive | Stardance
|
1792659297.6087897
|
1793264097.6087897
|
|
564
|
My awesome macropad! by @andrea_zambolin09 | Stard My awesome macropad! by @andrea_zambolin09 | Stardance...
|
andrea_zambolin09
|
0
|
0.57
|
0
|
[]
|
[{"post_id": 28914, "ts": "202 [{"post_id": 28914, "ts": "2026-07-15T14:53:09Z", "hours": 0.5669, "text": "done both the pcb and the case (I kinda forgot to record the first time so I speedrun the whole project again)"}]...
|
Title: My awesome macropad! by @andrea_zambolin09 Title: My awesome macropad! by @andrea_zambolin09 | Stardance
Devlogs:
done both the pcb and the case (I kinda forgot to record the first time so I speedrun the whole project again)...
|
1792633820.1228766
|
1793238620.1228766
|
|
563
|
Untitled by @kuratus | Stardance
|
kuratus
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @kuratus | Stardance
|
1792684354.8401766
|
1793289154.8401766
|
|
562
|
Chess in Python Turtle 🐢 by @Mehmet | Stardance
|
Mehmet
|
1
|
7.0
|
80
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T21:01:01Z", "hours": 7.0, "multiplier": 12.05, "payout": 80, "blessing": "neutral", "text": "I built pure chess inside Python Turtle. The entire idea of making a fully fledged game in Python’s Turtle seemed absurd, but there is tangible proof now. I’m proud of how I handled the piece moving and square highlighting code snippets; those were really fun to work on. Here are some tests you can do to see if my project holds up: Try clicking outside the board to move a piece, and you’ll see that it doesn’t. Try moving a piece outside the board. Try moving kings to squares that opposing pieces see. Try double pushing pawns. Right now, I haven’t added en passant or castling, but a 99% fledged chess game inside Python Turtle is ready for you to play.", "repo": "https://github.com/SameRainbows/Python-Turtle-Chess", "demo": "https://github.com/SameRainbows/Python-Turtle-Chess/releases/tag/V1"}]...
|
[{"post_id": 8112, "ts": "2026 [{"post_id": 8112, "ts": "2026-06-13T15:19:39Z", "hours": 1.8964, "text": "Finally, I can say that I’ve built chess—fully fledged chess—in Python Turtle. I added check, checks, checkmates, and all the logic that makes them up. I also created a new function called has_legal_moves, which takes one parameter to see if the attacker is white. In total, I defined 11 functions back to back in the Python file. It seems funny, but that’s what was needed. Thank you, every1!"}, {"post_id": 7080, "ts": "2026-06-11T21:14:12Z", "hours": 0.5017, "text": "Added basic promotions when the pawns go to the opposite side (for now they default to only queen promotions, more coming soon) and right now started working on the final boss of chess programming… Checks and checkmates. Wish me luck!"}, {"post_id": 5677, "ts": "2026-06-09T15:40:24Z", "hours": 0.9253, "text": "Welcome back to my pit of inevitable doom, where I’m trying to build fully fledged chess inside pure Python turtle. This devlog is because I finally managed to get a glimpse of the sunlight and add the special moves and captures for pawns. Before right now, pawns could only move one step forward no matter the place, and they actually captured by going forward into the enemy. If you play chess, you know it’s not like that. I have now implemented the following: Two-step support for pawns going on their first move. Logic so that pawns cannot capture pieces directly in front of them. Support for pawns capturing pieces only on their front diagonals. Follow along if you want to see if I ever get out of this!!! :D"}, {"post_id": 2915, "ts": "2026-06-05T20:22:29Z", "hours": 0.9917, "text": "Added legal moves and support for the knight, king, rook and pawn. The bishop is on the way"}, {"post_id": 2776, "ts": "2026-06-05T16:03:50Z", "hours": 0.7839, "text": "Added coordinates for the chessboard with a new function called print_coordinates. I also added a bouncer function to check if a piece is trying to move to a square that has a piece of the same color. If it’s trying to capture its own piece, it doesn’t allow the move. I implemented this by creating a new function called is_legal_move."}, {"post_id": 2264, "ts": "2026-06-04T17:37:49Z", "hours": 1.1539, "text": "Created functions for repeated tasks."}, {"post_id": 980, "ts": "2026-06-02T19:18:29Z", "hours": 0.47, "text": "Making fully fledged chess inside Python Turtle."}]...
|
Title: Chess in Python Turtle 🐢 by @Mehmet | Stard Title: Chess in Python Turtle 🐢 by @Mehmet | Stardance
Devlogs:
Making fully fledged chess inside Python Turtle.
Created functions for repeated tasks.
Added coordinates for the chessboard with a new function called print_coordinates. I also added a bouncer function to check if a piece is trying to move to a square that has a piece of the same color. If it’s trying to capture its own piece, it doesn’t allow the move. I implemented this by creating a new function called is_legal_move.
Added legal moves and support for the knight, king, rook and pawn. The bishop is on the way
Welcome back to my pit of inevitable doom, where I’m trying to build fully fledged chess inside pure Python turtle. This devlog is because I finally managed to get a glimpse of the sunlight and add the special moves and captures for pawns. Before right now, pawns could only move one step forward no matter the place, and they actually captured by going forward into the enemy. If you play chess, you know it’s not like that. I have now implemented the following: Two-step support for pawns going on their first move. Logic so that pawns cannot capture pieces directly in front of them. Support for pawns capturing pieces only on their front diagonals. Follow along if you want to see if I ever get out of this!!! :D
Added basic promotions when the pawns go to the opposite side (for now they default to only queen promotions, more coming soon) and right now started working on the final boss of chess programming… Checks and checkmates. Wish me luck!
Finally, I can say that I’ve built chess—fully fledged chess—in Python Turtle. I added check, checks, checkmates, and all the logic that makes them up. I also created a new function called has_legal_moves, which takes one parameter to see if the attacker is white. In total, I defined 11 functions back to back in the Python file. It seems funny, but that’s what was needed. Thank you, every1!
Ships:
I built pure chess inside Python Turtle. The entire idea of making a fully fledged game in Python’s Turtle seemed absurd, but there is tangible proof now. I’m proud of how I handled the piece moving and square highlighting code snippets; those were really fun to work on. Here are some tests you can do to see if my project holds up: Try clicking outside the board to move a piece, and you’ll see that it doesn’t. Try moving a piece outside the board. Try moving kings to squares that opposing pieces see. Try double pushing pawns. Right now, I haven’t added en passant or castling, but a 99% fledged chess game inside Python Turtle is ready for you to play....
|
1792994131.9901175
|
1793080531.9901175
|
|
561
|
My awesome macropad! by @MicahO | Stardance
|
MicahO
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @MicahO | Stardance
|
1792612520.6661658
|
1793217320.6661658
|
|
560
|
My first slack bot! by @orangetreefrog4 | Stardanc My first slack bot! by @orangetreefrog4 | Stardance...
|
orangetreefrog4
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @orangetreefrog4 | S Title: My first slack bot! by @orangetreefrog4 | Stardance...
|
1792576060.2300115
|
1793180860.2300115
|
|
559
|
Starry Night by @Kiki | Stardance
|
Kiki
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Starry Night by @Kiki | Stardance
|
1792946878.5351465
|
1793810878.5351465
|
|
558
|
3D Printed Planetary Gearbox Editor by @preston_me 3D Printed Planetary Gearbox Editor by @preston_messina | Stardance...
|
preston_messina
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: 3D Printed Planetary Gearbox Editor by @pre Title: 3D Printed Planetary Gearbox Editor by @preston_messina | Stardance...
|
1792562019.688978
|
1793166819.688978
|
|
557
|
MatchRatingCalculator by @Allen | Stardance
|
Allen
|
4
|
118.0
|
488
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-24T23:22:10Z", "hours": 57.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made Veyro, a React-based sports rating website that lets players enter match stats, calculate a live performance score, save matches to a vault, compare progress, and use role-based features like Coach, Premium, and Video AI. The hardest part was converting the old HTML version into a full React app while keeping the same original graphics, layout, and feel, because the design and logic had to stay consistent across every page. I am proud that the project now has stronger account persistence, saving, navigation, monetization gates, Firebase/Firestore security, CI/CD, and automated tests with all tests passing. To test it, people should sign in or use guest mode, try the soccer calculator, save a match, open the vault, check graph/compare pages, and test locked features like team tools or Video AI depending on the user plan.", "repo": "https://github.com/awang03-crypto/Veyrov2.6", "demo": "https://darksalmon-lark-983637.hostingersite.com"}, {"ship_num": 2, "ts": "2026-07-10T17:15:40Z", "hours": 28.0, "multiplier": 7.97, "payout": 225, "blessing": "neutral", "text": "I made Veyro, a React-based sports rating website that lets players enter match stats, calculate a live performance score, save matches to a vault, compare progress, and use role-based features like Coach, Premium, and Video AI. The hardest part was converting the old HTML version into a full React app while keeping the same original graphics, layout, and feel, because the design and logic had to stay consistent across every page. I am proud that the project now has stronger account persistence, saving, navigation, monetization gates, Firebase/Firestore security, CI/CD, and automated tests with all tests passing. To test it, people should sign in or use guest mode, try the soccer calculator, save a match, open the vault, check graph/compare pages, and test locked features like team tools or Video AI depending on the user plan.", "repo": "https://github.com/awang03-crypto/Veyrov2.6", "demo": "https://darksalmon-lark-983637.hostingersite.com"}, {"ship_num": 3, "ts": "2026-07-01T19:24:22Z", "hours": 30.0, "multiplier": 7.92, "payout": 236, "blessing": "neutral", "text": "This looks like a Ship post on Replit or a similar platform. Here's something you can paste in: I built Veyro, a multi-sport player performance rating app for soccer, basketball, and football. Players enter their match stats and get a rating out of 100 using a position-specific formula — so a goalkeeper is judged on saves and clean sheets, not goals, and a quarterback is judged on touchdowns and interceptions, not tackles. Matches save to a personal vault so players can track their development over time. The most challenging part was building a clean React codebase that could handle three completely different sports with separate calculators, vaults, graphs, and coach pages for each — while keeping the architecture maintainable and the bundle size small. I also built a full coach onboarding flow with shareable team invite links, a three-tier monetization system with Stripe integration, and a CI/CD pipeline with 87 passing tests. I'm most proud of the billing and entitlements system — it handles free tier limits, Coach plan features, and Premium Video AI access cleanly across both the server and the React UI. The app scores 94 for performance, 100 for accessibility, and 96 for best practices on PageSpeed Insights. To test it: go to the calculator, pick your sport and position, enter some match stats, and hit calculate. Free accounts can save up to 5 matches to the vault. If you're a coach, hit Setup in the sidebar to create a team and get a shareable invite link for your players.", "repo": "https://github.com/awang03-crypto/Veyrov2.6", "demo": "https://darksalmon-lark-983637.hostingersite.com"}, {"ship_num": 4, "ts": "2026-06-06T19:21:42Z", "hours": 3.0, "multiplier": 8.58, "payout": 27, "blessing": "neutral", "text": "I made Match Rating, a soccer performance app that helps players turn their match stats into a clear rating out of 100. I can calculate a live score, save games, track my progress in a vault, view graphs, analyze strengths and weaknesses, compare games, join coach teams, and test an experimental AI video-analysis tool. The most challenging part was making everything work together: the calculator, Firebase sign-in, saved stats, graphs, analysis, coach/player roles, team codes, privacy settings, mobile design, and the AI backend. It was also hard to make the app remember each player’s name, age, position, team, saved games, and detailed stats without breaking the user experience. I am proud that this became more than just a simple calculator. I built a full player-development platform with accounts, saved match history, team features, analytics, exports, scorecards, and a mobile-friendly design. I’m also proud that I improved it through feedback and kept making it cleaner, faster, and easier to use. People testing my product should know that they should sign up as a player or coach, enter their profile information, use the calculator first, and then save the match in the Vault. After saving games, they can check the Graph, Analysis, Compare Games, Profile, and Team pages. Coaches can create a team code and invite players. The Video AI feature is still experimental, so users should double-check the stats it gives.", "repo": "https://github.com/awang03-crypto/Veyrov2.6", "demo": "https://darksalmon-lark-983637.hostingersite.com"}]...
|
[{"post_id": 34256, "ts": "202 [{"post_id": 34256, "ts": "2026-07-24T19:58:49Z", "hours": 9.0, "text": "I improved the security and I improved and rewrote the firebase rules to make it easier to login and stuff."}, {"post_id": 33518, "ts": "2026-07-23T15:13:44Z", "hours": 9.0, "text": "I debugged the whole site"}, {"post_id": 32555, "ts": "2026-07-21T20:15:21Z", "hours": 9.0, "text": "I worked on the pricing of everything. I also made the video ai better and also worked on the pricing of the ai."}, {"post_id": 29287, "ts": "2026-07-16T03:09:38Z", "hours": 8.0, "text": "Making Veyro blogs on the site to improve backlinks along with SEO along with improving how to explain how this works."}, {"post_id": 28462, "ts": "2026-07-14T18:31:32Z", "hours": 9.0, "text": "I just focused on making it more suitable for coaches and trying to add more sports"}, {"post_id": 27717, "ts": "2026-07-13T14:51:07Z", "hours": 9.0, "text": "I worked on running tests on my website and making sure that there were no significant bugs."}, {"post_id": 26008, "ts": "2026-07-10T15:58:23Z", "hours": 8.0, "text": "I worked on the privacy and security."}, {"post_id": 24927, "ts": "2026-07-08T20:04:41Z", "hours": 8.0, "text": "I worked on just improving minor bugs and minor fixes. I also tried to make a lot of guides in the site to help coaches and parents."}, {"post_id": 24196, "ts": "2026-07-07T16:43:22Z", "hours": 8.0, "text": "I improved the calculator logic and scoring system along with the SEO"}, {"post_id": 23461, "ts": "2026-07-06T13:30:42Z", "hours": 2.0, "text": "I just improved the security"}, {"post_id": 20205, "ts": "2026-07-01T19:09:11Z", "hours": 2.0, "text": "I built out the coach onboarding flow, which walks coaches through creating an account, setting their role, generating a team, and sharing a unique invite link so players can request to join at veyro.com/join/TEAMCODE. I also wrote five long-form SEO blog posts targeting high-intent keywords — how to rate soccer players, a youth coach playbook, player performance analytics, a basketball rating system guide, and a football rating system guide — each with JSON-LD schema markup for Google rich results. Alongside the content work, I updated the sitemap to include all sixteen pages, fixed a missing meta description that PageSpeed Insights had flagged, and added SoftwareApplication and FAQPage structured data to the calculator homepage to improve search visibility."}, {"post_id": 19501, "ts": "2026-06-30T20:34:01Z", "hours": 5.0, "text": "I just improved the SEO"}, {"post_id": 18021, "ts": "2026-06-29T00:09:19Z", "hours": 2.0, "text": "I migrated the website into a unified React application while preserving its original graphics and layout, restored the calculator’s complete rating logic, improved account persistence, fixed saving and navigation, added Free, Coach, and Premium feature gates, strengthened Firebase and Firestore security, configured Stripe billing support, expanded automated backend and React tests, and updated CI/CD until all 87 tests passed."}, {"post_id": 13978, "ts": "2026-06-22T22:57:55Z", "hours": 2.0, "text": "I fixed the calculator format by implementing the iframe-based architecture from the zip, added the missing /calculator route to resolve the blank page issue, updated the navigation to use React Router’s navigate instead of window.location.href, implemented authentication bridging between React and legacy HTML pages, configured legacy page loaders for all routes, set up basketball and football subdirectories with their own calculators, added proper CSS module imports for all pages, integrated the sidebar, mobile nav, and toast components, and established the services for ratings and monetization."}, {"post_id": 11625, "ts": "2026-06-18T22:50:05Z", "hours": 1.0, "text": "I worked on turning the website from a mixed old HTML project into a React-based Veyro app while trying to keep the original graphics and page style the same. I added infrastructure like tests, build checks, linting, coverage, CI-style safety work, monetization plan logic, Video AI entitlement checks, and Hostinger deployment support. I also rebuilt the deployment output, fixed the Save & Benchmark flow, fixed the Vault save error caused by about:srcdoc, rewired old .html routes into React routes, added Hostinger .htaccess fallback support, and added basketball/football redirect files so those sections could still open after the old HTML files were removed."}, {"post_id": 10822, "ts": "2026-06-17T19:23:33Z", "hours": 2.0, "text": "I added coverage reporting and enforced a minimum threshold in CI, expanded unit and integration tests (including Firestore rules and critical server endpoints), implemented a billing integration with secure webhook handling to update plan fields, incrementally migrated legacy HTML pages into React components—prioritizing high‑traffic and complex pages and retiring the static files after verifying parity and tests—added linting, dependency and secret scanning to CI, and hardened operations with health/metrics checks and deployment documentation."}, {"post_id": 9941, "ts": "2026-06-16T13:51:54Z", "hours": 1.0, "text": "I polished Veyro from a rougher soccer rating site into a more professional product: I improved the homepage branding, spacing, mobile layout, CTA clarity, guest flow, rating preview, and overall visual quality; fixed the bad unfinished React placeholder that was accidentally showing instead of the real site; moved the React build safely under /app; rebuilt and tested the project; removed the mini pitch that I didn’t like."}, {"post_id": 9247, "ts": "2026-06-15T15:07:49Z", "hours": 4.0, "text": "I changed the website to feel much more like a polished Veyro landing/app entry page: the homepage now has a branded hero, clearer soccer performance messaging, feature pills for the live calculator, saved vault, and coach insights, a rating preview card showing an example match score, improved signup/sign-in/profile entry states, and expanded SEO sections explaining how Veyro works for players, parents, and coaches. I also added basic ESLint config for cleaner JavaScript going forward. Finally, I also changed the whole website to be running with React instead of HTML only so that the whole app should be faster."}, {"post_id": 6335, "ts": "2026-06-10T17:45:54Z", "hours": 2.0, "text": "In the last couple hours, we tightened up Veyro across auth, SEO, sharing, and polish: we fixed Firebase/Google auth issues by changing the server popup header, switching Google auth to popup-first, improving stale service-worker caching, and adding clearer email/password errors plus email verification reminders; upgraded the public recruiting profile with copy-link, save-PDF, and coach-style sections; improved SEO with a new soccer performance guide, better metadata, sitemap/robots cleanup, breadcrumb/FAQ schema validation, noindexing the experimental Video AI page, and backlink outreach copy; rewrote the README into a cleaner project overview; scanned the whole site for bugs without changing anything; and discussed advertising strategy plus the best next product improvements like demo data, coach setup, invite links, and better empty states."}, {"post_id": 5879, "ts": "2026-06-09T20:46:35Z", "hours": 1.0, "text": "I changed the website name to Veyro and I also made the firebase security more secure and way faster. I made the sidebar again look better and improved the UI of all the pages."}, {"post_id": 5149, "ts": "2026-06-08T20:44:04Z", "hours": 1.0, "text": "I worked on making the sidebar for the whole website look better. I also added a privacy page where users can request their data and object to any preferences they don’t want. I also made it so that the styles of different pages are more or less the same so that users feel like there aren’t big changes when going to the next page."}, {"post_id": 4941, "ts": "2026-06-08T15:47:49Z", "hours": 1.0, "text": "I added a cleaner coach page and made reports easier to share and cleaner to share. I also made the vault cleaner and less clogged. I also tightened the whole security of the whole website."}, {"post_id": 4455, "ts": "2026-06-07T19:36:33Z", "hours": 1.0, "text": "Improving the SEO and getting it ready for Google Search Console."}, {"post_id": 3704, "ts": "2026-06-06T19:12:57Z", "hours": 3.0, "text": "I made the whole website faster and cleaner. I also made it so that you can download this website as a app now."}]...
|
Title: MatchRatingCalculator by @Allen | Stardance Title: MatchRatingCalculator by @Allen | Stardance
Devlogs:
I made the whole website faster and cleaner. I also made it so that you can download this website as a app now.
Improving the SEO and getting it ready for Google Search Console.
I added a cleaner coach page and made reports easier to share and cleaner to share. I also made the vault cleaner and less clogged. I also tightened the whole security of the whole website.
I worked on making the sidebar for the whole website look better. I also added a privacy page where users can request their data and object to any preferences they don’t want. I also made it so that the styles of different pages are more or less the same so that users feel like there aren’t big changes when going to the next page.
I changed the website name to Veyro and I also made the firebase security more secure and way faster. I made the sidebar again look better and improved the UI of all the pages.
In the last couple hours, we tightened up Veyro across auth, SEO, sharing, and polish: we fixed Firebase/Google auth issues by changing the server popup header, switching Google auth to popup-first, improving stale service-worker caching, and adding clearer email/password errors plus email verification reminders; upgraded the public recruiting profile with copy-link, save-PDF, and coach-style sections; improved SEO with a new soccer performance guide, better metadata, sitemap/robots cleanup, breadcrumb/FAQ schema validation, noindexing the experimental Video AI page, and backlink outreach copy; rewrote the README into a cleaner project overview; scanned the whole site for bugs without changing anything; and discussed advertising strategy plus the best next product improvements like demo data, coach setup, invite links, and better empty states.
I changed the website to feel much more like a polished Veyro landing/app entry page: the homepage now has a branded hero, clearer soccer performance messaging, feature pills for the live calculator, saved vault, and coach insights, a rating preview card showing an example match score, improved signup/sign-in/profile entry states, and expanded SEO sections explaining how Veyro works for players, parents, and coaches. I also added basic ESLint config for cleaner JavaScript going forward. Finally, I also changed the whole website to be running with React instead of HTML only so that the whole app should be faster.
I polished Veyro from a rougher soccer rating site into a more professional product: I improved the homepage branding, spacing, mobile layout, CTA clarity, guest flow, rating preview, and overall visual quality; fixed the bad unfinished React placeholder that was accidentally showing instead of the real site; moved the React build safely under /app; rebuilt and tested the project; removed the mini pitch that I didn’t like.
I added coverage reporting and enforced a minimum threshold in CI, expanded unit and integration tests (including Firestore rules and critical server endpoints), implemented a billing integration with secure webhook handling to update plan fields, incrementally migrated legacy HTML pages into React components—prioritizing high‑traffic and complex pages and retiring the static files after verifying parity and tests—added linting, dependency and secret scanning to CI, and hardened operations with health/metrics checks and deployment documentation.
I worked on turning the website from a mixed old HTML project into a React-based Veyro app while trying to keep the original graphics and page style the same. I added infrastructure like tests, build checks, linting, coverage, CI-style safety work, monetization plan logic, Video AI entitlement checks, and Hostinger deployment support. I also rebuilt the deployment output, fixed the Save & Benchmark flow, fixed the Vault save error caused by about:srcdoc, rewired old .html routes into React routes, added Hostinger .htaccess fallback support, and added basketball/football redirect files so those sections could still open after the old HTML files were removed.
I fixed the calculator format by implementing the iframe-based architecture from the zip, added the missing /calculator route to resolve the blank page issue, updated the navigation to use React Router’s navigate instead of window.location.href, implemented authentication bridging between React and legacy HTML pages, configured legacy page loaders for all routes, set up basketball and football subdirectories with their own calculators, added proper CSS module imports for all pages, integrated the sidebar, mobile nav, and toast components, and established the services for ratings and monetization.
I migrated the website into a unified React application while preserving its original graphics and layout, restored the calculator’s complete rating logic, improved account persistence, fixed saving and navigation, added Free, Coach, and Premium feature gates, strengthened Firebase and Firestore security, configured Stripe billing support, expanded automated backend and React tests, and updated CI/CD until all 87 tests passed.
I just improved the SEO
I built out the coach onboarding flow, which walks coaches through creating an account, setting their role, generating a team, and sharing a unique invite link so players can request to join at veyro.com/join/TEAMCODE. I also wrote five long-form SEO blog posts targeting high-intent keywords — how to rate soccer players, a youth coach playbook, player performance analytics, a basketball rating system guide, and a football rating system guide — each with JSON-LD schema markup for Google rich results. Alongside the content work, I updated the sitemap to include all sixteen pages, fixed a missing meta description that PageSpeed Insights had flagged, and added SoftwareApplication and FAQPage structured data to the calculator homepage to improve search visibility.
I just improved the security
I improved the calculator logic and scoring system along with the SEO
I worked on just improving minor bugs and minor fixes. I also tried to make a lot of guides in the site to help coaches and parents.
I worked on the privacy and security.
I worked on running tests on my website and making sure that there were no significant bugs.
I just focused on making it more suitable for coaches and trying to add more sports
Making Veyro blogs on the site to improve backlinks along with SEO along with improving how to explain how this works.
I worked on the pricing of everything. I also made the video ai better and also worked on the pricing of the ai.
I debugged the whole site
I improved the security and I improved and rewrote the firebase rules to make it easier to login and stuff.
Ships:
I made Match Rating, a soccer performance app that helps players turn their match stats into a clear rating out of 100. I can calculate a live score, save games, track my progress in a vault, view graphs, analyze strengths and weaknesses, compare games, join coach teams, and test an experimental AI video-analysis tool. The most challenging part was making everything work together: the calculator, Firebase sign-in, saved stats, graphs, analysis, coach/player roles, team codes, privacy settings, mobile design, and the AI backend. It was also hard to make the app remember each player’s name, age, position, team, saved games, and detailed stats without breaking the user experience. I am proud that this became more than just a simple calculator. I built a full player-development platform with accounts, saved match history, team features, analytics, exports, scorecards, and a mobile-friendly design. I’m also proud that I improved it through feedback and kept making it cleaner, faster, and easier to use. People testing my product should know that they should sign up as a player or coach, enter their profile information, use the calculator first, and then save the match in the Vault. After saving games, they can check the Graph, Analysis, Compare Games, Profile, and Team pages. Coaches can create a team code and invite players. The Video AI feature is still experimental, so users should double-check the stats it gives.
This looks like a Ship post on Replit or a similar platform. Here's something you can paste in: I built Veyro, a multi-sport player performance rating app for soccer, basketball, and football. Players enter their match stats and get a rating out of 100 using a position-specific formula — so a goalkeeper is judged on saves and clean sheets, not goals, and a quarterback is judged on touchdowns and interceptions, not tackles. Matches save to a personal vault so players can track their development over time. The most challenging part was building a clean React codebase that could handle three completely different sports with separate calculators, vaults, graphs, and coach pages for each — while keeping the architecture maintainable and the bundle size small. I also built a full coach onboarding flow with shareable team invite links, a three-tier monetization system with Stripe integration, and a CI/CD pipeline with 87 passing tests. I'm most proud of the billing and entitlements system — it handles free tier limits, Coach plan features, and Premium Video AI access cleanly across both the server and the React UI. The app scores 94 for performance, 100 for accessibility, and 96 for best practices on PageSpeed Insights. To test it: go to the calculator, pick your sport and position, enter some match stats, and hit calculate. Free accounts can save up to 5 matches to the vault. If you're a coach, hit Setup in the sidebar to create a team and get a shareable invite link for your players.
I made Veyro, a React-based sports rating website that lets players enter match stats, calculate a live performance score, save matches to a vault, compare progress, and use role-based features like Coach, Premium, and Video AI. The hardest part was converting the old HTML version into a full React app while keeping the same original graphics, layout, and feel, because the design and logic had to stay consistent across every page. I am proud that the project now has stronger account persistence, saving, navigation, monetization gates, Firebase/Firestore security, CI/CD, and automated tests with all tests passing. To test it, people should sign in or use guest mode, try the soccer calculator, save a match, open the vault, check graph/compare pages, and test locked features like team tools or Video AI depending on the user plan.
I made Veyro, a React-based sports rating website that lets players enter match stats, calculate a live performance score, save matches to a vault, compare progress, and use role-based features like Coach, Premium, and Video AI. The hardest part was converting the old HTML version into a full React app while keeping the same original graphics, layout, and feel, because the design and logic had to stay consistent across every page. I am proud that the project now has stronger account persistence, saving, navigation, monetization gates, Firebase/Firestore security, CI/CD, and automated tests with all tests passing. To test it, people should sign in or use guest mode, try the soccer calculator, save a match, open the vault, check graph/compare pages, and test locked features like team tools or Video AI depending on the user plan....
|
1792882070.3901622
|
1793746070.3901622
|
|
556
|
amethystOS by @Keyboard1000n17 | Stardance
|
Keyboard1000n17
|
0
|
9.23
|
0
|
[]
|
[{"post_id": 4851, "ts": "2026 [{"post_id": 4851, "ts": "2026-06-08T11:53:11Z", "hours": 1.4258, "text": "whoops, forgot to do the devlog yesterday! well im too lazy to write stuff so here’s the gist of it: i made a (terrible) wallpaper in krita (and inkscape, i wasn’t able to do it properly ) i added swaybg to the package list swaybg autostarts with labwc branding gets copied to /usr/share/ every time i run the script to generate an iso that’s about it, i spent a while on that wallpaper for some reason (i just remembered i added the autostart thing in the vm and didn’t add it in the actual repo)"}, {"post_id": 3795, "ts": "2026-06-06T20:59:15Z", "hours": 1.38, "text": "woah woah woah! check this out! i customized waybar and got submenus working! well that doesn’t sound all that impressive, until you realize i had to plan it out. the thing is, much of this time didn’t get logged because i was testing configs in the virtual machine, which is a live usb without persistence. i just typed one line at a time and looked at how it changed and what could be improved. for the waybar , you might be wondering what happened to the colorful stuff. well, once i started my own styles, it stopped using the default config. it does look pretty cool tho! as for the right click menu in the background, you can see that it is showing a submenu too. the main menu has six things: firefox, a libreoffice submenu, a separator, a teminal, shutdown and reboot. the submenu has options to open the main libreoffice window, a libreoffice writer window, a libreoffice impress window and a libreoffice calc window. also, i took that icon out the full logo to make a colorful and white icon ! now just the wallpapers, which i installed krita for. that’s about it for today, and see you guys tomorrow!"}, {"post_id": 2976, "ts": "2026-06-05T22:00:53Z", "hours": 2.4594, "text": "hey hey hey! today was mostly creating a logo you can find it on github, but you wouldn’t open it, so here it is!: anyways, besides that, today i was able to get waybar to autostart so tomorrow, i’ve gotta do these: separate the icon out of the logo start with wallpapers get a proper config, this is nothing anyways, bye!"}, {"post_id": 2378, "ts": "2026-06-04T20:40:07Z", "hours": 1.1411, "text": "poof! there is now a gui!!! as you might have guessed, there’s still no artwork however, there is now some gui! in the screenshot, i am running waybar manually from a terminal. the terminal in question is called foot ( - also, there is 0 config of anything at all the login works perfectly! i don’t have a screenshot and i don’t want to boot up the vm again for this speaking of vms, i finally figured out why everything was so slow and sluggish—it was because qemu was using TCG (tiny code generator) (software emulation) instead of KVM acceleration (kernel-based virtual machine). i turned on kvm and it started up in SECONDS. that’s about it, and see you all tomorrow!"}, {"post_id": 1689, "ts": "2026-06-03T20:50:57Z", "hours": 0.9672, "text": "aaaa i found out lxdm can’t launch wayland sessions so i have to use something else. i settled on greetd for the backend login manager and greetd-regreet for the frontend. i chose regreet because apparently it’s written in rust, uses gtk4 and can easily be styled with css! will be great! anyways, as for the actual stuff, i put labwc in the package list even though its not configured. also, i still haven’t started with the artwork. so far, this is what i have that works ( )"}, {"post_id": 1035, "ts": "2026-06-02T20:29:35Z", "hours": 0.9464, "text": "amethystOS: you can’t tell its arch without the terminal! today, i tried to get a lightweight login manager working. first, i thought of sddm , but when i saw it, i felt it was too ugly. then i thought of wlgreeter , but it wasn’t in the repos. eventually, i settled on lxdm . it looks good and seems to work well. now you see, the problem is i need to auto-login into labwc , the compositor. remember that you don’t need a full desktop environment to ship a distro. the compositor can work well standalone. you just have to install a few things to be able to actually use it, and that’s what i plan on doing. also, i need make some artwork for this. i’ve already come up with a few designs for logos and wallpapers, i just have to actually make them in inkscape! i feel like my 4 wallpapers and final logo are pretty good! hoping to get stuff actually working tomorrow ✌️ i need to: configure autologin for live cd configure lxdm auto-start the calamares installer when the user boots the disk make a custom boot animation of course, make the boot animation"}, {"post_id": 432, "ts": "2026-06-01T20:44:07Z", "hours": 0.9092, "text": "its arch but it has a gui installer but its not manjaro or endeavor!!! amethystOS is arch but you can actually use it without being a wizard in the terminal. why install a gui yourself and spend hours (trying to) configure your setup when you can have the distro decide for you? and not only that, it comes with a bunch of pre-installed applications! libreoffice, the fox on fire, and more! at least, that’s the goal. i can’t even make an arch iso rn because whatever happened to the repo. anyways, you might see that the initial commit is from january, but that’s because i started this and never really started it. so as for what i actually did, i tried to get calamares working, but no, it kaboomed. well i’ll have to fix that, obviously, but i will work on the logo and artwork in the meanwhile! hoping for a great result by the end of this!✌️"}]...
|
Title: amethystOS by @Keyboard1000n17 | Stardance
Title: amethystOS by @Keyboard1000n17 | Stardance
Devlogs:
its arch but it has a gui installer but its not manjaro or endeavor!!! amethystOS is arch but you can actually use it without being a wizard in the terminal. why install a gui yourself and spend hours (trying to) configure your setup when you can have the distro decide for you? and not only that, it comes with a bunch of pre-installed applications! libreoffice, the fox on fire, and more! at least, that’s the goal. i can’t even make an arch iso rn because whatever happened to the repo. anyways, you might see that the initial commit is from january, but that’s because i started this and never really started it. so as for what i actually did, i tried to get calamares working, but no, it kaboomed. well i’ll have to fix that, obviously, but i will work on the logo and artwork in the meanwhile! hoping for a great result by the end of this!✌️
amethystOS: you can’t tell its arch without the terminal! today, i tried to get a lightweight login manager working. first, i thought of sddm , but when i saw it, i felt it was too ugly. then i thought of wlgreeter , but it wasn’t in the repos. eventually, i settled on lxdm . it looks good and seems to work well. now you see, the problem is i need to auto-login into labwc , the compositor. remember that you don’t need a full desktop environment to ship a distro. the compositor can work well standalone. you just have to install a few things to be able to actually use it, and that’s what i plan on doing. also, i need make some artwork for this. i’ve already come up with a few designs for logos and wallpapers, i just have to actually make them in inkscape! i feel like my 4 wallpapers and final logo are pretty good! hoping to get stuff actually working tomorrow ✌️ i need to: configure autologin for live cd configure lxdm auto-start the calamares installer when the user boots the disk make a custom boot animation of course, make the boot animation
aaaa i found out lxdm can’t launch wayland sessions so i have to use something else. i settled on greetd for the backend login manager and greetd-regreet for the frontend. i chose regreet because apparently it’s written in rust, uses gtk4 and can easily be styled with css! will be great! anyways, as for the actual stuff, i put labwc in the package list even though its not configured. also, i still haven’t started with the artwork. so far, this is what i have that works ( )
poof! there is now a gui!!! as you might have guessed, there’s still no artwork however, there is now some gui! in the screenshot, i am running waybar manually from a terminal. the terminal in question is called foot ( - also, there is 0 config of anything at all the login works perfectly! i don’t have a screenshot and i don’t want to boot up the vm again for this speaking of vms, i finally figured out why everything was so slow and sluggish—it was because qemu was using TCG (tiny code generator) (software emulation) instead of KVM acceleration (kernel-based virtual machine). i turned on kvm and it started up in SECONDS. that’s about it, and see you all tomorrow!
hey hey hey! today was mostly creating a logo you can find it on github, but you wouldn’t open it, so here it is!: anyways, besides that, today i was able to get waybar to autostart so tomorrow, i’ve gotta do these: separate the icon out of the logo start with wallpapers get a proper config, this is nothing anyways, bye!
woah woah woah! check this out! i customized waybar and got submenus working! well that doesn’t sound all that impressive, until you realize i had to plan it out. the thing is, much of this time didn’t get logged because i was testing configs in the virtual machine, which is a live usb without persistence. i just typed one line at a time and looked at how it changed and what could be improved. for the waybar , you might be wondering what happened to the colorful stuff. well, once i started my own styles, it stopped using the default config. it does look pretty cool tho! as for the right click menu in the background, you can see that it is showing a submenu too. the main menu has six things: firefox, a libreoffice submenu, a separator, a teminal, shutdown and reboot. the submenu has options to open the main libreoffice window, a libreoffice writer window, a libreoffice impress window and a libreoffice calc window. also, i took that icon out the full logo to make a colorful and white icon ! now just the wallpapers, which i installed krita for. that’s about it for today, and see you guys tomorrow!
whoops, forgot to do the devlog yesterday! well im too lazy to write stuff so here’s the gist of it: i made a (terrible) wallpaper in krita (and inkscape, i wasn’t able to do it properly ) i added swaybg to the package list swaybg autostarts with labwc branding gets copied to /usr/share/ every time i run the script to generate an iso that’s about it, i spent a while on that wallpaper for some reason (i just remembered i added the autostart thing in the vm and didn’t add it in the actual repo)...
|
1792734869.1976612
|
1793339669.1976612
|
|
555
|
Explosions by @esther | Stardance
|
esther
|
0
|
1.72
|
0
|
[]
|
[{"post_id": 105, "ts": "2026- [{"post_id": 105, "ts": "2026-05-31T19:05:02Z", "hours": 1.7161, "text": "So basically i explodes and gets my stream deck working declarartively and waste my day doing that"}]...
|
Title: Explosions by @esther | Stardance
Devlogs: Title: Explosions by @esther | Stardance
Devlogs:
So basically i explodes and gets my stream deck working declarartively and waste my day doing that...
|
1792554860.301264
|
1793159660.301264
|
|
554
|
My awesome macropad! by @jadyn | Stardance
|
jadyn
|
0
|
0.56
|
0
|
[]
|
[{"post_id": 2563, "ts": "2026 [{"post_id": 2563, "ts": "2026-06-05T03:59:47Z", "hours": 0.5639, "text": "1st Devlog I started creating the schematic yesterday based on the tutorial. Goals for this project: Macropad will have 9 keys, 1 knob and an OLED screen The keys function will include copying, pasting and cutting text, opening a new tab on Google, saving, Ctrl Z, opening snipping tool for screenshots, VS Code Pull + Push The knob will control my computer’s volume (I got the ideas for the functions by doing research on uses for macropads) Purpose: I want to create the macropad to be used by my left hand to reduce my tendency to use my right hand when typing."}]...
|
Title: My awesome macropad! by @jadyn | Stardance
Title: My awesome macropad! by @jadyn | Stardance
Devlogs:
1st Devlog I started creating the schematic yesterday based on the tutorial. Goals for this project: Macropad will have 9 keys, 1 knob and an OLED screen The keys function will include copying, pasting and cutting text, opening a new tab on Google, saving, Ctrl Z, opening snipping tool for screenshots, VS Code Pull + Push The knob will control my computer’s volume (I got the ideas for the functions by doing research on uses for macropads) Purpose: I want to create the macropad to be used by my left hand to reduce my tendency to use my right hand when typing....
|
1792590633.175841
|
1793195433.175841
|
|
553
|
My awesome macropad! by @betanya2023 | Stardance
|
betanya2023
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @betanya2023 | Star Title: My awesome macropad! by @betanya2023 | Stardance...
|
1792608777.2741096
|
1793213577.2741096
|
|
552
|
My awesome macropad! by @PysiaQV | Stardance
|
PysiaQV
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @PysiaQV | Stardanc Title: My awesome macropad! by @PysiaQV | Stardance...
|
1792637345.3490603
|
1793242145.3490603
|
|
551
|
CH32V003 DevBoard by @Abean | Stardance
|
Abean
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: CH32V003 DevBoard by @Abean | Stardance
|
1792738456.1213045
|
1793343256.1213045
|
|
550
|
Untitled by @Psiezed | Stardance
|
Psiezed
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @Psiezed | Stardance
|
1792515074.487037
|
1793119874.487037
|
|
549
|
My first slack bot! by @stellenium | Stardance
|
stellenium
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @stellenium | Starda Title: My first slack bot! by @stellenium | Stardance...
|
1792925583.5719504
|
1793789583.5719504
|
|
548
|
Untitled by @S | Stardance
|
S
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @S | Stardance
|
1792684193.3271189
|
1793288993.3271189
|
|
547
|
Watchtower by @uv | Stardance
|
uv
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Watchtower by @uv | Stardance
|
1792551117.9322176
|
1793155917.9322176
|
|
546
|
Untitled project by @Isnaini | Stardance
|
Isnaini
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Isnaini | Stardance
|
1792799284.967785
|
1793404084.967785
|
|
545
|
whelk by @benji | Stardance
|
benji
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: whelk by @benji | Stardance
|
1792727503.5924911
|
1793332303.5924911
|
|
544
|
My first hackpad! by @D4LM | Stardance
|
D4LM
|
1
|
1.0
|
1
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-09T01:01:39Z", "hours": 1.0, "multiplier": 1.3, "payout": 1, "blessing": "neutral", "text": "I made my first hackpad! Challenging aspects: Done in Onshape instead of Fusion 360. Notes: Sadly I did not record everything I did in Lapse 😢", "repo": "https://github.com/D4LMwastaken/Hackpad", "demo": ""}]...
|
[{"post_id": 5299, "ts": "2026 [{"post_id": 5299, "ts": "2026-06-09T00:53:39Z", "hours": 0.5567, "text": "Made my First Hackpad!"}]...
|
Title: My first hackpad! by @D4LM | Stardance
Dev Title: My first hackpad! by @D4LM | Stardance
Devlogs:
Made my First Hackpad!
Ships:
I made my first hackpad! Challenging aspects: Done in Onshape instead of Fusion 360. Notes: Sadly I did not record everything I did in Lapse 😢...
|
1792997502.2180774
|
1793083902.2180774
|
|
543
|
ICare by @SilentSword | Stardance
|
SilentSword
|
1
|
63.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-20T07:36:22Z", "hours": 63.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "ICare is an eye break reminder app that FORCES you to take your breaks, and not just that, it adapts to YOUR needs. Overlay warnings, notifications, dark/light theme, automatic start, idle detection, Fullscreen detection, meeting trackers and more! ICare has them all. It started with my eye doctor telling me to start using the 20/20/20 rule, but it was hard to keep consistency, so I started building an app, and then added a new feature, and another one, and so on until we are here XD! I strongly recommend you read the readme file from GitHub, I explained everything in depth there. IMPORTANT - WINDOWS 10/11 ONLY", "repo": "https://github.com/SilentSword123456/ICare", "demo": "https://github.com/SilentSword123456/ICare/releases/latest"}]...
|
[{"post_id": 71035, "ts": "202 [{"post_id": 71035, "ts": "2026-09-20T07:25:47Z", "hours": 2.3283, "text": "Hi there, I realized that I won’t have enough time to build all the features I want for ICare, so I updated the readme, polished some things, temporarily disabled the AppsView since it still needs a lot of work on animations and other stuff, and I’m ready to ship!"}, {"post_id": 58216, "ts": "2026-08-30T16:00:39Z", "hours": 9.3022, "text": "Okkkkkkkay. I finally finished making two more views and linked the logic of the app groups/folders with their specific rules to the actual app timer. Even though the GUI isn’t pretty to look at, I just focused on getting it working. I did a terrific job at sniping all the bugs (took me 9h man😭😭), but I did also use a Claude’s help when I couldn’t find the root cause. The core ideea of the app works right now, what I do have left is fixing the UI for the newly added views (i have a LOT of work to do here) and implementing the rest of the “small” features I have in mind. Right now, it’s not pleasant to look at, but this is not what this devlog is about, it’s about the functionality I added to the app. To explain it in more detail, you can now create groups/folders with different apps inside of them and different rules applied for each group , meaning that if you don’t want the app to track the time you spend in let’s say Slack and other messaging apps, you can create a folder with that rule, and thats it. There are still bugs, like it not saving its config file 100% of the time or the fact that you can’t delete folders, or that you can add an app to multiple folders, etc… But I was getting close to the 10h mark and I had to post a devlog. See ya next time!"}, {"post_id": 55676, "ts": "2026-08-27T17:15:36Z", "hours": 3.0956, "text": "Holla dear readers! In this devlog I’m happy to announce that I finally added tests to the app, and they are great, they helped me debug much faster, and that’s not the only feature I added. But by far the most important feature added is that now the break warning will also be displayed if there is currently a full screen app opened, which might be the most important feature of the hole app. As you can see in the screenshot below, I modified the break overlay warning message box to be a floating island with a see trough background with rounded corners! Also, when it gets down to 3 seconds, the timer turns red , and I’m super happy with how it turned out! That’s it for this devlog, enjoy the new version!"}, {"post_id": 49818, "ts": "2026-08-18T19:21:11Z", "hours": 9.6128, "text": "Hi there, I’m writing this from my laptop since the PC is used right now, I hope the recording still looks smooth :) I took a break for a few weeks; therefore, I don’t remember what the first few hours of this devlog went into, I recon I might have just fixed some bugs I found while using the app. Buuuuuuut I do know the latest feature I’ve been working on, right now it’s just a menu with the apps installed (almost all), and the target functionality is to be able to create multiple apps groups in which the app will either just pause or alert you with a message similar to the meeting overlay. While implementing this new window, I learned about ObservableCollection and ListBox s, which were new concepts to me, but I love how they nicely combine together. For the ObservableCollecton specifically, I created a new data model called InstalledApp, which has a Name, a ExePath and an Icon field. After hitting random bugs, such as the view (an ListCollectionView ) not being initialized fast enough, I finally got a bare-bones version working. It’s ugly, it’s messy, but I’m hitting the 10h mark and I have to write this devlog."}, {"post_id": 29652, "ts": "2026-07-16T18:34:43Z", "hours": 3.4758, "text": "Holla, I’ve been working on a kind of useless bug that took me a long time to fix. The problem was that when the app was enabled to start automatically, you could still disable it from task manager. The bad thing is, I had no way of knowing if it was enabled or disabled from task manager, so I build one, and after that, I wanted a way to get notified when the user changed the disabled/enabled state, so I used a function named RegNotifyChangeKeyValue witch I’ve configured to notify the app when ICare’s state changed. I created a hole separate class for that named AutostartWatcher.cs, and it works flawlessly! Thanks for reading!"}, {"post_id": 29347, "ts": "2026-07-16T07:18:02Z", "hours": 8.2497, "text": "Hy there, I implemented two major things, those being a dark theme and an actual installer and updater. The dark theme: For this, I created two xaml files with the same SolidColorBrush names but with different colors, then I used ResourceDictionary and MergedDictionaries to change the current used file for the theme. After this I had to play with the color values because apparently you have to have layers to your app and yeah, it was a long and boring process of running the app, thinking if it needs to be darker or lighter, then going to the color picker and changing the value accordantly, then copying that into the program and repeating, but it worked! To make the title bar change color I found out that you need to import some of those weird libraries, again. I don’t understand every part of that function, but it does work. To change the theme, I removed the custom message box from settings and replaced it with a light/dark toggle for the theme. The installer and updater: For this, I used Velopack, which is great! It doesn’t require admin to install, it also has an updater, and it just works! Unfortunately, for the GitHub build action, I had no ideea how to write it, so just used Claude to do it for me, but that’s not really part of the app so it’s ok (I think?). Then, I wanted to have a way for the user to update the app with some confirmation things, because before I just had one button that you clicked, it shows no progress, and if it did find an update it would immediately restart the app, no questions asked. Now, in the bottom right of settings, there is some text that acts like a button which has all the states from let’s say no update found to ready to download to ready to install and more. That’s pretty much it, thanks for reading!"}, {"post_id": 26803, "ts": "2026-07-11T20:06:42Z", "hours": 7.1014, "text": "Dear reader, thank you for reading. I promise this devlog is gonna be fun to read trough. The biggest utility change is that the timer now pauses when the screen goes to sleep. To do this, I had to use some low-level hooks that I’m not a master in, but it was fun to use them and debug the errors. Then I wandered about how I could make the app report errors it had back to me while also putting YOUR 🫵 privacy on the first place. I found Sentry, an app which has a more than enough free plan for this use case. What Sentry does it’s that it collects all the errors and stores them in one dashboard, along with many other features. The setup was fairly simple; it wasn’t that big of a hustle. Next, I also added a darker picture for the background for when the pc is in dark mode so that you don’t get flash banged when a break suddenly starts and its 3am. To choose the correct picture, it checks a specific value from a specific path where Windows keeps the current theme. Here I had a problem with memory leak which required more debugging because the images were being kept in memory, twice, and they would also get deleted after each use? It was a mess, but now its fixed. The last change is in the UI. I decided to keep ICare at a fixed size so that the layout is more consistent, and then I adapted the Settings view to the new dimensions. Thank you so much for staying! I’m sure I have a long way to go until ICare reaches a reasonable standard, but I hope you had fun reading through my journey. Thanks again! P.S: You can show me that you’re interested in this by just leaving a like on this devlog and it will make me happy to know that someone read it!"}, {"post_id": 22053, "ts": "2026-07-04T09:34:51Z", "hours": 2.8311, "text": "Hello there, I added a few features that I needed while I was using ICare, and those being a nice background because the black one was just too basic and the timer stopping when the screen goes to sleep or when I lock the pc. To know when the pc went to sleep or the user locked the pc, I attached a listener to a SystemEvents thing, I don’t really know what it is, and now it constantly checks for SessionLock and SessionUnlock and pauses and starts the timer accordantly. For the pausing and starting the timer, I have redone its logic. Now, instead of calculating the exact time the break should start I use a stopwatch to track how much time has passed and when it reaches the desired time it triggers the break. It wasn’t easy because I runed into many bugs where, for example, it would just instantly start the break once the app launched and many such errors, but the latest version works flawlessly! Thanks for reading! Consider leaving a like or a comment if you enjoyed this devlog q(≧▽≦q)!"}, {"post_id": 17587, "ts": "2026-06-28T13:22:58Z", "hours": 3.1553, "text": "Holla, I worked on some core features but also some little improvements. The biggest change is that the app can now automatically start and this is a togglable feature from the settings with also has a nice toggle. It wasn’t hard to implement it science there is already api for it and all I had to do is create some basic functions to use it. Next, I added dismiss buttons in the notification for 5 and 10 minutes respectively. I also fixed the bug where when dismissing the break, it would only add the minutes to the visual timer, but it wouldn’t actually dismiss the break. Also, I figured that the break message and the countdown timer during the blackout (the break) was a bit distracting, so now only the primary monitor has the break message and the countdown, the rest are just blacked out. I added some small coloring touches to the Work time and the Break time, and they now look so much better. The final feature I added is a warning when the break time is smaller than the worktime; I figured that if you work or game or just use your computer for 60min, you should take a 60sec break, so for every X minutes of screentime you should take at least X seconds of break, so now that’s what the break message says. Thank you for reading, I appreciate all feedback! Bye!"}, {"post_id": 16424, "ts": "2026-06-26T18:37:55Z", "hours": 3.3353, "text": "Hey there! I have been working on quality-of-life improvements, such as adding a nice visual indicator when the next break is skipped by making the timer red, adding dismiss buttons to the notification, making the hotkey field automatically register the key pressed and adding the option to write a custom break message. Behind the scenes I also made some quality-of-life changes to the codebase. Now the configuration autosaves after each change, so I don’t need to worry about losing the config, and thats the only big change to the codebase. Im also proud to report that now the icon is also present on the notification, which is a small but important and elegant addition😆 Now I want to focus on making the app automaticly start on user login and figuring out how to properly install it on the computer."}, {"post_id": 4359, "ts": "2026-06-07T17:32:16Z", "hours": 6.6033, "text": "I decided that python wasn’t going to cut it anymore, so I decided to learn some basic C# (I was already pretty familiar with cpp, so it wasn’t that hard) and build the program in C#. It was so much fun, and it was also simpler, because it was VERY, VERY easy with C# to do a lot of things that with python required me to use a backdoor or something. I used Rider from IntelliJ to create my project that is using WPF, a thing for designing windows apps so easily. I also used some templates I found online to just get it working (and ok, I’m guilty, I used AI for the math on the circle, and good thing I did because I have no idea how that math works) and then tried to get them working together. For the notification, well, I almost committed a crime while coding it (for legal reasons, this is a joke(●’◡’●) ) because there is always a catch with windows APIs. Either I couldn’t have a button on the notification, or I had to have a notification manager instance (or something similar, I don’t remember), or I just needed to install yet another library for it. Fortunately, it worked! It doesn’t have an icon, don’t even get me started on the icon because I don’t want to break my computer😭. Anyway, for the keyboard handler, I was blessed enough to find a template on the web for it (apparently it is standard to do it that way), and I just got it, tweaked it a little bit, and it worked! The rest just went smoothly, with a bug here… a bug there… but it worked! It works and I’m so happy! I kind of want to improve the design of the dashboard a little bit, because even though it’s clean, it still could use a little work. And if u got here, ayyy, thank you for reading. Just comment something, anything, it would make me so happy to know someone else read this whole thing! Thank you!"}, {"post_id": 3380, "ts": "2026-06-06T08:45:00Z", "hours": 0.8103, "text": "Hi there! I worked a little bit on the app and added two core features: a Config class and a way to make the program launch as admin every time. I made the config class generate a file named config.json to store all the data, and I made a function to read the data from it. I also added setters for the current hotkey, break time, work time and other fields, and it worked after fixing a few bugs. Then I focused on the program launching as admin, for which I created two new functions, one to check if the program is already running as admin (which uses a long command to check it, I found it online) and another big command to relaunch the script with admin privileges(witch I also found online). Everything works well as shown in the video!"}, {"post_id": 310, "ts": "2026-06-01T15:57:53Z", "hours": 0.4147, "text": "I added support to skip the break with a hotkey combination “Ctrl+Shift+S”. I also used a library I found online for this, and it works! I’m so happy with how this is coming together!"}, {"post_id": 289, "ts": "2026-06-01T15:07:51Z", "hours": 0.4244, "text": "I added a function to send notifications so that you can dismiss the break if you’re in a meeting or in the middle of a game. It was actually the most fun part of the program! I sed a library with a weird name I found online; win11toast. Then all I had to do is to call a method, and then questioning reality because the on_click method didn’t work, but now it does! I even added an icon to the notification! I LOVE IT!"}, {"post_id": 274, "ts": "2026-06-01T14:35:56Z", "hours": 0.6642, "text": "I made the black screen work. I used a fancy library called tkinter to create a black screen on every monitor, and to get all the monitors I used the screeninfo library. Then I looped trough every screen and added a new window to it using that tkinter class. After this, I created two methods that block and unblock some keys on the keyboard, specifically the win key, the alt key and the control key so that you can’t exit the screen and cheat your way through the break"}, {"post_id": 263, "ts": "2026-06-01T13:42:16Z", "hours": 0.305, "text": "I improved the time tracking feature. I noticed that it before it was always ~1 second late and stacked up the more time it had to track. Now I’m using time.time() function to keep track of the exact start time so that it’s always exact, compared to waiting 1 second and incrementing a counter"}, {"post_id": 209, "ts": "2026-06-01T08:33:42Z", "hours": 1.2725, "text": "I got started by creating the GitHub repo, creating the IntelliJ project, then creating multiple .py files to separate their functionalities clearly. I had to search and learn how to use the threading class, which is pretty complicated in my option, but it works, and you know what they say: “If it works, don’t touch it”. Then I found a closed eye icon on the internet and used it as the ico for the systemtray. For now, it’s just in cli, but after I make the blackout screen work, I’m going to add a nice gui."}]...
|
Title: ICare by @SilentSword | Stardance
Devlogs: Title: ICare by @SilentSword | Stardance
Devlogs:
I got started by creating the GitHub repo, creating the IntelliJ project, then creating multiple .py files to separate their functionalities clearly. I had to search and learn how to use the threading class, which is pretty complicated in my option, but it works, and you know what they say: “If it works, don’t touch it”. Then I found a closed eye icon on the internet and used it as the ico for the systemtray. For now, it’s just in cli, but after I make the blackout screen work, I’m going to add a nice gui.
I improved the time tracking feature. I noticed that it before it was always ~1 second late and stacked up the more time it had to track. Now I’m using time.time() function to keep track of the exact start time so that it’s always exact, compared to waiting 1 second and incrementing a counter
I made the black screen work. I used a fancy library called tkinter to create a black screen on every monitor, and to get all the monitors I used the screeninfo library. Then I looped trough every screen and added a new window to it using that tkinter class. After this, I created two methods that block and unblock some keys on the keyboard, specifically the win key, the alt key and the control key so that you can’t exit the screen and cheat your way through the break
I added a function to send notifications so that you can dismiss the break if you’re in a meeting or in the middle of a game. It was actually the most fun part of the program! I sed a library with a weird name I found online; win11toast. Then all I had to do is to call a method, and then questioning reality because the on_click method didn’t work, but now it does! I even added an icon to the notification! I LOVE IT!
I added support to skip the break with a hotkey combination “Ctrl+Shift+S”. I also used a library I found online for this, and it works! I’m so happy with how this is coming together!
Hi there! I worked a little bit on the app and added two core features: a Config class and a way to make the program launch as admin every time. I made the config class generate a file named config.json to store all the data, and I made a function to read the data from it. I also added setters for the current hotkey, break time, work time and other fields, and it worked after fixing a few bugs. Then I focused on the program launching as admin, for which I created two new functions, one to check if the program is already running as admin (which uses a long command to check it, I found it online) and another big command to relaunch the script with admin privileges(witch I also found online). Everything works well as shown in the video!
I decided that python wasn’t going to cut it anymore, so I decided to learn some basic C# (I was already pretty familiar with cpp, so it wasn’t that hard) and build the program in C#. It was so much fun, and it was also simpler, because it was VERY, VERY easy with C# to do a lot of things that with python required me to use a backdoor or something. I used Rider from IntelliJ to create my project that is using WPF, a thing for designing windows apps so easily. I also used some templates I found online to just get it working (and ok, I’m guilty, I used AI for the math on the circle, and good thing I did because I have no idea how that math works) and then tried to get them working together. For the notification, well, I almost committed a crime while coding it (for legal reasons, this is a joke(●’◡’●) ) because there is always a catch with windows APIs. Either I couldn’t have a button on the notification, or I had to have a notification manager instance (or something similar, I don’t remember), or I just needed to install yet another library for it. Fortunately, it worked! It doesn’t have an icon, don’t even get me started on the icon because I don’t want to break my computer😭. Anyway, for the keyboard handler, I was blessed enough to find a template on the web for it (apparently it is standard to do it that way), and I just got it, tweaked it a little bit, and it worked! The rest just went smoothly, with a bug here… a bug there… but it worked! It works and I’m so happy! I kind of want to improve the design of the dashboard a little bit, because even though it’s clean, it still could use a little work. And if u got here, ayyy, thank you for reading. Just comment something, anything, it would make me so happy to know someone else read this whole thing! Thank you!
Hey there! I have been working on quality-of-life improvements, such as adding a nice visual indicator when the next break is skipped by making the timer red, adding dismiss buttons to the notification, making the hotkey field automatically register the key pressed and adding the option to write a custom break message. Behind the scenes I also made some quality-of-life changes to the codebase. Now the configuration autosaves after each change, so I don’t need to worry about losing the config, and thats the only big change to the codebase. Im also proud to report that now the icon is also present on the notification, which is a small but important and elegant addition😆 Now I want to focus on making the app automaticly start on user login and figuring out how to properly install it on the computer.
Holla, I worked on some core features but also some little improvements. The biggest change is that the app can now automatically start and this is a togglable feature from the settings with also has a nice toggle. It wasn’t hard to implement it science there is already api for it and all I had to do is create some basic functions to use it. Next, I added dismiss buttons in the notification for 5 and 10 minutes respectively. I also fixed the bug where when dismissing the break, it would only add the minutes to the visual timer, but it wouldn’t actually dismiss the break. Also, I figured that the break message and the countdown timer during the blackout (the break) was a bit distracting, so now only the primary monitor has the break message and the countdown, the rest are just blacked out. I added some small coloring touches to the Work time and the Break time, and they now look so much better. The final feature I added is a warning when the break time is smaller than the worktime; I figured that if you work or game or just use your computer for 60min, you should take a 60sec break, so for every X minutes of screentime you should take at least X seconds of break, so now that’s what the break message says. Thank you for reading, I appreciate all feedback! Bye!
Hello there, I added a few features that I needed while I was using ICare, and those being a nice background because the black one was just too basic and the timer stopping when the screen goes to sleep or when I lock the pc. To know when the pc went to sleep or the user locked the pc, I attached a listener to a SystemEvents thing, I don’t really know what it is, and now it constantly checks for SessionLock and SessionUnlock and pauses and starts the timer accordantly. For the pausing and starting the timer, I have redone its logic. Now, instead of calculating the exact time the break should start I use a stopwatch to track how much time has passed and when it reaches the desired time it triggers the break. It wasn’t easy because I runed into many bugs where, for example, it would just instantly start the break once the app launched and many such errors, but the latest version works flawlessly! Thanks for reading! Consider leaving a like or a comment if you enjoyed this devlog q(≧▽≦q)!
Dear reader, thank you for reading. I promise this devlog is gonna be fun to read trough. The biggest utility change is that the timer now pauses when the screen goes to sleep. To do this, I had to use some low-level hooks that I’m not a master in, but it was fun to use them and debug the errors. Then I wandered about how I could make the app report errors it had back to me while also putting YOUR 🫵 privacy on the first place. I found Sentry, an app which has a more than enough free plan for this use case. What Sentry does it’s that it collects all the errors and stores them in one dashboard, along with many other features. The setup was fairly simple; it wasn’t that big of a hustle. Next, I also added a darker picture for the background for when the pc is in dark mode so that you don’t get flash banged when a break suddenly starts and its 3am. To choose the correct picture, it checks a specific value from a specific path where Windows keeps the current theme. Here I had a problem with memory leak which required more debugging because the images were being kept in memory, twice, and they would also get deleted after each use? It was a mess, but now its fixed. The last change is in the UI. I decided to keep ICare at a fixed size so that the layout is more consistent, and then I adapted the Settings view to the new dimensions. Thank you so much for staying! I’m sure I have a long way to go until ICare reaches a reasonable standard, but I hope you had fun reading through my journey. Thanks again! P.S: You can show me that you’re interested in this by just leaving a like on this devlog and it will make me happy to know that someone read it!
Hy there, I implemented two major things, those being a dark theme and an actual installer and updater. The dark theme: For this, I created two xaml files with the same SolidColorBrush names but with different colors, then I used ResourceDictionary and MergedDictionaries to change the current used file for the theme. After this I had to play with the color values because apparently you have to have layers to your app and yeah, it was a long and boring process of running the app, thinking if it needs to be darker or lighter, then going to the color picker and changing the value accordantly, then copying that into the program and repeating, but it worked! To make the title bar change color I found out that you need to import some of those weird libraries, again. I don’t understand every part of that function, but it does work. To change the theme, I removed the custom message box from settings and replaced it with a light/dark toggle for the theme. The installer and updater: For this, I used Velopack, which is great! It doesn’t require admin to install, it also has an updater, and it just works! Unfortunately, for the GitHub build action, I had no ideea how to write it, so just used Claude to do it for me, but that’s not really part of the app so it’s ok (I think?). Then, I wanted to have a way for the user to update the app with some confirmation things, because before I just had one button that you clicked, it shows no progress, and if it did find an update it would immediately restart the app, no questions asked. Now, in the bottom right of settings, there is some text that acts like a button which has all the states from let’s say no update found to ready to download to ready to install and more. That’s pretty much it, thanks for reading!
Holla, I’ve been working on a kind of useless bug that took me a long time to fix. The problem was that when the app was enabled to start automatically, you could still disable it from task manager. The bad thing is, I had no way of knowing if it was enabled or disabled from task manager, so I build one, and after that, I wanted a way to get notified when the user changed the disabled/enabled state, so I used a function named RegNotifyChangeKeyValue witch I’ve configured to notify the app when ICare’s state changed. I created a hole separate class for that named AutostartWatcher.cs, and it works flawlessly! Thanks for reading!
Hi there, I’m writing this from my laptop since the PC is used right now, I hope the recording still looks smooth :) I took a break for a few weeks; therefore, I don’t remember what the first few hours of this devlog went into, I recon I might have just fixed some bugs I found while using the app. Buuuuuuut I do know the latest feature I’ve been working on, right now it’s just a menu with the apps installed (almost all), and the target functionality is to be able to create multiple apps groups in which the app will either just pause or alert you with a message similar to the meeting overlay. While implementing this new window, I learned about ObservableCollection and ListBox s, which were new concepts to me, but I love how they nicely combine together. For the ObservableCollecton specifically, I created a new data model called InstalledApp, which has a Name, a ExePath and an Icon field. After hitting random bugs, such as the view (an ListCollectionView ) not being initialized fast enough, I finally got a bare-bones version working. It’s ugly, it’s messy, but I’m hitting the 10h mark and I have to write this devlog.
Holla dear readers! In this devlog I’m happy to announce that I finally added tests to the app, and they are great, they helped me debug much faster, and that’s not the only feature I added. But by far the most important feature added is that now the break warning will also be displayed if there is currently a full screen app opened, which might be the most important feature of the hole app. As you can see in the screenshot below, I modified the break overlay warning message box to be a floating island with a see trough background with rounded corners! Also, when it gets down to 3 seconds, the timer turns red , and I’m super happy with how it turned out! That’s it for this devlog, enjoy the new version!
Okkkkkkkay. I finally finished making two more views and linked the logic of the app groups/folders with their specific rules to the actual app timer. Even though the GUI isn’t pretty to look at, I just focused on getting it working. I did a terrific job at sniping all the bugs (took me 9h man😭😭), but I did also use a Claude’s help when I couldn’t find the root cause. The core ideea of the app works right now, what I do have left is fixing the UI for the newly added views (i have a LOT of work to do here) and implementing the rest of the “small” features I have in mind. Right now, it’s not pleasant to look at, but this is not what this devlog is about, it’s about the functionality I added to the app. To explain it in more detail, you can now create groups/folders with different apps inside of them and different rules applied for each group , meaning that if you don’t want the app to track the time you spend in let’s say Slack and other messaging apps, you can create a folder with that rule, and thats it. There are still bugs, like it not saving its config file 100% of the time or the fact that you can’t delete folders, or that you can add an app to multiple folders, etc… But I was getting close to the 10h mark and I had to post a devlog. See ya next time!
Hi there, I realized that I won’t have enough time to build all the features I want for ICare, so I updated the readme, polished some things, temporarily disabled the AppsView since it still needs a lot of work on animations and other stuff, and I’m ready to ship!
Ships:
ICare is an eye break reminder app that FORCES you to take your breaks, and not just that, it adapts to YOUR needs. Overlay warnings, notifications, dark/light theme, automatic start, idle detection, Fullscreen detection, meeting trackers and more! ICare has them all. It started with my eye doctor telling me to start using the 20/20/20 rule, but it was hard to keep consistency, so I started building an app, and then added a new feature, and another one, and so on until we are here XD! I strongly recommend you read the readme file from GitHub, I explained everything in depth there. IMPORTANT - WINDOWS 10/11 ONLY...
|
1793001178.0328083
|
1793087578.0328083
|
|
542
|
BSEngine by @BetterClient | Stardance
|
BetterClient
|
0
|
11.02
|
0
|
[]
|
[{"post_id": 9006, "ts": "2026 [{"post_id": 9006, "ts": "2026-06-15T00:46:11Z", "hours": 1.1078, "text": "Long time no see I added a transposition table and zobrist hashing, which makes the engine way faster"}, {"post_id": 4523, "ts": "2026-06-07T21:20:02Z", "hours": 3.0239, "text": "Added evaluation tables. Refactored board and move logic. Fixed a ton of bugs. Made the evaluation better. I have to fix performance next"}, {"post_id": 3736, "ts": "2026-06-06T19:39:01Z", "hours": 1.1042, "text": "Implemented a very basic engine using negamax with alpha beta pruning, it loses to stockfish in 29 moves"}, {"post_id": 3661, "ts": "2026-06-06T18:15:43Z", "hours": 0.9275, "text": "I made a function to load positions from FEN notation, i improved my tests using some engine test positions and fixed a bug where if you captured a piece and promoted your pawn at the same time you would be forced to a queen"}, {"post_id": 3553, "ts": "2026-06-06T15:25:46Z", "hours": 3.4289, "text": "Did legal move finding(thanks to Sebastian Lague’s video), it calculates the number of possible positions correctly to depth 6. Video is a bot playing random moves"}, {"post_id": 115, "ts": "2026-05-31T20:21:59Z", "hours": 1.4283, "text": "I created a basic board and made moving, right now there is no checks for legal moves"}]...
|
Title: BSEngine by @BetterClient | Stardance
Devl Title: BSEngine by @BetterClient | Stardance
Devlogs:
I created a basic board and made moving, right now there is no checks for legal moves
Did legal move finding(thanks to Sebastian Lague’s video), it calculates the number of possible positions correctly to depth 6. Video is a bot playing random moves
I made a function to load positions from FEN notation, i improved my tests using some engine test positions and fixed a bug where if you captured a piece and promoted your pawn at the same time you would be forced to a queen
Implemented a very basic engine using negamax with alpha beta pruning, it loses to stockfish in 29 moves
Added evaluation tables. Refactored board and move logic. Fixed a ton of bugs. Made the evaluation better. I have to fix performance next
Long time no see I added a transposition table and zobrist hashing, which makes the engine way faster...
|
1792579660.2776034
|
1793184460.2776034
|
|
541
|
My awesome macropad! by @Yosef | Stardance
|
Yosef
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Yosef | Stardance
|
1792479287.0111482
|
1793084087.0111482
|
|
540
|
Uncertain decisions by @brunodevdrums | Stardance
|
brunodevdrums
|
1
|
2.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-01T13:07:24Z", "hours": 2.0, "multiplier": 1.58, "payout": 3, "blessing": "neutral", "text": "I created a website where you receive a random answer to your question. This time, I challenged myself to do this by creating an API written in Python, something simple that fulfills your idea. It was somewhat challenging because I’m not yet 100% comfortable working with fetch() in JavaScript, so this also helped me strengthen my knowledge in that area.", "repo": "https://github.com/BrundevCoder/decisions", "demo": "https://brundevcoder.github.io/decisions/"}]...
|
[{"post_id": 130, "ts": "2026- [{"post_id": 130, "ts": "2026-05-31T21:44:42Z", "hours": 0.8611, "text": "I just finished my project! Here’s what I updated: The API was created using Python, and I deployed it using Render. I connected the API to JS. I added the README. I also added a notice to the website because, unfortunately, it will be temporarily “disabled” if nobody uses it for a while :( I hope you like my project!"}, {"post_id": 118, "ts": "2026-05-31T20:37:10Z", "hours": 0.4117, "text": "I’ve finished the HTML and CSS, and I’ve already prepared the JavaScript to receive my API, which I still need to create!"}, {"post_id": 112, "ts": "2026-05-31T19:41:57Z", "hours": 0.4342, "text": "I’ve already started working on the site’s foundation, the HTML and CSS. I’m trying to create a minimalist and pleasing design, and for the main font, I chose “Prompt,” imported directly from Google Fonts."}]...
|
Title: Uncertain decisions by @brunodevdrums | Sta Title: Uncertain decisions by @brunodevdrums | Stardance
Devlogs:
I’ve already started working on the site’s foundation, the HTML and CSS. I’m trying to create a minimalist and pleasing design, and for the main font, I chose “Prompt,” imported directly from Google Fonts.
I’ve finished the HTML and CSS, and I’ve already prepared the JavaScript to receive my API, which I still need to create!
I just finished my project! Here’s what I updated: The API was created using Python, and I deployed it using Render. I connected the API to JS. I added the README. I also added a notice to the website because, unfortunately, it will be temporarily “disabled” if nobody uses it for a while :( I hope you like my project!
Ships:
I created a website where you receive a random answer to your question. This time, I challenged myself to do this by creating an API written in Python, something simple that fulfills your idea. It was somewhat challenging because I’m not yet 100% comfortable working with fetch() in JavaScript, so this also helped me strengthen my knowledge in that area....
|
1792979468.9488485
|
1793065868.9488485
|
|
539
|
My awesome macropad! by @S | Stardance
|
S
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @S | Stardance
|
1792504122.399225
|
1793108922.399225
|
|
538
|
My awesome macropad! by @Pierrilein | Stardance
|
Pierrilein
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Pierrilein | Stard Title: My awesome macropad! by @Pierrilein | Stardance...
|
1792561964.486308
|
1793166764.486308
|
|
537
|
X-PAD by @Eshan | Stardance
|
Eshan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: X-PAD by @Eshan | Stardance
|
1792533079.2456634
|
1793137879.2456634
|