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:
coretestingdevui
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:
devlintformattype-checkcleanbuildgenerate: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
- dataset bersama seperti
scripts/- automasi repositori, misalnya
generate-exports.ts
- automasi repositori, misalnya
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