- Added .cursor/sessions/* to .gitignore to prevent session files from being tracked. - Enhanced coding standards in SKILL.md by adding semicolons to TypeScript examples for consistency. - Improved formatting in continuous learning, detail layout, and other SKILL.md files for better readability. These changes aim to streamline development processes and maintain code quality across the project.
10 KiB
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
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