# Project Overview: Desa+

Desa+ is a mobile application built with React Native and Expo, designed to facilitate management and communication within villages/communities. It aims to streamline village administration, inter-community communication, and the management of essential information.

## Key Features:
- Village announcements and information
- Community discussion forum
- Village activity calendar
- Village documentation and archives
- Project and task management
- Member and organizational structure management
- Push notifications for important updates
- Verification and authentication features

## Technologies Used:
- **React Native**: Cross-platform mobile development framework.
- **Expo**: Platform for React Native application development.
- **Firebase**: Backend services including Authentication, Realtime Database, and Cloud Messaging.
- **Redux Toolkit**: State management.
- **React Navigation**: Application navigation.
- **TypeScript**: For type safety.

## Building and Running:

### Installation
1.  **Clone the repository:**
    ```bash
    git clone <repository-url>
    cd mobile-darmasaba
    ```
2.  **Install dependencies:**
    ```bash
    npm install
    ```
3.  **Configure environment variables:**
    Create a `.env` file in the root directory and add the following variables:
    ```
    URL_API=<api-endpoint>
    URL_OTP=<otp-service-endpoint>
    URL_STORAGE=<storage-endpoint>
    URL_FIREBASE_DB=<firebase-database-url>
    PASS_ENC=<encryption-password>
    WA_SERVER_TOKEN=<whatsapp-server-token>
    IOS_GOOGLE_SERVICES_FILE=<path-to-ios-google-services>
    ```

### Running the Application
-   **Start development server:**
    ```bash
    npx expo start
    ```
-   **Run on Android emulator/device:**
    ```bash
    npm run android
    ```
-   **Run on iOS simulator/device:**
    ```bash
    npm run ios
    ```

### Build Production
-   **Build Android production package:**
    ```bash
    npm run build:android
    ```

## Development Conventions:

### Project Structure:
-   `app/`: Main page files.
-   `components/`: Reusable UI components, categorized by feature (e.g., `announcement/`, `auth/`, `discussion/`).
-   `assets/`: Images and static assets.
-   `constants/`: Global constants.
-   `lib/`: Libraries and utilities.

### Contribution Guidelines:
1.  Fork the repository.
2.  Create a new feature branch (`git checkout -b feature/FeatureName`).
3.  Commit your changes (`git commit -m 'Add FeatureName feature'`).
4.  Push to the branch (`git push origin feature/FeatureName`).
5.  Create a pull request.

## Platform Support:
-   ✅ Android
-   ✅ iOS
-   ❌ Web (not yet optimized)
