The customer’s computer environment is quite complex, with machines running Windows 7, Windows 10, and Windows 11. Although the PyQt application we developed works on about 90% of these systems, there are still some machines where it fails to run due to missing PyQt-related packages. In Taiwan’s tech industry, once software is deployed to a production environment, it’s often difficult or even impossible to enter a cleanroom to troubleshoot issues on-site.
This led us to consider using Docker. However, Docker requires a specific version or later of Windows 10 to run properly, which isn’t guaranteed across all machines. As a result, we started exploring Django combined with Next.js as a potential solution.


My Django application needs to use the WebSocket mechanism because I need to display the runtime status of the program on the Next.js frontend. To achieve this, I established a WebSocket channel at ${process.env.NEXT_PUBLIC_WS_BASE}/ws/log/
, and Django publishes messages to this channel using the following function:
python複製編輯def send_log_to_frontend(message):
channel_layer = get_channel_layer()
async_to_sync(channel_layer.group_send)(
"log_group", # The group name you defined
{
"type": "send_log_message", # The method name in the consumer
"message": message
}
)
Additionally, Django exposes its functionality through HTTPS GET/POST/PUT endpoints, allowing the Next.js frontend to make requests and interact with the backend.
What’s more challenging for me is actually designing the information display on the Next.js frontend. In comparison, the Windows GUI part is relatively easier.
In a small company, we often have to handle many different tasks. I frequently feel that the work we do goes beyond what people in larger companies have to deal with, yet the actual revenue the company earns is far less than what big companies make. For example, the client initially didn’t mention that the software had to run in such a complex environment. But still, if it’s possible to solve the problem, we try our best to help the client anyway.
https://blog.winerva.com/tailwind-flex/