# Introduction

A quick glance at Feedbacky.

![](/files/taGcM5y58oAenkpyzcEC)

[![Docker](https://img.shields.io/static/v1?style=for-the-badge\&logoColor=white\&logo=Docker\&label=\&message=DOCKER%20HUB\&color=0db7ed)](https://hub.docker.com/u/plajer) [![Release](https://img.shields.io/github/v/release/feedbacky-project/app?include_prereleases\&style=for-the-badge\&labelColor=ecf0f1\&color=007bff)](https://github.com/feedbacky-project/app/releases) [![License](https://img.shields.io/github/license/feedbacky-project/app.svg?style=for-the-badge\&labelColor=ecf0f1\&color=007bff)](https://github.com/feedbacky-project/app/blob/master/LICENSE.txt) [![Contributors](https://img.shields.io/github/contributors/feedbacky-project/app.svg?style=for-the-badge\&labelColor=ecf0f1\&color=007bff)](https://github.com/feedbacky-project/app/graphs/contributors) [![Discord](https://img.shields.io/discord/614568773940150288?style=for-the-badge\&logoColor=white\&logo=Discord\&labelColor=5865F2\&color=5865F2)](https://discord.com/invite/6qCnKh5)

## Understand your users' needs.

Collect feedback from people easily while also improving your business with Feedbacky, a free and open-source software.

![](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FN9oapin8j8o5U1vazEdZ%2Fuploads%2FZau0nSsWF4lRfcYqG3PP%2Fpromo3.png?alt=media)

![](/files/wqXrg470VljKQmWlMte5) ![](/files/zQyhpdbq6cdJuU3lru5k)

**​Consider leaving a ⭐️ in our** [**repository**](https://github.com/feedbacky-project/app) **if you enjoy Feedbacky!**

### Getting Started

Interested in having your own Feedbacky instance? Awesome! There are two ways that you can proceed.

**1. Cloud-hosted**

The simplest way to get started with using Feedbacky, all you have to do is create a board and we will handle the hosting.

{% embed url="<https://app.feedbacky.net/create?source=Main_Page>" %}

Currently, cloud-hosted instances are entirely free with some quota limitations, you can read more about that [here](https://feedbacky.net/#pricing).

**2. Self-hosted**

Host Feedbacky on your own hardware or with a Virtual Private Server (VPS). We have a complete guide covering the necessaries that is also friendly for Linux newbies!

{% content-ref url="/pages/FSoTOQFrO5OIf4DQHQNB" %}
[Installation](/getting-started/installation)
{% endcontent-ref %}

### Case Studies

Feedbacky was created to help others, see how we helped others with their projects/products.

{% content-ref url="/pages/S4S06CWBn4dHUwqDisqf" %}
[Case Studies](/project-overview/case-studies)
{% endcontent-ref %}

### Community

Come chat with the Feedbacky community in our Discord server, follow official announcements and polls if you need support our friendly staff can assist you.

![](https://invidget.switchblade.xyz/6qCnKh5)

### **Contributing**

We encourage everyone to contribute, thus making Feedbacky better with the help of our community.

Follow our [contributing guidelines](https://github.com/feedbacky-project/app/blob/master/CONTRIBUTING.md) if you are interested!

### Funding

Support the development of Feedbacky by making a [donation](#donating) or by becoming a Feedbacky sponsor, [check it out](/project-overview/donating#sponsoring)!

| Sponsors                                                            | About                                                                                                                                          |
| ------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| [**Senior Hosting**](https://billing.senior-host.com/link.php?id=1) | <p>Affordable, high-performance VPS with Minecraft/Discord bot hosting.<br><strong>Get 10% off using code <code>FEEDBACKY</code>!</strong></p> |
| [**Plugily Projects**](https://plugily.xyz/?source=Feedbacky)       | Creating a better future by developing something beneficial for everyone.                                                                      |

### Legal

**© 2022 Plajer**

* Some SVG illustrations are attributed to [unDraw](https://undraw.co).
* Design system used in project is attributed to [Bootstrap](https://getbootstrap.com).

Feedbacky is distributed under the MIT License.

> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sub-license, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
>
> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
>
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANT ABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


# Features

What makes Feedbacky awesome.

{% hint style="info" %} <mark style="color:blue;">**Legend**</mark>

<mark style="color:green;">**\***</mark> : Feature can be enabled or disabled.

<mark style="color:orange;">**\*\***</mark> : Feature is only available to self-hosted instances.

<mark style="color:red;">**\*\*\***</mark> : Feature is not available at the moment.
{% endhint %}

## **General**

* [x] Simple and intuitive website navigation.
* [x] Fully open source, modify or inspect Feedbacky's code if needed.
* [x] Auto-magically switch to dark or light mode depending on your browser preferences.
* [x] Use changelogs to notify your customers of important addition, removal and changes to your product. <mark style="color:green;">**\***</mark>
* [x] Sort and track your ideas with your board's roadmap. <mark style="color:green;">**\***</mark>
* [x] Use a default custom profile picture for all of your customers. <mark style="color:orange;">**\*\***</mark>

## **Accessibility**

* [x] Color contrast in conformity with the [Web Content Accessibility Guidelines (WCAG) 2](https://www.w3.org/TR/WCAG21/#contrast-enhanced).
* [x] Use Markdown formatting with a text editor instead of having to manually type it out.

## **Productivity**

* [x] Use internal comments to discuss on an idea with your team.
* [x] Assign ideas that should be focused on to your team.
* [x] Pin ideas that need more engagement at the top of your board.
* [x] Use tags to sort ideas and track them in the roadmap.
* [x] Integrate Feedbacky with other services via Integrations.
* [x] Enhanced idea searching and filtering options.

## **Engagement**

* [x] Let your customers be notified of new updates on their ideas or ideas they are subscribed to.
* [x] Let your customer express themselves on your ideas and changelogs with reactions.
* [x] Use Webhooks to notify your customers of new ideas on other services.
* [x] Share ideas and changelogs on other social media.

## **Moderation**

* [x] Close/open ideas.
* [x] Disable/enable idea comments.
* [x] Edit the title of an idea.
* [x] Reset the total voted count of an idea.
* [x] Suspend board users.
* [x] Audit the moderation activity of your board. <mark style="color:red;">**\*\*\***</mark>

## Privacy

* [x] Client-side email addresses are censored.
* [x] Let your customers anonymously vote on ideas when they are not logged in. <mark style="color:green;">**\***</mark>

## **Security**

* [x] No server-side password storing hassle, instead use OAuth with the provider of your choice or even your own custom OAuth implementation!


# FAQ

Questions and Answers.

## Why did you make Feedbacky?

Announced on December 9th, 2019 and originally named User Voice BETA was the consequence of multiple failed attempts to find a good feedback collecting service for my own Minecraft projects.

It was originally created in pure PHP and due to earlier versions being buggy and a mess, I chose to entirely redo it from scratch with the goals of making it useful for everybody in mind.

I renamed the project to Your Voice, since the former being an already existing company and this time I chose Java as a candidate because it is my best known language. I went with Spring MVC for the backend framework and JSP + Tomcat for the frontend framework.

Ultimately, I re-branded to Feedbacky, which is a much more catchy name and moved to react for the frontend. Feedbacky will always be there to help you collect feedback and issues from your customers.

{% hint style="info" %}
You can look at an archived version of User Voice before it was in early beta stage as a project named [Plajer's Lair User Voice](https://uservoice.plajer.xyz).
{% endhint %}

## Can I host Feedbacky on *X* panel?

The answer for this question is **no**, it might work but Feedbacky was not designed in mind for that.

Web hosting managers such as cPanel or similar won't work since they do not completely support an integrated Docker manager;

{% embed url="<https://support.cpanel.net/hc/en-us/articles/360062418794-Can-I-run-docker-on-a-cPanel-server->" %}

And while some plugins might add a full Docker support they won't be official and again, might not guarantee support.

Feedbacky is best intended to be ran on it's own on a VPS or dedicated hardware, it can and will co-exists with other Docker containers.

While using the Linux terminal might be too uncomfortable for some, our guide covers the necessary commands and can be generally followed without any additional efforts.

### What about Pterodactyl?

Even though Pterodactyl utilize Docker with [Wings](https://pterodactyl.io/wings/1.0/installing.html), it does not support two things;

* Docker Compose
* Multi-image eggs (Both [feedbacky-client](https://hub.docker.com/r/plajer/feedbacky-client) & [feedbacky-server](https://hub.docker.com/r/plajer/feedbacky-server) must be ran together)

Without those, Feedbacky can't be self-hosted using Pterodactyl panel.

## Cloud hosted vs Self-hosted

See the difference on our [website](https://feedbacky.net/#pricing).

## Why can't I further customize my instance?

With versions before [`1.0.0-rc.0`](https://github.com/feedbacky-project/docs/blob/master/project-overview/broken-reference/README.md), you had to download the whole Feedbacky repository and manually compile it on your Virtual Private Server (VPS) or dedicated hardware, thus making it really easy to customize elements of Feedbacky out of the box.

All of this changed and we are instead relying on Docker images which are automatically compiled in the project repository thanks to the contribution of [xMikux](https://github.com/feedbacky-project/app/pull/59).

Unless you make a fork, implement your own edits and compile the necessary Docker images yourself, you won't be able to further customize your Feedbacky instance.

## How do I renew my domain?

Certbot will not automatically renew your domain certificate, you can renew it yourself using this command.

```
certbot renew
```

{% hint style="warning" %} <mark style="color:orange;">**Using Nginx?**</mark>

When renewing your certificate make sure to stop the services before proceeding or else you will get an error.

1\. Stop the Nginx process.

```bash
sudo systemctl stop nginx
```

2\. Renew your certificate.

```bash
sudo certbot renew
```

3\. Start Nginx.

```bash
sudo systemctl start nginx
```

{% endhint %}


# Case Studies

See how Feedbacky helps others with their products.

## Cloud-hosted

Case studies from people who have their board hosted on our cloud instance.

### Discord Tickets

eartharoid uses Feedbacky to **collect bot users' suggestions**;

> Feedbacky allows users to easily suggest new features to give me ideas for ways to improve the Discord Tickets bot and make it meet the users' needs.

* [Official board](https://app.feedbacky.net/b/dsctickets)

### Arceon

Arcaniax Brennian uses Feedbacky to **improve their Arceon Minecraft plugin**;

> I use Feedbacky for feedback on existing tools and also new tool ideas for my Patreon exclusive plugin called Arceon which features a lot of building tools.

* [Official board](https://app.feedbacky.net/b/arceon)

### Head Database

Arcaniax Brennian uses Feedbacky to **collect Head Database feedback**;

> I gather feedback and new feature concepts that people would want in the Head Database plugin so I can improve it and also easily see what my customers want in the plugin.

* [Official board](https://app.feedbacky.net/b/HeadDatabase)

### **ajParkour**

ajgeiss0702 uses Feedbacky to **make his plugin better**;

> Feedbacky is a very useful tool to help keep track of feature suggestions, when they would usually be forgotten about. It helps remove feature requests from bug reports, and gives users a place to feel heard.

* [Official board](https://app.feedbacky.net/b/ajparkour?source=Featured_Board)

### Senior Teams

Agarwalpiryank uses Feedbacky to **get staff feedback**;

> Getting feedback for the new features from 200+ freelancers within our team can be tricky. Feedbacky helps us keep everything organised in a clean manner!

* [Official board](https://app.feedbacky.net/b/Senior-Team-Freelancer)

### MurderMystery

Tigerpanzer\_02 uses Feedbacky to **meet is customers' needs**;

> With Feedbacky we can collect and sort the ideas of the customers in a structured way so that we always have an overview of which idea is most desired by all. The MurderMystery board lets us collect user feedback to improve our features and the quality over time.

* [Official board](https://app.feedbacky.net/b/MurderMystery)

## Self-hosted

Case studies from people who self-host their own Feedbacky instance.

### Exvoid Network

Matou0014 uses Feedbacky to **power their community**;

> Planning a gaming community and managing game servers as well is not always an easy feat. With Feedbacky, my team can keep track of each suggestions and bug reports, enabling us to always improve our work.

* [Official instance](https://feedback.exvoid.net/b/project)


# Credits

The amazing people who contributed to Feedbacky.

## Contributors

Thank you to everyone who contributed to Feedbacky!

* [Contributors to feedbacky-project/app](https://github.com/feedbacky-project/app/graphs/contributors).
* [Contributors to feedbacky-project/docs](https://github.com/feedbacky-project/docs/graphs/contributors).

## Service Staff

The staff behind Feedbacky, ranging from developers to contributors.

| **Plajer**    | [↪ GitHub](https://github.com/Plajer)    |
| ------------- | ---------------------------------------- |
| **Matou0014** | [↪ GitHub](https://github.com/Matou0014) |


# Donating

Support the development of Feedbacky.

Your financial support would be greatly appreciated for covering hosting and development costs.

{% embed url="<https://www.paypal.com/paypalme/plajer>" %}

{% embed url="<https://www.patreon.com/plugily>" %}

## Donors

Thank you to these people for donating;

* Matou0014

## Sponsoring

Please use the contact options available at [plajer.xyz](https://plajer.xyz).


# Installation

Self-hosting your own Feedbacky instance.

{% hint style="success" %} <mark style="color:green;">**Looking for an affordable hosting provider?**</mark>

We've partnered with Senior Hosting to offer you affordable, high-performance VPS with Minecraft/Discord bot hosting.\
**Get 10% off using code `FEEDBACKY`!**

[Check out the offer!](https://billing.senior-host.com/link.php?id=1)
{% endhint %}

Thank you for your interest in using Feedbacky, follow this guide step by step in order to self-host your own instance, we have made this guide beginner friendly specifically for Linux newbies.

Please consider [donating](/project-overview/donating) to Feedbacky!

## Prerequisites

* Feedbacky will consume approximately 300MB of memory when running.
* At least 200MB of free space is needed for Feedbacky itself.
* Feedbacky is passwordless (we use OAuth), you will need an account with at least one of these services;
  * [Discord](https://discord.com)
  * [GitHub](https://github.com)
  * [Google](https://www.google.com)
  * [GitLab](https://about.gitlab.com)
* In order for your users to be notified when their subscribed content is updated, you will need an SMTP server or use one of the following mail providers;
  * [Mailgun](https://www.mailgun.com)
  * [SendGrid](https://sendgrid.com)

### Operating System

{% hint style="danger" %} <mark style="color:red;">**Heads up!**</mark>

If you plan on using a panel with Feedbacky, please read this [FAQ section](/project-overview/faq#can-i-host-feedbacky-on-x-panel).
{% endhint %}

| Operating System | Version                                       | Status | Notes                                 |
| ---------------- | --------------------------------------------- | :----: | ------------------------------------- |
| **Ubuntu**       | "Focal" 20.04                                 |    ✅   | Installation guide based on Focal.    |
|                  | "Bionic" 18.04                                |    ✅   |                                       |
| **Debian**       | "Bullseye" 11                                 |    ✅   |                                       |
| **Windows**      | WSL2                                          |    ✅   | *Should work, not tested!*            |
|                  | <p>​Server 2022</p><p><em>Windows 10</em></p> |   🔧   | Working but not officially supported. |
|                  | <p>​Server 2019</p><p><em>Windows 10</em></p> |   🔧   | Working but not officially supported. |
| **Mac OS**       |                                               |    ❓   | Unknown and not officially supported. |

## Docker

`Size; ~330MB`

Both the [Docker Engine](https://docs.docker.com/engine/install/ubuntu/) and [Docker Compose](https://docs.docker.com/compose/install/) are necessary dependencies for Feedbacky.

<details>

<summary>Installation Guide</summary>

1\. Make sure that your system is up to date.

```bash
sudo apt update -y
```

2\. Docker requires some dependencies to be installed on your system.

```bash
 sudo apt install -y ca-certificates curl gnupg lsb-release
```

3\. Add Docker's official GPG key.

```bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
```

4\. Use Docker's stable repository.

```bash
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```

5\. Update your system.

```bash
sudo apt update -y
```

6\. Install Docker Engine and it's related packages.

```bash
sudo apt install -y docker-ce docker-ce-cli containerd.io
```

7\. Test that the Docker Engine was successfully installed.

```bash
sudo docker run hello-world
```

8\. Download the Docker Compose repository.

```bash
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
```

9\. Change the permission of downloaded Docker Compose binaries.

```bash
sudo chmod +x /usr/local/bin/docker-compose
```

10\. Test that Docker Compose was successfully installed.

```bash
docker-compose --version
```

</details>

## MariaDB

`Size; ~200MB`

MariaDB is recommended over MySQL as it brings better performance but MySQL will still work with Feedbacky if you already have it installed.

{% hint style="danger" %}
Additional configuration needed, **do not** skip this part if you already have MariaDB installed.
{% endhint %}

<details>

<summary>Installation Guide</summary>

1\. Update your system.

```bash
sudo apt update -y
```

2\. Install the MariaDB server package.

```bash
sudo apt install -y mariadb-server
```

3\. Run and go through the security script.

```bash
sudo mysql_secure_installation
```

The script will ask you to set a root password, press `N` to skip it. The root password is already tied to the system on Ubuntu and changing it could result in MariaDB breaking.

**Additional Configuration**

Docker will treat your container as a remote machine, we need to change the value of `bind-address` in order to accept non localhost connections.

4\. Edit your `50-server.cnf`.

```bash
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
```

5\. Change the value of `bind-address` to `0.0.0.0`.

{% code title="50-server.cnf" %}

```
bind-address            = 0.0.0.0
```

{% endcode %}

6\. Save the file with `CTRL` + `S` and exit nano with `CTRL` + `C`.

7\. Restart MariaDB.

```bash
sudo systemctl restart mariadb-server
```

</details>

## Webserver

A webserver is needed in order to point a domain to your instance. Any will suffice as long as they support reverse proxy.

We have a guide for both Apache and Nginx, choose the one you prefer.

### Apache

`Size; ~10MB`

{% hint style="info" %}
Apache will require further configuration to enable reverse proxy support.
{% endhint %}

<details>

<summary>Installation Guide</summary>

1\. Update your system.

```bash
sudo apt update -y
```

2\. Install the Apache package.

```bash
sudo apt install -y apache2
```

3\. Verify that Apache is running.

```bash
sudo systemctl status apache2
```

</details>

### Nginx

`Size; ~2MB`

{% hint style="info" %}
Nginx supports reverse proxy out of the box.
{% endhint %}

<details>

<summary>Installation Guide</summary>

1\. Update your system.

```bash
sudo apt update -y
```

2\. Install the Nginx package.

```bash
sudo apt install -y nginx
```

3\. Verify that Nginx is running.

```bash
sudo systemctl status nginx
```

</details>

### Caddy

{% hint style="info" %}
Coming soon!
{% endhint %}

## Certbot

`Size; ~2MB`

Certbot is a tool to generate SSL certificates, which we are covering in our [Domain Setup](/getting-started/domain-setup#ssl) guide.

<details>

<summary>Installation Guide</summary>

1\. Update your system.

```bash
sudo apt update -y
```

2\. Install the certbot package.

```bash
sudo apt install -y certbot
```

3\. Install the dependencies for your webserver.

**For Apache**;

```bash
sudo apt install -y python3-certbot-apache
```

**For Nginx**;

```bash
sudo apt install -y python3-certbot-nginx
```

</details>

## Terminal Multiplexer

***Optional***

During the startup process Feedbacky will use your current terminal window and unless you SSH again in your server with a new session, you won't be able to do anything else.

The solution to this is by using a terminal multiplexer, allowing you to run multiple sessions under a single window.

### tmux

`Size; ~940KB`

<details>

<summary>Installation Guide</summary>

1\. Update your system.

```bash
sudo apt update -y
```

2\. Install the tmux package.

```bash
sudo apt install -y tmux
```

</details>

### Screen

`Size; ~840KB`

<details>

<summary>Installation Guide</summary>

1\. Update your system.

```bash
sudo apt update -y
```

2\. Install the Screen package.

```bash
sudo apt install -y screen
```

</details>


# Initial Setup

Downloading the necessary files for Feedbacky itself, setting up the database and firewall.

## Necessary files

1\. Create a new directory named "feedbacky" in the `/etc` directory and access it.

```bash
sudo mkdir /etc/feedbacky && cd /etc/feedbacky
```

2\. Run the command below to download the necessary files.

```bash
sudo curl -O "https://raw.githubusercontent.com/feedbacky-project/app/master/{.env,docker-compose.yml}"
```

* `.env` is the file containing the Feedbacky variable in which you can configure to your needs.
* `docker-compose.yml` is the instruction file for Docker.

## Database setup

1\. Start the SQL shell.

```bash
sudo mysql
```

2\. Create a new user for Feedbacky.

{% hint style="info" %}
As stated [previously](/getting-started/installation#mariadb), we won't be able to create a `localhost` user, instead we'll use the `%` wildcard instead.
{% endhint %}

```sql
CREATE USER '{MYSQL_USERNAME}'@'%' IDENTIFIED BY '{MYSQL_PASSWORD}';
```

| `{MYSQL_USERNAME}` | The username of your choice. |
| ------------------ | ---------------------------- |
| `{MYSQL_PASSWORD}` | The password of your choice. |

3\. Create a new table for Feedbacky.

```sql
CREATE DATABASE feedbacky;
```

4\. Grant all privileges to your MySQL user.

```sql
GRANT ALL PRIVILEGES ON feedbacky.* TO '{MYSQL_USERNAME}'@'%';
```

5\. Flush the privileges.

```sql
FLUSH PRIVLEGES;
```

{% hint style="info" %}
Flush will reload the privileges without having the need to restart the MariaDB daemon.
{% endhint %}

6\. Exit the SQL shell.

```
exit
```

## Firewall setup

Uncomplicated Firewall (UFW) is the default Firewall on Ubuntu 20.04, it is disabled by default.

1\. Enable Uncomplicated Firewall (UFW).

```bash
sudo ufw enable
```

2\. Forward the Feedbacky server port.

```bash
sudo ufw allow 8095/tcp
```

{% hint style="info" %}
If you plan on using a different port, make sure that you change the value of the `SERVER_APP_PORT` variable when [configuring](/getting-started/installation/configuring)!
{% endhint %}

{% hint style="success" %}
Make sure that you also create a port forwarding rule in your router settings page. If you are using a Virtual Private Server (VPS) check with your provider.
{% endhint %}


# Configuring

Configure your Feedbacky instance to your needs.

Open your `.env` file and edit the environment variables to fit your needs.

```bash
sudo nano .env
```

## Networking

| `REACT_APP_SERVER_IP_ADDRESS` | The IP address of your Virtual Private Server (VPS) or dedicated hardware or a domain. |
| ----------------------------- | -------------------------------------------------------------------------------------- |
| `CLIENT_APP_PORT`             | Port for the client application, by default it is 8090.                                |
| `SERVER_APP_PORT`             | Port for the server application, by default it is 8095.                                |

### Domain

You can use your own domain with Feedbacky, follow the guide below.

{% content-ref url="/pages/0ZnocidmH9ZPe5QhL5tr" %}
[Domain Setup](/getting-started/domain-setup)
{% endcontent-ref %}

## Security

| `JWT_SECRET` | A random generated token used for authentication purposes. |
| ------------ | ---------------------------------------------------------- |

Use this link to generate one yourself;

{% embed url="<https://www.grc.com/passwords.htm>" %}
Any other JWT secret token generation can also be used.
{% endembed %}

{% hint style="warning" %}
For extra security, random ASCII characters are recommended. Remember, **do not share** your token with anyone else!
{% endhint %}

## Database

| `MYSQL_USERNAME` | The username set during the database setup process.    |
| ---------------- | ------------------------------------------------------ |
| `MYSQL_PASSWORD` | The password set during the database setup process.    |
| `MYSQL_URL`      | Connection information that will be used by Feedbacky. |

## OAuth

Follow these steps to use the Discord OAuth.

1\. Access Discord's [Developer Portal](https://discord.com/developers/applications).

2\. Create a new OAuth application.

{% embed url="<https://cdn.feedbacky.net/static/mp4/discord-oauth-setup.mp4>" %}
3\. Add a new redirect with the IP address or domain set [here](#networking) and include `/auth/discord` at the end.
{% endembed %}

Follow these steps to use the GitHub OAuth.

1\. Access GitHub's [Developer settings](https://github.com/settings/developers).

2\. Create a new OAuth application.

{% embed url="<https://cdn.feedbacky.net/static/mp4/github-oauth-setup.mp4>" %}
3\. Fill the **Authorization callback URL** with the IP address or domain set [here](#networking) and include `/auth/github` at the end.
{% endembed %}

{% hint style="danger" %}
The Google OAuth guide is not yet available.
{% endhint %}

Follow these steps to use the GitLab OAuth.

1\. Access GitLab's [Developer Portal](https://gitlab.com/-/profile/applications).

2\. Create a new OAuth application.

3\. Add a new redirect with the IP address or domain set [here](#networking) and include `/auth/gitlab` at the end.

4\. Fill the necessary variables with your newly created Discord OAuth application.

| `OAUTH_GITLAB_ENABLED`      | Disabled by default, to use GitLab OAuth change to `true`.    |
| --------------------------- | ------------------------------------------------------------- |
| `OAUTH_GITLAB_REDIRECT_URI` | Your instance domain with `/auth/gitlab` included at the end. |
| `OAUTH_GITLAB_CLIENT_ID`    | Your OAuth client ID.                                         |
| `OAUTH_GITLAB_SECRET`       | Your OAuth client secret.                                     |

## Mail

| `MAIL_SERVICE_TYPE` | Choose one of the options below. |
| ------------------- | -------------------------------- |

{% tabs %}
{% tab title="SMTP" %}

| `MAIL_SMTP_USERNAME` | Your username.                         |
| -------------------- | -------------------------------------- |
| `MAIL_SMTP_PASSWORD` | The password.                          |
| `MAIL_SMTP_HOST`     | A reachable domain or IP address.      |
| `MAIL_SMTP_PORT`     | A reachable port, by default it is 25. |
| {% endtab %}         |                                        |

{% tab title="Mailgun" %}
[Mailgun](https://www.mailgun.com) is a mail provider supported by Feedbacky.

{% hint style="info" %}
Send up to 5000 mails during a *3 month trial* than *$0.80* per 1000 mails.

A credit card is also required for sign up.
{% endhint %}

*Pricing included for your convenience and may be out of date.*

| `MAIL_MAILGUN_API_KEY`      | Your Mailgun API key.  |
| --------------------------- | ---------------------- |
| `MAIL_MAILGUN_API_BASE_URL` | Your Mailgun base URL. |

{% hint style="warning" %}
Your base URL should look something like this;

`https://api.mailgun.net/<version>/<domain>/messages`
{% endhint %}
{% endtab %}

{% tab title="SendGrid" %}
[SendGrid](https://sendgrid.com) is a mail provider supported by Feedbacky.

{% hint style="info" %}
Send up to 100 mails per day for *free* and *forever*.
{% endhint %}

*Pricing included for your convenience and may be out of date.*

| `MAIL_SENDGRID_API_KEY`      | Your SendGrid API key.  |
| ---------------------------- | ----------------------- |
| `MAIL_SENDGRID_API_BASE_URL` | Your SendGrid base URL. |

{% hint style="warning" %}
Your base URL should look something like this;

`https://api.sendgrid.com/v3/mail/send`
{% endhint %}
{% endtab %}
{% endtabs %}

## Image Compression

| `IMAGE_COMPRESSION_ENABLED` | If you wish to use an Image compression service, `false` by default. |
| --------------------------- | -------------------------------------------------------------------- |
| `IMAGE_COMPRESSION_TYPE`    | At the moment Feedbacky only supports one image compression service. |

{% tabs %}
{% tab title="CheetahO" %}
[CheetahO](https://cheetaho.com) is an image compression service supported by Feedbacky.

{% hint style="info" %}
Compress up to 500 images for *free* each months.
{% endhint %}

*Pricing included for your convenience and may be out of date.*

| `IMAGE_COMPRESSION_CHEETAHO_API_KEY` | Your CheetahO API key. |
| ------------------------------------ | ---------------------- |
| {% endtab %}                         |                        |
| {% endtabs %}                        |                        |

## Integrations

{% hint style="info" %}
Integrations are only available for cloud-instance users at the moment!
{% endhint %}


# Conclusion

What you learned while following this guide.

## 🎉 Congratulations!

You have completed the Feedbacky self-hosting installation guide! You can start your newly created instance with the command below.

```bash
sudo docker-compose up
```

This will take a few minutes depending on your hardware capabilities, your CPU usage will also peak during this process.

You can reach us with one of the support links if you encountered any issue along the way.

{% hint style="info" %} <mark style="color:blue;">**Running in the background**</mark>

1\. Create a new session. \*\*\*\*

```
tmux new -S feedbacky
```

2\. Detach from the session.

`CTRL` + `B` than press`D`.

3\. Reattach to the session.

```
tmux attach-session -t feedbacky
```

{% endhint %}

{% hint style="success" %}
Please consider [donating](/project-overview/donating) to Feedbacky!
{% endhint %}

## What you've learned

By following the self-host guide you should also have learned the basics of;

* Installing Docker with Compose, MariaDB and Apache or Nginx, optionally also tmux or Screen.
* Using the `apt` package manager on Ubuntu or any other Debian-based Linux distribution.
* Editing files with the `nano` editor.
* Configuring a MySQL user and table.
* Using the `ufw` package for your firewall.

## What's Next

Read our after installation handbook to get started with your new instance.

{% content-ref url="<https://github.com/feedbacky-project/docs/blob/master/getting-started/installation/broken-reference/README.md>" %}
<https://github.com/feedbacky-project/docs/blob/master/getting-started/installation/broken-reference/README.md>
{% endcontent-ref %}


# Domain Setup

Use your own domain with Feedbacky.

## Record

Before going into details, you must have your server pointed to your domain.

1\. Access the DNS settings of your domain provider.

2\. Create an **A Record**.

3\. Find your public IP address.

```bash
curl ipinfo.io/ip
```

4\. Insert a subdomain, for example; **feedbacky**.

5\. Put your public IP address in the address field.

## Port Forwarding

Your webserver also needs to be accessible over the internet.

1\. Forward port `80`.

```bash
sudo ufw allow 80/tcp
```

2\. Forward port `443`.

```bash
sudo ufw allow 443/tcp
```

## Virtual Hosts

### Creating

Virtual Hosts enables you to run multiple website on a single webserver, this is useful if you are also hosting other services such as a store front, documentation site, etc..

1\. Access your webserver's Virtual Host directory.

{% tabs %}
{% tab title="Apache" %}

```bash
cd /etc/apache2/sites-available
```

{% endtab %}

{% tab title="Nginx" %}

```bash
cd /etc/nginx/sites-available
```

{% endtab %}
{% endtabs %}

2\. Create a new file with the name being your domain, the file name must end with ".conf".

```
sudo nano {feedbacky.yourdomain}.conf
```

| `{feedbacky.yourdomain}.conf` | Your domain including the subdomain, example; **feedbacky.myapp.conf**. |
| ----------------------------- | ----------------------------------------------------------------------- |

3\. Paste the following content to your newly created Virtual Host file.

{% tabs %}
{% tab title="Apache" %}
{% code title="{feedbacky.yourdomain}.conf" %}

```apacheconf
<VirtualHost *:80>
  ServerName {DOMAIN_NAME}
</VirtualHost>

# Comment out (Adding #) to the part below if you don't plan on using SSL!
<VirtualHost *:443>
  ServerName {DOMAIN_NAME}
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L] 
  SSLEngine on
  SSLCertificateFile /etc/letsencrypt/live/{DOMAIN_NAME}/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/{DOMAIN_NAME}/privkey.pem
</VirtualHost> 
```

{% endcode %}
{% endtab %}

{% tab title="Nginx" %}
{% code title="{feedbacky.yourdomain}.conf" %}

```nginx
server {
    listen 80;
    server_name {DOMAIN_NAME};

    return 301 https://$host$request_uri;
}

# Comment out (Adding #) to the part below if you don't plan on using SSL!
server {
    listen 443 ssl http2;
    server_name {DOMAIN_NAME};

    ssl_certificate /etc/letsencrypt/live/{DOMAIN_NAME}/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/{DOMAIN_NAME}/privkey.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES2>-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
    ssl_prefer_server_ciphers on;

    http2_idle_timeout 5m; # up from 3m default
    client_max_body_size 0;

     location / {
       proxy_pass {SERVER_IP}:{CLIENT_APP_PORT};
  }
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

| `{DOMAIN_NAME}`            | Your fully qualified domain domain, example; **feedbacky.app.cool**.                    |
| -------------------------- | --------------------------------------------------------------------------------------- |
| `{SERVER_IP}` (Nginx)      | The IP address (not public) of your Virtual Private Server (VPS) or dedicated hardware. |
| `{CLIENT_APP_PORT}`(Nginx) | The client port located in your `.env` file, by default it is 8090.                     |

4\. Save the file with `CTRL` + `S` and exit nano with `CTRL` + `C`.

### Additional steps

{% tabs %}
{% tab title="Apache" %}
5\. By default `proxy` and `ssl` are disabled in Apache, enable them.

```bash
sudo a2enmod proxy ssl
```

***

{% hint style="info" %} <mark style="color:blue;">**Breakdown**</mark>

To understand what this command does, we can break it down like this,

* **a2** means apache2
* **en** means enable
* **mod** means module

We are asking Apache to enable the proxy module which is located in the`/etc/apache2/available-modules` directory.
{% endhint %}
{% endtab %}

{% tab title="Nginx" %}
5\. A symbolic link (symlink) must be created for making your Virtual Host work.

```bash
sudo ln -s /etc/nginx/sites-available/{DOMAIN_NAME}.conf /etc/nginx/sites-enabled/{DOMAIN_NAME}.conf
```

{% hint style="info" %} <mark style="color:blue;">**Breakdown**</mark>

Each time you will edit your Virtual Host located in `/etc/nginx/sites-available` it will also update the one created in `/etc/nginx/sites-enabled`.
{% endhint %}
{% endtab %}
{% endtabs %}

### Enabling

{% tabs %}
{% tab title="Apache" %}

```bash
sudo a2ensite {feedbacky.yourdomain}.conf
```

{% endtab %}

{% tab title=" Nginx" %}

```
sudo service nginx reload
```

{% endtab %}
{% endtabs %}

## Generating a Certificate

Generate your domain SSL certificate.

{% tabs %}
{% tab title="Apache" %}

```
sudo certbot certonly --apache -d {DOMAIN_NAME}
```

{% endtab %}

{% tab title="Nginx" %}

```
sudo certbot certonly --nginx -d {DOMAIN_NAME}
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %} <mark style="color:orange;">**Standalone**</mark>

If neither the Apache nor the Nginx command worked, try using the standalone command.

```
sudo certbot certonly --standalone -d {DOMAIN_NAME}
```

{% endhint %}

If everything went well, you should now have your own self-signed certificate for your domain.

## Let's Encrypt Alternative

### Cloudflare

An alternative method that you can follow instead of manually generating a certificate and adding additional values to your Virtual Host file is by using Cloudflare.

In short by adding your website to Cloudflare, you will be able to forward your board with Cloudflare's own proxy.

You can read more [here](https://support.cloudflare.com/hc/en-us/articles/201720164).

{% hint style="warning" %}
The normal domain setup without SSL is still required!
{% endhint %}


# Updating/Upgrading

Keeping your Feedbacky instance up to date.

{% hint style="info" %} <mark style="color:blue;">**Work in Progress!**</mark>

Content for this section is currently being written!
{% endhint %}


# Quick Start

Starting with your first board.

{% hint style="info" %} <mark style="color:blue;">**Work in Progress!**</mark>

Content for this section is currently being written!
{% endhint %}


# Features

Overview guides on the major Feedbacky features.

{% hint style="info" %} <mark style="color:blue;">**Work in Progress!**</mark>

Content for this section is currently being written!
{% endhint %}


# Customizing

Theming your board with your brand.

{% hint style="info" %} <mark style="color:blue;">**Work in Progress!**</mark>

Content for this section is currently being written!
{% endhint %}


# Roadmaps

Use the roadmaps module to sort and track all of your ideas.

{% hint style="info" %} <mark style="color:blue;">**Work in Progress!**</mark>

Content for this section is currently being written!
{% endhint %}


# Changelogs

Use the changelogs module to notify your customers of important updates with your product.

{% hint style="info" %} <mark style="color:blue;">**Work in Progress!**</mark>

Content for this section is currently being written!
{% endhint %}


# Anonymity

Enable user anonymity features.

{% hint style="info" %} <mark style="color:blue;">**Work in Progress!**</mark>

Content for this section is currently being written!
{% endhint %}


# Social Links

Add links to your website, storefront, Discord server or whatever you want.

{% hint style="info" %} <mark style="color:blue;">**Work in Progress!**</mark>

Content for this section is currently being written!
{% endhint %}


# Tags

Neatly organize all your ideas.

{% hint style="info" %} <mark style="color:blue;">**Work in Progress!**</mark>

Content for this section is currently being written!
{% endhint %}

{% hint style="warning" %} <mark style="color:orange;">**Quota**</mark>

Cloud instance users are limited to a quota of 25 tags while self-hosted instance users have an unlimited tags quota.
{% endhint %}

Tags are a way to help you organize ideas, they can be set to be used by anyone or only by your board administrators or set to be ignored in your board's Roadmap.

![](https://github.com/feedbacky-project/docs/blob/master/handbook/features/broken-reference)

## Usage

To create a new tag, click on the **"Add New"** button.

![](https://github.com/feedbacky-project/docs/blob/master/handbook/features/broken-reference)

### Public Use

Ticking this setting will enable the use of public tag, board users will be able to select them when creating a new idea.

![](https://github.com/feedbacky-project/docs/blob/master/handbook/features/broken-reference)

### Roadmap Ignored

Ticking this setting will disable the display of ideas with a tag having the option enabled in the Roadmap page of your board.

![](https://github.com/feedbacky-project/docs/blob/master/handbook/features/broken-reference)

Roadmap Ignored tag assigned to an idea;

![](https://github.com/feedbacky-project/docs/blob/master/handbook/features/broken-reference)

Roadmap doesn't show the idea;

![](https://github.com/feedbacky-project/docs/blob/master/handbook/features/broken-reference)


# Webhooks

Receive board notifications in your Discord server or elsewhere.

{% hint style="info" %} <mark style="color:blue;">**Work in Progress!**</mark>

Content for this section is currently being written!
{% endhint %}

Currently supported webhook types:

* Discord Webhooks

If you want to receive webhook notifications at your Discord server when some particular events at Feedbacky occur (eg. when someone creates new idea, posts a comment or edits an idea) you can go to boards settings **Manage > Webhooks > Add New**.

In webhooks creator choose events you want to listen for and go to your Discord server to create webhook like in the video below and copy webhook URL.

> [How to set up webhooks](https://cdn.feedbacky.net/static/mp4/discord-webhooks-setup.mp4)

After you finish the setup at Feedbacky you should receive following webhook notification.

![Successful request notification.](https://cdn.feedbacky.net/static/img/discord-webhook-notification.png)


# Custom Roles

(Formerly Moderator) Assigning staff users to your board.

{% hint style="info" %} <mark style="color:blue;">**Work in Progress!**</mark>

Content for this section is currently being written!
{% endhint %}


# Suspensions

Suspending bad behaving users from your board.

{% hint style="info" %} <mark style="color:blue;">**Work in Progress!**</mark>

Content for this section is currently being written!
{% endhint %}


# Integrations

Integrate other services to Feedbacky.

{% hint style="info" %} <mark style="color:blue;">**Work in Progress!**</mark>

Content for this section is currently being written!
{% endhint %}


# Moderate your board

Moderating 101 with Feedbacky.

{% hint style="info" %} <mark style="color:blue;">**Work in Progress!**</mark>

Content for this section is currently being written!
{% endhint %}


# Add OAuth Providers

Implement custom OAuth providers to Feedbacky.

{% hint style="warning" %} <mark style="color:orange;">**Citation needed**</mark>

This section is currently undocumented by the developer.
{% endhint %}

{% code title="oauth\_providers.yml" %}

```yaml
discord:
  provider-data:
    name: Discord
    oauth-link: https://discordapp.com/api/oauth2/authorize?client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&response_type=code&scope=identify%20email&state=
    icon: https://static.plajer.xyz/svg/login-discord.svg
    color: "#7289da"
  environment-variables:
    enabled: OAUTH_DISCORD_ENABLED
    redirect-uri: OAUTH_DISCORD_REDIRECT_URI
    client-id: OAUTH_DISCORD_CLIENT_ID
    client-secret: OAUTH_DISCORD_CLIENT_SECRET
  oauth:
    token-url: https://discordapp.com/api/oauth2/token
    authorization-property: Bearer {TOKEN}
    user-url: https://discordapp.com/api/users/@me
  data-fields:
    id: id
    email: email
    username: username
    # Discord doesn't show avatar url instead shows hash, we need the url
    avatar: null
    email-verified: verified
github:
  provider-data:
    name: GitHub
    oauth-link: https://github.com/login/oauth/authorize?client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&scope=read%3Auser%20user%3Aemail&state=
    icon: https://static.plajer.xyz/svg/login-github.svg
    color: "#333333"
  environment-variables:
    enabled: OAUTH_GITHUB_ENABLED
    redirect-uri: OAUTH_GITHUB_REDIRECT_URI
    client-id: OAUTH_GITHUB_CLIENT_ID
    client-secret: OAUTH_GITHUB_CLIENT_SECRET
  oauth:
    token-url: https://github.com/login/oauth/access_token
    authorization-property: token {TOKEN}
    user-url: https://api.github.com/user
  data-fields:
    id: id
    email: email
    username: login
    avatar: avatar
    email-verified: null
google:
  provider-data:
    name: Google
    oauth-link: https://accounts.google.com/o/oauth2/v2/auth?client_id={CLIENT_ID}&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&redirect_uri={REDIRECT_URI}&state=
    icon: https://static.plajer.xyz/svg/login-google.svg
    color: "#db4437"
  environment-variables:
    enabled: OAUTH_GOOGLE_ENABLED
    redirect-uri: OAUTH_GOOGLE_REDIRECT_URI
    client-id: OAUTH_GOOGLE_CLIENT_ID
    client-secret: OAUTH_GOOGLE_CLIENT_SECRET
  oauth:
    token-url: https://www.googleapis.com/oauth2/v4/token
    authorization-property: Bearer {TOKEN}
    user-url: https://www.googleapis.com/oauth2/v1/userinfo?alt=json
  data-fields:
    id: id
    email: email
    username: name
    avatar: picture
    email-verified: email_verified
gitlab:
  provider-data:
    name: GitLab
    oauth-link: https://gitlab.com/oauth/authorize?client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&response_type=code&scope=read_user%20email&state=
    icon: https://static.plajer.xyz/svg/login-gitlab.svg
    color: "#fca121"
  environment-variables:
    enabled: OAUTH_GITLAB_ENABLED
    redirect-uri: OAUTH_GITLAB_REDIRECT_URI
    client-id: OAUTH_GITLAB_CLIENT_ID
    client-secret: OAUTH_GITLAB_CLIENT_SECRET
  oauth:
    token-url: https://gitlab.com/oauth/token
    authorization-property: Bearer {TOKEN}
    user-url: https://gitlab.com/api/v4/user
  data-fields:
    id: id
    email: email
    username: username
    avatar: avatar_url
    email-verified: null
```

{% endcode %}


# Upgrading to 0.5.0

Legacy guide for upgrading an older Feedbacky version.

{% hint style="info" %} <mark style="color:blue;">**Legacy**</mark>

This section is intended to provide support for those who are upgrading older Feedbacky instances and can be skipped for new installations (1.0.0-RC.0 and up).
{% endhint %}

{% hint style="warning" %} <mark style="color:orange;">**Upgrading**</mark>

If you are upgrading your instance from 0.1.0 to 0.5.0, **you must** also apply any changes from version [0.2.0](/reference/upgrading-to-0.2.0).
{% endhint %}

## Notes

### Added

<mark style="color:green;">**+**</mark> A new variable was added and must be present in your `.env` file in order for Feedbacky to work;

{% tabs %}
{% tab title="SETTINGS\_ALLOW\_COMMENTING\_CLOSED\_IDEAS" %}
**Type**: `boolean`

If enabled, your board users will be able to comment on ideas that are closed.

```
SETTINGS_ALLOW_COMMENTING_CLOSED_IDEAS=false
```

{% endtab %}
{% endtabs %}

### **Changed**

<mark style="color:orange;">**!**</mark> An existing variable in your `.env` file can be edited;

{% tabs %}
{% tab title="REACT\_APP\_DEFAULT\_USER\_AVATAR" %}
**Type**: `string`

Sets the avatar of your board users, add the value below if you want to use generated letter avatars based on usernames.

```
REACT_APP_DEFAULT_USER_AVATAR=https://static.plajer.xyz/avatar/generator.php?name=%nick%
```

{% endtab %}
{% endtabs %}


# Upgrading to 0.2.0

Legacy guide for upgrading an older Feedbacky version.

{% hint style="info" %} <mark style="color:blue;">**Legacy**</mark>

This section is intended to provide support for those who are upgrading older Feedbacky instances and can be skipped for new installations (1.0.0-RC.0 and up).
{% endhint %}

## Notes

### Added

<mark style="color:green;">**+**</mark> A new variable was added and must be present in your `.env` file in order for Feedbacky to work;

{% hint style="info" %}
If you don't plan to use SendGrid as a mail provider there is no need to modify these values, just add them to your configuration file.
{% endhint %}

{% tabs %}
{% tab title="MAIL\_SENDGRID\_API\_KEY" %}
**Type**: `string`

Replace the `apiKey` value with your actual key.

```
MAIL_SENDGRID_API_KEY=apiKey
```

{% endtab %}

{% tab title="MAIL\_SENDGRID\_API\_BASE\_URL" %}
**Type**: `string`

Replace the `baseUrl` value with the appropriate URL.

```
MAIL_SENDGRID_API_BASE_URL=baseUrl
```

{% endtab %}
{% endtabs %}

<mark style="color:green;">**+**</mark> Roadmaps were added in this version but Hibernate will auto magically include it in database.

<mark style="color:green;">**+**</mark> Migrator will migrate every user automatically to enable mail preferences for a new Mail Notifications feature.

### **Changed**

<mark style="color:orange;">**!**</mark> If you use Mailgun as your mail provider, you must edit an existing variable in your `.env` file;

{% tabs %}
{% tab title="MAIL\_MAILGUN\_API\_BASE\_URL" %}
**Type**: `string`

Add `/messages` at the end of the end of your Mailgun base URL, as this portion is no longer handled by code.

```
MAIL_MAILGUN_API_BASE_URL=https://api.mailgun.net/<version>/<domain>/messages
```

{% endtab %}
{% endtabs %}

## Changelog


# Older Releases

Changelogs for legacy versions.

{% hint style="info" %} <mark style="color:blue;">**Deprecation notice**</mark>

This section will be preserved for historical purposes but will no longer be updated with current Feedbacky releases.

You can follow up to date [changelogs](https://app.feedbacky.net/b/feedbacky-official/changelog) on our official board.
{% endhint %}

## Version `0.5.0-beta`

**TL;DR** - See full [**changelog**](https://github.com/feedbacky-project/app/blob/master/CHANGELOG.md#020-beta-june-5-2020).

* User suspension
* Letter avatars
* Comment on closed ideas

## Version `0.3.1-beta`

**TL;DR** - See full [**changelog**](https://github.com/feedbacky-project/app/blob/master/CHANGELOG.md#031-beta-july-6-2020).

* Added slugs to ideas

## Version `0.3.0-beta`

This version was Initially planned to be released as 0.2.1 but since we removed Private Boards it should be marked as a bigger release.

**TL;DR** - See full [**changelog**](https://github.com/feedbacky-project/app/blob/master/CHANGELOG.md#030-beta-june-9-2020).

* Removed private boards
* UI improvements

### The removal of Private Boards

Private Boards feature was removed due to being unpopular and unused feature and contained security exploit. This version also aims to fix regressions caused by previous update.

## Version `0.2.0-beta`

**TL;DR** - See full [**changelog**](https://github.com/feedbacky-project/app/blob/master/CHANGELOG.md#020-beta-june-5-2020).

* Added mail notifications for ideas
* Re-coded client side app, smaller size, more lightweight
* Added roadmaps feature
* SendGrid mail provider support
* Minor UI and Dark Mode changes

### Mails Notification Feature

From now on Feedbacky users can `Subscribe` to ideas to receive mail notifications. Users who create new ideas from now will automatically subscribe to their idea.

![Mail notification example](/files/-M94t454WNPx5qjIK0Sk)

Users can receive notifications about:

* New idea comments by moderators
* Idea state change (when idea gets closed or opened)
* Idea tags change

### Client App Recode

Feedbacky client side app was fully recoded and no longer uses Material Design Bootstrap.\
Code was recoded with functional components and was redesigned to be more lightweight.\
Overall size of app should be much lower. CSS was reduced from 211kb to 154kb.

### Roadmaps Implemented

New feature called **Roadmaps** got implemented. Roadmaps serve the purpose of informing about upcoming or features being worked on and they depend on tags ideas have.

By default every tag is visible in the roadmap but this can be edited so tags can be ignored from the roadmap view.

![New roadmap feature preview](/files/-M94yAMqFv1mTl7aWKCM)

### SendGrid Mail Provider Support

Besides Mailgun and own SMTP server you can use [Twilio SendGrid](https://sendgrid.com) to send mails.

### Minor UI and Dark Mode changes

UI and dark mode received several small changes to ensure the best experience when using Feedbacky.\
From more noticeable things Moderation comments icons were changed, board admin panel and profile page menus design got changed.

![Board admin panel menu design update (old left, new right)](/files/-M95-w_zKy55Y8ZCHE-d)

### Bug Fixes for Stability and Other Changes!

Here's a list of things that got fixed since previous version:

* Board admin panel no longer loses theme color in navbar after page refresh
* Social Link and Webhooks creators won't break any longer when putting invalid URL value
* Our old markdown library got replaced with marked for better stability with parsing links and other markdown stuff
* Comments will now always load in good order, previously they could load second page before first if request for second page returned faster
* Board admin panel won't blink anymore when switching between sections
* Settings edited in board admin panel now reflect changes all over the board properly

And a bunch of other changes:

* Comments are now loaded from oldest to newest
* In case of app crash, error page will be displayed instead of blank one
* All dependencies of backend and frontend were updated to their latest stable versions
* Server side messages when editing or updating stuff will now return more user friendly messages on failure

![What user sees when app crashes, not a blank page anymore](/files/-M951kWRJPhYeLYquIxN)


# API Usage

Using the Feedbacky API.

{% hint style="warning" %} <mark style="color:orange;">**Citation needed**</mark>

This section is currently undocumented by the developer.
{% endhint %}


# Installation (Windows)

Self-hosting Feedbacky on Windows.

{% hint style="danger" %} <mark style="color:red;">**Work in Progress!**</mark>

Content for this section is currently being written!

Keep in mind that this guide is not official in any capacity, Linux is the only platform officially supported. Please understand that support will be limited.
{% endhint %}


