Repository Structure
This document describes the structure of the OWOX Data Marts monorepo, which is organized to separate deployable applications from shared packages.
The monorepo is divided into two main sections:
apps/
- Contains deployable applications and runtimespackages/
- Contains shared libraries and configurations
Directory Structure
Section titled βDirectory Structureβowox-data-marts/βββ apps/ # Deployable applicationsβ βββ web/ # Frontend web applicationβ β βββ src/ # Source codeβ β βββ dist/ # Build artifactsβ ββ βββ backend/ # Backend API and platform runtimeβ β βββ src/ # Source codeβ ββ βββ docs/ # Documentation websiteβ β βββ src/ # Source codeβ β βββ dist/ # Build artifactsβ ββ βββ owox/ # Command-line interface toolβ βββ src/ # Source codeβ βββ dist/ # Build artifactsββββ packages/ # Shared libraries and configurationsβ βββ ui/ # Shared UI components and design systemβ β βββ src/ # Source codeβ ββ βββ connectors/ # Data connectors and API integrationsβ β βββ src/ # Source codeβ ββ βββ connector-runner/ # Core connector execution logicβ β βββ src/ # Source codeβ ββ βββ eslint-config/ # Shared ESLint configurationsβ ββ βββ prettier-config/ # Shared Prettier configurationsβ ββ βββ typescript-config/ # Shared TypeScript configurationsββββ tools/ # Additional scripts for projectβββ docs/ # Project documentationβββ dist/ # Build artifactsβββ temp/ # Temporary files
Applications (apps/
)
Section titled βApplications (apps/)βWeb Application (apps/web/
)
Section titled βWeb Application (apps/web/)β- React-based frontend application
- Serves the main user interface
- Consumes shared UI components from
packages/ui
- Build artifacts are served by the backend
- README
Backend (apps/backend/
)
Section titled βBackend (apps/backend/)β- NestJS-based backend API
- Serves the web applicationβs build artifacts
- Implements platform runtime
- Uses shared packages for data connectors execution
- README
OWOX CLI Tool (apps/owox/
)
Section titled βOWOX CLI Tool (apps/owox/)β- Command-line interface for platform management
- Published as global npm package (
owox
) - Reuses backend logic and connectors
- Designed for global installation:
npm i -g owox
- README
Documentation Website (apps/docs/
)
Section titled βDocumentation Website (apps/docs/)β- Astro-based documentation website
- Contains project documentation and guides
- Built and deployed as static site
- README
Shared Packages (packages/
)
Section titled βShared Packages (packages/)βUI Package (packages/ui/
)
Section titled βUI Package (packages/ui/)β- Shared React components
- Implements shadcn/ui-based design system
- Tailwind CSS styling
- Used by the web application and other frontends outside of this monorepo
Connectors (packages/connectors/
)
Section titled βConnectors (packages/connectors/)β- Data Source integrations
- Shared across backend and CLI
Connector runner (packages/connector-runner/
)
Section titled βConnector runner (packages/connector-runner/)β- Core logic for connector execution
- Used by backend and CLI
- README
ESLint Config (packages/eslint-config/
)
Section titled βESLint Config (packages/eslint-config/)β- Shared ESLint configuration for the workspace
- Provides consistent code style guidelines across all projects
- README
Prettier Config (packages/prettier-config/
)
Section titled βPrettier Config (packages/prettier-config/)β- Shared Prettier configuration for the OWOX Data Marts workspace
- Provides different configurations for various project types:
- base: Core formatting rules for all projects
- typescript: TypeScript-specific rules and file type handling
- web: React/TailwindCSS-specific rules with class sorting
- Features consistent formatting across the monorepo, TypeScript support, TailwindCSS class sorting for web projects, and Markdown/JSON formatting
- README
TypeScript Config (packages/typescript-config/
)
Section titled βTypeScript Config (packages/typescript-config/)β- Shared TypeScript configuration for the workspace
- Provides consistent TypeScript settings across all projects
- README
Development Workflow
Section titled βDevelopment Workflowβ- Each app and package has its own
package.json
- Dependencies between packages are managed using workspace references
- Shared configurations (linting, TypeScript) are maintained in respective packages
- Build artifacts are generated in respective
dist/
directories
Package Management
Section titled βPackage Managementβ- Root
package.json
defines workspaces for bothapps/*
andpackages/*
- Each package can be developed and tested independently
- Dependencies between packages use
workspace:*
syntax - Shared packages are not published to npm but used internally
Best Practices
Section titled βBest Practicesβ- Keep shared code in appropriate packages
- Maintain clear boundaries between apps and packages
- Use TypeScript for type safety across the monorepo
- Follow consistent coding standards using shared linter config
- Document public APIs and interfaces