# Strategy: Scaling BukidBountyApp for Multiple Companies

This document outlines the recommended approach for deploying BukidBountyApp across different companies while maintaining efficiency and code quality.

## Comparison of Approaches

| Feature | Option 1: Split Repositories | Option 2: Single Codebase (Multi-Instance) |
| :--- | :--- | :--- |
| **Maintenance** | **High Overhead**. A bug fix in one repo must be manually copied to others. | **Low Overhead**. One fix in the main repo benefits all instances. |
| **Consistency** | **Low**. Repos will drift apart over time, making cross-support difficult. | **High**. All companies run the same version of the platform. |
| **Customization** | **Easy**. Just edit the code for that one company. | **Config-Driven**. Use environment variables or flags to toggle features. |
| **Data Privacy** | **Physical Isolation**. Separate repos usually mean separate DBs. | **Physical Isolation**. Each instance connects to its own database. |
| **Scalability** | **Poor**. Adding a 4th company requires another repo and more maintenance. | **Excellent**. Just add a new deployment in Dokploy. |

---

## Proposed Plan: Single Codebase, Multi-Instance
I propose a **Single Codebase** approach using **Environment-Based Deployments**. This is the standard "Best Practice" for SaaS-like applications.

### 1. Repository Management
*   Keep **one single repository** for all core logic.
*   Use branches (`production`, `staging`) to manage release cycles.
*   Every company pulls from the same codebase.

### 2. Deployment Architecture (Dokploy)
Instead of one Dokploy project, you create multiple deployments pointing to the same repository:
*   **Instance A**: `company-a.bukid.app`
*   **Instance B**: `company-b.bukid.app`
*   **Instance C**: `company-c.bukid.app`

### 3. Environment Variables (.env) for Customization
Use the `.env` file for each instance to differentiate the identity and behavior:
```bash
# Instance A .env
APP_NAME="Company A Bounty"
APP_URL="https://company-a.bukid.app"
PRIMARY_COLOR="#4CAF50"
DB_DATABASE="bukid_company_a"
ENABLE_MODULE_FARMER=true
```

```bash
# Instance B .env
APP_NAME="Company B Marketplace"
APP_URL="https://company-b.bukid.app"
PRIMARY_COLOR="#2196F3"
DB_DATABASE="bukid_company_b"
ENABLE_MODULE_FARMER=false
```

### 4. Code Adjustments for Customization
To make the UI "dynamic" based on the company:
*   **Identity**: Use `{{ config('app.name') }}` in the frontend (passed via Inertia or API).
*   **Theming**: In `app.js` or `index.css`, use CSS variables that can be injected based on environment.
*   **Features**: Wrap specific modules (like Farmer Management) in Feature Flags:
    ```php
    // In a Controller or Vue component
    if (config('features.farmer_module')) {
        // Show farmer features
    }
    ```

### 5. Database Isolation
Since each instance has its own `DB_DATABASE` env variable, the data is physically isolated. This ensures that:
- Company A cannot see Company B's data.
- Migrations are run per instance.
- You can backup/restore Company A without affecting others.

---

## Migration Steps (Advice)

1.  **Audit hardcoded strings**: Scan the code for "BukidBounty" and replace them with `config('app.name')`.
2.  **Move Colors to variables**: If you have hardcoded colors in CSS, move them to `:root` variables in `index.css` and allow them to be overridden or controlled by the app name.
3.  **Setup Dokploy Multi-Project**: Create a second project in Dokploy, use the same SSH key/Repo URL, and configure a second database.
4.  **Feature Toggles**: Create a `config/features.php` file that reads from `env()` to enable/disable specific modules for specific companies.

## Conclusion
**Option 2 (Single Codebase)** is the significantly better long-term choice. It prevents "Maintenance Hell" and ensures that as you improve the app for one company, you are improving it for everyone.
