5.4 KiB
5.4 KiB
Desa+ Mobile Application - Project Overview
Project Summary
Desa+ is a comprehensive village/desa management mobile application built with React Native and Expo. The application serves as a digital platform for village administration, community communication, and information management. It provides various features to facilitate village governance, resident communication, and administrative tasks.
Architecture & Technology Stack
- Framework: React Native with Expo (SDK 53)
- State Management: Redux Toolkit with React-Redux
- Navigation: Expo Router with React Navigation
- Backend Services: Firebase (Authentication, Realtime Database, Cloud Messaging)
- UI Components: Custom-built components with React Native elements
- Language: TypeScript for type safety
- Build System: EAS (Expo Application Service) for builds and deployments
Key Features
- Announcement and village information system
- Community discussion forums
- Village event calendar
- Document management and archiving
- Project and task management
- Member and organizational structure management
- Push notifications for important updates
- Verification and authentication features
Project Structure
├── app/ # Application routes and pages (Expo Router)
│ ├── (application)/ # Main application screens
│ │ ├── announcement/
│ │ ├── banner/
│ │ ├── discussion/
│ │ ├── division/
│ │ ├── group/
│ │ ├── member/
│ │ ├── position/
│ │ ├── project/
│ │ ├── _layout.tsx
│ │ ├── edit-profile.tsx
│ │ ├── feature.tsx
│ │ ├── home.tsx
│ │ ├── notification.tsx
│ │ ├── profile.tsx
│ │ └── search.tsx
│ ├── _layout.tsx # Root layout
│ ├── index.tsx # Splash/login screen
│ ├── verification.tsx # OTP verification screen
├── components/ # Reusable UI components
│ ├── announcement/
│ ├── auth/
│ ├── banner/
│ ├── calendar/
│ ├── discussion/
│ ├── division/
│ ├── document/
│ ├── group/
│ ├── home/
│ ├── member/
│ ├── position/
│ ├── project/
│ ├── task/
│ ├── alertKonfirmasi.ts
│ ├── AppHeader.tsx
│ ├── Text.tsx
│ └── ... (many more components)
├── constants/ # Constants and styles
│ ├── Colors.ts
│ ├── ColorsStatus.ts
│ ├── ConstEnv.ts
│ ├── Headers.ts
│ ├── RoleUser.ts
│ ├── Styles.ts
│ └── ... (other constants)
├── assets/ # Static assets (images, fonts)
├── lib/ # Business logic and API utilities
├── providers/ # Context providers (AuthProvider)
├── android/ # Android native code
├── ios/ # iOS native code
├── scripts/ # Build and utility scripts
├── index.js # Entry point
├── app.config.js # Expo configuration
├── package.json # Dependencies and scripts
└── eas.json # EAS build configuration
Environment Configuration
The application uses environment variables defined in a .env file:
URL_API- API endpointURL_OTP- OTP service endpointURL_STORAGE- Storage endpointURL_FIREBASE_DB- Firebase database URLPASS_ENC- Encryption passwordWA_SERVER_TOKEN- WhatsApp server tokenIOS_GOOGLE_SERVICES_FILE- Path to iOS Google services file
Building and Running
Development
-
Install dependencies:
npm install -
Run the development server:
npx expo start -
For platform-specific builds:
- Android:
npm run android - iOS:
npm run ios - Web:
npm run web
- Android:
Production Builds
- Android:
npm run build:android(uses EAS to build an app bundle)
Testing
- Run tests:
npm run test
Linting
- Check code quality:
npm run lint
Key Dependencies
@react-native-firebase/*- Firebase integration@react-navigation/*- Navigation solutions@reduxjs/toolkit- State managementexpo-router- File-based routingreact-native-gesture-handler- Touch gesture supportreact-native-reanimated- Advanced animationsreact-native-svg- SVG rendering support
Development Conventions
- Uses TypeScript for type safety
- Implements custom styling through the Styles.ts constant file
- Follows Expo's file-based routing convention
- Uses Redux Toolkit for centralized state management
- Implements custom components in the components directory
- Uses absolute imports with @/ alias (e.g., "@/components/...")
- Implements Firebase for authentication and real-time data
Deployment
- Uses EAS for building and submitting to app stores
- Supports both Android (APK and App Bundle) and iOS (TestFlight/App Store)
- Configured for internal testing, preview, and production distributions
Special Features
- Background message handling for push notifications
- Biometric authentication support
- Image picking and media library access
- Document picker functionality
- Date/time pickers with localization
- Custom toast notifications
- Carousel components for featured content
- Data visualization with charts