engineering docs

Architecture

Overview

Repositori ini adalah monorepo aplikasi Aorilabs yang dibangun dengan React, Next.js, React Native, Expo, TypeScript, Bun, dan Turborepo.

Tujuan arsitektur:

  • Mendukung banyak produk independen
  • Menjaga boundary bisnis sebagai prioritas utama
  • Memisahkan aplikasi frontend dan backend secara jelas
  • Memfasilitasi struktur yang mudah dipahami, scalable, dan dapat dikelola dalam jangka panjang

Root Structure

root/

  • apps/
  • packages/
  • infrastructure/
  • data/
  • scripts/
  • package.json
  • eslint.config.ts

Pelajari pohon struktur utama di structure.

Product Boundary

Setiap produk ditempatkan di dalam apps/<product>/ dan dapat memiliki komponen:

- main/
  - mobile/
  - web/
- app/
  - mobile/
  - web/
- docs/
- api/
  - prisma/

Prinsip:

  • Produk adalah boundary arsitektur tertinggi
  • Produk independen secara default
  • Kode antar produk dihindari kecuali benar-benar diperlukan

Backend Boundary

  • API adalah pemilik backend
  • Frontend (web, mobile) hanya sebagai client
  • API menangani:
    • business logic
    • database
    • ORM
    • data persistence
    • integrasi layanan lain

Shared Code dan Packages

Hanya gunakan packages/ jika reuse sudah terbukti:

- packages/configs/
  - css
  - eslint
  - typescript
  - global-types
- packages/auth/
- packages/permissions/
- packages/i18n/
- packages/http-client/
- packages/hooks/
- packages/utils/
- packages/helpers/
- packages/core/
- packages/components/
- packages/icons/
- packages/ui/

Aturan utama:

  • Shared code untuk kebutuhan berulang
  • Hindari abstraksi terlalu dini
  • Jangan buat package kosong "mungkin dipakai nanti"

Workspaces

Root package.json menggunakan workspaces:

  • packages/*/
  • apps/*/
  • cli/*/
  • scripts/*/

Dependency Catalogs

Root package.json mengorganisasi dependency melalui katalog:

  • core
  • testing
  • dev
  • ui

Contoh paket inti:

  • React @latest
  • Next @latest
  • Prisma 6
  • Tailwind CSS 4
  • Expo / React Native untuk mobile
  • Jest untuk testing

Tooling dan Scripts

Script utama root:

  • dev
  • lint
  • format
  • type-check
  • clean
  • build
  • generate:exports

Toolchain:

  • Bun sebagai package manager
  • Turborepo untuk task orchestration
  • Prettier, ESLint, TypeScript
  • Next.js untuk aplikasi web

Infrastructure, Data, Scripts

  • infrastructure/
    • docker
    • terraform
    • github
    • deployment
  • data/
    • dataset bersama seperti seed-indonesia-regions
  • scripts/
    • automasi repositori, misalnya generate-exports.ts

Filosofi

  • Struktur mengikuti deployment dan ownership bisnis
  • Shared package adalah untuk building block dasar, bukan domain spesifik
  • Kode domain-spesifik tetap berada di dalam apps/<product>
  • Frontend tidak memiliki database
  • Maintainability jangka panjang diutamakan