# Product Panel

URL: https://zerodev.ca/docs/medusa/paid-modules/productpanel

> Panels that let members download your products, from a local folder or a GitHub release, gated by role.



Product Panel posts a panel with a button or menu entry for each of your products. Members pick one and get the file, either attached in Discord or as a download link.

## Panels

Under **Panels**, each panel has a **Panel ID**, a **Component Style** (buttons or select menu), a **Select Menu Placeholder** and an embed. The embed can use `%server%`, and each product line can use `%product%`, `%product_emoji%` and `%product_id%`.

Post a panel from the dashboard **Post** page or with `/post`, picking the panel as the item.

## Products

Under **Products**, add each product to a panel:

| Field         | What it does                                        |
| ------------- | --------------------------------------------------- |
| Panel         | The panel it appears on.                            |
| Product ID    | A short unique ID.                                  |
| Product Name  | The button or menu label.                           |
| Emoji         | Shown next to the name.                             |
| Button Colour | Grey, Blurple, Green or Red.                        |
| Required Role | Members need this role to download.                 |
| Fetch Type    | Where the file comes from: **Local** or **GitHub**. |
| Download Type | How it is delivered: **Local** or **Web**.          |

### Local Files

Medusa zips the product's folder when someone downloads it. By default the folder is `data/productpanel/products/<panel>/<product>/`, which Medusa creates for you. Set **Local Folder Path** to use a different folder, either absolute or relative to Medusa's folder.

### GitHub Releases

Set **GitHub Repository** to `owner/repo`. Medusa uses the newest stable release unless you set:

* **GitHub Tag**: one exact release, such as `v2.1.0`.
* **GitHub Tag Prefix**: the newest release whose tag starts with it, such as `store` for `store-1.0.0`. Useful when one repository releases several products.

**GitHub Asset** picks the release file by name, or by part of its name. Leave it empty to send the source code zip. For private repositories, set a **GitHub Token** with read access.

### Delivery

| Download Type | What the member gets                                                                                    |
| ------------- | ------------------------------------------------------------------------------------------------------- |
| Local         | The file attached to a private message in Discord.                                                      |
| Web           | A one-time download link served by Medusa's API. It expires after &#x2A;*Web Download Expiry (Hours)**. |

Use **Web** for files too large for Discord. The API must be reachable from the internet, see [Configuration](/docs/medusa/configuration#server).

## Settings

| Setting                     | Default           | What it does                    |
| --------------------------- | ----------------- | ------------------------------- |
| Panels                      | One default panel | Your panels.                    |
| Products                    | None              | Your products.                  |
| GitHub Token                | None              | Token for private repositories. |
| Web Download Expiry (Hours) | 24                | How long a download link lasts. |

The **Product Panel Events** log records downloads and posted panels.
