Portfolio · Internal platform
TBH Intranet
An internal operations platform built to replace Zoho at The Binary Holdings, bringing HR, approvals, Thai accounting, expenses, CRMs and an AI assistant into one login-only web app.
One back office for a multi-entity group.
What it does
- HR in one place: leave, payroll, attendance and benefits
- Approval chains for leave, travel and expense requests
- Thai accounting suite: general ledger, AR/AP, withholding tax, bank reconciliation and fixed assets
- Expenses and cash advances with Bank of Thailand exchange rates
- Sales, partner and investor CRMs
- ARIA, an AI assistant that reads attachments and searches internal knowledge
- Projects, surveys, internal chat and company news
The problem
The Binary Holdings ran its internal operations on Zoho. The intranet replaces it with one system built around how the group works: several legal entities, Thai accounting requirements and multi-step approvals.
How it is built
A Turborepo monorepo with a Next.js web app and an Express API over PostgreSQL on Supabase, using Prisma for data access. Real-time features run over Socket.IO, and ARIA combines Gemini and Claude models with embedding search over internal knowledge. It deploys to Vercel, with GitHub Actions running Vitest and Playwright tests.
How it works
Approval flow
Step 01
Submit a request
Leave, travel or expense
Step 02
Approval chain
Each approver signs off in turn
Step 03
Recorded
Lands in the HR or accounting module
Step 04
Notified
Requester hears back in the app and by push
Architecture
Users
- StaffBrowser, installable web app
Web app
- Next.js 16React 19
- Tailwind CSS 4
- shadcn/ui
API
- Express 5Zod validation
- Socket.IOReal-time features
Services
- PostgreSQLOn Supabase, via Prisma
- Supabase Auth + Storage
- Google GeminiARIA assistant, embedding search
- ClaudeARIA assistant
- IntegrationsGmail, Sheets, Bank of Thailand FX rates, PostHog
Build + hosting
- TurborepoMonorepo
- VercelHosting + cron
- GitHub ActionsCI with Vitest + Playwright