The Problem With Project Management Tools

Every team I’ve ever run has gone through the same cycle: evaluate ClickUp or Jira or Asana, pick one, pay for it, and then spend the next six months working around its limitations. The tools that are powerful enough to be useful are either expensive, overcomplicated, or both. The lightweight ones run out of steam the moment you need something slightly non-standard.

I decided to build my own.

What XenTask Is

XenTask is a self-hosted project management platform — tasks, projects, workflows, IT ticketing, HR pipelines, and a calendar, all in one place. The pitch is simple: own your data, run it on your infrastructure, and never pay per-seat for features you already built.

It’s available at xentask.com with a free tier that includes 10 users, white-labeling, and reports. The Pro tier is $6/user/month with unlimited everything.

The Architecture

This is where it gets interesting from an engineering standpoint.

XenTask is a microservice architecture with 13 interdependent services. There’s a clear separation between the API layer, the frontend, the auth service, the forms engine, the admin interface, and the real-time layer. Each service is containerized and runs in Kubernetes, which means individual components can scale and deploy independently.

The frontend is built in React 18 — a full SPA with drag-and-drop task management, calendar views, rich text editing via CKEditor, and real-time updates pushed down from the server.

The REST APIs are PHP — fast to iterate on, well-understood, and easy to deploy into any PHP-FPM/Nginx stack.

The Part That Was Actually Fun to Build

The real-time layer is a WebSocket server written in C with OpenSSL.

Not a Node.js WebSocket library. Not a PHP socket extension. Raw C, handling TLS termination, connection state, and message dispatch by hand.

The reason is performance and control. Real-time collaboration features need a server that can hold thousands of persistent connections without the overhead of a scripted runtime. C gives you that. OpenSSL gives you TLS without needing an external terminator. The result is a WebSocket server that’s small, fast, and does exactly what it needs to do and nothing more.

It’s the same instinct I applied years ago building message-passing interfaces for UbixOS — when you need low-latency communication between processes (or in this case, between a server and hundreds of browser clients), you write it in C and you control every byte.

XenTask — Task List View

XenTask — Task Priority View

XenTask — Table View

What’s Next

XenTask is live and actively developed. The roadmap includes deeper workflow automation, expanded reporting, and a public API for integrations. If you’re running a team and want something you actually own, take a look at xentask.com or check the source at github.com/cwolsen7905/XenTask.