--- description: globs: alwaysApply: true --- # SME Centralized Reporting System - Project Architecture & Structure ## PROJECT OVERVIEW **Application**: Centralized Reporting Dashboard for SMEs **Platform**: React Native (Cross-platform iOS/Android) **Architecture**: Modular Component-Based Architecture **State Management**: Redux + Redux Persist + AsyncStorage --- ## 1. PROJECT STRUCTURE ### Root Directory Structure ``` CentralizedReportingSystem/ ├── src/ │ ├── modules/ # Core business modules │ ├── shared/ # Shared components and utilities │ ├── navigation/ # Navigation configuration │ ├── store/ # Redux store configuration │ ├── services/ # API services and integrations │ ├── assets/ # Static assets │ └── types/ # TypeScript type definitions ├── android/ # Android specific files ├── ios/ # iOS specific files └── package.json ``` ### Core Module Structure (Each module follows this pattern) ``` src/modules/[moduleName]/ ├── screens/ # Screen components (module routes) ├── components/ # Reusable UI for this module (no screens) │ ├── widgets/ # Dashboard/widgets │ └── forms/ # Form components ├── navigation/ # Module-level stack navigator(s) │ └── [ModuleName]Navigator.tsx ├── services/ # Module-specific API services ├── store/ # Redux slices and actions │ ├── slice.ts # Redux toolkit slice │ ├── selectors.ts # State selectors │ └── types.ts # Module-specific types └── index.ts # Module exports (optional) ``` ### Shared Directory Structure ``` src/shared/ ├── components/ # Reusable UI components │ ├── charts/ # Chart components │ ├── forms/ # Form controls │ ├── layout/ # Layout components │ └── ui/ # Basic UI components ├── hooks/ # Custom React hooks ├── utils/ # Utility functions ├── constants/ # Global constants ├── styles/ # Global styles and themes └── types/ # Shared type definitions ``` --- ## 2. CORE MODULES DEFINITION ### Module 1: Authentication (`auth`) ``` src/modules/auth/ ├── screens/ │ ├── LoginScreen.tsx │ ├── RegisterScreen.tsx │ └── ForgotPasswordScreen.tsx ├── components/ │ └── widgets/ ├── navigation/ │ └── AuthNavigator.tsx # Stack with Login, Register, ForgotPassword ├── services/ │ ├── authAPI.ts │ └── integrations/ └── store/ ├── authSlice.ts ├── selectors.ts └── types.ts ``` ### Module 2: HR (`hr`) ``` src/modules/hr/ ├── screens/ │ ├── HRDashboardScreen.tsx │ ├── EmployeeMetricsScreen.tsx │ ├── AttendanceScreen.tsx │ └── RecruitmentScreen.tsx ├── components/ │ ├── widgets/ │ │ ├── EmployeeStatsWidget.tsx │ │ ├── AttendanceChart.tsx │ │ └── PerformanceWidget.tsx │ └── forms/ │ └── EmployeeForm.tsx ├── navigation/ │ └── HRNavigator.tsx # Stack with HRDashboard, EmployeeMetrics, Attendance, Recruitment ├── services/ │ ├── hrAPI.ts │ └── integrations/ │ ├── zohoPeopleService.ts │ ├── bambooHRService.ts │ └── kekaService.ts └── store/ ├── hrSlice.ts ├── selectors.ts └── types.ts ``` ### Module 3: Zoho Projects (`zohoProjects`) ``` src/modules/zohoProjects/ ├── screens/ │ ├── ZohoProjectsDashboardScreen.tsx │ ├── ProjectPerformanceScreen.tsx │ ├── ResourceUtilizationScreen.tsx │ └── ClientAnalyticsScreen.tsx ├── components/ │ ├── widgets/ │ │ ├── ProjectTimelineWidget.tsx │ │ ├── ResourceAllocationChart.tsx │ │ └── QualityMetricsWidget.tsx │ └── forms/ │ └── ProjectForm.tsx ├── navigation/ │ └── ZohoProjectsNavigator.tsx # Stack with ZohoProjects screens ├── services/ │ ├── zohoProjectsAPI.ts │ └── integrations/ │ └── zohoProjectsService.ts └── store/ ├── zohoProjectsSlice.ts ├── selectors.ts └── types.ts ``` ### Module 4: Profile (`profile`) ``` src/modules/profile/ ├── screens/ │ ├── ProfileScreen.tsx │ └── EditProfileScreen.tsx ├── components/ │ └── widgets/ ├── navigation/ │ └── ProfileNavigator.tsx # Stack with Profile and EditProfile ├── services/ │ ├── profileAPI.ts └── store/ ├── profileSlice.ts ├── selectors.ts └── types.ts ``` --- ## 3. NAVIGATION STRUCTURE ### Navigation Configuration ```typescript // src/navigation/AppNavigator.tsx import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; import { createStackNavigator } from '@react-navigation/stack'; import Icon from 'react-native-vector-icons/MaterialIcons'; const Tab = createBottomTabNavigator(); const Stack = createStackNavigator(); const AppNavigator = () => ( ({ tabBarIcon: ({ focused, color, size }) => { const iconName = getTabIconName(route.name); return ; }, })} > ); ``` ### Stack Navigators for Each Module ```typescript // HR Stack const HRStack = () => ( ); // Zoho Projects Stack const ZohoProjectsStack = () => ( ); // Profile Stack const ProfileStack = () => ( ); ``` --- ## 4. INTEGRATION FRAMEWORK ### Primary Integration Services #### HR Systems Integration ``` src/modules/hr/services/integrations/ ├── zohoPeopleService.ts # Zoho People integration ├── bambooHRService.ts # BambooHR integration ├── workdayService.ts # Workday integration └── kekaService.ts # Keka integration ``` #### Project Management Integration ``` src/modules/zohoProjects/services/integrations/ └── zohoProjectsService.ts # Zoho Projects integration ``` #### Communication & Collaboration ``` src/shared/services/integrations/ ├── slackService.ts # Slack integration ├── teamsService.ts # Microsoft Teams integration └── zoomService.ts # Zoom integration ``` --- ## 5. DESIGN SYSTEM & STYLING ### Theme Configuration ```typescript // src/shared/styles/theme.ts export const COLORS = { // Primary colors primary: '#2C5F4A', primaryLight: '#4A8B6A', primaryDark: '#1A3D2E', // Secondary colors secondary: '#FF6B35', secondaryLight: '#FF8F65', secondaryDark: '#E55A2B', // UI colors background: '#F8F9FA', surface: '#FFFFFF', text: '#2D3748', textLight: '#718096', border: '#E2E8F0', error: '#E53E3E', success: '#38A169', warning: '#D69E2E', // Dashboard specific chartPrimary: '#2C5F4A', chartSecondary: '#FF6B35', chartTertiary: '#4299E1', chartQuaternary: '#48BB78', }; export const FONTS = { regular: 'Roboto-Regular', medium: 'Roboto-Medium', bold: 'Roboto-Bold', light: 'Roboto-Light', black: 'Roboto-Black', }; export const FONT_SIZES = { xs: 12, sm: 14, md: 16, lg: 18, xl: 20, xxl: 24, xxxl: 32, }; export const SPACING = { xs: 4, sm: 8, md: 16, lg: 24, xl: 32, xxl: 48, }; export const BORDER_RADIUS = { sm: 4, md: 8, lg: 12, xl: 16, }; export const SHADOWS = { light: { shadowColor: '#000', shadowOffset: { width: 0, height: 1 }, shadowOpacity: 0.1, shadowRadius: 2, elevation: 2, }, medium: { shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.15, shadowRadius: 4, elevation: 4, }, heavy: { shadowColor: '#000', shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.2, shadowRadius: 8, elevation: 8, }, }; ``` ### Theme System and Context ``` src/shared/styles/ ├── theme.ts # Semantic tokens (colors, spacing, fonts, shadows) ├── ThemeProvider.tsx # App-level provider with light/dark palettes ├── useTheme.ts # Hook to consume the theme └── types.ts # Theme typing (Theme, Palette, SemanticTokens) ``` Guidelines - Use semantic tokens from `theme.ts` (e.g., `COLORS.surface`, `COLORS.text`) instead of hard-coded hex values. - Support light and dark palettes; default to Light as per the provided UI (white surfaces, cool blue header, soft gray background, subtle shadows). - Wrap the app at the root with `ThemeProvider`; access tokens via `useTheme()` in components. - Gradients: primary header/hero areas may use a cool-blue gradient (from `#3AA0FF` to `#2D6BFF`). Keep content surfaces white. - Spacing and radii: use `SPACING` and `BORDER_RADIUS` tokens; avoid magic numbers. - Elevation: use `SHADOWS.light|medium|heavy` for cards and bottom toolbars. Palettes (inspired by the attached design) - Light palette - primary: `#2D6BFF` (buttons/icons), primaryLight: `#3AA0FF` - background: `#F4F6F9`, surface: `#FFFFFF` - text: `#1F2937`, textLight: `#6B7280` - accent (success): `#22C55E`, accent (warning): `#F59E0B`, accent (error): `#EF4444` - chartPrimary: `#2D6BFF`, chartSecondary: `#3AA0FF`, chartTertiary: `#10B981`, chartQuaternary: `#F59E0B` - Dark palette (optional) - background: `#0F172A`, surface: `#111827`, text: `#E5E7EB`, textLight: `#9CA3AF`, primary: `#60A5FA` Provider responsibilities - Expose `{ colors, spacing, fonts, shadows, isDark, setScheme }`. - Persist the scheme preference with AsyncStorage. - Mirror system scheme when `followSystem=true`. Usage rules - Import tokens from `useTheme()` or direct constants from `theme.ts` for static styles. - Do not inline hex codes in components; never duplicate spacing or font sizes. - For icons and charts, pull colors from `theme.colors` so they adapt to scheme changes. Example usage ```typescript // Inside a component import { useTheme } from '@/shared/styles/useTheme'; const MyCard = () => { const { colors, spacing, shadows } = useTheme(); return ( ); }; ``` --- ## 6. ASSETS ORGANIZATION ### Assets Directory Structure ``` src/assets/ ├── fonts/ # Roboto font files │ ├── Roboto-Regular.ttf │ ├── Roboto-Medium.ttf │ ├── Roboto-Bold.ttf │ ├── Roboto-Light.ttf │ └── Roboto-Black.ttf ├── images/ # Image assets │ ├── logos/ │ ├── icons/ │ ├── illustrations/ │ └── backgrounds/ ├── animations/ # Lottie animation files └── data/ # Static data files ├── currencies.json ├── countries.json └── industries.json ``` --- ## 7. SHARED COMPONENTS LIBRARY ### UI Components Structure ``` src/shared/components/ ├── ui/ # Basic UI components │ ├── Button/ │ ├── Input/ │ ├── Card/ │ ├── Modal/ │ ├── LoadingSpinner/ │ └── EmptyState/ ├── charts/ # Chart components │ ├── LineChart/ │ ├── BarChart/ │ ├── PieChart/ │ ├── DonutChart/ │ └── ProgressChart/ ├── forms/ # Form components │ ├── FormInput/ │ ├── FormSelect/ │ ├── FormDatePicker/ │ ├── FormCheckbox/ │ └── FormRadio/ ├── layout/ # Layout components │ ├── Container/ │ ├── Header/ │ ├── Footer/ │ ├── Sidebar/ │ └── Grid/ └── widgets/ # Reusable widget components ├── KPIWidget/ ├── ChartWidget/ ├── ListWidget/ ├── StatWidget/ └── FilterWidget/ ``` --- ## 8. PERFORMANCE OPTIMIZATION GUIDELINES ### Code Organization for Performance - Implement lazy loading for non-critical screens - Use React.memo for expensive dashboard widgets - Implement virtualized lists for large datasets - Cache frequently accessed data using Redux Persist - Use image optimization and caching strategies ### Data Management Optimization - Implement pagination for large datasets (>100 records) - Use memoization for expensive calculations - Cache API responses with appropriate TTL - Implement background data refresh strategies - Use efficient data structures for complex operations --- ## 9. SECURITY & DATA PROTECTION ### Data Security Implementation ``` src/shared/security/ ├── encryption/ # Data encryption utilities ├── storage/ # Secure storage implementation ├── authentication/ # Auth security measures └── validation/ # Input validation and sanitization ``` ### Security Measures - Encrypt sensitive data before storing in AsyncStorage - Implement secure token storage - Add certificate pinning for API communications - Implement proper input validation and sanitization --- ## 10. ACCESSIBILITY & INTERNATIONALIZATION ### Accessibility Structure ``` src/shared/accessibility/ ├── labels.ts # Accessibility labels ├── hints.ts # Accessibility hints ├── roles.ts # Accessibility roles └── utils.ts # Accessibility utilities ``` This architecture file provides the complete project structure and organization guidelines for building a maintainable, scalable SME reporting system.