Why We Built DeskTrust, Byvano and RxCompliant
The three problems that led to our products, and why we think they are worth solving.
Read article →A small team running several production products needs a boring, shared stack. Here is what we use, why, and what we would change.
Running several production products, including Byvano, DeskTrust and RxCompliant, with a small team needs a stack that keeps developers productive without giving up reliability. Here is what we use and why.
Our web products share the same foundations:
Next.js removes the need for a separate backend. API routes sit alongside the pages they serve, so a whole product deploys as one application. Server components keep marketing and help pages fast and easy to index. Client components handle the interactive dashboards.
The trade-off is complexity at the edges. Knowing when code runs on the server and when it runs in the browser takes discipline. For our team, having one framework for everything is worth it.
Prisma gives us typed queries and a readable data model. We use the Prisma Client for almost everything and fall back to raw SQL ($queryRaw) for heavy aggregation and bulk updates.
prisma db push, later running migrate commands can try to "repair" drift in destructive ways. On those databases we now write migrations by hand and review every statement before it runs.Our web apps run on a Linux VPS, with PM2 keeping each app alive and Nginx in front of it handling TLS. DeskTrust's backend runs on AWS. Because a Next.js app serves the frontend, the API and server rendering from a single Node.js process, we don't need separate frontend and backend fleets, which keeps hosting costs low.
We use AI in every SaaS product, always for a specific job:
DeskTrust needs to run on people's computers, so it ships as a desktop app for Windows and Mac with automatic updates. The design goal is to stay lightweight in the background, recover cleanly after sleep or a lost network connection, and be clear about what is being recorded.
Deployment is deliberately simple: pull, build, restart the process with PM2, then check the live site. We don't use Kubernetes or a complex pipeline. For a team our size, that is the right level of complexity, and we will add more when the product needs it, not before.
Each SaaS product has a free way to start. Visit one to see it in action.