Architecture
Repository
Understanding Currencia's monorepo architecture
Repository Structure
Monorepo Architecture
Currencia is organized as a monorepo using Turborepo, which provides several advantages for managing a complex application ecosystem:
currencia/
├── apps/
│ ├── app/ # Main Nuxt application
│ └── formatter/ # Standalone Nitro formatter
├── packages/ # Shared internal packages
│ ├── cryptos/ # Crypto libraries
│ ├── mongo/ # MongoDB utilities
│ └── utils/ # Shared utilities
└── scripts/ # Build and maintenance scripts
Turborepo Benefits
Pipeline Optimization
- Remote Caching: Faster builds by reusing previously built assets
- Parallel Execution: Runs tasks across packages simultaneously
- Incremental Builds: Only rebuilds what changed
- Task Dependencies: Automatically manages build order
Workspace Management
- Centralized Dependencies: Shared node_modules for consistent versions
- Selective Execution: Run commands on specific packages
- Cross-Package References: Easy imports between packages
- Unified Tooling: Consistent development experience
Development Experience
- Task Pipelines: Defined in
turbo.json
turbo.json
{
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**"]
},
"dev": {
"cache": false,
"persistent": true
}
}
}
Package Organization
Apps: Standalone applications:
- Packages: Shared internal libraries
- Scripts: Maintenance and build utilities
This architecture enables:
- Code sharing between applications
- Consistent development practices
- Efficient build processes • Easy maintenance and updates
