Architecture

Built to grow,
not just to get by

This page is written for CTOs, IT managers and system architects — we use real technical terms because this audience wants to see them.

Naya People

4 microservices

ComponentResponsibilityTechnology
itsm-webWeb front end for users and system administratorsReact 19 + TypeScript + Vite + Tailwind CSS 4
service-coreHCM core — employees, time, leave, OT, approvals, assets, meeting rooms, dashboardsNestJS 11 + Fastify + MongoDB + Redis/BullMQ
service-ticketService tickets, customers and creditNestJS 11 + gRPC + MongoDB
service-notificationEmail delivery and in-app notificationsNestJS 11 + gRPC + Handlebars templates
Why it is designed this way

The reasoning behind each decision

gRPC between services

Fast, with an explicit data contract, which cuts integration errors between teams.

Job queues with BullMQ on Redis

Heavy jobs such as sending email, recalculating leave for the whole company and syncing the org chart run in the background without making users wait.

Scheduled jobs

Daily absence checks · customer credit resets · SLA checks · customer notification condition checks.

Object Storage

Files stored on Cloudflare R2 / S3-compatible storage — scales without limit and stays secure.

Operations

Ready to run in real production

Kubernetes

Supported, with auto-scaling on CPU/memory usage and health checks.

Prometheus metrics

Monitoring is ready to use — see system health in real time.

Structured logging

Winston, shipping to Google Cloud Logging — searchable, so you can trace problems after the fact.

Docker everywhere

There is both a local stack (docker-compose) and a Kubernetes deployment.

Correlation ID

Trace every request across the system, so you can pinpoint problems after the fact even when they pass through several services.

Asia/Bangkok

Set as the default system-wide; daily jobs close out on Thai time, not UTC.

What this means for you

The system scales to more users without a rewrite · you can add servers only to the parts under heavy load · and when something goes wrong, our team finds the cause quickly because the logs and metrics are all there.

Naya PMS and KuiKeng

Architecture of the LINE-based products

Naya PMS

Multi-tenant with database-level Row-Level Security · 1-day JWT access token + 7-day refresh token with token rotation · HMAC-SHA256 signature verification on every message from LINE · RabbitMQ queues the Channel Manager (Channex) integration, so bookings are not lost if the far end goes down.

KuiKeng

Multi-tenant with Row-Level Security — several layers at the database level prevent leakage between shops · the system works as RAG (retrieve the real data first, then compose the answer) with a relevance threshold and keyword search as a fallback · request rate limiting.

Transparency

What isn't finished yet

We say it plainly because technical teams will ask anyway, and if they catch the site overselling, the whole page loses its credibility.

On the roadmapnot finished yet

  • A centralized API Gateway — not there yet; today each service receives requests directly.
  • Fully separate databases for each microservice — planned, not finished yet.
  • SMS and mobile push notifications (Naya People) — today it is email + in-app notifications.

Talk to our technical team directly

About deploying on your own infrastructure, integrating with existing systems, or any architectural question.