Skip to main content

Architecture Overview

Cropr is built with a modern, scalable architecture designed to aggregate multiple DeFi protocols across multiple blockchains into a unified platform.

System Architecture

┌─────────────────────────────────────────────┐
│ Frontend │
│ React + TypeScript + Vite + Redux Toolkit │
│ wagmi + viem + ConnectKit │
├─────────────────────────────────────────────┤
│ WebSocket (Socket.io) │
├─────────────────┬───────────────────────────┤
│ │ │
│ REST API │ Real-time Events │
│ │ │
├─────────────────┴───────────────────────────┤
│ Backend │
│ NestJS + TypeScript + Prisma │
├──────┬──────┬──────┬──────┬──────┬──────────┤
│ DEX │Lend │Stake │Bridge│Vaults│Portfolio │
│Module│Module│Module│Module│Module│Module │
├──────┴──────┴──────┴──────┴──────┴──────────┤
│ Data Layer │
│ PostgreSQL (Prisma) + Redis (Cache) │
├─────────────────────────────────────────────┤
│ External Integrations │
│ Blockchain RPCs │ DeFi Protocols │ APIs │
│ (ethers/viem) │ (SDK/contracts)│ (CoinGecko│
│ │ │ Alchemy) │
└─────────────────────────────────────────────┘

Frontend Architecture

Technology Stack

TechnologyPurpose
React 18UI framework
TypeScriptType safety
ViteBuild tool with HMR
Redux ToolkitGlobal state management
RTK QueryAPI data fetching and caching
wagmiReact hooks for Ethereum
viemEthereum client library
ConnectKitWallet connection UI
Material-UIComponent library
TailwindCSSUtility-first styling
Socket.ioReal-time WebSocket communication
RechartsData visualization
Lightweight ChartsTradingView-style financial charts

State Management

The frontend uses Redux Toolkit with the following slices:

SliceResponsibility
AuthSliceAuthentication tokens and user details
UserSliceUser preferences and token selections
AppSliceGlobal alerts and loading states
WalletDataSlicePortfolio data, wallets, positions
TokenDataSliceToken lists and balances
TransactionSliceTransaction history
PoolSliceLiquidity protocol selection
ExchangeSliceCEX exchange data

Provider Hierarchy

MoonPayProvider
└── GoogleOAuthProvider
└── ThemeProvider (MUI)
└── Web3Provider (wagmi + ConnectKit)
└── SocketProvider (WebSocket)
└── NetworkSwitchProvider
└── App Components

Performance Optimizations

  • Code splitting — Lazy loading of route components
  • Prefetching — Page chunks prefetched after initial load
  • RTK Query caching — 5-minute cache for most API data
  • Debouncing — 500ms debounce for user inputs
  • Vendor chunking — Separate chunks for React, MUI, Web3, Charts

Backend Architecture

Technology Stack

TechnologyPurpose
NestJSServer framework (modular architecture)
TypeScriptType safety
PrismaORM for database operations
PostgreSQLPrimary database (2 schemas)
RedisCaching layer (Keyv)
Socket.ioWebSocket server
ethers.js / viemBlockchain interactions
SwaggerAPI documentation
WinstonLogging with daily rotation

Module Structure

The backend follows NestJS modular architecture:

ModuleResponsibility
AuthGoogle OAuth, JWT authentication
PortfolioPortfolio analytics and metrics
TokenToken management and balances
DEXDEX trading, liquidity, pool data
LendingLending protocol integration
StakeStaking operations
BridgeCross-chain bridging
VaultsVault management
ExchangeCEX integration
ReferralReferral system
DatabasePrisma service and data access
CronScheduled tasks and data sync
Admin DashboardAdmin panel functionality

Database Architecture

Cropr uses two PostgreSQL databases:

Main Database (schema.prisma):

  • User accounts and wallets
  • Transaction records
  • DeFi positions (LP, lending, staking)
  • Referral data
  • Admin accounts

Common Database (common.schema.prisma):

  • Token market data and prices
  • DEX pool data and cache
  • CoinGecko address mappings
  • Exchange metadata

Caching Strategy

  • Redis for hot data (token prices, pool lists, quotes)
  • Database fallback when cache misses occur
  • TTL-based expiration for time-sensitive data
  • Tag-based invalidation on the frontend via RTK Query

Real-Time Communication

WebSocket (Socket.io) powers:

  • Live balance updates after transactions
  • Portfolio value changes
  • Position sync events
  • Data refresh triggers

Security Architecture

LayerMechanism
AuthenticationGoogle OAuth 2.0 + JWT tokens
Session ManagementDevice/IP tracking, session validation
API SecurityHelmet headers, CORS, rate limiting (100 req/min)
Data Validationclass-validator DTOs, Joi schema validation
Frontend SecurityCSP headers, anti-clickjacking, XSS protection
Password Securitybcrypt hashing, 2FA (TOTP) for admin