97 lines
3.2 KiB
Markdown
97 lines
3.2 KiB
Markdown
# Twenty Project Architecture
|
|
|
|
## Overview
|
|
Twenty is an open-source CRM built with modern technologies, using TypeScript for both frontend and backend development. This document outlines the core architectural decisions and structure of the project.
|
|
|
|
## Monorepo Structure
|
|
The project is organized as a monorepo using nx, with the following main packages:
|
|
|
|
### Main Packages
|
|
- `packages/twenty-front`: Main Frontend application
|
|
- Technology: React
|
|
- Purpose: Provides the main user interface for the CRM
|
|
- Key responsibilities: User interactions, state management, data display
|
|
|
|
- `packages/twenty-server`: Main Backend application
|
|
- Technology: NestJS
|
|
- Purpose: Handles business logic, data persistence, and API
|
|
- Key responsibilities: Data processing, authentication, API endpoints
|
|
|
|
- `packages/twenty-website`: Marketing Website and Documentation
|
|
- Technology: NextJS
|
|
- Purpose: Public-facing website and documentation
|
|
- Key responsibilities: Marketing content, documentation, SEO
|
|
|
|
- `packages/twenty-ui`: UI Component Library
|
|
- Technology: React
|
|
- Purpose: Shared UI components and design system
|
|
- Key responsibilities: Reusable components, design consistency
|
|
|
|
- `packages/twenty-shared`: Shared Utilities
|
|
- Purpose: Cross-package shared code between frontend and backend
|
|
- Contents: Utils, constants, types, interfaces
|
|
|
|
## Core Technology Stack
|
|
|
|
### Package Management
|
|
- Package Manager: yarn
|
|
- Monorepo Tool: nx
|
|
- Benefits: Consistent dependency management, shared configurations
|
|
|
|
### Database Layer
|
|
- Primary Database: PostgreSQL
|
|
- Schema Structure:
|
|
- Core schema: Main application data
|
|
- Metadata schema: Configuration and customization data
|
|
- Workspace schemas: One schema per tenant, containing tenant-specific data
|
|
- ORM Layer:
|
|
- TypeORM: For core and metadata schemas
|
|
- Purpose: Type-safe database operations for system data
|
|
- Benefits: Strong typing, migration support
|
|
- TwentyORM: For workspace schemas
|
|
- Purpose: Manages tenant-specific entities and customizations
|
|
- Benefits: Dynamic entity management, per-tenant customization
|
|
- Example: Entities like CompanyWorkspaceEntity are managed per workspace
|
|
|
|
### State Management
|
|
- Frontend State: Recoil
|
|
- Purpose: Global state management
|
|
- Use cases: User preferences, UI state, cached data
|
|
|
|
### Data Layer
|
|
- API Technology: GraphQL
|
|
- Client: Apollo Client
|
|
- Purpose: Data fetching and caching
|
|
- Benefits: Type safety, efficient data loading
|
|
|
|
### Infrastructure
|
|
- Cache: Redis
|
|
- Purpose: High-performance caching layer
|
|
- Use cases: Session data, frequent queries
|
|
|
|
- Authentication: JWT
|
|
- Purpose: Secure user authentication
|
|
- Implementation: Token-based auth flow
|
|
|
|
- Queue System: BullMQ
|
|
- Purpose: Background job processing
|
|
- Use cases: Emails, exports, imports
|
|
|
|
- Storage: S3/Local Filesystem
|
|
- Purpose: File storage and management
|
|
- Flexibility: Configurable for cloud or local storage
|
|
|
|
### Testing Infrastructure
|
|
- Backend Testing:
|
|
- Framework: Jest
|
|
- API Testing: Supertest
|
|
- Coverage: Unit tests, integration tests
|
|
|
|
- Frontend Testing:
|
|
- Framework: Jest
|
|
- Component Testing: Storybook
|
|
- API Mocking: MSW (Mock Service Worker)
|
|
|
|
- End-to-End Testing:
|
|
- Framework: Playwright
|
|
- Coverage: Critical user journeys |