Company3 min read
HOJA, a multi-tenant SaaS at Hyojung Softtech
Scope of my work on HOJA (hoja.vn): social and Zalo OA integrations, influencer tools, Kanban, MISA e-invoicing, plan billing, and the stack used.
- Next.js
- NestJS
- GraphQL
- PostgreSQL
- React Native
- BullMQ
Context#
HOJA (hoja.vn) is a multi-tenant SaaS for small and mid-sized businesses in Vietnam. It brings social media marketing, customers, sales, accounting and work management into one system. The product has a business web portal, an operator console, an influencer portal, mobile apps and a shared GraphQL API.
- Role: Software Engineer, development team of 2.
- Period: June 2026 to present.
- Workflow: work on a personal branch; changes reach the main branch through pull requests and CI checks.
- The multi-tenant foundation (organisations, roles, entitlements) and the production infrastructure were set up by the team lead; my work builds on top of them.
Scope of work#
Social and marketing#
- Connecting Facebook Pages, Instagram, Threads and TikTok accounts: OAuth, token refresh, disconnect.
- Publishing to those channels, including Threads carousels and polls, and TikTok video and photo posts.
- A unified inbox for Facebook, Instagram, Threads and Zalo, updated in real time, with labels and customer notes.
- Facebook Page and ads insights, Instagram hashtag search, comment management.
- Zalo Official Account: OA connection, webhooks, replies, follower sync, message templates.
- Influencer (KOL/KOC) tools: recruiting campaigns, a public application form, screening, result emails, a TikTok creator research list with CSV/Excel export.
- Started the internal TypeScript SDK for these platforms, then developed it further together with the team lead.
Work management#
- Drag-and-drop Kanban boards per project, a task modal, subtasks, assignees and reviewers.
- Shows who is viewing or editing a task; detects conflicting edits.
- Per-project permissions; task export to PDF/Word.
Accounting, sales, billing#
- MISA meInvoice e-invoicing: lookup, reports, issuing from sales orders, USB-token signing.
- Plan payments through NAPAS; App Store In-App Purchase and Google Play Billing in the mobile app.
- A quick-sale screen on the web, stock thresholds, product variants with barcodes, revenue per branch.
- Reading purchase invoices from a company mailbox for expense tracking.
Platform and interface#
- Permission screens per user and per role.
- Customer screens, company settings, address entry for both the pre- and post-2025 Vietnamese administrative formats.
- A trilingual interface: Vietnamese, Korean, English.
- Resumable large-file uploads; video conversion to HLS.
- Several React Native screens: plans, inbox, e-invoices, home.
Technologies used#
| Area | Technologies |
|---|---|
| Web frontend | Next.js 16, React 19, TypeScript, Apollo Client, GraphQL Codegen, Tailwind CSS 4 |
| Mobile | React Native 0.80, NativeWind, React Navigation, Redux Toolkit |
| Backend / API | NestJS 11 on Fastify, Apollo Server, GraphQL, Prisma 7 |
| Data | PostgreSQL 16, Redis |
| Background jobs, realtime | BullMQ, Playwright, ffprobe, GraphQL subscriptions over graphql-ws |
| Integrations | Meta Graph API, Threads API, TikTok for Developers, Zalo OA, MISA meInvoice, NAPAS, App Store / Google Play Billing, Cloudflare Turnstile |
| Infrastructure | Docker, Docker Compose, nginx, Cloudflare Tunnel, GitHub Actions (self-hosted runners) |
| Tooling, testing | npm workspaces, Turborepo, Jest, Playwright, ESLint |
Environments and operating systems#
- Development machine: macOS; Windows (Git Bash) for a period.
- Mobile: tested on the iOS Simulator (Xcode) and Android devices.
- Containers: Linux (Node 22 on Alpine and Debian slim; PostgreSQL and Redis on Alpine).
- Production: Linux containers, exposed through Cloudflare Tunnel.
- Invoice signing: the signing tool runs on Windows with a USB token.
- CI: self-hosted GitHub Actions runners on Linux.
Operations and releases#
- Fixed and shortened CI steps: zero-warning lint, typecheck, tests, migration checks; bumped dependencies on critical security advisories.
- Fixed Dockerfiles, nginx routing for the main domain, and a Docker watchdog script.
- Investigated and fixed production issues around webhooks, tokens and platform integrations.
- Prepared app review material: TikTok posting UI changes for the Content Posting API audit, screencast scripts and data-processing answers for Meta/Threads, and Zalo OA webhook registration.