# Step 1: Requesting Features

## Step 1.1: Create an App and Configure Basic Data Structures

{% embed url="<https://youtu.be/HG4KTO1Rrxw>" %}
6:05
{% endembed %}

First, we [create an app](https://readme.directual.com/getting-started/app-management#creating-new-application). The system name must be unique because it determines the URL address (SYSNAME.directual.app).

The [Database](https://readme.directual.com/data/data-structures) is a fundamental part of any app. For our Development Pipeline app, we create the following data structures:

**Features** (system name `Features`), main system structure.

| Field system name    | Field name         | Field type                                    |
| -------------------- | ------------------ | --------------------------------------------- |
| `id`                 | id                 | default id field                              |
| `title`              | Title              | string                                        |
| `description`        | Description        | markdown (string)                             |
| `date_requested`     | Date requested     | date                                          |
| `user_id`            | Who requested      | link to **App users** (`WebUser`)             |
| `tags`               | Tags               | arrayLink to **Tags** (`tags`)                |
| `request_status`     | Request status     | link to **Request status** (`req_status`)     |
| `development_status` | Development status | link to **Development status** (`dev_status`) |
| `type`               | Type               | link to **Type** (`type`)                     |

![Configuring data structure fields](https://3071851461-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4Nnmtk9_gFGWOddsf6%2F-MaOhduwfMdEnh-SZT3F%2F-MaOiT1zb2htwNuWJH6v%2F1_1_1.jpg?alt=media\&token=d9cc74f6-a9be-4d0c-be6c-397aaba11f0f)

Additional directory data structures:

**Tags** (`tags`)

| Field system name | Field name | Field type       |
| ----------------- | ---------- | ---------------- |
| `id`              | id         | default id field |

**Type** (`type`)

| Field system name | Field name | Field type       |
| ----------------- | ---------- | ---------------- |
| `id`              | id         | default id field |

**Request Status** (`req_status`)

| Field system name | Field name | Field type       |
| ----------------- | ---------- | ---------------- |
| `id`              | id         | default id field |

**Development Status** (`dev_status`)

| Field system name | Field name | Field type       |
| ----------------- | ---------- | ---------------- |
| `id`              | id         | default id field |

#### Add Objects:

| Structure              | Object IDs                            |
| ---------------------- | ------------------------------------- |
| **Type**               | bug, feature                          |
| **Development status** | planned, under development, released  |
| **Request status**     | new, approved, declined               |
| **Tags**               | design, integrations, product, *etc.* |

## Step 1.2: Create a Request Form

{% embed url="<https://youtu.be/0FFmOyNfzFs>" %}
5:29
{% endembed %}

Alright, to add objects (features) via a [Form](https://readme.directual.com/web-pages/components/legacy-components/form), the first step is to create an [API endpoint](https://readme.directual.com/api-integrations/api-endpoints-security-layer). Head to the API section and click on \[ + New API Endpoint ]. Choose the data structure - in this case, 'features.' Set the API endpoint name and description, then click on \[ + New Layer ].

{% hint style="info" %}
Pay attention to the layer conditions related to the user's session. The default condition, 'id isNotNull,' indicates that the API endpoint is not public. Users need to authorize themselves to access data via this endpoint. We do not recommend removing this condition unless you plan to make your data publicly accessible.
{% endhint %}

![Configuring an API-endpoint](https://3071851461-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4Nnmtk9_gFGWOddsf6%2F-MaOiVW7dMAorFiPr9GK%2F-MaPdhS1tiJW0lWt95Y5%2Fapi.jpg?alt=media\&token=35df82ae-cd6c-48cf-830e-a8afe9909e81)

Next, let's create a page in the [Web Page Builder](https://readme.directual.com/web-pages/portal). Click on \[ + New Web Page ], complete the form, and then click \[ Save ].

![](https://3071851461-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4Nnmtk9_gFGWOddsf6%2F-MaPjIcbhB-2nbHiqZCW%2F-MaPu7JlekmiTegp9SfH%2Ffps1.jpg?alt=media\&token=9a01ae2a-c7a3-426d-baf5-40f20c71b1dd)

Let's enable both Sign-In and Sign-Up for our app. Click on \[ Web Portal Settings ], go to the Security tab, and activate these options:

![](https://3071851461-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4Nnmtk9_gFGWOddsf6%2F-MaPjIcbhB-2nbHiqZCW%2F-MaPu_tVPMwHbpnISAdl%2Ffps2.jpg?alt=media\&token=1cef1bd7-1c32-4bf5-85c7-7375aad2ad9b)

"Next, [drag and drop ](https://readme.directual.com/web-pages/setting-up-pages-layout)the Form component onto the page, select the API endpoint, and configure the fields as follows:

![](https://3071851461-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4Nnmtk9_gFGWOddsf6%2F-MaPjIcbhB-2nbHiqZCW%2F-MaPvt_nSFtwUcp4Fby3%2Ffps3.jpg?alt=media\&token=026786cc-6348-4162-a438-976fa0ebc516)

Here are the steps you should follow:

1. Enable the quick search option for Tags, which will add a dropdown.
2. Hide the user\_id field from the form.
3. Enable [automatic filling](https://readme.directual.com/web-pages/components/legacy-components/form) of the user\_id.
4. Rearrange the field order and activate requirements as needed.

Your form is now set up and ready to use. Give it a try!

## Step 1.3: Process New Requests&#x20;

{% embed url="<https://youtu.be/2UwHvtTRCFo>" %}
5:50
{% endembed %}

New feature requests or bug reports are considered as objects. To handle these objects, we require a [scenario](https://readme.directual.com/scenarios/principles-of-scenarios) with a [real-time trigger](https://readme.directual.com/scenarios/event-driven-triggers).

![](https://3071851461-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4Nnmtk9_gFGWOddsf6%2F-MaUDnMBjLWWP-VkcYfp%2F-MaUFnJUMYI82aKgH4Ks%2Fscen.jpg?alt=media\&token=103af654-1a6a-40e4-93f2-ff7e2bf5ddbd)

| Step                                     | Description                                                                                                                                                                                      | [Coding mode](https://readme.directual.com/template-system/evaluating-as-js-expression) |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------- |
| **Edit object** // Save the date         | Saves to `{{date_requested}}` current time, using [`now` expression](https://readme.directual.com/template-system/basics-of-template-system/advanced-templating-techniques#using-now-today-days) | 🟢ON                                                                                    |
| **Edit object** // Set the status to new | Saves to `{{request_status}}` string `new`                                                                                                                                                       | 🔴OFF                                                                                   |
| **Send email**                           | Alerts admin that new request has been created. [Integration with email](https://readme.directual.com/api-integrations/other-integrations/email) has to be established                           | —                                                                                       |
