> ## Documentation Index
> Fetch the complete documentation index at: https://docs.academykit.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Application Configuration

> Post deployment Application Configuration

## SMTP Configuration

Setting up SMTP (Simple Mail Transfer Protocol) configuration is necessary for enabling email communication functionalities within the application. Configure SMTP settings by providing sender email addresses, reply email addresses, SMTP server details, authentication credentials, and port numbers to facilitate the sending and receiving of emails.

<Note>
  Ensure SMTP configuration is completed before adding the user, as
  failure to do so will result in email containing password not being sent.
</Note>

## File Storage Configuration

Users must set up file storage configuration to enable seamless storage and access to files within the application. This involves providing details such as server access keys, bucket names, server URLs, and authentication credentials to establish a connection with the designated file storage system.

<AccordionGroup>
  <Accordion title="AWS File Storage Configuration">
    #### AWS Setup Guide:

    1. **Accessing the AWS Management Console**
       * Log in to the AWS Management Console.

    2. **Create a New Bucket**
       * Navigate to the **S3 dashboard**.
       * Click **Create bucket** and assign a unique name.

    3. **Update the Bucket Access Policy**

       * Go to the **Permissions** tab of the newly created bucket.
       * Click on **Bucket Policy** and paste the following policy:

       ```json theme={null}
       {
         "Version": "2012-10-17",
         "Statement": [
           {
             "Sid": "PublicReadForPublicFolder",
             "Effect": "Allow",
             "Principal": {
               "AWS": [
                 "*"
               ]
             },
             "Action": [
               "s3:GetObject"
             ],
             "Resource": [
               "arn:aws:s3:::bucket-name/public/*"
             ]
           }
         ]
       }
       ```

       * Replace `bucket-name` with your actual bucket name.

    4. **Create a Policy**

       * In the AWS Management Console, search for **IAM** in the search bar.
       * Click on **Policies** in the left menu.
       * Click **Create Policy** and select **JSON**. Paste the following policy:

       ```json theme={null}
       {
         "Version": "2012-10-17",
         "Statement": [
           {
             "Sid": "AllowListBucket",
             "Effect": "Allow",
             "Action": [
               "s3:ListBucket"
             ],
             "Resource": [
               "arn:aws:s3:::bucket-name"
             ]
           },
           {
             "Sid": "AllowBucketObjectActions",
             "Effect": "Allow",
             "Action": [
               "s3:DeleteObject",
               "s3:GetObject",
               "s3:PutObject"
             ],
             "Resource": [
               "arn:aws:s3:::bucket-name/*"
             ]
           }
         ]
       }
       ```

       * Replace `bucket-name` with your actual bucket name.
       * Assign a name to the policy and click **Create Policy**.

    5. **Assign the Policy to Group**
       * Navigate to **User Groups** in the **IAM** section.
       * Create a new group or select an existing one.
       * Click **Add User to Group** and assign the user.
       * In the **Attached Policies** section, filter by **Customer Managed** and select the policy you just created.
       * Click **Attach Policy**.

    6. **Create Access Key**
       * Go to **Users** and select the user you assigned to the group.
       * Navigate to the **Security Credentials** tab.
       * Click **Create Access Key**.
       * Select **Programmatic Access** and click **Create New Access Key**.

    7. **Copy and Use the Following Variables**
       * **AWS Access Key**
       * **AWS Cloudfront**
       * **File Storage Bucket**
       * **Region Endpoint**
       * **AWS Secret Key**
       * **Video Bucket**
  </Accordion>

  <Accordion title="MinIO File Storage Configuration">
    #### MinIO Setup Guide:

    1. **Accessing the MinIO Server**
       * Log in to the MinIO server.

    2. **Create a New Bucket**
       * Navigate to the **Buckets** section in the MinIO console.
       * Click **Create bucket** and assign a unique name.

    3. **Update the Bucket Access Policy**

       * Click on the created bucket.
       * Click **Edit** on the access policy and change it to **Custom**.
       * In the **Write Policy** section, paste the following policy:

       ```json theme={null}
       {
         "Version": "2012-10-17",
         "Statement": [
           {
             "Sid": "PublicReadForPublicFolder",
             "Effect": "Allow",
             "Principal": {
               "AWS": [
                 "*"
               ]
             },
             "Action": [
               "s3:GetObject"
             ],
             "Resource": [
               "arn:aws:s3:::your-bucket-name/public/*"
             ]
           }
         ]
       }
       ```

       * Replace `your-bucket-name` with your actual bucket name.
       * Click **set**.

    4. **Create a Policy**

       * In the MinIO console, go to **Policies**.
       * Click **Create policy**.
       * Assign a name to the policy.
       * In the **Write Policy** section, paste the following policy:

       ```json theme={null}
       {
         "Version": "2012-10-17",
         "Statement": [
           {
             "Sid": "AllowListBucket",
             "Effect": "Allow",
             "Action": [
               "s3:ListBucket"
             ],
             "Resource": [
               "arn:aws:s3:::your-bucket-name"
             ]
           },
           {
             "Sid": "AllowBucketObjectActions",
             "Effect": "Allow",
             "Action": [
               "s3:DeleteObject",
               "s3:GetObject",
               "s3:PutObject"
             ],
             "Resource": [
               "arn:aws:s3:::your-bucket-name/*"
             ]
           }
         ]
       }
       ```

       * Replace `your-bucket-name` with your actual bucket name.
       * Click **Save**.

    5. **Create a Group and Assign Permissions**
       * In MinIO, navigate to **Groups**.
       * Click **Create group** and assign a name.
       * Click **Create group**.
       * Click on the created group.
       * In the **Policies** section, select the policy you created.

    6. **Create a User and Assign to the Group**
       * In MinIO, navigate to **Users**.
       * Click **Create user** and assign a username and password.
       * Assign the created group to the user.
       * Click **Save**.

    7. **Create an Access Key**
       * Go to **Users** and select the assigned user.
       * Navigate to **Service Accounts**.
       * Click **Create Access Key**.
       * Assign a name and click **Create**.

    8. **Copy and Use the Following Variables**
       * Server Access Key: This is the unique access key for authenticating your requests to MinIO which is created in step 7.
       * Server Secret Key: This is the secret key that pairs with the access key. It is used to authenticate your API requests securely. It is created in step 7 along with the access key.
       * Bucket Name: This is the name of the storage bucket you created in MinIO, where your objects are stored.
       * Server Endpoint: This is the endpoint address of your MinIO server. It could be something like `minio.yourdomain.com`, which is the URL through which your MinIO instance is accessible.
       * Server Presigned URL:
       * Server URL: The public URL from which MinIO is accessible, typically `https://minio.yourdomain.com` or something similar.
  </Accordion>
</AccordionGroup>

## General Settings:

1. **Company Logo:** Upload your organization's logo to personalize the platform and enhance brand recognition.
2. **Company Information:** Fill in essential details such as the company name, address, and contact number to provide users with accurate information about the organization.
3. **Mail Signature:** Configure a personalized mail signature to ensure consistency and professionalism in email communications.

## Zoom Settings Configuration

Configuring Zoom settings is essential for users intending to utilize features like live classes within the application. Set up Zoom-related details such as API keys, API secrets, SDK keys, webhook secrets, and other necessary parameters to integrate Zoom functionality seamlessly.

### Zoom License Integration

In addition to configuring Zoom settings, users must integrate a valid Zoom license into their accounts to access advanced features and functionalities offered by Zoom. Adding a Zoom license enhances the capabilities of the application, particularly for conducting live classes and virtual meetings.

## Optional Configuration

### OpenAI API Integration

If you want to use AI-related features, you need the API key of OpenAI, which should be added in the AI setup and enabled.
