CanvasOS
- 4 Devlogs
- 16 Total hours
A WebOS with an infinite workspace
A WebOS with an infinite workspace
(pushed at 22:21 UTC, may take some time for the asset cache to update)
This devlog was mostly spent getting the project reading for shipping. I actually had a read of the WebOS-1 spec, and holyyyy this mission is easy. I don’t think I had to do as much as I did, but at least I now have a really cool website 
Got the pause and stop buttons looking good with icons from Bootstrap Icons, as well as a very simple tray which I’m gonna expand in later iterations
Also there’s a new tutorial section to help people trying out the demo.
Once the asset cache refreshes, I’m probably gonna ship this project and get that cheese
I’m creating a WebOS with an infinite canvas to work without boundaries
wassup guys
this devlog was hella fun bc for once i could actually both see and feel the results of what I was changing - can now definitely see why “frontend engineer” is a job someone would want to have.
Most of the changes were in how the program windows are manipulated. Before, all you could do is move them around, and close them using a small button in the top-right. But now, windows can be shifted, resized, and layered, and the cursor now changes when hovering over certain parts of the frame.
Another one of the obvious changes are the new colours. I found them through a cool tool i’ve used for years https://huetone.ardov.me/ with the Ant Financial Design preset. I’d really recommend them if you want to design some colour palettes.
holyyy i completely forgot to post any devlogs all week 
Previously everything was handled by the main App() function, but MouseEvent issues (see below) meant that I had to centralize most of the reactive values of my components. Working with external stores and states was a pain since the standard useSyncExternalStore that React provides to communicate with singletons was just way too slow for any sort of real time read/write. This led to me implementing something like how zustand manages it’s stores. Now the state of a program can be modified from anywhere
MouseEvent
When dragging apps around by the titlebar, there is a chance that the mouse goes fast enough that it leaves the bounding box of the previous position of the titlebar. This leads to the titlebar not handling the MouseEvent, which was where the window moving logic was implemented. Since the mousemove MouseEvent wasn’t going to the titlebar, it would be going to the background, which wasn’t hooked up to move programs.
This meant that the whole backend had to be refactored to allow both global modifying of the underlying data representation of the position of programs, and also allow the JSX of the programs to react to changes in their linked data structure
Although a lot of this devlog is me being mad at react, I actually really enjoyed it
and it was really fun to learn how to speak in the same language as react
See the video for a demo of the project