When working on a full-stack project like a Todo List app, there are usually multiple components that need to be started before you can actually test the application:
-
A Spring Boot backend (sometimes more than one service).
-
A frontend React application.
-
Any supporting microservices (in my case, an Avatar service).
Normally, this means opening three separate terminal windows, navigating to different directories, and running commands like mvnw spring-boot:run
or npm start
manually. It’s repetitive, slow, and distracting.
To make things easier, I built a desktop tool in Python using PyQt6 that acts like a mini process manager for my project. With a single interface, I can start, stop, and monitor all my development services — without touching multiple command prompts.
Why PyQt6?
PyQt6 gives me a clean way to build desktop applications with a GUI. Instead of juggling scripts in the terminal, I now have a window where I can:
-
See all my services in a structured table.
-
Start or stop any of them with a click.
-
Monitor live logs directly in the app (just like a terminal).
And because it runs with pythonw.exe
via a simple .bat
file, it starts up silently without flashing an extra command window.
Key Features
1. Process Management in a Table
The app uses a table with four columns:
-
Directory → The folder where the service lives (
c:\todo_app_dev\backend
,c:\todo_app_dev\frontend
, etc.). -
Command → The actual command to run (
mvnw spring-boot:run
,npm start
). -
PID → The process ID assigned when the service is launched.
-
Status → Shows whether the service is Running or Stopped.
This table gives me an instant overview of what’s going on in my development environment.
2. Add or Remove Tasks Dynamically
Not every project has the same setup. Sometimes I want to test a new microservice, other times I just need the backend. With the Add button, I can create new entries with a custom directory and command. With Remove, I can clean up ones I don’t need.
This means the tool isn’t hard-coded — it adapts to whatever stack I’m working on.
3. Start and Stop with One Click
Instead of typing commands in multiple terminals, I just select a row and hit Start Selected. The app launches the process in the background, updates the PID column, and marks the status as Running.
If I need to shut it down, Stop Selected does exactly what Task Manager would: it finds the process (and its children) and kills it cleanly.
4. Built-In Log Viewer (Terminal Output)
One of the most useful features is the log panel on the right side of the window.
Every service’s output (both stdout
and stderr
) is captured and displayed in real time, tagged with the row number and directory. This acts like an embedded terminal — so I can see when my backend finishes compiling, when the frontend builds, or if there’s an error in one of the services.
No need to flip between multiple terminals — everything is in one place.
5. Safe Shutdown on Exit
When closing the app, it prompts me to confirm. If I exit, the tool automatically stops all running processes, so I don’t leave stray java.exe
or node.exe
tasks eating up memory in the background.
6. One-Click Launch with a .bat
File
To make it seamless, I added a small batch file:
Double-clicking this file launches my PyQt6 tool immediately, without opening an extra terminal window. It feels like running a native desktop app.
Why This Matters
This might seem like a small improvement, but it makes my daily development much smoother. Instead of juggling three terminals and manually starting/stopping services, I now have:
-
A dashboard view of my dev environment.
-
Process control without Task Manager.
-
Logs in context so I can see exactly which service is misbehaving.
-
A single double-click to get everything running.
In short, it’s a semi-automated development manager that takes the hassle out of testing my Todo app.
What’s Next?
This tool can easily be extended:
-
Add profile presets for different projects.
-
Add parallel start to launch everything at once.
-
Add colored log highlighting (errors in red, success in green).
-
Even turn it into a tray app that runs quietly in the background.
For now, though, it has already saved me countless clicks and terminal windows — and that’s a big win.
No comments:
Post a Comment