My work on NestHelper, pretty good pretty good
NestHelper is a good project, and seems to be shaping up well.
9/2/2025
So I last talked about what I was going to work on with NestHelper, and it's going pretty well. You can actually try it out right now if you'd like at it's Github (https://github.com/atomtables/NestHelper). Development was smooth, since I could just use SvelteKit, but the Rust backend was some of the most annoying code I've ever written. Before you shout at me for being ignorant though, just hear me out.
Frontend
I used SvelteKit for the frontend, as is getting eerily typical for me (at this point my friends joke about my GitHub being 50% svelte but they aren't even wrong). I got the user interface elements like the Dialog boxes and Buttons from TheGreenAlliance, albeit modified to go with the purple user interface.Sidenote: I really should make a UI framework with my GreenAlliance framework, I seem to use it in every project I make
Using Tauri, I could make the traffic lights be aligned with the topbar on MacOS, so I decided to have a tab bar on the topbar. The tab bar gives you like 4 pages: you can see the current flow, make new flows, view the filesystem, and just run a single command.
Individual Features
Filesystem
So there's the ability to modify the filesystem. The main way it works is that it runs a Python script to traverse every file in the system and list it in JSON format. This data is then displayed in the main interface. This data is reloaded every so often.You can go into a file and see its size and options to load it as. Right now, you can load it as a text file or an image. For text, Monaco is embedded and you can choose a couple of languages for formatting.
Obviously, NestHelper doesn't load every file when it gets the structure, it loads files on-demand. When you load a file, it runs another Python script that reads the file and sends the output back. You can then modify the file on your side.
You can also delete files and create new ones, as well as upload files. When you want to commit your changes, you can click the commit button, and it will use general Unix tools to write your files.
There's also conflict protection: if a file is missing and you modified it, then you can choose not to update, as to save your changes elsewhere. That way, the directory structure doesn't eat your changes, incase the document was important.
Flows
Another big feature is Flows. You can basically set up a sequence of commands to be run in order, such that you can automate updating your server from the latest Git commit, or restarting a service, etc.You have regular commands, but you can also make Javascript Tasks that run in the frontend. These have access to the ability to use your native computer to process tasks within NestHelper, like updating state. You can make, for instance, network requests to your server to make sure it's online after restarting it, and you can log the output of these tasks back to the main flow.
General Commands
You can also just run normal commands, for example, if you want to git pull or nest caddy add. You have visual history, and you can click on a command to see what its output was.Development
Since I'm using Tauri, a big thing was using Rust commands to interface with ssh. This wasn't too hard originally. But I started adding a bunch of constraints, like wanting to be able to stream the output from the backend to frontend, as well as running asynchronous commands. This is where Rust started to be painful.The good thing was that Rust was very helpful in ensuring that the async code didn't randomly race condition, but the worst thing was the build times. Everytime I made a small change, it rebuilt 40 dependencies starting from the objc-native libraries. This was a pain, because it made working on the app so much more difficult. Especially when the borrow checker would get mad every time. The code is literally spaghetti of handle.clone(), handle1.clone(), handle2.clone() and handle3.clone(). Maybe I was doing it wrong, but it really was a pain on my slower system.
Other than that though, this was pretty good, so I will be pushing more updates in the future.
