Monorepo Architecture Overview โ
Architectural Foundation: Turborepo ยท pnpm ยท Vite ยท TypeScript
Description: Architectural overview of the monorepo, orchestrated by Turborepo with pnpm workspaces, housing React/Vite applications and shared TypeScript packages.
๐ Repository Structure โ
The monorepo is organized into Apps (deployable applications) and Packages (shared libraries).
.
โโโ apps/
โ โโโ web/ # Main React Application (Vite + TypeScript)
โ โโโ landing/ # Public Promotional SPA (Vite + TypeScript)
โ โโโ desktop/ # Electron Desktop Wrapper (electron-vite)
โ โโโ docs-dev/ # Component Documentation & Playground (VitePress)
โ
โโโ packages/
โ โโโ core-api/ # Shared HTTP Client, Observability & Data Services Engine
โ โโโ core-storage/ # Enterprise Storage Engine (IndexedDB/localStorage + Encryption)
โ โโโ core-i18n/ # Enterprise Internationalization Architecture
โ โโโ ui/ # Shared UI Component Library
โ โโโ utils/ # Shared Utilities (Date, Encryption, Core Logic, etc)
โ โโโ configs/ # Shared Tooling Configurations
โ โโโ eslint/ # Shared ESLint rules
โ โโโ typescript/ # Shared TypeScript (tsconfig) bases
โ
โโโ package.json # Root scripts and dependencies
โโโ pnpm-workspace.yaml # pnpm workspace definition
โโโ turbo.json # Turborepo pipeline configuration๐ฆ Packages Overview โ
1. apps/web โ
The main consumer-facing application.
- Imports business logic from
@repo/utils - Uses shared UI components from
@repo/ui - End-user guide: Sales workflow
Tech Stack:
2. apps/desktop โ
The Electron desktop wrapper that embeds apps/web for native desktop experiences.
- In development: loads the Vite dev server with full hot reload
- In production: serves the static web build via a secure custom
app://protocol - Configurable target app via
.env(can wrapapps/web,apps/docs-dev, or any future app)
Tech Stack:
Key Capabilities:
| Feature | Description |
|---|---|
| ๐จ๏ธ Native Printing | Silent and direct printing via secure IPC bridge |
| ๐ Auto-Updates | Background downloads via GitHub Releases (switchable to S3) |
| ๐ Secure IPC Bridge | contextIsolation: true, nodeIntegration: false, sandbox: true |
| ๐ Custom Protocol | app:// serves static files with SPA routing fallback to index.html |
| ๐ก๏ธ CORS Bypass | Transparent Origin header rewriting for cloud API calls |
3. apps/landing โ
The public promotional website โ a standalone SPA for the company profile and marketing pages.
- Deployed independently to the web (e.g., Vercel) โ no interaction with Electron
- Consumes shared UI components from
@repo/uiand utilities from@repo/utils - Locked to port 3000 (
strictPort: true) โ evacuated from the517xrange to avoidelectron-viteport collisions
Tech Stack:
4. apps/docs-dev โ
An isolated environment for developing and documenting UI components.
- Ensures components in
@repo/uiare built and tested independently - Acts as a living design system and playground
- Built with VitePress
5. packages/core-api โ
The platform-agnostic API engine for the monorepo. Provides an isolated HTTP client factory, a unified observability pipeline (Grafana Faro + OpenTelemetry), and a generic data services engine.
- Consumed by
apps/web,apps/landing, and any future workspace - Centralizes all
@grafana/faro-*and@opentelemetry/*dependencies - Provides plug-and-play telemetry via
initTelemetry()+faroAdapter
Tech Stack:
- Axios (isolated instances, zero singleton pollution)
- Grafana Faro (RUM, Logs, Error tracking)
- OpenTelemetry (custom spans, distributed tracing)
- TypeScript (strict types, module augmentation)
Key Capabilities:
| Feature | Description |
|---|---|
| ๐ญ HTTP Client Factory | createHttpClient() โ per-app isolated Axios instances with interceptor hooks |
| ๐ก Faro/Loki Baseline | Every request automatically pushes structured logs with module.key and module.action |
| ๐ฏ Custom Spans (Opt-In) | telemetryContext.customSpanName creates explicit OTel spans visible in Grafana Tempo |
| ๐ก๏ธ Error Normalization | ApiError.fromAxiosError() โ structured, serializable error codes for all failure modes |
| ๐ฆ Data Services Engine | CommonRemoteDataServices โ full CRUD + lifecycle operations with zero boilerplate |
6. packages/core-storage โ
The Enterprise-grade storage engine for the monorepo. Provides a unified, Promise-based interface for interacting with browser storage (localStorage and IndexedDB). Enforces strict type safety, prevents key collisions via a centralized registry, and automatically provides AES encryption at rest for sensitive payloads using @repo/utils.
7. packages/core-i18n โ
The Enterprise Internationalization Architecture for the monorepo.
Provides a Hybrid Namespace Architecture combining a centralized i18n engine with decentralized, lazy-loaded feature dictionaries. Features strict TypeScript typings (including nested keys), optional backend synchronization with automatic error rollbacks, and a deep-merge mechanism for dynamic tenant-specific vocabulary overrides.
Key Capabilities:
| Feature | Description |
|---|---|
| ๐ Hybrid Namespaces | Centralized common corpus + lazy-loaded feature dictionaries. |
| ๐ก๏ธ Strict Typings | Native TS autocomplete for nested paths (e.g., header.title) via module augmentation. |
| ๐ Safe Backend Sync | changeLanguage accepts a syncCallback with built-in rollback if the API fails. |
| ๐ข Tenant Overrides | applyTenantOverrides performs a partial deep-merge to selectively override terminology. |
8. packages/core-events โ
The decoupled Nervous System for the monorepo.
Provides a highly performant, strictly typed Event Bus (Pub/Sub) powered by mitt. It allows independent modules to communicate seamlessly without tightly coupling their codebases or triggering expensive global React tree re-renders.
Key Capabilities:
| Feature | Description |
|---|---|
| ๐งฉ Zero Coupling | Publishers and subscribers interact via blind events, eliminating direct module imports and circular dependencies. |
| โก Extreme Performance | Enables targeted DOM updates for high-frequency data streams (e.g., WebSockets) without re-rendering parent components. |
| ๐งน Memory Safety | Native useAppEvent hook automatically unsubscribes on component unmount, preventing SPA memory leaks. |
| ๐ก๏ธ Strict Contracts | Centralized events.registry.ts enforces payload shapes via TypeScript, ensuring cross-module data safety. |
9. packages/utils โ
Shared business logic and reusable utility modules that can be consumed across multiple applications. Fully tested using Vitest.
This package is intended to hold non-UI, cross-cutting logic such as date/time handling, security helpers, and other common utilities. It is designed to be framework-agnostic, predictable, and easy to extend as the system evolves.
10. packages/ui โ
Shared UI component library (Buttons, Inputs, Cards, Layouts) with a comprehensive Form UI Library.
- Ensures consistent design across all applications
- Designed to be consumed by both web apps and Storybook
- Form UI Library: 22 RHF-connected Mantine form components with Zod validation and i18n error translation, built via a
withRHF()HOC factory withuseControllermicro-subscriptions andReact.memooptimization for ERP-scale forms
11. packages/configs โ
Single source of truth for tooling configuration.
- eslint-config: Shared ESLint rules
- typescript-config: Shared
tsconfig.jsonbase configurations
โ๏ธ Configuration & Environment โ
Turborepo Caching โ
This repository uses Turborepo caching for builds, tests, and other artifacts. To fully clean the workspace (dependencies, build outputs, and Turbo cache):
rm -rf node_modules **/*/node_modules .turbo **/*/.turbo dist **/*/dist out **/*/out web-dist **/*/web-dist release **/*/release