# OVERVIEW __________ # Overview All communication between Fibery and connected applications occurs over a REST API. All third party applications are expected to adhere to a particular API format as outlined in this documentation. The underlying technologies used to develop these third party applications are up to the individual developer. ## REST Endpoints Below are a list of the HTTP endpoints expected in a Fibery custom app connector. Required: * [GET /](https://the.fibery.io/@public/User_Guide/Guide/GET-%2F-367) - returns app information * [POST /](https://the.fibery.io/@public/User_Guide/Guide/POST-%2F-368) - returns the data * [POST /validate](https://the.fibery.io/@public/User_Guide/Guide/POST-%2Fvalidate-369) - performs validation of the account Optional: * [POST /datalist](https://the.fibery.io/@public/User_Guide/Guide/POST-%2Fdatalist-370) - returns possible options for filter fields * [GET /logo](https://the.fibery.io/@public/User_Guide/Guide/GET-%2Flogo-371) - returns an image/svg+xml representation of the application's logo * [POST /oauth1/v1/authorize](https://the.fibery.io/@public/User_Guide/Guide/POST-%2Foauth1%2Fv1%2Fauthorize-372) - begins OAuth (v1) authentication by retrieving redirect URI * [POST /oauth1/v1/access_token](https://the.fibery.io/@public/User_Guide/Guide/POST-%2Foauth1%2Fv1%2Faccess_token-373) - finalizes OAuth (v1) authentication by processing token request * [POST /oauth2/v1/authorize](https://the.fibery.io/@public/User_Guide/Guide/POST-%2Foauth2%2Fv1%2Fauthorize-374) - begins OAuth (v2) authentication by retrieving redirect URI * [POST /oauth2/v1/access_token](https://the.fibery.io/@public/User_Guide/Guide/POST-%2Foauth2%2Fv1%2Faccess_token-375) - finalizes OAuth (v2) authentication by processing token request * [POST /schema](https://the.fibery.io/@public/User_Guide/Guide/POST-%2Fschema-376) - returns predefined data schema for specified account and filter * [POST /validate/filter](https://the.fibery.io/@public/User_Guide/Guide/POST-%2Fvalidate%2Ffilter-377) - performs filter fields validation * [POST /count](https://the.fibery.io/@public/User_Guide/Guide/POST-%2Fcount-378) - returns dataset size # SCHEMA API ____________ Fibery Schema is the metadata describing Types (Databases) and their Fields. Basically, it's everything you see on the `Workspace Map` screen and a few auxiliary Types (Databases): ![Screenshot 2024-01-12 at 12.36.30 PM.png](/api/files/603698fb-bb77-47c4-b7fa-b651a9c23af0#width=2590&height=1520) ## **Get Schema** Get all Types (Databases), Fields and their metadata. > [//]: # (callout;icon-type=emoji;icon=:point_up:;color=#1fbed3) > In Fibery UI Type = Database, App=Space. To find out why, check [Terminology](https://the.fibery.io/User_Guide/Guide/Fibery-API-Overview-279/anchor=Terminology--15f750ec-571c-48f6-9b0b-6861222c1a27 "https://the.fibery.io/User_Guide/Guide/Fibery-API-Overview-279/anchor=Terminology--15f750ec-571c-48f6-9b0b-6861222c1a27"). Take a look at the [Type](https://the.fibery.io/User_Guide/Guide/Type-API-262) and [Field](https://the.fibery.io/User_Guide/Guide/Field-API-263) sections for the metadata description. Fibery Schema for a median account takes a few hundred kilobytes. ### Command parameters | Parameter (required in bold) | Default | Description | Example | | --- | --- | --- | --- | | `with-description?` | false | Whether to include type descriptions in response | true | ``` # JavaScript const Fibery = require('fibery-unofficial'); const fibery = new Fibery({host: "YOUR_ACCOUNT.fibery.io", token: YOUR_TOKEN}); const schema = await fibery.getSchema(); # cURL curl -X POST https://YOUR_ACCOUNT.fibery.io/api/commands \ -H 'Authorization: Token YOUR_TOKEN' \ -H 'Content-Type: application/json' \ -d '[{ "command": "fibery.schema/query" }]' ``` Result (cURL): ``` [ { "success": true, "result": { "fibery/id": "fd5d9550-3779-11e9-9162-04d77e8d50cb", "fibery/types": [ { "fibery/name": "software-development/user-story", "fibery/fields": [ { "fibery/name": "fibery/modification-date", "fibery/type": "fibery/date-time", "fibery/meta": { "fibery/modification-date?": true, "fibery/readonly?": true, "fibery/default-value": "$now", "fibery/secured?": false, "fibery/required?": true, "ui/object-editor-order": 8 }, "fibery/id": "e36a91b1-3f4b-11e9-8051-8fb5f642f8a5" }, { "fibery/name": "assignments/assignees", "fibery/type": "fibery/user", "fibery/meta": { "fibery/collection?": true, "ui/object-editor-order": 4, "fibery/relation": "c3e75ca4-8d15-11e9-b98a-9abbdf4720ab" }, "fibery/id": "2cd92374-3839-11e9-9162-04d77e8d50cb" } #...other Fields ], "fibery/meta": { "fibery/primitive?": false, "fibery/domain?": true, "ui/color": "#068cba", "app/mixins": { "fibery/rank-mixin": true, "assignments/assignments-mixin": true, "Files/Files-mixin": true, "workflow/workflow": true, "comments/comments-mixin": true }, "fibery/secured?": true }, "fibery/id": "2c4213ae-3839-11e9-9162-04d77e8d50cb" } #...other Types ], "fibery/meta": { "fibery/version": "1.0.62", "fibery/rel-version": "1.0.6", "fibery/maintenance?": false, "maintenance?": false } } } ] ``` # CONTEXT VIEWS _______________ Unlike regular [Views](https://the.fibery.io/@public/User_Guide/Guide/Views-8), **context Views** visualize data for a particular Entity and can be [mirrored](https://the.fibery.io/@public/User_Guide/Guide/Context-Views-20/anchor=Mirroring-a-context-View--4e26bf4d-a013-4a00-970f-147020606301) to avoid double work. Create [context Views in Smart Folders](https://the.fibery.io/@public/User_Guide/Guide/Context-Views-20/anchor=Context-Views-in-a-Smart-Folder--fec96ed7-12db-4dd9-9189-1b5015cfea1e) or use [Relation Views](https://the.fibery.io/@public/User_Guide/Guide/Relation-Views-309) to visualize to-many relations on Entity View. ![image.png](/api/files/85fe946b-8c8c-4139-be45-2c1aec66294f#width=3009&height=1066) ## When context Views are useful Consider using context Views in these two cases: 1. **a View is relevant for a particular Entity only**: 1. CJM Whiteboard for a specific Feature; 2. an ad-hoc Report for a specific Client; 3. … 2. **the same kind of View is needed for a few Entities of the same Database:** 1. Roadmap for every active Product; 2. Contacts Table for every Client; 3. … ## Context Views in a Smart Folder [Smart Folders](https://the.fibery.io/@public/User_Guide/Guide/Smart-Folders-26) are a great way to build custom navigation in the sidebar based on your most important Entities such as Products, Clients, or Teams. Once you've created a Smart Folder, create context Views for the Entities inside: > [//]: # (callout;icon-type=emoji;icon=:information_source:;color=#6A849B) > On a context View, you can only visualize DBs reachable via [context filters](https://the.fibery.io/@public/User_Guide/Guide/Context-Views-20/anchor=Context-filters--0935e1fb-7c38-4566-81b1-101d4a1ed284). If you need a completely unrelated DB, create a regular View instead. If a context View has already been created elsewhere (e.g. in another Smart Folder or a doc), look it up instead of recreating one from scratch: ![image.png](/api/files/2effa308-dc88-4f8c-a39b-8d825c299d12#width=3072&height=1920) ## Mirroring a context View If some kind of View is useful for all Entities in a Smart Folder, create and configure a View for any Entity and then mirror it for all the others: ![mirror-context-view-in-smart-folder.gif](/api/files/5f9c23d0-3829-4a7a-abe2-f818d4a60339#width=2056&height=1072) Mirroring replicates the same View for every Entity and keeps all the versions in sync. For example, if you add custom sorting, this will automatically be reflected in all the mirrors — you don't have to update each copy manually. The data on each mirrored View is automatically filtered based on the relevant Entity. Here are a few typical examples when mirroring a context View comes in handy: * List of Key Results for current Objectives; * Historical $MRR Report for highest paying Customers; * Vacation Calendar for all Employees. > [//]: # (callout;icon-type=emoji;icon=:snowflake:;color=#6A849B) > Only [data Views](https://the.fibery.io/@public/User_Guide/Guide/Views-8/anchor=Data-Views--8cd932a0-1bea-42a0-9f9f-bd7e44f1ee59) such as Tables and Boards can be mirrored: Documents or Whiteboards with their unique content cannot be replicated automatically. ## Context filters The data on a context View is filtered automatically. By default, we apply the most straightforward context filter but you are free to select another one or disable the automatic filtering altogether: ![image.png](/api/files/589f6021-8526-4244-82a4-19670d579d40#width=2566&height=885) The context filter options include different ways to reach the DB being visualized from the DB of the context View's parent Entity via [Relations](https://the.fibery.io/@public/User_Guide/Guide/Relations-17). We traverse many-to-one (e.g. Features to Product) and many-to-many (e.g. Segments to Clients) relations, including those populated by Formulas and Lookups. Imagine you have three DBs related in this way: * Niche has many Competitors and Use Cases * Competitors and Use Cases are connected via a many-to-many relation In this case, a context View for a Niche allows you to visualize either the Competitors linked directly or those linked to the Niche's Use Cases. One-to-many relations (e.g. Product to Features) are excluded when calculating possible context filtering options. If the context filter option you are looking for is missing, please let us know in the chat — we'll find a workaround while bumping the priority for out-of-the-box support. ## Context Views permissions Unlike regular [Views](https://the.fibery.io/@public/User_Guide/Guide/Views-8), every context View belongs to a specific Entity or, when mirrored, to a Database. This implies different permissions to create, manage, and access them: | | | | | --- | --- | --- | | | **Non-mirrored** | **Mirrored** | | 👀 **to see in the sidebar and navigate via a direct link** | `read` access to the parent Entity | **Any** of the two suffice: `read` access to the Space where the context View's Smart Folder is located `read` access to all Entities of the parent DB | | ✏️ **to create, configure, and delete** | `edit` access to the parent Entity | `configure` access to the parent DB (e.g. Creator in the DB's Space) | | 🎣 **to display in/remove from a certain Smart Folder** | 👀 + ✏️ | | 🪞 **to mirror/unmirror** | **Both** required: `edit` access to the parent Entity `configure` access to the parent DB (e.g. Creator in the DB's Space) | ## Relation Views: context Views on Entity View Every to-many relation on an Entity View can be visualized using a set of [Relation Views](https://the.fibery.io/@public/User_Guide/Guide/Relation-Views-309): ![relation-views-switcher.gif](/api/files/0e07fd12-6be3-45aa-b248-8658c23e0ad7#align=%3Aalignment%2Fblock-center&width=599.390625&height=563) Relation Views are fully functional mirrored context Views, so you can apply custom grouping, sorting, and color-coding — as you would on any other View. By default, we offer a simple List View, but you can customise and even replace it with a View of a different kind — for example, a Table or a Timeline. # LOOKUPS _________ A Lookup is a way to display the contents of a Field from a related Entity. Unlike Relations, Lookups are read-only. To understand the differences better, go to [Lookup vs Relation vs Automatic Relation ](https://the.fibery.io/User_Guide/Guide/Lookups-16/anchor=Lookup-vs-Relation-vs-Automatic-Relation--b895d3f6-423c-4788-9360-f106b4f2e615 "https://the.fibery.io/User_Guide/Guide/Lookups-16/anchor=Lookup-vs-Relation-vs-Automatic-Relation--b895d3f6-423c-4788-9360-f106b4f2e615")section. Check this video for a quick explanation: [https://youtu.be/VJqbAjO3LTs](https://youtu.be/VJqbAjO3LTs) ## How does a Lookup work? Let's check an example. Say you have the following hierarchy: Objective is connected to Epics, and Epics is connected to Features: ![image.png](/api/files/5933d501-dc5a-4c8a-a4a4-d764a6d2381c#width=3392&height=2240) As you can see, there is no direct Relation between Feature and Objective, but they are connected via Epic. If you want to see related Objective in Features, this can be done via Lookup Field that checks the Epic Database. ## Create a Lookup Field 1. Navigate to Database or any Entity from the Database. 2. Click `+ New Field`. 3. Select `Lookup`. 4. Select a Database in a Relation selector (Epic in the example above). 5. Select a Field from the Database (Objective in the example above). 6. Save the Lookup Field. ![Screenshot 2022-06-07 at 3.14.38 PM.png](/api/files/a56b83ba-00f7-4516-8dc5-30ffd58c0459#align=%3Aalignment%2Fblock-left&width=342&height=263) This way, you can see in Feature Database related Objective even though there is no Relation between them. ## Lookup as a Collection Lookup can represent a Collection (a set of Entities) as well. For example, you have hierarchy Objective → Features → Tasks, and you want to see all Tasks for all Features linked to Objective. You can create a Lookup Field in Objective and select Features as a Relation and Tasks as a Field. ![Screenshot 2022-06-07 at 3.18.49 PM.png](/api/files/1ad61aea-1943-474a-8b9d-1f2ebc15b580#align=%3Aalignment%2Fblock-left&width=403&height=290) As a result, you will see Tasks list inside Objective. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#673db6) > Note that this list is read-only: you can't add new Tasks here, it just shows all tasks from all Features linked to an Objective. ## Lookup vs Relation vs Automatic Relation There are several ways to connect information between Databases, and Lookup is just one of them. * A Relation is a connection between two different Databases that is visible from both ends. * A Lookup is a way to display the contents of a Field from a related Entity. Lookups are read-only. * Automatic Relation, also known as auto-linking, enables the automatic linking of Entities from two different Databases based on specific rules. This is an Advanced option, check more in [Auto-linking (Set Relations Automatically)](https://the.fibery.io/@public/User_Guide/Guide/Auto-linking-(Set-Relations-Automatically)-50). | | | | | --- | --- | --- | | | **Visible from one end only** | **Read-only** | | **A Relation** | | | | **A Lookup** | ✅ | ✅ | | **An Automatic Relation** | | ✅ | ### When to choose a Lookup over a Relation? Lookups will be of use when you don't have a direct Relation between Database A and Database C, but they are both connected to Database B. In this case, Lookup helps to jump through the hierarchy and show a specific Entity or Collection. ### Example 1 - Use Lookup to display an Entity Let's check the example from [Product Team Template](https://the.fibery.io/@public/User_Guide/Guide/Product-Team-Template-220). You have Company and Contacts in Customers Space, and you have Interview in the Feedback Space. * For every Company, there are many related Contacts, so the Databases are connected via one-to-many Relation. * You collect feedback from your customers in the Interview Database where you want to mention with whom you talked, or your Contacts. For this, you connect Interview and Contact via one-to-many Relation. ![image.png](/api/files/5d947dd2-3d8d-4c19-97e0-c2b6e73366fd#align=%3Aalignment%2Fblock-center&width=3392&height=2240 "As you see, Company and Interview are not connected") You would also like to automatically see to what Company those Contacts belong. For that, in the Interview Database you create a Lookup Field that displays information about Company where Contacts work. ![image.png](/api/files/30ca5eb6-3020-4c15-a6d4-eda1db552adc#width=3392&height=2240) So despite the fact that there is no Relation between Interview and Company, you can see information about Company in the Interview Database. ### Example 2 - Use Lookup to display a Collection You have Contacts and Country (an Integration Database) in Customers Space, and you have Interview in the Feedback Space. * For every Country, there are many related Contacts, so the Databases are connected via one-to-many Relation. * For every Contact, there can be several related Interviews, so the Databases are connected via one-to-many Relation. You want to see how the interviews are distributed across countries despite the fact that Country and Interview Databases are not connected via a Relation. Every Country have many Contacts and have many Interviews. To do so, go to the Country Database, add a Lookup for the Contacts Fields to display connected Interviews. ![image.png](/api/files/51233ab0-79de-42f7-aa3d-f94d05d0907d#align=%3Aalignment%2Fblock-center&width=3392&height=2240 "Here is how Lookup will look like") For a better visualization of a result, let's create a Board View. For even better visualization, apply a Filter to show only those Countries where `Contacts is not empty.` Here is how it will look like: ![image.png](/api/files/bf27a7e3-ce5e-46ca-943c-9b8b812cfdd6#width=3392&height=2240) As we can see, the German-speaking market is not covered at all 🤷‍♀️ And there are contacts in Argentina and Brazil that can be interviewed. # EXPORT TO MARKDOWN ____________________ You can export Document contents or Entities as a Markdown file, including all images and videos. 1. Click `•••` in the top right menu of a Document or Entity. 2. Select `Export to Markdown` action. 3. Save the file to your hard drive. This can be handy when you want to import the text into another system or create a blog post on some other publishing platform. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#FC551F) > Only **Admins** can export Documents to Markdown ## Copy as Markdown action for entities and docs You can copy any entity or document into markdown format and paste whenever you want (hint: probably to ChatGPT, Anthropic Claude, or any other LLM). Find`Copy as Markdown` action in … menu in an entity or via right click context menu on any view. What is copied for an entity? * Name and all rich text fields content * All fields metadata and values * All comments * All linked Highlights You can also select several cards and copy them to markdown in batch. ![image.png](/api/files/a8431069-82a9-414a-a611-04e248209018#align=%3Aalignment%2Fblock-center&width=887.75&height=489) # RELATIONS ___________ A Relation is a connection between two Databases that is visible from both ends, e.g. you want to connect Features to Releases, Opportunities, Quarters, etc. > [//]: # (callout;icon-type=emoji;icon=:+1:;color=#6A849B) > It doesn't matter if the Databases are in different [Spaces](https://the.fibery.io/@public/User_Guide/Guide/Spaces-18) since Relations can be cross-Space. ## What is a Relation? Imagine you have two Databases: Product and Component. You want to link Components to Products and see all linked Components in a Product. A Relation is what you need. In a Component, you'll see a Relation to a specific Project. ![Product_relation.png](/api/files/54b4ca48-1fc2-4db0-8704-f7550595c8a7#width=1445&height=794) In a Product, you see a list of related Components. ![Product_components.png](/api/files/f80a0d01-7f36-4045-bc9c-5498b229e773#width=1720&height=1027) > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#673db6) > Relations in Fibery are always **two-way.** It means when you add a Relation between Components and Products, the Relation will be visible from both ends. It also means that if you delete a Relation, all connections between two Databases will be lost. ## How to add a Relation A Relation is shown as a Field. You can add a relation from an Entity or from the Relations tab on the Database screen. From an Entity: 1. Open any Entity and find `+ New field` in the bottom right corner. 2. Click `Relation to…` option. 3. Select the related Database. 4. Select Relation [cardinality](https://the.fibery.io/User_Guide/Guide/Relations-17/anchor=Relation-cardinality--bf3b8c12-2c9d-433b-ba06-995b6efb4547) (one-to-one, one-to-many, many-to-many). 5. Click `Add Field` button. ![add_relation.png](/api/files/17c65331-4413-4b7a-adf2-c52a08736761#align=%3Aalignment%2Fblock-left&width=325&height=445) You can also create new Relations on the Database setup screen. 1. Show databases for Space and expand a Database. 2. Click `Relations` menu item. 3. Add a new Relation from this screen (ensure you set the correct cardinality). ## Relation cardinality Relation cardinality refers to the type of Relation between Entities. You specify whether or not multiple Entities (aka records, rows) can be linked — this is called picking relation's cardinality. There are three options to define a Relation type. ### One-to-many This is probably the most common Relation, where you have a Collection of Entities related to one Entity: Product → Components → Features → Subfeatures. > [//]: # (callout;icon-type=emoji;icon=:heavy_check_mark:;color=#9c2baf) > A Collection is a set of Entities that appear as a result of building many-to-many or one-to-many Relations. ![image.png](/api/files/d2900cf4-ca43-4ad1-8fe3-e49129e7ef20#align=%3Aalignment%2Fblock-left&width=603&height=270) ### Many-to-many This Relation is required when you have Collections on both sides. For example, Products ←→ Teams, which means that a Team can work on many Products, and a Product can have many Teams. If you create this Relation, you will see Collections in both Entities. ![image.png](/api/files/678f8a7a-8395-412e-a2e6-f4f358be80be#align=%3Aalignment%2Fblock-left&width=604&height=270) ### One-to-one This Relation is a rare one and is needed when you have a strong bond between Entities. For example, User—Employee reflects that a single User relates to exactly one Employee. This relation is represented as a single Field on both ends. ![image.png](/api/files/ad35e817-9f10-4f54-8a00-0b4d39453056#align=%3Aalignment%2Fblock-left&width=602&height=269) ### How to name a Relation The general recommendation is: * Name to-one relation Fields in singular: `Project`, `Проект`, `Projekt`; * Name to-many relation Fields in plural: `Tasks`, `Задачi`, `Aufgaben`. Since to-one and to-relation Fields behave differently throughout a no-code tool, it's great when you can distinguish them without thinking. The default name for a relation Field is usually OK 🙂 ## Relate a Database to itself You may create nested structures in Fibery by relating a Database to itself. For example, you may nest Features using a one-to-many Relation to create a Features hierarchy. Just add a Relation and select the same Database. As a result, you will have a collection of nested Entities and a reference to a parent Entity. ![parent-feature.png](/api/files/345fd4f9-7dce-4a47-812b-37274ec7b61a#width=1748&height=1102) See [Self-relations](https://the.fibery.io/@public/User_Guide/Guide/Self-relations-328) for more info. ## Relations overview You can see all Relations in a single View. Click on the Workspace name in the top left and then click `Workspace Map` (Admins only). ![workspace-map.png](/api/files/7e4a48b3-83a3-4f0f-8b41-b31e17bbb725#width=1458&height=934) Here you see all [Spaces](https://the.fibery.io/@public/User_Guide/Guide/Spaces-18), [Databases](https://the.fibery.io/@public/User_Guide/Guide/Databases-7), and their Relations. Note that Relations can link within a single Space (Product has many Components) or cross-Space (Product has many Releases). ## Relation Filters Use [Relation Filters and Sorts](https://the.fibery.io/@public/User_Guide/Guide/Relation-Filters-and-Sorts-177) to make it easier for users to pick a correct related Entity: ![relation-filters.png](/api/files/7b59ddd1-25d3-4ef8-b145-e01187c7e1da#align=%3Aalignment%2Fblock-left&width=696&height=210) ## Automatic Relations Automatic Relation, also known as auto-linking, enables the automatic linking of Entities from two different Databases based on specific rules. ![auto-linking.png](/api/files/e41e1a1e-1585-4c79-8364-f4b3a81b162e#align=%3Aalignment%2Fblock-left&width=334&height=442) Check out [Auto-linking (Set Relations Automatically)](https://the.fibery.io/@public/User_Guide/Guide/Auto-linking-(Set-Relations-Automatically)-50) to learn how to do it. > [//]: # (callout;icon-type=icon;icon=gift;color=#6a849b) > Fibery also has freestyle [Entity mentions and bi-directional links](https://the.fibery.io/@public/User_Guide/Guide/Entity-mentions-and-bi-directional-links-31), so you may use them for some cases. # FIBERY TO FIBERY SYNC _______________________ For some complex scenarios in a large organization you may run several Fibery workspaces. Sometimes you need to connect them and fetch some databases from one workspace to another workspace. Fibery-to-Fibery connector can handle that. Some important limitations: * Fibery-to-Fibery sync is one-way, it means you can only update information in one workspace. * Only databases are synced. * All selected databases will be synced into a single space, but you can setup several Fibery to Fibery syncs > [//]: # (callout;icon-type=emoji;icon=:moneybag:;color=#fba32f) > To sync data *from* another Fibery workspace, you'll need [Enterprise plan](https://fibery.io/pricing) for the target workspace. There are no plan restrictions on source workspaces. ## Setup Create a new Space, click Add Integration and select Fibery. ![Screenshot 2024-12-12 at 11.37.15 AM.png](/api/files/97a85289-ded6-4ef6-b499-3e112ad1a6b9#width=2336&height=1676) Then follow the steps: * Provide Fibery Source Workspace in `[workspacename].fibery.io` format. * Provide Fibery Source Workspace API Key. It can be created in Settings → API Keys. * Then select required databases you want to sync and configure fields you want to sync. ## What is synced? * Databases with all fields: * Formulas & Lookups as read-only fields. * Relations (if you select related databases). * Rich text fields with all markdown formatting. * Images, Videos & embeds. * References and mentions are synced as text. * Fibery Users can be synced. `Synchronize all Fibery users into Fibery as Observers` option will sync Fibery Users as well. When clicked, fibery/user database is added to the sync. * If selected, sync will adds all users as Observers into Fibery Workspace, thus we can keep assignments, created by, etc fields. * If not selected, we miss all assignments, created by, etc. ## What is not synced? * ❌ Spaces (all selected databases will be synced to a single Space) * ❌ Comments * ❌ Highlight * ❌ Documents, Whiteboards and Views * ❌ Rules and Buttons * ❌ Custom emojis (It will look like: Custom emoji is `:shsh:`) # USER MANAGEMENT _________________ ## Invite a user > [//]: # (callout;icon-type=emoji;icon=:crown:;color=#1fbed3) > Only workspace Admins can invite new users. 1. Go to `Settings` in the sidebar and choose `Users`. 2. Click `Invite People` button in the top right corner of the page. 3. Type a user's email in every line, select the user role, and click `Send Invites` button. ![image.png](/api/files/fe1ca9de-c2c8-494d-8835-9f699cb8bb2a#align=%3Aalignment%2Fblock-center&width=728&height=455) The invited users will receive email notifications with the invitation link and will be able to log into Fibery. You can also Invite users from the User DB's screen. ![image.png](/api/files/023f0219-7fd3-4d14-a7e5-84b8382b064e#align=%3Aalignment%2Fblock-center&width=956&height=227) ## User roles * **Admins** are the people who configure the workspace and manage users. Admins always have `Creator` permissions for all Spaces so they can see and edit any shared data. The only thing they cannot access is [Private Space](https://the.fibery.io/@public/User_Guide/Guide/Private-Space-25) of other users. As Admins are almighty, we recommend having no more than 1-3 of them. * **Members** are your usual users. You can share anything with them granting any level of access. A Member might be some who is purely an end-user, updating tasks they are assigned to, but it can also be someone managing a Space for their team. * **Observers¹** are typically your colleagues and partners who don't use Fibery as their primary work platform (yet 😈) but need to stay in the loop. You can share Entities, Databases, and Spaces with Observers, but they will only be able to view and comment, not edit. To encourage transparency, we provide unlimited Observers free of charge on all paid plans. * **Guests** are people outside your organization (e.g. clients and contractors) you invite to collaborate on specific projects. Guests can receive edit access to specific entities like Tasks or Projects, but not Spaces or Databases. Guests are free of charge but are limited in their capabilities: * cannot have the same email domain as workspace Admins; * cannot be members of Groups; * cannot see user profiles of other Guests; * do not receive access via [Automatically share Entities via People field](https://the.fibery.io/@public/User_Guide/Guide/Automatically-share-Entities-via-People-field-327); * cannot manage access; * have a maximum number of Entities they can receive access to, depending on your [pricing plan](https://fibery.io/pricing). *¹We used to call them Guests before October 2024, sorry for the confusion.* #### Filter by User role To get a list of Admins, to count the number of Observers, or to display a Smart Folder with Guests, filter by User Role: ![image.png](/api/files/5d9c09c9-760e-4ced-b7fb-bf7c085ccb26#width=5920&height=2124) ## Invite users via invite link 1. Go to `Settings` in the sidebar and choose `Users`. 2. Click `Invite People` (Admins only) button in the top right corner of the page. 3. Toggle the Invite link switch to turn it on. (by default, the toggle is off) 4. Select the user role for the invite link (by default, it's set to Member) 5. Click the Copy button to copy the link to your clipboard. 6. Share the link with any team member you'd like to collaborate with. You can share the link using preferred communication methods such as Slack or email. ![image.png](/api/files/8ccdec05-6b30-45cf-bbee-e5b495230d45#align=%3Aalignment%2Fblock-center&width=718&height=449) With the invite link enabled, anyone who has access to the link can sign up for the service. Members who sign up using the invite link will be charged according to the current plan of the team. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#199EE3) > Guests cannot be invited via this route - you grant access for a guest to specific entities. See [here](https://the.fibery.io/@public/User_Guide/Guide/Share-Entity-233). ## Disable or reset invite link To disable the invite link, toggle the switch off. Once the invite link is disabled, nobody will be able to use it to sign up for the service. To reset the invite link, click on the reset button. This will invalidate the previous invite link and create a new one, and any team members who have not yet accepted the invitation through the old link will need to be invited again using the new link. If the user role for the invite link is changed (e.g., from Member to Observer), the link will be reset, and the old link will become invalid. The new link can be copied and shared the same way. Keep in mind that resetting the invite link is a security measure that can help prevent unauthorized access to your workspace. It's a good idea to reset the invite link periodically or whenever there's a change in team membership. ## Change user's role If you want to change the User's role after the invitation, you can do that directly on the User's card. * Navigate to the `People Space` * Choose the User, you want to change the role of * In the right menu choose the necessary `User Role` option ![image.png](/api/files/e83ae829-03d4-4317-9642-7ad0cb50366a#width=1991&height=769) ## Activate and deactivate users You may deactivate users to prevent them from logging into Fibery (and thereby pay less money, if they were not Observers). 1. Go to `Settings` in the sidebar and choose `Users`. 2. Click `•••` in a user row (Admins only) and select `Deactivate` action. ![image.png](/api/files/1242dbac-8463-4b19-8aff-2185c5ce9e75#width=1984&height=528) You can also use Context menu to achieve that. ![image.png](/api/files/bc8d6734-d25a-4a85-8591-3c94529ae58c#width=1263&height=797) As a result, the user will be deactivated and unable to log into Fibery. Your Fibery subscription price will be decreased. To activate a user back, to the same and select Activate action. As a result, the user will be able to log into Fibery, and the subscription price will be increased. Deactivated User will also be shown in different fields (`Assignees`, `Created By` and etc.) and all his actions will be saved in History (`Audit log`, `Entity History`, etc.) ## Delete users Delete user will reset all assignments, ownership, and other relations where the user was set. But the data itself will be safe and preserved. Use this operation when you are sure that data loss is OK. In most cases, we recommend deactivating users. 1. Go to `Settings` in the sidebar and choose `Users`. 2. Click on `•••` in a user row (Admins only) and select `Delete` action. You can also delete a User on any View via the usual context menu. ## Changing a user's email address Only an Admin can change the emails of Fibery users. 1. Go to `Settings` in the sidebar and choose `Users`. 2. Click on `•••` in a user row (Admins only) and select `Change Email` action. 3. Type the new email and confirm the change. The user will receive a confirmation message at the new email address and should confirm the change. You can also do that via Context menu. ![image.png](/api/files/638946a7-b8a9-49d8-8489-11441b1892e5#align=%3Aalignment%2Fblock-left&width=673.9931030273438&height=575.998291015625) ## FAQ ### I have a paid account, what happens if I invite a user as Admin, Member, or Observer? When you invite a new Admin or Member, a credit card linked to your account will be charged (pro-rata) and the subscription cost will be increased. Learn more about it on [How deactivating users affects billing](https://the.fibery.io/@public/User_Guide/Guide/How-deactivating-users-affects-billing-110) For an extra Observer, nothing will happen, since Observers are free in Fibery. # CAPTURE INSIGHTS AND PRODUCT FEEDBACK FROM INTERVIEWS _______________________________________________________ [https://youtu.be/SRjcsKfVkRk](https://youtu.be/SRjcsKfVkRk) # GRAPHQL AUTHENTICATION _________________________ Authentication is required for executing graphQL queries from your code or GraphQL IDEs of your choice. Fibery API uses simple token-based authentication. That means you need to pass your API token with every request. This token could be the same for all requests, there is no need to generate a new one each time. Your API token carries the same privileges as your user, so be sure to keep it secret. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#fba32f) > Make sure to replace your account name, space name and token with the actual values Curl: ``` # To authenticate set the Authorization header in this way: curl -X POST "https://YOUR_ACCOUNT.fibery.io/api/graphql/space/YOUR_SPACE" \ -H "Authorization: Token YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"query": "{me{email}}"}' ``` JavaScript: ``` fetch(YOUR_SPACE_ENDPOINT, { method: 'POST', body: JSON.stringify({query: "{me{email}}"}), headers: { 'Content-Type': `application/json`, 'Authorization': `Token ${YOUR_TOKEN}`, } }); ``` ## Generate a new token Fibery Admin can create a new token via UI. Navigate to Settings → API Keys and click `Generate API key` button. ![Screenshot 2024-01-12 at 10.46.44 AM.png](/api/files/6d209e6d-7123-413d-be01-76f902dcafd4#width=2182&height=1058) You can also manage access tokens via the following endpoints: * `GET /api/tokens` — lists all access tokens that were given to current user * `POST /api/tokens` — creates new token for current user * `DELETE /api/tokens/:token_id` — deletes token by id When accessing those endpoints you need to be authenticated 🤷. At the moment, the only option is via a cookie. So the easiest way to acquire a token is to log in into your Fibery workspace and execute the following code in the browser console: ``` fetch(`https://${window.location.host}/api/tokens`, { method: 'POST' }) .then(res => res.json()) .then(obj => console.log("Your API token:", obj.value)); ``` The browser will set the cookie automatically. ## Manage existing tokens To retrieve your API keys, send a GET request: ``` fetch(`https://${window.location.host}/api/tokens`, { method: 'GET' }) .then(res => res.json()) .then(apiKeys => console.log(apiKeys)); ``` To delete an API key, send a DELETE request: ``` fetch(`https://${window.location.host}/api/tokens/token_id`, { method: 'DELETE' }); ``` # SPACES ________ A Space is a hub with data and Views relevant to a specific process. For example: Software Development, Candidates tracking, Vacations tracking, CRM, HR, etc. If you want to add some process management into Fibery, think about a new Space. ## What Space contains? Every Space is unique, but here are the main traits: * Space has its own section in the [Sidebar](https://the.fibery.io/@public/User_Guide/Guide/Sidebar-21) * Space has some [Databases](https://the.fibery.io/@public/User_Guide/Guide/Databases-7) * Space has some [Views](https://the.fibery.io/@public/User_Guide/Guide/Views-8) * Space has some [Automations](https://the.fibery.io/@public/User_Guide/Guide/Automations-27) ## Create new Spaces > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#FC551F) > Creating a Space demands **admin** permission. There are three ways to create a new Space: * From scratch — in this case empty Space will be created. * Generate with AI — here you can describe what process you want to have and AI generates databases with fields and views. * From template — create new Space fast from some template. Just click `+` near Spaces, select the best method and create a new Space. ![Screenshot 2025-01-30 at 5.41.52 PM.png](/api/files/d934d810-6113-4e06-81c1-d4eec74fb39e#align=%3Aalignment%2Fblock-center&width=2024&height=1288 "Different Options to Create a New Space") ## Spaces Customization Space customization has several options: * Add new [Databases](https://the.fibery.io/@public/User_Guide/Guide/Databases-7) * Add new [Fields](https://the.fibery.io/@public/User_Guide/Guide/Fields-15) to existing Databases * Add new [Views](https://the.fibery.io/@public/User_Guide/Guide/Views-8) * Setup [Automations](https://the.fibery.io/@public/User_Guide/Guide/Automations-27) * Setup [Relations](https://the.fibery.io/@public/User_Guide/Guide/Relations-17) between [Databases](https://the.fibery.io/@public/User_Guide/Guide/Databases-7) * [Share Space](https://the.fibery.io/@public/User_Guide/Guide/Share-Space-232) with Users and Groups > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#FC551F) > Only Admins or Creators can customize the Space. ## Delete Spaces You may delete a Space. Note that deleting a Space will delete **all its data**. For example, if you delete Project Management Space, Project DB with all its Projects will be deleted. To delete a Space, click … near Space name and select `Delete Space` option. ![Screenshot 2025-01-30 at 5.43.03 PM.png](/api/files/73ab9e62-0410-4102-bb88-6a00a1e30b72#width=2030&height=1408) You can undo an accidental deletion via a toast or restore the Space later in [Trash](https://the.fibery.io/@public/User_Guide/Guide/Trash-90). ### Delete Space Data In the same menu, you can use `Delete Space Data` option to remove the data while retaining the overall database design and functionality. This option preserves the database [Fields](https://the.fibery.io/@public/User_Guide/Guide/Fields-15), [Relations](https://the.fibery.io/@public/User_Guide/Guide/Relations-17), [Formulas](https://the.fibery.io/@public/User_Guide/Guide/Formulas-39), and [Automations](https://the.fibery.io/@public/User_Guide/Guide/Automations-27). This feature is useful when you want to delete sample data from a template, [Create Space Using AI](https://the.fibery.io/@public/User_Guide/Guide/Create-Space-Using-AI-174) or want a new start. ## Share/Import Spaces You can share and import existing Spaces from one account to another. For example, you’ve created a new fancy Marketing Tracking Space, and your friend wants to have the same Space. You can share Marketing Tracking Space as a template and send a link to your friend to install it. To share a Space, click … near Space name and find `Share as Template` action. Click it, then click `Generate shareable link` button and copy the URL. ![Screenshot 2025-01-30 at 5.44.54 PM.png](/api/files/11546d5d-5688-48f1-802a-b56883d25db3#width=2018&height=1388) You may send the link to any Fibery user that has an account, and she will be able to import this shared Space. You may find the details flow in [Share Space as a Template](https://the.fibery.io/@public/User_Guide/Guide/Share-Space-as-a-Template-56) and [Share Workspace as a Template](https://the.fibery.io/@public/User_Guide/Guide/Share-Workspace-as-a-Template-57). # INTEGRATION SCHEMA TYPES __________________________ You can create your own [Integration templates](https://the.fibery.io/@public/User_Guide/Guide/Integration-templates-68) and sync data from any external system. In terms of integration, a Fibery Field type is represented as pair of parameters in the integration schema: * `type` * `subType` Below the list of available combinations | | | | | | --- | --- | --- | --- | | **Fibery Type** | **Integration type** | **subType** | **Comments** | | `fibery/decimal` | `number` | | It's possible to apply number optional formatting though field configuration. Formatting is applied only for newly created fields. Formatting can be changed via default Fibery fields UI once field is created. **Money** { "id": "amount", "name": "Amount", "type": "number", "format": { "format": "Money", "currencyCode": "EUR", "hasThousandSeparator": true, "precision": 2 } } **Percent** { "id": "percent", "name": "Percent", "type": "number", "format": { "format": "Percent", "precision": 2 } } **Number** { "id": "value", "name": "Value", "type": "number", "format": { "format": "Number", "unit": "ea", "hasThousandSeparator": true, "precision": 2 } } | | `fibery/integer` | `number` | `integer` | | | `fibery/text` | `text` | | It's possible to apply text optional formatting though field configuration. Formatting is applied only for newly created fields. Formatting can be changed via default Fibery fields UI once field is created. **Phone** { "id": "phone", "name": "Phone", "type": "text", "format": { "format": "phone" } } | | `fibery/url` | `text` | `url` | | | `fibery/email` | `text` | `email` | | | `fibery/bool` | `text` | `boolean` | The conversion from text to boolean is as follows: { "true": true, "yes": true, "on": true, "1": true, "false": false, "no": false, "off": false, "0": false, "checked": true, "": false } | | `fibery/date-range` | `text` | `date-range` | The value is a **stringified** object with `start` and `end` fields { "start": "2020-01-22", "end": "2020-08-19" } | | `fibery/date-time-range` | `text` | `date-time-range` | The value is a **stringified** object with `start` and `end` fields { "start": "2020-01-22T01:02:23.977Z", "end": "2020-08-18T06:02:23.977Z" } | | `Collaboration~Documents/Document` | `text` | `html` | Replaces content of rich text field converting value from `html` format | | `Collaboration~Documents/Document` | `text` | `md` | Replaces content of rich text field converting value from `md` format | | Icons extension | `text` | `icon` | Can be used to set Icon of entity (ref.[Icon field](https://the.fibery.io/@public/User_Guide/Guide/Icon-field-193)) At the moment it works only with Emojis. The value should be either a native emoji (i.e. 👋🏻) or its alias (i.e. `:wave::skin-tone-2:`) | | Single Select Enum | `text` | `single-select` | It's possible to specify options by adding `options` field into schema field configuration { "options": \[ { "name": "Open", "icon": "laughing", "color": "#f2e2f4" }, { "name": "In Progress" }, { "name": "Closed" } \] } If `options` property is missing then the integration module will infer the options automatically based on your data. | | Workflow | `text` | `workflow` | It's possible to specify options by adding `options` field into schema field configuration. Options must include record with `default: true` and `final: true` records. It could optionally include `type: "Not started" | "Started" | "Finished"` { "options": \[ { "name": "Open", "icon": "laughing", "color": "#f2e2f4", "default": true }, { "name": "In Progress", "type" "Started", }, { "final": true, "name": "Closed" } \] } If `options` property is missing then the integration module will infer the options automatically based on your data, including start and final options. | | Multi Select Enum | `text` or `array[text]` | `multi-select` | It's possible to specify options by adding `options` field into schema field configuration { "options": \[ { "name": "JS", "icon": "laughing", "color": "#f2e2f4" }, { "name": "Java" }, { "name": "Closure" } \] } If `options` property is missing then the integration module will infer the options automatically based on your data. Values can be passed differently depending on `type` value. It can be either a JSON array `["JS", "Java"]` of selected options or a comma-separated string of selected options `"JS,"Java"` | | `fibery/date-time` | `date` | | Value format: 2020-01-22T01:02:23.977Z | | `fibery/date` | `date` | `day` | Value format: 2020-08-22 | | Files extension | `array[text]` | `file` | Array of links to files. Integration will download files from the links and upload into Fibery. If access to file content requires authentication then url should be provided in special format via `app://resource` and connector should implement `POST /api/v1/synchronizer/resource` endpoint. [See for more info](https://the.fibery.io/User_Guide/Guide/Custom-App-REST-Endpoints-272/anchor=POST-api-v1-synchronizer-resource--3ac1fe02-6009-44d8-ac5f-94bbe9c76cb9) | | Avatar extension | `text` | `avatar` | Link to file. Integration will download file from the link and upload into Fibery | ### **Special cases** #### Title field By default, the integration will use the Field with id `name` as the title field (equivalent to the Name Field in standard databases) but it is possible to override this by adding the `subType: title` annotation. ``` { "commitName": { "type": "text", "name": "Commit Name", "subType": "title" } } ``` # EMBEDS ________ To enhance the friendliness and richness of Fibery Documents and rich text Fields, consider embedding external content. Use `/Embed` command to embed content from external services such as Youtube, Loom, Figma, Miro, Google Map, Google Drive, Twitter, Mixpanel, webpages, etc. Some services may have separate commands to access them, but the Embed command essentially performs the same function. ![Screenshot 2023-08-16 at 2.32.19 PM.png](/api/files/b93d15d2-706e-4bbb-bcb0-48eaaaaaec15#align=%3Aalignment%2Fblock-center&width=289&height=275) ## What external services are supported? We use[ Iframely]( https://iframely.com " https://iframely.com ") to handle embeds and it supports [over 1900 services](https://iframely.com/domains "https://iframely.com/domains"). So there is a very good chance that your service is supported. > [//]: # (callout;icon-type=emoji;icon=:nerd_face:;color=#1fbed3) > You can embed all kind of links to make them prettier. For example, here is an embedded link to our community page: [https://community.fibery.io/](https://community.fibery.io/) And here is an embedded link to our website: [https://fibery.io](https://fibery.io) This way you can make documents more vibrant and rich. ## Resize embeds horizontally and vertically You can always resize embeds horizontally. Just find drag handler on the left or right and drag it to the desired direction. ![2023-08-14 15.19.10.gif](/api/files/3ce1f837-04fb-48b0-89ae-e169b0cd2c68#width=1233&height=743) Sometimes it is possible to vertically resize an embed. However, it only works for certain services, such as Figma or CodePen (where it is applicable). Look for a dragger at the bottom of the embed and use it to adjust the vertical size. ![2023-08-14 15.26.22.gif](/api/files/6ccac2d3-c1f0-4213-b3b5-036ba4e3323c#align=%3Aalignment%2Fblock-center&width=573&height=343) ## Change content of embeds and navigate to original You can change a link in an embed. Find the icon on the top right of the embed and click it to set a new link. ![Screenshot 2023-08-14 at 3.30.16 PM.png](/api/files/b56f720b-b8fe-45a2-8477-b187f058e293#align=%3Aalignment%2Fblock-center&width=810&height=313) To access the original link, simply click the arrow icon located in the top right corner of the embed. ## Embed links that are not supported by Iframely Some URLs are not supported by the [Iframely ](https://iframely.com/ "https://iframely.com/")service. In this case, Fibery can embed these links as they are in the iframe. Use `Compatibility mode` switcher to enable it. ![CleanShot 2023-10-20 at 13.04.50@2x.png](/api/files/3c47f9d6-be5d-4882-973a-12894326ff99#align=%3Aalignment%2Fblock-center&width=578&height=321) When the user inserts an embed in compatible mode, we display a consent message to allow loading the frame from a specific host. ![Screenshot 2023-08-26 at 17.57.50.png](/api/files/42015f90-f2cb-4b08-8bda-f07522b2c863#align=%3Aalignment%2Fblock-center&width=624&height=374) If a user permits loading iframes from a specific host, they can prevent loading a specific URL by clicking the block button. Here is where you can find it: ![CleanShot 2023-10-20 at 13.03.52@2x.png](/api/files/83f46b58-f58e-4f54-b341-0227009108f9#align=%3Aalignment%2Fblock-center&width=566&height=323) ## FAQ #### Do you support compatibility mode for frames? While most URLs will seamlessly integrate with our embed feature, some may not display optimally. This includes content that is behind logins or incompatible with our embed, which may result in errors or limited information display. Unfortunately, at the moment this behavior can't be fixed. #### Is it possible to create embed with Automation? It's not possible to create an embed using Markdown API. #### Does the page that needs to be embedded have to be publicly accessible? I'm looking to determine which external BI tools and their charts can be embedded. It depends on the BI system. Some systems have a sharing mode, and embed will be accessible for all users without authorization. # SEND COMMENT TO SLACK CHANNEL _______________________________ ### Needed: * Get notification when someone comments on the article * The notification has to include the author's name and full comment text ### How the rule looks like: ![image.png](/api/files/a6126859-3f36-44d8-ada6-5f7d44a79a11#align=%3Aalignment%2Fblock-left&width=670&height=592) ### Markdown Syntax ``` {! Comments:Author.Name,Document Secret !} <% const fibery = context.getService('fibery'); const lastComment = Entity.Comments[Entity.Comments.length-1]; %>Comment added for {{Name}} by <%= lastComment['Author.Name'] %> <%= await fibery.getDocumentContent(lastComment['Document Secret'], 'md') %> ``` # TEMPLATES ___________ Templates usually represent ready-to-use processes, like Product Management, Events Tracking, etc. Click `Templates` link in the top left menu and explore templates. A Template usually contains several [Databases](https://the.fibery.io/@public/User_Guide/Guide/Databases-7) and [Views](https://the.fibery.io/@public/User_Guide/Guide/Views-8). You may open a template and check its details. If you'd like to try it, click `Install` button. [Integration templates](https://the.fibery.io/@public/User_Guide/Guide/Integration-templates-68) are the fast way to integrate with existing systems, like GitLab, Intercom, Braintree, etc. Click `Integrations` section in templates categories to explore them. ## FAQ ### Can I add my own templates into the templates gallery? Not yet, but you can create and share your own templates via a direct link → [Share Workspace as a Template](https://the.fibery.io/@public/User_Guide/Guide/Share-Workspace-as-a-Template-57) # DOMAIN ________ # App schema Each app should follow strict schema with the following structure: | Name | Type | Description | Required | Example | | --- | --- | --- | --- | --- | | name | string | Name of the app | true | "MyApp" | | type | "crunch" | Set to "crunch" if app has predefined schema | false | "crunch" | | website | string | Website of app | false | "http://myawesomeapp.com" | | version | string | App version | true | "1.0.0" | | description | string | App description | true | "My awesome app" | | authentication | Array | Available authentications in app | true | \[{id: "none", name: "no auth"}\] | | sources | Array | Available sources of data in app. Can't be empty. | true | \[{id: "flowers", name: "Flowers"}\] | | responsibleFor | Object | App responsibilities | true | {dataProviding: true} | ## Authentication Authentication model represents type of authentication in app and has following structure: | Name | Type | Description | Required | Example | | --- | --- | --- | --- | --- | | id | "none"\|"oauth"\|"oauth2"\|string | Authentication id | true | "none" | | name | string | Name of authentication | true | "Connection Settings" | | description | string | Description of authentication | false | "Give the name for connection" | | fields | Array | Authentication fields | false | \[{optional: false, id: "accountName", name: "Title", type: "text", description: 'Give the name for connection'}\] | If your app doesn't require authentication you should add authentication with *id* = "none". In the case you can omit *fields*. ### Authentication field Authentication field represents the field in account. So account that will send to API endpoints will consist of the authentication fields. Authentication field has following structure: | Name | Type | Description | Required | Example | | --- | --- | --- | --- | --- | | id | string | Id of field. The id will be specified in account object. | true | "accountName" | | name | string | Name of the field. Will be displayed in auth form. | true | "Title" | | type | string ([more about types](https://the.fibery.io/@public/User_Guide/Guide/Field-types-366)) | Type of the field | true | "text" | | description | string | Description of the field | true | "Give the name for connection" | | optional | boolean | Is the field optional | false | false | | value | string | Default value of the field | false | null | Note that authentication field with some types requires more information to specify. For example, for *highlightText* type you also need to specify *editorMode* in authentication field. ## Source Source represents kind of data and has following structure: | Name | Type | Description | Required | Example | | --- | --- | --- | --- | --- | | id | string | Id of data source | true | "query" | | name | string | Name of data source | true | "Query" | | description | string | Description of data source | false | "PostgreSQL query" | | filter | Array | Array of filters for the data source | false | \[{id: "query", title: "Query", type: "highlightText", editorMode: "sql"}\] | If source doesn't require any filtering you can omit *filter* field. ### Source filter Source filter represents filter that will be applied on source data. Source filter has following structure: | Name | Type | Description | Required | Example | | --- | --- | --- | --- | --- | | id | string | Id of filter | true | "table" | | title | string | Title of filter | true | "Table" | | type | string ([more about types](https://the.fibery.io/@public/User_Guide/Guide/Field-types-366)) | Type of filter | true | "list" | | datalist | boolean | Is filter has values to select from | false | true | | optional | boolean | Is filter optional | false | false | | secured | boolean | Secured filter values are not available for change by non-chart owner | false | true | Some additional properties should be specified in case when filters should be displayed in special modes, for example JSON or SQL. For example, for *highlightText* type you also need to specify *editorMode* for the filter field. # ZENDESK INTEGRATION _____________________ In this guide, we'll cover how to integrate Fibery with Zendesk and extract feedback from Zendesk tickets. [https://youtu.be/ndHP1BmmgEw](https://youtu.be/ndHP1BmmgEw) ## Setup Zendesk sync 1. Navigate to `Templates` and find `Zendesk` template 2. Click `Sync`. 3. Insert URL to your Zendesk account and authorize it. 4. Choose what databases you want to sync from Zendesk. In most cases you want to have all the data. Specify starting date for the sync, by default it is a month ago, but you may want to fetch all the data: 5. Click `Sync now` and sync process will be started. Note that it may take time to complete. Zendesk Space will appear in the sidebar. ![image.png](/api/files/1a962b82-a3b3-441e-aa90-007178409e52#align=%3Aalignment%2Fblock-center&width=839.9750366210938&height=502) ## Link feedback to ideas, features, bugs, etc. 1. Open any Ticket. 2. Select the text, push `Cmd + L`, select some entity and text will be linked to the selected entity. 3. Learn more about this in [Highlights](https://the.fibery.io/@public/User_Guide/Guide/Highlights-310) ## FAQ #### I've checked the support tickets, and we have incredible amount of spam tickets. If I would delete those, would it mean that you would do less requests for Zendesk, or would it be the same? If the deletion is before the sync happens then yes, we’ll have a bit less data to sync. If later then not so much sense. The only benefit is that the next full sync will be faster. # HOW TO CREATE A TEMPLATE ___________________________ Let's try to figure that out with one use case, taken as an example. Imagine we have a Project. And each time we start a new Project, we have a set of repetitive Tasks, that has to be done. So, to create a new Landing Page, you have always to: * Design it * Prepare Copy * Create Layout * Review There can also be some unique tasks that are different from Project to Project, but we will add them manually if needed. So, it's out of our focus now. As an example, I'll take our `Project Management` Template. ![image.png](/api/files/1cad4d1e-6141-4a4f-afd4-da36d00116ca#align=%3Aalignment%2Fblock-left&width=375&height=462) #### **Set Lists of Tasks to be generated** Automations will help us here. At first, let's navigate to the `Automations` Tab on the Project Level ![image (1).png](/api/files/444651ce-2320-49fe-94cc-40e4f1184900#width=1529&height=241) The trigger will be extremely simple here: ![image (2).png](/api/files/2f0c17c8-18e4-4006-ba06-96d8a52aed61#width=1061&height=558) *Note: Trigger = when the Tasks will be generated. When a new Project is Created? When it goes from the "Icebox" state to the "In Progress"? When Dates are set? When a responsible person is assigned? That's up to you 💪* Now let's set some Tasks, that have to appear: ![image (3).png](/api/files/ed8e167c-326f-486f-baf3-bef7740dc192#align=%3Aalignment%2Fblock-left&width=742&height=508) Tadaaah! That's it :) ![Generated Tasks.gif](/api/files/c4c3a6aa-5152-488c-bf5c-1e14f1c909df#align=%3Aalignment%2Fblock-left&width=704&height=328) #### **2. Set different Templates for Different kinds of Projects** And now let's imagine, that you have a different kind of Project. Let's say, we have Landings, Websites, and Brand books. And for different kinds of Projects, you have different Templates. Then we need to be able to identify which of the Projects we're working on. This can be done by adding [Single and Multi-Select fields](https://the.fibery.io/@public/User_Guide/Guide/Single-and-Multi-Select-fields-87) , or a separate` `[`Database` ](https://the.fibery.io/@public/Public_Roadmap/Roadmap-Board-5974#User_Guide/Guide/Databases-7)(Project Type) ![image (4).png](/api/files/294d1d10-50c2-4e7e-9b0a-eee59c9164dc#align=%3Aalignment%2Fblock-left&width=660&height=453) ![image (5).png](/api/files/6c7eee83-574b-43bf-95e5-1605039161ad#width=1532&height=702) I would recommend creating a separate Database, as it will work in the future for some nice things ( like [Smart Folders](https://the.fibery.io/@public/User_Guide/Guide/Smart-Folders-26) ) So, we need to create a Project Type Database and connect it with a Project like this: ![image (6).png](/api/files/4153356e-e74e-4a39-9270-7c1d2e6fca39#align=%3Aalignment%2Fblock-left&width=279&height=349) *If you want to know more about how* [Databases & Relations work, check this video](https://youtu.be/ddgJGoQBdtQ). And now we need to improve a bit our previous Automation set. So, the Trigger will be changed. Now we need not identify whether the Project was created, but understand, which Type of Project was set. So, at first, we will create a template for Landing Projects. ![image (7).png](/api/files/8bd694b9-fee2-405e-8b8b-7e547a0d3c91#width=1066&height=640) ![image (8).png](/api/files/c58483ed-b907-4758-a18e-0ad6a9a6ca2f#width=1007&height=693) And for other kinds of Projects, we will create another set of Tasks ![image (9).png](/api/files/20e3d1ec-0ebe-49c4-b233-cfcd296bcdb7#width=1071&height=621) ![image (10).png](/api/files/351d2e1f-9a93-4947-a1f6-55e46f711f4c#width=1043&height=606) And this is how it works now: ![Generated Tasks 2.gif](/api/files/dfd45019-da43-4084-90d6-4b9538b794aa#width=1895&height=882) #### **3. More complicated but ready-to-go.** Hey, we have a ready-to-go template that is already set up, but it has a bit more complicated structure and doesn't use Automations at all... So, if you're curious enough and want to start new initiatives with less a hassle - [install this template](https://shared.fibery.io/t/620b245c-185e-406c-a80f-f94896aac16d-templating) and enjoy # MERGE ENTITIES ________________ The `Merge into` action allows you to merge duplicate entities while preserving important information. It provides a convenient way to merge entities in both the Entity View and as a batch action in other views, such as the Table view. ![2024-06-20 10.01.24.gif](/api/files/6c19f123-6f27-4439-aa73-2398ca7776b2#width=2334&height=1146) ### How to merge two entities 1. To access the Merge action for an entity, click on the ellipsis `...` button. 2. From the dropdown menu, select the "Merge into..." option. 3. After selecting the "Merge into..." option, a search interface will appear. Use the search interface to find entities of the same database that you want to merge. 4. Click on a specific entity merge. ### How merge works? The merge operation will combine the information from the source entity into the target entity according to the following rules: * If the target entity has a field set, that field will be preserved. * For checkbox fields, if at least one source entity has it checked, it will be checked in the target entity. * If the target entity has an empty field, but a source entity has that field set, the field will be set for the target entity using the information from the first source entity. * All collections and multi-selects will be merged, with all entities from the source collections moved to the target entity. * Comments will be merged, possibly from a system user. * Highlights will be set for the new target entity. * Content from rich text fields in the source entities will be appended to the target entity's rich text fields, with a prefix H3 header indicating the merge source. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#e72065) > After the merge, the source entities will be deleted. ## Known Issues (missing things) * Inline comments of deleted entities are missing after the merge. * Highlight sources will be missing after the merge. * Duplicated notifications may be received for mentions from rich-text fields (not applicable to comments). * Pointing references to the target entity after the merge is not working. # USER PREFERENCES API ______________________ ### Weekend days Admin can change any user weekend preferences using the following command: Arguments: * user-id (required) - user id * ui-preferences-diff (required) - map with 'isoWeekends' key only. 'isoWeekends' key value must be an array of integers with 0 <= size <= 7 cURL ``` curl -X POST https://YOUR_ACCOUNT.fibery.io/api/commands \ -H 'Authorization: Token YOUR_TOKEN' \ -H 'Content-Type: application/json' \ -d \ '[ { "command" : "fibery.user/apply-ui-preferences", "args" : { "user-id": "01f972c0-7a75-49ce-9e6e-044310e5ed38", "ui-preferences-diff": { "isoWeekends" : [6,7] } } } ]' ``` Admin can read any user preferences using the following command cURL ``` curl -X POST https://YOUR_ACCOUNT.fibery.io/api/commands \ -H 'Authorization: Token YOUR_TOKEN' \ -H 'Content-Type: application/json' \ -d \ '[ { "command": "fibery.entity/query", "args": { "query": { "q/from": "fibery/user", "q/select": { "fibery/ui-preferences": "fibery/ui-preferences" }, "q/limit": "q/no-limit", "q/where": ["=", ["fibery/id"], "$userId"] }, "params": { "$userId": "01f972c0-7a75-49ce-9e6e-044310e5ed38" } } } ]' ``` Response ``` [ { "success": true, "result": [ { "fibery/ui-preferences": { "firstDayOfWeek": 1, "weekends": [5], "isoWeekends": [6,7] } } ] } ] ``` # DOWNLOAD REPORT AS PNG FILE THROUGH API __________________________________________ You can get reports using Fibery API First, you have to make a POST request POST ``` https://your-account.fibery.io/api/vizydrop/api/v1/sources/6112961711c64d15994e95aa/update/notify ``` GET ``` https://your-account.fibery.io/api/vizydrop/api/v2/drops/6112961711c64de8eb4e95ab/reportData/png?applyUserFilters=true ``` You can change `png` to `json` or `csv` Authorization is standard # DOCUMENTS ___________ A Document is a [Rich Text](https://the.fibery.io/@public/User_Guide/Guide/Rich-Text-28) view object that lives within one of your [Spaces](https://the.fibery.io/@public/User_Guide/Guide/Spaces-18). Alternatively, Documents can be associated with an entity in a given Database (provided the Database has the Documents field enabled - see [Fields](https://the.fibery.io/@public/User_Guide/Guide/Fields-15) ). Check [Rich Text](https://the.fibery.io/@public/User_Guide/Guide/Rich-Text-28) for more details. If you want to build a wiki, but not sure whether to use Documents or Document databases, [check this community topic.](https://community.fibery.io/t/native-documents-vs-documents-database/6323) # WEEK NUMBER IN FORMULAS (DEPRECATED) ______________________________________ > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#4faf54) > Just use **IsoWeekNum(\[Creation Date\])** function. ## 📦 Archive While [Calculate the week number in Formulas](https://the.fibery.io/@public/Product_Management/feature/Calculate-the-week-number-in-Formulas-4226) is still not here, we suggest using a workaround. Here are the options, that can be helpful: #### WeekYear: ``` Year(DateField + Days( If(WeekDayName(DateField) = "Monday",3, If(WeekDayName(DateField) = "Tuesday",2, If(WeekDayName(DateField) = "Wednesday",1, If(WeekDayName(DateField) = "Thursday",0, If(WeekDayName(DateField) = "Friday",-1, If(WeekDayName(DateField) = "Saturday",-2, -3)))))))) ``` The above formula tells you which year a given date is in. This might sound crazy, but 1st Jan 2023 is actually in the year 2022 as far as week numbers are concerned (it’s week 52) and 31st Dec 2024 is actually in the year 2025 (week 1) 🤪 It is the Thursday in any given week that determines which year that week falls under. Then, this formula can be used as follows to work out the week number. #### Week number: ``` RoundUp(ToDays(DateField - (Date(WeekYear,1,1) + Days( If(WeekDayName(Date(WeekYear,1,4)) = "Monday",2, If(WeekDayName(Date(WeekYear,1,4)) = "Tuesday",1, If(WeekDayName(Date(WeekYear,1,4)) = "Wednesday",0, If(WeekDayName(Date(WeekYear,1,4)) = "Thursday",-1, If(WeekDayName(Date(WeekYear,1,4)) = "Friday",-2, If(WeekDayName(Date(WeekYear,1,4)) = "Saturday",-3, -4))))))))) / 7,0) ``` This works by determining the last day of the previous year (using the rule that the 4th of January is always in week 1) and calculating how many weeks (incl fractions of a week) have elapsed since then. If you have any questions here, [this community topic is the best place to discuss](https://community.fibery.io/t/week-number-formulas/3880 "https://community.fibery.io/t/week-number-formulas/3880"). #### Determine whether the entity is within the "this week" timeframe ``` DateField >= (Today() - Days( If(WeekDayName(Today()) = "Monday",0, If(WeekDayName(Today()) = "Tuesday",1, If(WeekDayName(Today()) = "Wednesday",2, If(WeekDayName(Today()) = "Thursday",3, If(WeekDayName(Today()) = "Friday",4, If(WeekDayName(Today()) = "Saturday",5, 6)))))))) and DateField <= (Today() + Days( If(WeekDayName(Today()) = "Monday",6, If(WeekDayName(Today()) = "Tuesday",5, If(WeekDayName(Today()) = "Wednesday",4, If(WeekDayName(Today()) = "Thursday",3, If(WeekDayName(Today()) = "Friday",2, If(WeekDayName(Today()) = "Saturday",1, 0)))))))) ``` \ Noted: if your week has a custom duration (for example, from Sunday to Sunday), you can adjust the formula by changing the order of the weekdays. Here is an example: ``` DateField >= (Today() - Days( If(WeekDayName(Today()) = "Sunday",0, If(WeekDayName(Today()) = "Monday",1, If(WeekDayName(Today()) = "Tuesday",2, If(WeekDayName(Today()) = "Wednesday",3, If(WeekDayName(Today()) = "Thursday",4, If(WeekDayName(Today()) = "Friday",5, 6)))))))) and DateField <= (Today() + Days( If(WeekDayName(Today()) = "Sunday",6, If(WeekDayName(Today()) = "Monday",5, If(WeekDayName(Today()) = "Tuesday",4, If(WeekDayName(Today()) = "Wednesday",3, If(WeekDayName(Today()) = "Thursday",2, If(WeekDayName(Today()) = "Friday",1, 0)))))))) ``` # WHITEBOARDS _____________ A Whiteboard is a canvas where you can create various diagrams, brainstorm ideas and convert these diagrams into real work. A Whiteboard lives within one of your [Spaces](https://the.fibery.io/@public/User_Guide/Guide/Spaces-18). Alternatively, it can be associated with an entity in a given Database (provided the Database has the Whiteboards field enabled — see [Fields](https://the.fibery.io/@public/User_Guide/Guide/Fields-15) ). Whiteboards can also be [embedded into rich text (fields or documents)](https://the.fibery.io/@public/User_Guide/Guide/Views-inside-Rich-Text-\(Embed-Views\)-200). ![image.png](/api/files/4c005b8e-c5ec-4daa-9b75-e0295c2b96dc#align=%3Aalignment%2Fblock-center&width=2657&height=1560 "Whiteboard example") ## Basic tools ### Select Use Select tool (`V`) to select objects. You may select many objects at once, just try to select an area with several objects inside. ### Hand Use Hand tool (`H`) to move canvas around. You may hold `Space` to quickly activate this mode as well. ### Text Use Text object (`T`) to insert short text into canvas. Click T in the menu and click on a whiteboard to add a text object. Text editor is based on `ProseMirror` (as all Fibery documents and rich text fields). Whiteboard text editor supports essential text formatting options, including **bold**, *italic*, ~~strikethrough~~, and 🔗 hyperlink insertion. These formatting options are available in text blocks, shapes, and stickers. **Resizing and scaling a Text object** The updated text object can be resized horizontally or scaled to the desired size, with the text adjusting automatically when scaled. ### Shape Click Shape tool (or use `S` shortcut) to select a Shape. Click on a whiteboard to add a shape object. ![2024-07-04 14.22.16.gif](/api/files/0efc371f-a232-4770-b5db-184a79cebf8c#align=%3Aalignment%2Fblock-left&width=760&height=458) #### Shape styling Click in a shape and styling menu will be visible. Here you can change border colors, background colors, etc. Experiment! ![2022-06-23 16.03.27.gif](/api/files/e97dadd7-13ea-4761-b89c-8fc4960716a9#align=%3Aalignment%2Fblock-center&width=659.4375&height=348) You can also set text vertical alignment within shapes an stickers. ### Image 1. Click `Upload Image` tool in the bottom menu. 2. Click on a Whiteboard canvas. 3. Select a file from your hard drive and upload it. Then you may select an image and resize it, move around, connect to other shapes. ### Pen Use Pen to draw some lines. 1. Click Pen tool (`P`). 2. Select a pen color. 3. Select a pen width (two circles on the right). 4. Draw something beautiful. ![image.png](/api/files/a409212d-4b0c-46ca-ae78-e1ecdb186558#align=%3Aalignment%2Fblock-left&width=775.1000366210938&height=321) ### Sticky Note 1. Click Sticky Note tool (`N`). 2. Click on a canvas to add a note. 3. Click on a note and change its color. ![image.png](/api/files/860d89ff-e271-4550-a765-3bd2d5fbe3f2#align=%3Aalignment%2Fblock-center&width=856&height=450) **Sticker resize**\ You can easily resize your stickers by dragging the corner handles. **Auto text adjustment**\ Text elements adjust automatically to fit within the sticker when resizing, and you can change the text size by selecting the sticker and adjusting the font size. **Author name and avatar on stickers**\ The author’s name and avatar show automatically on a specific sticker. You can show/hide author on a specific sticker. In text editing mode within a sticker, you can create a new sticker while typing by pressing the **Tab** key. The new sticker will appear to the right of the current one, and the editing focus will move there automatically. ### Frame Frames are stable areas that can be saved as an image or printed out. There is a new instrument for frames creation in the Whiteboard toolbar. There are two major use cases for the frames: 1. Use them as a logical group for large Whiteboards. 2. Use them to export something as an image. #### How to add a Frame 1. Click `Frame` tool in the bottom menu (or press `F`) and add a frame. 2. Click on a canvas. #### Set frame size 1. Click in a frame 2. Change its size in the appeared top selector. If you want to set the size manually, select `Free Size` in the menu and resize the frame as you wish. ## Connecting boxes 1. Click in an object, note four dots around it appears. 2. Start dragging any dot into another object and a connection will be created. 3. Position a connection on a target object and release it. 4. Click on a connection to change styles. ![2022-06-23 15.50.34.gif](/api/files/dc6ad48d-40ea-4782-a6d2-27c522b4146f#align=%3Aalignment%2Fblock-left&width=492&height=279) ### Connection styles Click on a connection and find styling menu. Here you can: * Set arrows in two directions. * Change connection style, thickness and color. * Delete connection (click … menu and find `Delete` action, or just push `Delete` key) ![image.png](/api/files/00d8497b-cc0a-44d9-b2f0-0e9745ec024d#align=%3Aalignment%2Fblock-left&width=826&height=394) ### Add a text on lines You can add text to connector lines, change it color, move it, etc. It simplifies diagrams creation. ### Bezier curves You have the ability to use bezier curves to transform connection lines. This feature is especially useful when you need to create highly curved lines to connect shapes that are far apart in a complex diagram. ![deaa5e33b8c704c5fc0f142ca0b368223df15e09.gif](/api/files/99ba086a-e33c-4fca-b76d-79bcfcb57c58#width=1081&height=577) ## Lock/Unlock objects You can prevent objects from changes. 1. Select one or many objects. 2. Click `Lock` icon. After that changes menu will be unavailable, you will have to unlock objects to edit them. 1. Select one or many objects. 2. Click `Unlock` icon. ## Lock whiteboard You can Lock whiteboard for all users. In this case users will not be able to change it easily. Note that any user with Editor access can unlock a whiteboard. This is especially useful for whiteboards that you embed into documents. ## Whiteboard guides Whiteboard guides will help you align objects, place object on equivalent distance and organize them in a more pleasant way. ### Align and distribute objects You can easily align or distribute multiple objects. Simply select the objects and click the `Align objects` button in the context menu. You have the option to align selected objects horizontally, vertically, or to the left/right in relation to each other. Additionally, you can distribute the selected objects horizontally, vertically, or in a compact layout for a more organized appearance. ![2024-03-21 10.39.47.gif](/api/files/d0e43ee4-7cb7-4e42-b3c8-8c79a1c5d5ee#width=1722&height=1130) ## Copy and paste styles between objects If you want to reuse a particular style you’ve applied to an object, you can copy and paste it between layers. To copy and apply formatting, use the shortcuts `Cmd + Opt + C` and `Cmd + Opt + V` (for Mac) / `Ctrl + Alt + C` and `Ctrl + Alt + V` (for Windows), or click the three dots on the text context menu and choose the option. You can use this process to copy fill, stroke, and text properties. ## Change object order Sometimes, an object on your board may overlap others, making it difficult to view what's underneath. Alternatively, an object might be hidden behind others. You can adjust the stack order of your object to bring it forward or send it backward on the board. * **Bring to front**: shift object all the way to the front of the stack, on top of all other objects. * **Bring forward**: shift object forward one stack position. * **Send backward**: shift object back one stack position. * **Send to back**: shift object all the way to the back of the stack, below all other objects. ## Add many entities You can add many entities as cards on a whiteboard with a single action based on a filter. For example, you can add all features planned for the next release, all insights in some product area, and all tasks assigned to some team. Find the **Multi-Entity Insert** action in the Whiteboard panel and try it. It also works in My Space, so you can experiment with this in your private Whiteboard. ## Show Relations on a Whiteboard You can see all Relations between Entities on a Whiteboard. Click the top right menu expander and select `Show entities links` option. ![image.png](/api/files/e01746e7-34a2-483e-8a42-efda92bfdcec#width=2989&height=1582) Important notice about relations creation: hold `Shift` when you drag a connector to create a Relation. By default, a regular connector is created and it does not affect the Database structure. Check [Whiteboard Relation Tool](https://the.fibery.io/@public/User_Guide/Guide/Whiteboard-Relation-Tool-298). ## Zooming There are several ways to zoom in on Whiteboard. 1. Use `+` and `-` icons in the top Whiteboard menu. 2. Pinch on a touchpad. 3. Click an arrow in the top Whiteboard menu and select zoom level. 4. Hold `Cmd` key and scroll down/up. ## Export as PNG You can export an entire Whiteboard into PNG. 1. Click an arrow in the top menu. 2. Find `Export as PNG` action. 3. Save the file to your hard drive. ![image.png](/api/files/5e3d83de-e3c1-4e0d-9c51-2a782a3aeef5#align=%3Aalignment%2Fblock-left&width=350&height=433) ## Duplicating objects 1. Select an object. 2. Use `Cmd + D` command to duplicate it. Alternative way: 1. Hold `Option` key. 2. Drag and move an object. ## Clearing the Whiteboard 1. Click … in the bottom menu. 2. Select `Clean Board`. 3. Enjoy the emptiness. ## Keyboard shortcuts 1. Click … in the bottom menu. 2. Select `Keyboard shortcuts` option to see them all. Check [Whiteboard keyboard shortcuts](https://the.fibery.io/@public/User_Guide/Guide/Whiteboard-keyboard-shortcuts-338) to learn them all. ## Copy link to selection You can select some objects, copy link to this selection and send to someone. When this whiteboard will be opened via this link a person will see exactly this selection and zoom level ![image.png](/api/files/266082d9-d7c2-41bf-82ea-d94d7d31c156#align=%3Aalignment%2Fblock-left&width=776&height=576) ## Presentation mode You can enable `Presentation Mode` for Whiteboard. It hides bottom panel and makes whiteboard read-only (for you only). Cards and Views are opened with a single click in Presentation Mode. ## Comments on the whiteboard Adding comments improves teamwork by enabling users to provide feedback, ask questions, and leave notes across the board. ![image.png](/api/files/2b939cdc-0999-499f-bcea-ebddf549395b#align=%3Aalignment%2Fblock-center&width=763.3046875&height=449) ### Who can add comments * Anyone with **"can view"** or **"can edit"** access can add and reply to comments * Only the original creator of a comment or admin can delete it ### How to add comments 1. Click the **Comment** icon in the Tools Toolbar on the bottom, or press the **`SHIFT+C`** hotkey  to enter commenting mode. 2. To add a comment, click anywhere on the board or on an object attach your comment to that object. After clicking, start typing to draft your comment. 3. Use @mention to tag someone. 4. To publish your comment, click the **`Send`** button or press **`CMD/CTRL + Enter`**. Comments are always visible on the canvas by default, even outside of comment mode. However, you can choose to hide them, so they only appear when you are in comment mode. To hide comments, use the keyboard shortcut **`CTRL+Shift+C`** to toggle them on or off. #### Reactions To add a reaction to a specific comment, you must click the reaction icon in the comment's floating menu and select a reaction. ![image.png](/api/files/289906d1-f563-4b7b-863c-4ecfd9d13e1b#width=2244&height=2616) To remove your reaction, click the button of the added reaction ![image.png](/api/files/77d9c11c-e636-4249-a89a-6635c7ca4e79#width=2692&height=2244) ### Comments sidebar you can access and manage comments from the right sidebar by clicking the comments button in the toolbar. Selecting a comment or thread will instantly takes you to its location on the board and expand the comment panel. ![Screenshot 2025-03-27 at 12.05.20.png](/api/files/e95c901d-ba59-4783-b146-599497e5ba82#width=2962&height=2212) ## FAQ ### Is it possible to extract some "code" of a whiteboard? You can select everything you need on a particular whiteboard, then copy information with `ctrl+C` shortcut, and past in any `JSON` editor # APPROVAL SYSTEM _________________ ## **Setting up a Space structure** So, first, let's configure the Space Structure. To be honest, I am a bit lazy, so, I've just installed a Project Management Template from our Template Gallery. We are going to approve Tasks, so, the templated structure will work well. The only thing we need to do at this level - adds a relation. Choose the Task Database and add one-to-many relation with the User from our People Space. ![image.png](/api/files/8a38b21c-3818-4e4e-8009-d4ff1fcbd1d3#align=%3Aalignment%2Fblock-left&width=341&height=349) Let's name this field "Approved by". So, if the user is ready to Approve - they can put his name here. ## **View Configuration** Ok, l will try to highlight the main targets for such kinds of Views. * Track all Tasks, that are waiting for approval - for the bird view * Track Tasks, that are waiting for **my** approval - for the manager * Track my Tasks, that must be approved - for the poor worker #### **Track all Tasks, that are waiting for the approval** Let's create a Kanban board with Task as Cards, State as Columns, and Assignees seemed on these cards. Here is the configuration And now we need just to turn Filter on. Let this board show us only those cards, that have Assignees, but that are still not Approved. ![image.png](/api/files/3adf182c-2f3f-4c54-8be5-02991b0384c0#width=1530&height=518) #### **Track Tasks, that are waiting for my approval** For this View, I suggest you add an approval manager as Assignee. Added? Cool. Now you can turn on a unique Fibery Filter ![image.png](/api/files/25850a75-90b4-4d45-918c-bcdff7fc1814#width=1535&height=373) Why unique? Because in Fibery all the Views are collaborative ones. That means, that if someone turns on the Filter, everyone will see that and get the same result. But "Assignees contains Me" filter make View unique per user - everyone will see only those Tasks, he is assigned to. **3.Track my Tasks, that must be approved - for the poor worker** A little embarrassing to say it, but our previous View will work for this case as well. So… looks like we're done here 🦄 ## **Tips and Cons** **If you are fond of bureaucracy and have [many Bosses](https://external-preview.redd.it/Kv2y22KCAeJPopNhLtF6kOz0xhi0C8gfS7MYqVCgoMk.jpg?auto=webp&s=447385229367d0264220fbbda3679f51bcf4bd4d) to approve:** * you can set a couple of one-to-many relations between Task and User - that will work if you need to know the role of the approval-guy, or if you have multiple approval stages. Ex.: fields "Designer approval", "Developer Approval", "Carrot Approval" * you can set a many-to-many relation between Task and User - that will work if you just need to see who approved that **If you want to strict the rules and avoid a situation, where somebody can get confused and fill incorrect data in the Approved by Field.** * Action Button will solve the problem. You can create an Action Button ( called "Approve"), that will check which of the users clicked on it, and then fill in the data into a read-only-API-created field "Approved by". You can also make the button more complicated and set the condition of who has the right to click on it. * And here you can check all the info about [Fibery API](https://api.fibery.io/) **Note**: if you are not familiar with the JS at all, but do really need this button - ping us in the chat, we will do our best to help you 💪 Thanks for the reading, guys! If you have better ideas of how to manage it - feel free to share it here or in our [Community! ](https://community.fibery.io/)Don't hesitate to throw us questions in the chat, if smth is not clear. # LOGIC FUNCTIONS _________________ #### AND Returns \`TRUE\` if all of the provided arguments are logically true `([Effort] < 2) AND ([Effort] > 0)` #### CASE Returns a value when the first condition is met. `CASE WHEN [Status] == 'In Dev' THEN 'In Progress' WHEN [Status] == 'In Testing' THEN 'In Progress' ELSE 'Done'` #### CONTAINS Returns \`TRUE\` if expression contains the defined text, and \`FALSE\` otherwise `CONTAINS([Owner], 'Oleg')` #### == Returns \`TRUE\` if expressions are equal, and \`FALSE\` otherwise `[Price] == 200` #### > Returns \`TRUE\` if left is strictly greater than right, and \`FALSE\` otherwise `[Effort] > 2` #### >= Returns \`TRUE\` if left than or equal to the right value, and \`FALSE\` otherwise `[Effort] >= 2` #### IF Returns expression 1 if a logical expression is \`TRUE\`, and expression 2 if it is \`FALSE\` `IF('Oleg' != [Owner], [Effort] + 10, [Effort] + 5)` #### IFNONE Replaces \`NULL\` with the specified default value `IFNONE([Owner], 'No Owner')` #### IS_NOT_NULL Returns \`FALSE\` if expression is null or undefined, and \`TRUE\` otherwise. `IS_NOT_NULL([Owner])` #### IS_NULL Returns \`TRUE\` if expression is null or undefined, and \`FALSE\` otherwise `IS_NULL([Owner])` #### < Returns \`TRUE\` if left is strictly less than right, and \`FALSE\` otherwise `[Effort] < 2` #### <= Returns \`TRUE\` if left is less than or equal to the right, and \`FALSE\` otherwise `[Effort] <= 2` #### LIKE Returns \`TRUE\` if expression matches the defined pattern, and \`FALSE\` otherwise `LIKE([Owner], 'Ol%g')` #### NOT Returns \`TRUE\` if the provided argument is logically false `NOT([Effort] == 0)` #### != Returns \`TRUE\` if expressions are not equal, and \`FALSE\` otherwise `[Price] != 200` #### OR Returns \`TRUE\` if any of the provided arguments are logically true `([Effort] < 2) OR ([Effort] == 5)` # TRACK FILE CHANGES USING MAKE AND GOOGLE DRIVE ________________________________________________ If Google Drive is part of your file or asset storage solution, it would be handy to be notified of when your teammates add or change a file so you can know when it's your turn to take over. This can be done easily and quickly using our Make integration. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6a849b) > Make is a no-code tool like Fibery and aims to help unify your tech stack so information can flow freely where it's needed. Sound familiar? 😏 We're not being paid to say this, we just really like them. ## Define the Problem Your mission should you choose to accept it is to create an automation that will alert you automagically that the asset a team member was tasked to work on is ready for review. It would also be handy to update the status of the item to something like `Review` so the rest of the team can know where it is in the pipeline. This means we need: * access to the `Database` that has the status of all of our assets * a Fibery automation to send a notification when the status changes ![firefox_y2FYUzfM2p.png](/api/files/adea1e73-7867-40de-a3f0-37228d5a73ec#width=1280&height=720) > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6a849b) > We're using a `Database` with two [Rich Text](https://the.fibery.io/@public/User_Guide/Guide/Rich-Text-28) fields and a [Single and Multi-Select fields](https://the.fibery.io/@public/User_Guide/Guide/Single-and-Multi-Select-fields-87) as a place to start testing out this workflow. These fields aren't required: after you get the hang of Make, use this as a jumping off point for your own workflow. ## Connecting Make → Fibery and creating a Scenario First thing first: [sign up for a free Make (formally Integromat) account if you don't already have one. ](https://www.make.com/en "https://www.make.com/en")Make is flexible and powerful, but don't worry - for this build you only need to know the basics. For this example, we're going to use Google Drive as the online storage we want to watch. [Take a look at Make's huge list of apps](https://www.make.com/en/integrations "https://www.make.com/en/integrations") you can connect and see if your storage solution is there. ### Create a Scenario ![firefox_kGuuWcDvgx.gif](/api/files/e8b81a84-1111-48e1-9418-66c3f16d05ce#width=1280&height=720) 1. Find the Scenarios menu item in the left side bar and create a new Scenario 2. Find the Google Drive connector and connect your account. We chose `Watch Files in a Folder`, but feel free to chose what matches your use case the best. 3. Find the Fibery connector next, and choose `Update an Entity`. Connect your account and we're ready to start automating. ![firefox_YmPZmRLnXC.png](/api/files/80988582-100d-408e-bfcc-2159c9c47398#align=%3Aalignment%2Fblock-center&width=339&height=289) ### Add a **Review** state in Fibery The `Workflow` [Single and Multi-Select fields](https://the.fibery.io/@public/User_Guide/Guide/Single-and-Multi-Select-fields-87) comes with three default states: **Open, In Progress,** and **Done.** We can't update the status of the `Entity` to **Review** if there is no **Review** state to be found. Let's add it to our `Entity` in Fibery: 1. Find the **State** field in your database 2. Click the ••• menu and edit the field ![firefox_261dfLtDEq.gif](/api/files/18a989ca-7efd-4732-82f6-0df5353f5825#width=1280&height=720) ### Finishing the Make Module Now that we have our fields configured appropriately we can finish up the Make module. 1. Find the `Space/Database` that you would like to connect (for this example, it will be `Asset Management/3D` ) 2. Find **State** and change it to **Review 💪** ![firefox_RNuuuCRawB.png](/api/files/344971a0-5cde-42e0-b243-f9b4de919f92#align=%3Aalignment%2Fblock-center&width=250&height=369) This would be a good time to test the connection and make sure everything is working as expected before we add anything else. We're watching an entire folder on Google Drive for changes, so all that you need to do is upload a file and click `Run Once` at the bottom left corner of Make. ![firefox_nzFJSMzLyM.gif](/api/files/d3400c67-b51e-4b31-bcfc-af68527b8df8#align=%3Aalignment%2Fblock-center&width=1280&height=720 "🔨 Nailed it") ## Add some polish Connections are working, now it's time to add some ✨polish✨. Two things come to mind: * adding the Fibery automation to give a notification when the asset is ready to review * adding a direct link to the asset #### Automate the notification in Fibery 1. Find the `Automations` button in the `Space` that holds the asset 2. Create a new rule that will create a notification if the **State** is **Review** ![firefox_dROftPKV4A.png](/api/files/e5850870-020b-4d91-b34f-e67ebc05b473#align=%3Aalignment%2Fblock-center&width=506&height=296) ![firefox_1q6ZqQbuaN.png](/api/files/ebd5ef5a-d9fb-4ad8-8da8-9dedef9000f5#align=%3Aalignment%2Fblock-center&width=509&height=328) #### Add a link to the asset to Latest Updates in Make 1. Open the Fibery module and find the **Latest Updates** field (or another `Rich Text` field) 2. As soon as you click on the field, you'll be presented a window with all of the metadata that is accessible 3. We definitely want `Web View Link`, but let's add `Name` and `Last Modifying User` too 4. [Format with some markdown](https://learn-markdown.github.io/ "https://learn-markdown.github.io/") to make it beautiful ![firefox_61Qqun4o3h.png](/api/files/ed834e26-fe56-4322-9cbf-2b8c72ff0e62#align=%3Aalignment%2Fblock-center&width=1280&height=720 "Markdown used for the rich text field.") ![firefox_8wRwVdem47.png](/api/files/b7c7dbb6-4b3a-4f9c-891c-bac770f26345#align=%3Aalignment%2Fblock-center&width=1280&height=720 "Here's the result - functional and beautiful. ") > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6a849b) > Make has functions and variables to help you build what you want, [see their documentation for the specifics. ](https://www.make.com/en/help/functions/using-functions) # Try this next We used Google Drive to track general uploads to a single folder, but this is just the beginning. Here are a few more ideas to try in the theme of tracking file changes: * Get an alert when *specific* files change by using different Google Drive parameters or a [router module ](https://www.make.com/en/help/modules/router "https://www.make.com/en/help/modules/router") * Add an **Approved** status and using Fibery [Automations](https://the.fibery.io/@public/User_Guide/Guide/Automations-27) send a Slack DM to the assignee * Use another Make chat module to send a notification to a someone outside of your organization (like a contractor) # SHARING & PERMISSIONS _______________________ ## Ways to share 1. [Share Space](https://the.fibery.io/@public/User_Guide/Guide/Share-Space-232) for sharing an entire process, along with its data and visualizations. 2. [Share Database](https://the.fibery.io/@public/User_Guide/Guide/Share-Database-342) for sharing all records of the same kind. 3. [Share Entity](https://the.fibery.io/@public/User_Guide/Guide/Share-Entity-233) for sharing 1. an individual record (e.g. a Task, or a Feature) and optionally any 'one-to-many' related entities; 2. a custom hierarchy (e.g. a Project, its linked Tasks, linked Meetings, but not linked Clients) via [Custom Access Templates](https://the.fibery.io/@public/User_Guide/Guide/Custom-Access-Templates-240); 4. [Automatically share Entities via People field](https://the.fibery.io/@public/User_Guide/Guide/Automatically-share-Entities-via-People-field-327) 5. [Automatically Share Entities with linked Groups](https://the.fibery.io/@public/User_Guide/Guide/Automatically-Share-Entities-with-linked-Groups-395) There are also a few ways to share information **outside** Fibery: * [Public sharing of Documents and Entities](https://the.fibery.io/@public/User_Guide/Guide/Public-sharing-of-Documents-and-Entities-37) * [Share Report Views](https://the.fibery.io/@public/User_Guide/Guide/Share-Report-Views-107) * [Share Space to web](https://the.fibery.io/@public/User_Guide/Guide/Share-Space-to-web-36) ## Global roles Global roles limit what kind of access a user can receive: * **Admins** always have maximum access to everything except others' [Private Space](https://the.fibery.io/@public/User_Guide/Guide/Private-Space-25)s. * **Members** can receive any kind of access. * **Observers** cannot update anything, only view and comment. * **Guests** can receive any access, but only to specific entities. Check out [User Management](https://the.fibery.io/@public/User_Guide/Guide/User-Management-45) on how to set and change global roles. ## User groups [User Groups](https://the.fibery.io/@public/User_Guide/Guide/User-Groups-47) simplify access management in larger workspaces: share Spaces (and later Entities) with entire Teams, Roles, or Tribes. Check out the guide above on how to convert any Database into Group DB. ## No overriding **Access is always extended** and never overridden on a lower level of hierarchy. Here are a few examples: * **Space & Entity:** if someone has `Editor` access to a Space and is invited as a `Viewer` to an Entity in this Space, they'll be able to edit the Entity. * **Group & User:** if someone gets `Owner` access to an Entity as a part of a Group and then receive `Commenter` access individually, they'll be able to edit and share the Entity. * **Extended access**: if someone gets `Commenter` access to a Project extended to its Tasks and then `Viewer` access to one of those Tasks, they'll be able to comment on the Task. So if you are sensitive about access the rule of thumb is: start with minimal permissions at the highest level (e.g. Space, Group) and add more on the lower levels (Entity, User). ## Access to users So far, every user can see all the other user's profiles in the workspace with one exception: Guests cannot see other Guests. We also hide `People` Space in the sidebar for Observers but they can still visit other users' profiles via search or direct link. We plan to introduce access to users in 2025. Share your pain point with us via Intercom to speed things up. # HOW TO CREATE A DASHBOARD ___________________________ Dashboards are powerful tools that provide a visual representation of data, allowing users to monitor, analyze, and make informed decisions based on various key metrics. In Fibery, any Document can become a dashboard by using [Views inside Rich Text (Embed Views)](https://the.fibery.io/@public/User_Guide/Guide/Views-inside-Rich-Text-(Embed-Views)-200) feature combined with [Multi-columns layout](https://the.fibery.io/@public/User_Guide/Guide/Multi-columns-layout-198) . Let's try to build one. Imagine that you're an experienced product manager, and you need to prepare a nice dashboard for the stakeholders. We would focus on: * **Product Roadmap:** * Provide a visual representation of the product development timeline. * Include upcoming features, releases, and milestones. * **Customer Support Metrics:** * Display customer support data, such as ticket volume, resolution times, and customer feedback. * Highlight any outstanding or recurring customer issues. Here is how final result will look like ![Overview.gif](/api/files/4671ca54-87af-4225-9d5b-9cb00bdb3fa2#width=1556&height=872) ## Step 1. Product roadmap Using headers will help to create a nice structure and easy-to-navigate table of contents. Once you made the necessary introduction, you can embed View to prove your words. For example, a Timeline vVew. You can embed an existing View using `<<` shortcut. ![Timeline embedding.gif](/api/files/b9d08f16-38ae-4039-9ac9-eec5147ee3bc#width=1545&height=802) This embedded Timeline is interactive - you can open any feature from it or add a new one without switching the context. But that's not all. We also want to show our launch board, and maybe some progress overview. Those metrics can be less important, so they can take a bit less space. For that, we would use a multi-column layout. First, you have to call the command menu by typing `/` and choose the `2 Columns` option. ![image.png](/api/files/43b63072-7d92-49a4-b1a3-7d1ef99d235f#width=3282&height=2098) Now into every column you can add an embed View or something else. You can do it the same way by using `<<` shortcut. ![Embed other things.gif](/api/files/93de28e5-53dc-4cef-895d-97c9c1308e76#width=1557&height=872) And here is what we have as a result: ![image.png](/api/files/2d42d4dd-b7bb-4896-a52c-c8bcbbfa5e5c#width=1645&height=902) > [//]: # (callout;icon-type=icon;icon=heart;color=#4faf54) > Remember to maintain a balance between providing comprehensive information and keeping the dashboard user-friendly. Regularly update and refine the dashboard based on stakeholder feedback and evolving business needs. ## Step 2. Showcase your customer data Presenting customer metrics to stakeholders allows product managers to showcase the tangible impact of the product on its users, align the product strategy with customer needs, and make data-driven decisions that contribute to the overall success of the product and the business. Not only can you showcase accumulated data, but you can also mention the most interesting conversations you had. For stakeholders, it's sometimes nice to hear what customers, especially target ones, are saying. You can mention entities that include notes and write a quick summary of why that conversation was important. ![image.png](/api/files/ba21501e-6a90-4a07-aee6-dad58e30fc8a#width=3120&height=1594) Another important metric here is how feedback affects the overall scope, specifically on the Product area level. > [//]: # (callout;icon-type=icon;icon=heart;color=#d40915) > Quick tip: if you want to know more how reports can ease the work of a product manager, check [5 Reports for Product Management](https://the.fibery.io/@public/User_Guide/Guide/5-Reports-for-Product-Management-218) For our dashboard, it seems like a good idea to show requests grouped by product area. We would embed it in the same way we embedded all the other Views before, using the `<<` shortcut. ![image.png](/api/files/fbd8313f-39fc-47df-9ae9-b0a15de9ec4a#width=3530&height=1976) > [//]: # (callout;icon-type=icon;icon=sun;color=#fba32f) > Quick tip: you can resize any embed or add more metrics by using [Embeds](https://the.fibery.io/@public/User_Guide/Guide/Embeds-206) from other tools (like Figma, Miro. etc.) ## \ What's next? * Manage access to those Dashboards with [Custom Access Templates](https://the.fibery.io/@public/User_Guide/Guide/Custom-Access-Templates-240). * Create more powerful [Reports Overview](https://the.fibery.io/@public/User_Guide/Guide/Reports-Overview-58) with various metrics. * Use [Notify people using Buttons or Rules](https://the.fibery.io/@public/User_Guide/Guide/Notify-people-using-Buttons-or-Rules-109) to know when some important metrics changed simultaneously. * Embed [Whiteboards](https://the.fibery.io/@public/User_Guide/Guide/Whiteboards-38) if you're tired of manual sync in Miro. # 🎣 HIRING ___________ In the first part of the guide for HR Workspace Template, we'll explain how to set the hiring process. If you prefer video, check this 17-min detailed step-by-step explanation: [https://youtu.be/FJr5WVvJe0M?feature=shared](https://youtu.be/FJr5WVvJe0M?feature=shared) If you prefer text, explore the **Hiring Space** with this guide. While doing it, you'll also be able to test whether the template works for you, and make necessary changes if needed. ## Step 1. Create hiring wiki Include hiring guidelines and all other details your teammates should be aware of to run everything smoothly. Just replace our `Our Hiring Process` with your Document(s). ![image.png](/api/files/1d8ec005-2183-45ed-a865-013afa3244c5#align=%3Aalignment%2Fblock-center&width=758&height=383) To write beautiful docs you can: * Use [Nested Documents](https://the.fibery.io/@public/User_Guide/Guide/Nested-Documents-166) * Try all our recent beautifying capabilities, such as [Views inside Rich Text (Embed Views)](https://the.fibery.io/@public/User_Guide/Guide/Views-inside-Rich-Text-(Embed-Views)-200) and [Embeds](https://the.fibery.io/@public/User_Guide/Guide/Embeds-206). More on this in the blog post on [Documents Improvements in 2023](https://fibery.io/blog/fibery-documents-2023/ "https://fibery.io/blog/fibery-documents-2023/"). ## Step 2. Add open positions The Positions by State Board is the easiest way to do that. ![image.png](/api/files/08127316-7546-4b44-93ed-9158ab30db2b#align=%3Aalignment%2Fblock-center&width=748&height=409 "Positions by State Board") Make sure that the Position looks good 💅 ![image.png](/api/files/0f97b811-ed9b-4b0a-b5c2-b283e13d3f58#align=%3Aalignment%2Fblock-center&width=736&height=428 "An example of Position Card") > [//]: # (callout;icon-type=icon;icon=paint-tool;color=#fba32f) > Remember that this is a Template, so nothing is hardcoded. If you don't need some Fields, just delete them. If you States for open positions are different, set custom ones. Adjust Cards in a way they serve your goals, not our imagination. ## Step 3. Start collecting Candidates There are several options to collect job candidates using Fibery: Forms, Web Clipper (its the browser extension), or using email. ### **Option 1. Forms** You can create a Form and publish it on your website or in any social network. To understand how to create new Forms, please refer to guide on [Forms](https://the.fibery.io/@public/User_Guide/Guide/Forms-134). Add a new Form for every new and open position you have. Once the position is closed, don't forget to disable the Form. ![image.png](/api/files/1b941ac4-842a-4b89-960c-5f536e7e30ed#align=%3Aalignment%2Fblock-center&width=386&height=293) Everyone who fills out the published Form will be listed in the Candidates Pipeline Board under the position for which the form was created. ![image.png](/api/files/6d867060-7f00-4174-9e1c-c23c2881d780#align=%3Aalignment%2Fblock-center&width=738&height=414 "You will find all candidates who filled out the Form in this Board") ### **Option 2. Web Clipper aka Browser extension.** Another option for candidates collecting is by using [Fibery Browser Extension (Chrome)](https://the.fibery.io/@public/User_Guide/Guide/Fibery-Browser-Extension-(Chrome)-217) . When using any platform, for example, LinkedIn, you can add a candidate to Candidates Database right from the webpage. Just click :fibery: icon in the browser after you've installed the extension. ![image.png](/api/files/ccef0dd4-d83c-47b5-b000-5ff73f242459#align=%3Aalignment%2Fblock-center&width=765&height=343 "An example of how Fibery Browser Extension works") ### **Option 3. Collect candidates by email.** This options requires setting the email integration with Fibery. To set it up, check the guide on [Email integration and hiring process](https://the.fibery.io/@public/User_Guide/Guide/Email-integration-and-hiring-process-191) In this case, new Candidates will appear in the Candidates Database after the first email is sent. Further emails will be connected automatically to the relevant Candidate. It's super helpful if email is the main communication channel between you and the candidates > [//]: # (callout;icon-type=icon;icon=robot;color=#fba32f) > You can also set custom notifications with [Notify people using Buttons or Rules](https://the.fibery.io/@public/User_Guide/Guide/Notify-people-using-Buttons-or-Rules-109) Let the responsible HR manager know about every new Candidate that appears on the Board. No one will be forgotten! ## Step 4. Schedule interviews and make notes For inviting Candidates to interviews, good old Outlook or Google Calendar works pretty well. You can sync scheduled interviews automatically using [Google Calendar integration](https://the.fibery.io/@public/User_Guide/Guide/Google-Calendar-integration-136) or just add manually interviews to the Board or Calendar. We recommend creating Calendar View on your own - this guide [Calendar View](https://the.fibery.io/@public/User_Guide/Guide/Calendar-View-13) will be helpful. ![image.png](/api/files/3018fef5-83c2-4daf-b958-273520dbb909#align=%3Aalignment%2Fblock-center&width=790&height=356 "Personally, I prefer Boards") Why use Fibery if you have Google Calendar? Well, collaborative and team-accessible notes! Here is an example of a nice one - [interview with Winnie](https://webinar-hr.fibery.io/Hiring/Interview/Winnie's-1st-on-site-Interview-2?sharing-key=4f0309c5-3ca5-4974-9645-44fdb70dd168 "https://webinar-hr.fibery.io/Hiring/Interview/Winnie's-1st-on-site-Interview-2?sharing-key=4f0309c5-3ca5-4974-9645-44fdb70dd168"): ![image.png](/api/files/989abf9d-d672-4550-a84c-1ac006d66de2#align=%3Aalignment%2Fblock-center&width=770&height=456 "Proper notes example") You can also improve the initial structure and track tests prepared for candidates, as well as test results. ## FAQ #### May I add an interview (a meeting) in Fibery in a way so that it's also automatically created in my Google Calendar? Unfortunately, that's not possible at the moment. # SHARE REPORT VIEWS ____________________ Right now you can share via: * [Public sharing of Documents and Entities](https://the.fibery.io/@public/User_Guide/Guide/Public-sharing-of-Documents-and-Entities-37) * [Share Workspace as a Template](https://the.fibery.io/@public/User_Guide/Guide/Share-Workspace-as-a-Template-57) * [Share Space to web](https://the.fibery.io/@public/User_Guide/Guide/Share-Space-to-web-36) * Report views > [//]: # (callout;icon-type=emoji;icon=:cry:;color=#6A849B) > All the other Views are missing (now at least), so if you need them - don't hesitate to throw your request at us. The more requests we have - the more chances we would implement it 🚀 So what about Report views? ## Example flow: ### Step 1. Create a Report and choose Table as an option When creating a report, you use multiple visualizations. Tables are one of the options. ![image.png](/api/files/3095d5a1-021a-4245-a268-282d0ef49276#align=%3Aalignment%2Fblock-left&width=722&height=237) Drag and drop all the fields, you want to display ![image.png](/api/files/8e225a03-0cdf-4b66-acf1-18774268d4bd#align=%3Aalignment%2Fblock-left&width=678&height=300) and save the Table by clicking `Finish`. ### Step 3. Share the result Click on the `Share` button from the … menu ![image.png](/api/files/000afd00-aad3-44d8-8a2b-0f17b2b0938e#align=%3Aalignment%2Fblock-left&width=1904&height=685) Generate a link and feel free to throw it at anyone ![image.png](/api/files/7ca51185-248f-4e93-b7ef-d5ba60368c02#align=%3Aalignment%2Fblock-left&width=691&height=324) Note: once you update your data in Fibery, it will be updated in the shared Report as well ### And what about Charts? The same works for them 🦄 ![image.png](/api/files/1a34d528-b30c-4d0b-ae1b-f68005a7cfd9#width=1655&height=870) ## FAQ ### How do I know what other people have shared? [Reviewing Shared Items](https://the.fibery.io/@public/User_Guide/Guide/Reviewing-Shared-Items-229) # CLICKUP INTEGRATION _____________________ ## Basics With the ClickUp integration, we create a Fibery database containing the data from the configured ClickUp source and keep it up-to-date through periodic synchronization. Here is the current status of the possibilities for integration. | | | | --- | --- | | **ClickUp** | **Fibery Integration/Import** | | Space | not supported — under development | | Folder | supported | | Views | partially supported (List, Board, Timeline, and Table view are supported) | | Document | not supported | | Whiteboard | not supported | | Task | supported | | Subtask | supported | | Nested Subtask | supported | | Checklist | not supported | | Todo | not supported | | Assigned Comment | not supported | | Attachments | supported | | Users | supported — Fibery Observer users will be created | | Guests | supported — Fibery Observer users will be created | > [//]: # (callout;icon-type=icon;icon=exclamation-triangle;color=#d40915) > Due to performance issues, task comments are not synced. All custom file fields are now synced in one files section in Fibery. ## Setup Clickup sync 1. Create a Space. 2. Navigate to Space settings and click `Integrate` button. 3. Select `Clickup`. 4. Authentication of your ClickUp account can be done through OAuth, but you may use a personal API token, if you prefer. ![image.png](/api/files/bc82ddf4-d32e-4a77-b77b-face50ec5e1a#width=2040&height=1624) Select workspaces to sync and click the "Connect Workspaces" button. ### Source configuration Select the databases you would like to sync in the integration settings. Select workspace and spaces to be synchronized. ![image.png](/api/files/5989712f-0ee3-4d42-9585-a1f2dfd2cafd#width=1608&height=1232) **Note:** ClickUp Guest users are also synchronized when the User sync is enabled. When native guest users are created in Fibery, they will not receive a notification. Click `Sync Now` and the integration process will be started. Almost all data from Clickup, including custom fields, relations, and dependencies, will be synchronized. **Note:** Rich fields are not formatted correctly due to Clickup API limitation. It allows downloading only text versions of the rich fields and descriptions. ![image.png](/api/files/de2a2804-65b4-45eb-8e89-ee7fd87333af#width=2246&height=1148) ## FAQ #### 1. Why data from ClickUp is synced as a single Task database? This is how ClickUp stores the data. * If you want to migrate from ClickUp - you can convert different Entities from ClickUp's Task database into the correct structure, which you can create in Fibery. * If you need a continuous integration with ClickUp - unfortunately, this horizontal structure has to be kept. * If you need any assistance on how to better migrate or integrate Fibery from the use case perspective - please, feel free to ping us in chat. #### 2. Can I filter ClickUp data? You can filter by Folder in Lists inside selected Spaces # HOW DEACTIVATING USERS AFFECTS BILLING ________________________________________ At any time you can deactivate any user. It will restrict his access to your workspace, but will save all the data about the User's actions: Tasks, he was working on; Features, he created - etc. But how does that affect your billing? > [//]: # (callout;icon-type=emoji;icon=:yawning_face:;color=#4A4A4A) > TLDR: you don't pay for deactivated users. * Your billing cycle starts from the date of the first payment. It will bill per each active user, that is now invited to the account. You can check it on the People Space or on the Manage Users Page - [User Management](https://the.fibery.io/@public/User_Guide/Guide/User-Management-45). * If you add more people later, they will be paid as well, but the amount will be reduced in proportion to the remaining days until the end of the billing cycle. * If you pay for the user, and after deactivates him or delete him from the workspace, that sum will be deducted from the next billing cycle - next month or next year #### Case 1 1. I started paying for Fibery on April 1st. 2. Then invited my teammates — Polina on April 5th and Anton on April 25th. 3. There are 30 days in April. 4. My next billing period is May 1st. 5. So for Polina, I'll pay for 25 days. For Anton - 5 days only. In the first month. The same logic works for the yearly period. #### Case 2 1. You started paying for Fibery on April 1st. 2. Then invited Polina on the same date. 3. Then you deactivated Polina on April 5th. 4. There will be no payback. But from the next payment, on May 1st, for example, your payment will be less - in proportion to 25 unused days. If you pay annually, not monthly, then this recalculation will be done not next month, but next year - on your next billing cycle. # FIND REFERENCES IN TEXT USING AI __________________________________ Fibery can analyze some text and find references in it, so you can create [Entity mentions and bi-directional links](https://the.fibery.io/@public/User_Guide/Guide/Entity-mentions-and-bi-directional-links-31) and process information better. What are use cases? * Interviews processing. You may analyze interviews and tag relevant paragraphs. * Product feedback processing. For example, you have feedback from Intercom or Discourse and want to link it to some Feature, Product Area or Insight. ## How to setup Find References? [Semantic Search (AI Search)](https://the.fibery.io/@public/User_Guide/Guide/Semantic-Search-(AI-Search)-203) should be enabled, Find References will find only entities from Databases indexed in AI Search. For example, here we have five databases indexed and **only** these five databases will be used to find references. ![Screenshot 2023-12-07 at 11.04.36 AM.png](/api/files/802335ec-317b-4635-acf8-eeb45a58fe19#align=%3Aalignment%2Fblock-left&width=684&height=416) ## How Find References work? You can invoke Find References in any entity with rich text fields. Click … in the top right corner and select `Find References`. Usually it takes several seconds to process the text and find some references. ![2023-12-07 11.21.11.gif](/api/files/be554acc-2d56-4981-99ad-6aa1241d5b71#align=%3Aalignment%2Fblock-left&width=543&height=471) It splits the text into paragraphs and tries to analyze each paragraph. If a reference can be created with a high probability, it displays an icon next to the paragraph. Click on the icon to see reference options and click on any entity to create a reference. ![2023-12-07 11.17.09.gif](/api/files/996088ec-7be4-4b7c-ad11-19bcb343f988#align=%3Aalignment%2Fblock-left&width=541&height=351) > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#fba32f) > Find Reference action does not work in Documents (so far). # CONVERT RELATIONS ___________________ ## How to convert relations In Fibery, you can convert relations. This is helpful both when you set up a process or need to update it. This operation can be done by `Creator` only. To convert a Relation, go to editing screen in the Relation Field, and change the `One` to `Many`. ![image.png](/api/files/9bec516b-0be4-4021-8828-0caf855703d7#align=%3Aalignment%2Fblock-center&width=509&height=457) ## Limitations 🚨 If you change relation from `to-many`→ `to-one`, an error message will prompt you to clean up data if multiple entities are linked. 🚨 The `one` dropdown is disabled for: * group membership * default Fields in Integration Databases 🚨 Lookups from the relation are broken by the conversion and have to be recreated manually. ## FAQ ### How to go back to to-one relation? 1. Make sure the new to-many relation Field has a different name or delete it. 2. Restore the old Field from [Activity Log](https://the.fibery.io/@public/User_Guide/Guide/Activity-Log-92). # AI IN AUTOMATIONS ___________________ Fibery AI in Automations integrates Fibery with GPT (we use OpenAI). It works in Text, Number and Rich Text fields. [https://www.loom.com/share/cad6ef6de0cb4a06a1a84806d168d5eb](https://www.loom.com/share/cad6ef6de0cb4a06a1a84806d168d5eb) ## Use Cases Here are some use cases that you may find useful. ### Summarize conversations/meetings/chats/emails/… You can have Summary field for Intercom Conversation and it will be filled automatically via Summarize command, same can be applicable to meeting notes, and other databases. Then you can create a Feed View that shows just Summary field. ### Sentiment Score of a conversation Analyze sentiment of a conversation, set some score into Sentiment Score field and calculate average or draw trends charts, or spot conversations with bad sentiments and do something about it. ``` Sentiment scores are a metric for measuring customer sentiment. Scores can range from 0-100, where 100 is the most positive possible outcome and 0 is the least. Generate a sentiment score for the text below and return result as a number in a format [sentiment score] without brackets """ {{Messages}} """ ``` ![Screenshot 2023-02-21 at 11.33.30 AM.png](/api/files/42fa9a03-8adf-4eee-bd7a-fda3f525aa7a#width=2246&height=1440) ### Extract data into fields Extract Zip, Country and City from messy address field and put it into Zip Code Field. For example, you have a `raw address` field in a `Contact` database where you store addresses like *Australia, 2106 Sydney, Wakefield St. 6*, then you can use `Call AI` function to extract City, Country and Zip code from this raw address and put them into separate fields. ``` Extract city from the address {{raw address}} ``` ![Screenshot 2023-02-21 at 11.32.49 AM.png](/api/files/f3537ba8-7275-42c4-a546-4d6c205580f4#width=2236&height=1344) ### Translate a support chat to English Sometimes we communicate with customers in other languages, like Russian. However, it is much better to store communications in Fibery in a single common language. Thus when the chat is closed, it can be automatically translated to English translated content can be set to a new Field like English Version. As a simple solution there can be two commands. 1. Detect a language and set it into a Language field 2. Create command `Translate to {{Language}}` ### Generate sample data Provide some samples to AI and ask to generate a set of similar entities. For example, here it generates entities with some generate on the fly address. Here is the prompt example: ``` Here are some addresses as an examples: Antheon 7, 4520 Limassol, Cyprus POLAND,01-106 Warsaw, Nakielska 7/C USA, 3345 Boston, High str. 1 Generate a sample address based on the examples above ``` [https://www.loom.com/share/9328e4d1c6834d14a0a5c4db6462a6fa](https://www.loom.com/share/9328e4d1c6834d14a0a5c4db6462a6fa) ## Call AI Action in fields Admin can configure parametrized prompts to GPT that will return some text and Fibery will put this text into fields. Only the following field types are supported so far: * Text * Number * URL * Phone * Email * Rich Text If you want to set some Text or Number field from GPT response, click `…` near Field on the right and select `Call AI` option. ![Screenshot 2023-02-22 at 3.03.55 PM.png](/api/files/6289a312-1821-4df3-afeb-fcc31b65e455#width=2074&height=774) Then set a prompt. Prompt can be parametrized, like `{{Name}}` or `{{Feature.Name}}` can be added into it for the current entity. For example, we have a Country and want to set Capital field automatically based on GPT response. Here is how you can do it: ![Screenshot 2023-02-21 at 11.43.44 AM.png](/api/files/3981e1d4-7151-4b64-89ac-c1144ac38d26#width=1860&height=716) ### How to test prompts? Use [AI Text Assistant](https://the.fibery.io/@public/User_Guide/Guide/AI-Text-Assistant-156) to test prompts. When it works fine, create a Button or Rule with the prompt. ## AI function in rich text templates You can call AI function like in [Markdown Templates](https://the.fibery.io/@public/User_Guide/Guide/Markdown-Templates-53), like this: ``` [ai temperature=0.5 maxTokens=300 model=gpt-4o] Generate a small post about {{Name}} [/ai] ``` Possible parameters: * `temperature` from 0 to 1. Temperature is a parameter used to control the randomness of the generated text. It is a number between 0 and 1. A lower temperature will cause the model to make more predictable choices, while a higher temperature will cause the model to take more risks and generate more diverse and interesting text. * `maxTokens` from 1 to 2048. Defines response size. * `model` sets OpenAI model. Default is `gpt-4o-mini`, and you can set `gpt-4o`. For example, here is the action button setup that summarizes `Messages` field in Intercom Conversation. ![Screenshot 2023-02-22 at 2.52.57 PM.png](/api/files/9b466c4d-09ee-4bca-8737-4d60aae380af#align=%3Aalignment%2Fblock-left&width=807&height=617) The good thing about action buttons is that you can execute them in batches. Select some rows in Table View, click Actions and run the action. ### Summarize Comments thread Here is the template script that summarizes comments. Put it into some Rich Text Field that should contain comments summary. ``` [ai temperature=0 maxTokens=300 model=gpt-4o] """ {- Comments:Text -} """ Generate summary of the conversation above [/ai] ``` ## FAQ ### How expensive is it? On the free plan, you can use AI to create databases, views, formulas an automation scripts.\ Full AI is included in every paid plan, but the limits vary. Check out the details [here](https://fibery.io/pricing). # CURRENT VS HISTORICAL DATA IN REPORTS _______________________________________ When creating a Report based on Fibery data, as well as choosing the database(s), it is possible to choose between Current and Historical data. This guide will help explain how these two report types differ. ## Entity modifications Any entity may have undergone lots of modifications in the time since it was created until now. For example, imagine a Task that has the following history: * Created on 15th January 2020, with Effort = 10, State = Open and no Assignees * On 3rd February 2020, the State was changed to In Progress * On 20th February 2020, Steve was assigned * On 21st February 2020, Mary was assigned * On 3rd March 2020, the Effort was changed to 20 * On 10th March 2020, the State was changed to Done, and all Assignees were removed This entity can therefore be represented therefore as a series of modification events: | | | | | | --- | --- | --- | --- | | | **Effort** | **State** | **Assignees** | | 15/01/2020 | 10 | Open | | | 03/02/2020 | 10 | In Progress | | | 20/02/2020 | 10 | In Progress | Steve | | 21/02/2020 | 10 | In Progress | Steve, Mary | | 03/03/2020 | 20 | In Progress | Steve, Mary | | 10/03/2020 | 20 | Done | | ## Current data Reports As the name suggests, a Report view that uses Current data will be based upon the entities in the database(s) as they currently are. That is, their field values after the latest modification event. In the example above, this means only the last row in the table. If an entity is updated, a new modification event is created and the Report will be revised to reflect the changes (on the next update). ## Historical data Reports In contrast, a Report view that uses Historical data will have data points representing *every* modification event.\ Additionally, each modification event has extra parameters that can be leveraged in Reports. These include: `Modification ID` - a unique identifier (positive integer, except it is always -1 for a creation event) `Modification Date` - the date and time of the modification `Modification Valid To` - the date and time of the next modification `Modified By` - the user responsible for the change `Changed Fields` - the fields that were changed Furthermore a couple of useful calculated parameters are available: `Duration (Days)` & `Duration (Hours)` - the difference between `Modification Date` and `Modification Valid To` in days or hours. The modification events for the Task described above can now be represented as follows: | | | | | | | | | | --- | --- | --- | --- | --- | --- | --- | --- | | **Modification ID** | **Modification Date\*** | **Effort** | **State** | **Assignees** | **Modification Valid To\*** | **Modified by** | **Changed Fields** | | \-1 | 15/01/2020 | 10 | Open | | 03/02/2020 | Chris | | | 23 | 03/02/2020 | 10 | In Progress | | 20/02/2020 | Alex | State | | 27 | 20/02/2020 | 10 | In Progress | Steve | 21/02/2020 | Alex | Assignees | | 30 | 21/02/2020 | 10 | In Progress | Steve, Mary | 03/03/2020 | Mary | Assignees | | 51 | 03/03/2020 | 20 | In Progress | Steve, Mary | 10/03/2020 | Mary | Effort | | 66 | 10/03/2020 | 20 | Done | | 01/01/9999\*\* | Steve | State, Assignees | \* `Modification Date` and `Modification Valid To` are actually date-time values (to the nearest minute) but can be shown with whatever resolution you choose. In the example table above, only the date part is shown. \*\* For the last modification event, the value of `Modification Valid To` is always set to 1st January 9999 23:59.\ In this case, the `Duration` parameters actually calculate the difference between the last `Modification Date` and `NOW()` **A Report view that uses Historical data will have data points representing every modification event for every entity** i.e. every row in the table above, and every row in the equivalent 'event table' for each entity in the database(s). > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#d40915) > As you might imagine, depending upon how long you have been using Fibery, a historical Report may have many tens- or even hundreds-of-thousands of data points. This can make the rendering/updating of the Report quite slow. It is recommended to bear this in mind and apply date range limits and source filtering as appropriate. ### Date range limits It is possible to limit the events to include when configuring a historical report, based on a date range: ![image.png](/api/files/97cc5b28-99d1-4fb1-8474-37e284064189#align=%3Aalignment%2Fblock-left&width=540&height=101) The date range can be defined using simple language terms, e.g. `TODAY`, `PREVIOUS QUARTER`, `BETWEEN 10 MONTHS AGO AND 2 WEEKS AGO` Once defined, any modification event will only be included in the report if the time period between `Modification Date` and `Modification Valid To` **overlaps** with the `Date Range`. It is not a filter applied to just the `Modification Date.` So in the example above, if the report had a date filter of `01/02/2020 - 28/02/2020`, then the first 4 events would be included, since they each overlap with February, even though the first modification event occurred in January. ### Filtering It is possible to apply filters to the source data for historical reports, in the same way as for current data reports. See [here](https://the.fibery.io/@public/User_Guide/Guide/Reports-346/anchor=Filtering--5ab22756-b03b-483b-aaec-5caff317367e). > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6A849B) > When filtering the source data for a historical report, the filter criteria are applied to the **current data values** ### Points to note In a historical report, the entity `Name` field is always returned as its current (latest) value. There needs to be a gap of at least 5 mins between modifications for them to be counted as distinct events. Similarly, any change that is quickly reverted will not get registered as a modification. Depending on your subscription plan, there may be limits on how far back in time the modification event records are stored. See [Manage your subscription](https://the.fibery.io/@public/User_Guide/Guide/Manage-your-subscription-60) for information on the length of version history available in each plan. # DISCOURSE INTEGRATION _______________________ How to setup Discourse integration, fetch all Posts into Fibery and link feedback to features and bugs. [Discourse](http://discourse.org/) is a popular tool for community forums and it is used by many product development companies. Now you can fetch all conversations into Fibery, highlight important ideas, and link them to real Ideas, Features, and Bugs. Here is the flow: [https://www.loom.com/share/6ee5bc498ebb4de1b4b69c1b0d296963](https://www.loom.com/share/6ee5bc498ebb4de1b4b69c1b0d296963) ## Setup Discourse sync ### Step 1. Add API key in Discourse 1. You have to create an API Key in Discourse. Navigate to Discourse Admin → API → click New API Key. 2. Select `Global Key (allows all actions)` for this Key. 3. Then select Category, Topic, and User and enable Sync. ### Step 2. Setup Discourse space in Fibery 1. Navigate to `Templates` and find Discourse template 2. Click `Sync`. 3. Set Discourse domain (like https://try.discourse.org), set your API key and click `Connect`. ![Screenshot 2022-06-22 at 2.29.34 PM.png](/api/files/8ad6d092-3d9e-4966-8671-add0a31c0aae#align=%3Aalignment%2Fblock-left&width=372&height=343) 4. Choose what databases you want to sync from Intercom. In most cases you want to have all the data. Specify starting date for the sync, by default it is a month ago, but you may want to fetch all the data. ## Link feedback to ideas, features, bugs, etc 1. Open any Topic. 2. Select the text, push `Cmd + L`, select some entity and text will be linked to the selected entity: ![2022-06-22 14.31.45.gif](/api/files/96d83810-b245-44eb-8d85-4629e370f029#width=1529&height=819) ## FAQ #### If we connect Discourse today, and in the future we move the same Discourse forum to another server, can we keep the same Discourse to Fibery connection with all settings and the same Fibery workspace? If you import the data as is, so all IDs of entities are preserved the same, then everything should be fine. Just will need to update integration account settings and that's it :) # SINGLE ENTITY ACTIVITY LOG ____________________________ Every Entity in Fibery has a full change history. Open the required Entity and find the `View Activity` icon in the top right corner. Here you will see changes to all Fields, new comments, new references, etc. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#d40915) > Please, note that on `Standard` plan history is limited for 90 days. > > Use `Pro` version for the unlimited history. ![image.png](/api/files/71eead5a-a6bf-414a-804a-4844a773feaa#width=3508&height=1912) From this history menu, you can also reverse changes. Navigate your cursor to the change, you want to revert, and a small arrow icon with popup will appear. ![image.png](/api/files/627f95cd-8b33-49c6-ab55-93269999f771#align=%3Aalignment%2Fblock-center&width=528&height=623) > [//]: # (callout;icon-type=icon;icon=star;color=#fba32f) > Please, not that changes to [Rich Text](https://the.fibery.io/@public/User_Guide/Guide/Rich-Text-28) fields are tracked separately. Please see [Text history](https://the.fibery.io/@public/User_Guide/Guide/Text-history-32). # THREAD VIEW (EXPERIMENTAL, EMULATES SLACK CHANNELS) _____________________________________________________ Thread View is a View that shows **Comments** from a single **Entity**. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#fba32f) > Thread View is an early experiment to explore how Fibery can enhance communications and replace chats in some use cases. Navigate to Settings → Experimental Lab and enable Thread Views. There is absolutely no guarantee we will keep this feature in production and improve it. We will collect your feedback and decide. Here is a video that shows Thread View in action for our team daily updates. [https://www.loom.com/share/4aab2593cc5d44bda90954e3372a3251?sid=49b77f8e-7eee-4596-920d-5d4d882d8369](https://www.loom.com/share/4aab2593cc5d44bda90954e3372a3251?sid=49b77f8e-7eee-4596-920d-5d4d882d8369) ## Main (potential) benefits With Thread View conversations live in Fibery, close to your real work and data: * It makes navigation easier. * It creates a single point of access to all important information You also have a full power of Fibery [Rich Text](https://the.fibery.io/@public/User_Guide/Guide/Rich-Text-28) field in threads, so you can mention entities, views, documents, add embeds, etc. ![Screenshot 2023-11-06 at 10.55.28 AM.png](/api/files/f1ba5610-4798-4b88-8fad-b6f6e6581469#width=2984&height=1690) ## What is Thread View? Thread View is a View that shows **Comments** from a single **Entity**. For example, it can show comments from specific Feature, or Account, or Channel. Just remember that every message in Thread View is a Comment, and you may invent some specific use cases. The trick here is that you can access discussions really fast and focus just on discussions, since you can: * Create Thread View in any Space, organize them using folders in the sidebar. * Add Thread View into Favorites. * Find Thread View in search and jump into it. ## How to create Thread View? Thread View can be created in Space. 1. Click + near the Space name and select Thread View. 2. Select an entity for the Thread View. 3. Name your view. For example, here we create Thread View for some feature in Fibery. ![2023-11-06 11.05.56.gif](/api/files/fe0e9d94-9bbe-47b6-8c03-df7e03638139#width=1490&height=838) Thread View will appear in the sidebar is marked with 💬 icon. ## How to use Thread View? Well, nothing fancy here, you just write comments. It is very similar to Slack. Here are some tricks: * You can reply to threads and add second-level comments. Find Reply to Thread icon on top of the comment and click it to add a reply. ![Screenshot 2023-11-06 at 11.41.59 AM.png](/api/files/1fb91dcb-f454-4168-92e5-6cdc72906206#align=%3Aalignment%2Fblock-left&width=532&height=214) * You can mention entities and views in comments, just use `#` shortcut. * You can jump to parent entity from Thread View breadcrumb. ![Screenshot 2023-11-06 at 11.54.19 AM.png](/api/files/23651252-9021-4a19-b341-2f5f2311e8d8#align=%3Aalignment%2Fblock-left&width=367&height=265) ## Threads section in sidebar All Thread Views are visible in Threads section in the sidebar. If you have unread comments, the thread name will be bold. ![Screenshot 2023-11-06 at 11.08.34 AM.png](/api/files/ed2fa5cd-fbd0-40e8-84d6-3f56ec16fc2a#align=%3Aalignment%2Fblock-left&width=434&height=342) > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#fba32f) > It is **not** possible to remove some threads from this section (so far), all you can do is delete a Thread View. You can only collapse Threads section. ## Use Cases ### Daily meetings / daily updates At Fibery we have a process where every employee writes into #daily channel in Slack what she did yesterday and today's plan. We experimented with this process in Fibery via Thread View as well. #### How to setup #daily channel 1. First, you need an entity that you can link Thread View to. Create a new Space and call is somehow, like Threads. Create Channel database in this Space and create one channel named Daily. Add Comments field. ![Screenshot 2023-11-06 at 11.47.32 AM.png](/api/files/25d0f36a-a17a-4e36-92bb-22ceaad433ec#width=2210&height=944) 2. Create Thread View and select Daily channel as an entity. 3. Let your team know how to use it. Here is the Daily Thread View in Fibery team. ![Screenshot 2023-11-06 at 11.49.03 AM.png](/api/files/986fa2d8-5493-4724-8c5b-4828de7196d0#width=2982&height=1694) #### How to use #daily channel Ask every person in your team to post updates into Daily Thread View and write about yesterday's tasks and today's plans. It is useful to reference exact tasks, since you will accumulate progress for the task in back-references section. ![Screenshot 2023-11-06 at 12.02.07 PM.png](/api/files/c36c414f-96d9-4205-9e8d-9243ef0809f0#align=%3Aalignment%2Fblock-left&width=676&height=310) > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#1fbed3) > In a similar way you can create new channels to discuss other topics. Let's say, if you want to discuss marketing, create Marketing channel and then create Thread View for the Marketing entity. ### Feature discussions You may use Threads to have discussions around Features. You may just use usual comments as well, but Threads are more focused, so try to experiment with it. Just create Thread View for some Feature you want to have conversations around and use it. ## FAQ and Problems ### I receive too many notifications about new comments, how can I turn them off? Most likely you Watch an entity automatically when you add a comment. You may turn this rule off in Settings → Notifications. ### Missing things and problems we know about * MISSING: Hide some Threads Views from Threads section, I want to choose what Threads to see here. * MISSING: No good mobile access. * PROBLEM: Not as fast as Slack, especially when you have many images and references. # SYNC BIRTHDAYS FROM GOOGLE CALENDAR _____________________________________ You can sync Birthdays from Google Calendar. We recommend to track birthdays in a separate Database, so setup Google Calendar Sync in some Space and select `Birthdays` calendar. ![Screenshot 2022-12-08 at 11.41.09 AM.png](/api/files/c642b65c-6a0d-4440-9283-b6dd3a5399c1#align=%3Aalignment%2Fblock-left&width=450&height=319) Rename `All Day Event` to `Birthday` on the next screen. ![Screenshot 2022-12-08 at 11.45.06 AM.png](/api/files/dbde307a-79ac-4b57-91f6-4bd397c62416#width=1484&height=506) Sync the data. As a result, Birthday database will be filled with Birthdays from your calendar. Then you can: * Auto-link `Birthdays` to people (User or Employee database) via automatic relations. * Setup some automations to remind someone about the upcoming birthday or even sent a Slack message to the whole team. # CHATBOTS (BETA) _________________ The Fibery Chatbots allow users to ask questions and receive answers from an AI-powered chatbot right in Fibery. The chatbot uses information from specified Fibery databases, so it can be a useful tool for finding information quickly. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#fba32f) > Chatbots is an experimental feature, enable it in Settings → Experimental Lab. > > Note: only Admins can enable this setting. ## Creating a New Chatbot 1. Navigate to **Settings** → **AI**. Here you will find the **Chatbots** section where all chatbots are listed. ![image.png](/api/files/c806e370-c266-4608-8423-365189559736#align=%3Aalignment%2Fblock-center&width=824&height=543) 2. Click on the **Create new Chatbot** button. 3. Fill in the required fields: * **Name** of the chatbot. * **Icon** (optional). * Select some **databases** for the chatbot to index. * **Welcome message** and **system instructions** (optional). These can be used to customize the chatbot's character and behavior. 4. Click the **Create** button. The chatbot is created and the databases indexing process starts. Note that it make take time to index all the data from specified databases. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#d40915) > Chatbot is visible to all Fibery users without any restrictions (so far). Make sure you don't add sensitive information into a chatbot. We will make it to respect space-level permissions later. For example, here is a chatbot that knows things about features and insights in Fibery product: ![Screenshot 2024-01-11 at 10.23.50 AM.png](/api/files/58b0dda3-cbae-4ec8-8b4c-0d255509d30f#align=%3Aalignment%2Fblock-left&width=402&height=359) ## Editing or Deleting a Chatbot In the chatbots list, click on the **…** near chatbot name. Select `Edit` if you want to make changes. This will open a popup where you can change name, databases and other things. Select `Remove` if you want to delete the chatbot completely. ![Screenshot 2024-01-11 at 10.26.20 AM.png](/api/files/b9f778e4-8a90-4de9-a4b4-e514f6504e64#align=%3Aalignment%2Fblock-left&width=592&height=267) ## Communicating with a Chatbot in Fibery 1. Click on the **AI Assistant** item in the left menu. 2. A new panel will open. It contains a chatbot selector, select a chatbot you want to interact with. 3. Type your question into the question form. 4. The chatbot will generate an answer progressively. You can stop the generation process if you wish. 5. You can then ask follow-up questions. ![image.png](/api/files/7055cf65-8a64-4f1a-b8b8-c328dc79f8e6#width=1879&height=1431) ## Some use cases Chatbots work nice if you have some knowledge base and want to find an answer to specific question. For example: * You store [User Guide of your product in Fibery](https://the.fibery.io/@public/User_Guide/Fibery-User-Guide-6568#ai-assistant/guide). Here you can try questions like "How to create a formula?" or "Do you have Linear integration?" * Knowledge base about competitors, here you can try questions like "Does X support feature Z?" * Some domain-specific knowledge base, like Content Marketing tips and tricks. * Your product backlog, like all features and insights. Here you can try to invent new features & brainstorm ideas, ask questions about features limitations, etc. ## Limitations Chatbots know nothing about Fibery data structure or time, so it will fail with questions like "Show me my recent tasks" or "What are top requests related to area X in our product". ## Future improvements Here are some ideas we are exploring: 1. Make chatbots public, so it will be possible to publish them and interact with them. We already have [Fibery User Guide chatbot and you can try it here](https://the.fibery.io/@public/User_Guide/Fibery-User-Guide-6568#ai-assistant/guide). 2. Make chatbots smarter. Now they know nothing about Fibery data structure or time, we want to experiment with more advanced data extraction. # TYPE API __________ Type is a template for Entities of some kind: Bugs, Teams, Objectives, etc. > [//]: # (callout;icon-type=emoji;icon=:point_up:;color=#1fbed3) > In the interface, Type = Database, App = Space. To find out why, check [Terminology](https://the.fibery.io/User_Guide/Guide/Fibery-API-Overview-279/anchor=Terminology--15f750ec-571c-48f6-9b0b-6861222c1a27). It consists of metadata and Fields. ![2024-01-12 12.43.42.gif](/api/files/ad0d48f5-b2ea-43c7-a466-1d9b38f2de9d#align=%3Aalignment%2Fblock-left&width=408&height=483) ## Type and Field permissions Imagine you've got a Type `Task` with a Field called `Effort`. Here's how permissions apply depending on `secured?` parameter: | | | | --- | --- | | | **Task `secured?`** | | ❌ | ✅ | | **Effort `secured?`** | ❌ | Everyone has access to all fields | Everyone has access to Effort, but not to other `secured?` fields | | ✅ | Everyone has access to all fields | Everyone has access to Task’s non-secured Fields like Id, but permissions are applied to Effort | ## Create Type Every Type is a part of some Space. If Type's Space does not exist yet, create or install the Space. To create a fully functional Type, we'll execute two commands: 1. `schema.type/create` to create a Type with at least five mandatory primitive Fields: * `fibery/id` * `fibery/public-id` * `fibery/creation-date` * `fibery/modification-date` * `${space}/name` 2. `fibery.app/install-mixins` to be able to prioritize Type's Entities. For auxiliary Types, that are hidden from `Workspace Map` screen, `${space}/name` Field and `rank` Mixin are optional. Just skip these parts when creating a Type. Auxiliary Types might be useful as an Entity-based storage — that's how our User's favourite pages and recent items work, for example. JavaScript ``` const Fibery = require('fibery-unofficial'); const fibery = new Fibery({host: "YOUR_ACCOUNT.fibery.io", token: YOUR_TOKEN}); // 5 primitive fields are created and rank Mixin is installed automatically for domain Types await fibery.type.createBatch([ { 'fibery/name': 'Cricket/Player', 'fibery/meta': { 'fibery/domain?': true, 'fibery/secured?': true, 'ui/color': '#F7D130' }, 'fibery/fields': [ { "fibery/name": 'user/salary', "fibery/type": 'fibery/int', "fibery/meta": { "fibery/secured?": true } } ] } ]); ``` cURL ``` curl -X POST https://YOUR_ACCOUNT.fibery.io/api/commands \ -H 'Authorization: Token YOUR_TOKEN' \ -H 'Content-Type: application/json' \ -d \ '[ { "command": "fibery.schema/batch", "args": { "commands": [ { "command": "schema.type/create", "args": { "fibery/name": "Cricket/Player", "fibery/meta": { "fibery/domain?": true, "fibery/secured?": true, "ui/color": "#F7D130" }, "fibery/fields": [ { "fibery/name": "Cricket/name", "fibery/type": "fibery/text", "fibery/meta": { "fibery/secured?": false, "ui/title?": true } }, { "fibery/name": "fibery/id", "fibery/type": "fibery/uuid", "fibery/meta": { "fibery/secured?": false, "fibery/id?": true, "fibery/readonly?": true } }, { "fibery/name": "fibery/public-id", "fibery/type": "fibery/text", "fibery/meta": { "fibery/secured?": false, "fibery/public-id?": true, "fibery/readonly?": true } }, { "fibery/name": "fibery/creation-date", "fibery/type": "fibery/date-time", "fibery/meta": { "fibery/secured?": false, "fibery/creation-date?": true, "fibery/readonly?": true, "fibery/default-value": "$now" } }, { "fibery/name": "fibery/modification-date", "fibery/type": "fibery/date-time", "fibery/meta": { "fibery/modification-date?": true, "fibery/required?": true, "fibery/readonly?": true, "fibery/default-value": "$now", "fibery/secured?": false } }, { "fibery/name": "user/salary", "fibery/type": "fibery/int", "fibery/meta": { "fibery/secured?": true } } ] } }, { "command": "fibery.app/install-mixins", "args": { "types": { "Cricket/Player": [ "fibery/rank-mixin" ] } } } ] } } ]' ``` Result (cURL): ``` [ { "success": true, "result": "ok" } ] ``` ### Command parameters | Parameter (required in bold) | Default | Description | Example | | --- | --- | --- | --- | | **`fibery/name`** | | Type name in `${space}/${name}` format | `CRM/Lead` | | `fibery/id` | Auto-generated | UUID | `fd5d9550-3779...` | | meta.`fibery/domain?` | false | Domain Types are available as cards on Views | true | | meta.**`fibery/secured?`** | | [Permissions](https://api.fibery.io/?javascript#type-and-field-permissions) apply to secured Types only | true | | meta.`ui/color?` | #000000 | HEX color to use in Entity badges | #F7D130 | | meta.**`fibery/fields`** | | Array of [Fields](https://api.fibery.io/?javascript#field) including 5 primitive ones above | | ## Rename Type JavaScript ``` const Fibery = require('fibery-unofficial'); const fibery = new Fibery({host: "YOUR_ACCOUNT.fibery.io", token: YOUR_TOKEN}); await fibery.type.renameBatch([ { 'from-name': 'Cricket/Referee', 'to-name': 'Cricket/Umpire' } ]); ``` cURL ``` curl -X POST https://YOUR_ACCOUNT.fibery.io/api/commands \ -H 'Authorization: Token YOUR_TOKEN' \ -H 'Content-Type: application/json' \ -d \ '[ { "command": "fibery.schema/batch", "args": { "commands": [ { "command": "schema.type/rename", "args": { "from-name": "Cricket/Referee", "to-name": "Cricket/Umpire" } } ] } } ]' ``` Result (cURL): ``` [ { "success": true, "result": "ok" } ] ``` ### **Command parameters** | Parameter (required in bold) | Description | Example | | --- | --- | --- | | **`from-name`** | Current Type name in `${space}/${name}` format | `Cricket/Referee` | | **`to-name`** | New Type name in `${space}/${name}` format | `Cricket/Umpire` | ## **Delete Type** JavaScript ``` const Fibery = require('fibery-unofficial'); const fibery = new Fibery({host: "YOUR_ACCOUNT.fibery.io", token: YOUR_TOKEN}); await fibery.type.deleteBatch([ { 'name': 'Cricket/Umpire', 'delete-entities?': true, 'delete-related-fields?': true } ]); ``` cURL ``` curl -X POST https://YOUR_ACCOUNT.fibery.io/api/commands \ -H 'Authorization: Token YOUR_TOKEN' \ -H 'Content-Type: application/json' \ -d \ '[ { "command": "fibery.schema/batch", "args": { "commands": [ { "command": "schema.type/delete", "args": { "name": "Cricket/Umpire", "delete-entities?": true, "delete-related-fields?": true } } ] } } ]' ``` Result (cURL): ``` [ { "success": true, "result": "ok" } ] ``` ### Command parameters | Parameter (required in bold) | Default | Description | Example | | --- | --- | --- | --- | | **`name`** | | Type name in `${space}/${name}` format | `Cricket/Umpire` | | `delete-entities?` | false | Delete all Entities of this Type? See the behavior in the table below. | true | | `delete-related-fields?` | false | Delete all related Fields like `Criket/Favourite Umpire` in `Cricket/Player`? See the behavior in the table below. | true | ### `delete?` parameter behavior | | | | --- | --- | | | **`delete?` parameter** | | **false** | **true** | | **Entities (or related Fields)** | **don't exist** | Type is deleted | Type is deleted | | **exist** | Error is thrown | Type and Entities (or related Fields) are deleted | Related single-select `enum` Types are not deleted even with `delete-related-fields?` enabled. Delete these Types separately the same way you delete the original Type. # MULTI-COLUMNS LAYOUT ______________________ Columns layout in documents and rich edit fields allow you to organize information effectively, enabling you to create Dashboards, Space home pages, and reports. ![bbc62c31573bc63199671fc9a56bb776876d8097_2_1380x786 (1).png](/api/files/909c39ba-7a36-4d75-b534-05ce71ba6d8b#width=1380&height=786) ## How to add columns layout? 1. Type `/` and find commands: * `/2 columns` * `/3 columns` * `/4 columns` 2. Columns will be added to the document. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#199ee3) > By default columns borders are invisible, but when you put mouse near left/right side of the column the separator line is visible. ## Add content to columns Type `/` inside a column and add some content. Content is automatically resized to fit the column width. For example, when you add an image, the image width is equal to the column width. Similarly, when you add a View, the View width is also equal to the column width. ## Resize columns Put the cursor near the left or right side of the column and a column border will appear. Drag it to the left or right to change the width of the column. ![2023-07-31 12.19.17.gif](/api/files/c876d712-7f49-46dc-89f7-34f16c0f76bd#width=1308&height=600) ## Add new columns Click on a column and then click … in the top right corner to access the context menu. Then click `Add column before` or `Add column after` option. ![Screenshot 2023-07-31 at 12.21.13 PM.png](/api/files/f0ca189e-3cc8-4d8b-b316-f513e7888f93#align=%3Aalignment%2Fblock-left&width=637&height=394) ## Move columns Click on a column and then click … in the top right corner to access the context menu. Click `Move right` option. ![Screenshot 2023-07-31 at 12.24.06 PM.png](/api/files/1973c304-5fd3-4998-bae5-ffadffe91a7d#align=%3Aalignment%2Fblock-left&width=680&height=302) ## Delete columns Click on a column and then click … in the top right corner to access the context menu. Click `Delete` option. # AUTOMATIONS FOR SOFTWARE DEVELOPMENT ______________________________________ Check out our webinar for detailed automations explanations. [https://youtu.be/OIxtM3rxsEI?si=hIAZyxHUdWKwGeAP](https://youtu.be/OIxtM3rxsEI?si=hIAZyxHUdWKwGeAP) Let's check, how can Fibery Automation Rules improve and automate your Software Development process. **Cases:** * Create new sprints automatically * Automatically mark Sprints as Done * Change Story priority when Due Date is coming * Assign QA when Bug is ready for testing * When the feature is ready set all stories and bugs as Done * Split iterations: move all undone bugs and sprints from one sprint to another * Document template/default describtion for Bugs ## Sprint Planning ### **Create new sprints automatically** > [//]: # (callout;icon-type=icon;icon=asterisk;color=#fba32f) > You have to add a 1:1 relations between Sprint and Sprint Database. So each Sprint would have a Previous Sprint and Next Sprint **Expected result:** new Sprint will be created in 1 week after the previous ended with two weeks duration **Rule:** ![image.png](/api/files/d5889aa9-35f7-4df4-a938-1263b711f51c#align=%3Aalignment%2Fblock-left&width=767&height=624) ![image.png](/api/files/70b759e9-92b8-426a-b397-9aa46263c7c1#align=%3Aalignment%2Fblock-left&width=777&height=631) ### **Automatically mark Sprints as Done** **Expected result:** Sprint will be moved to **Done** State when its End date is Today. **Rule:** ![image.png](/api/files/885fdcd7-4119-4b46-afcd-619f653b0e4d#align=%3Aalignment%2Fblock-left&width=769&height=589) ## **Workflow Improvements** ### Assign QA when Bug is ready for testing **Expected result:** When Bug or Story moves to the "To Test" State - assign QA **Rule:** ![image.png](/api/files/0c6fe78e-f447-41b2-99a7-94f67b1e68bb#align=%3Aalignment%2Fblock-left&width=789&height=652) If you have many QA ✨ - you can make an alternative rule - Notify all QA in your company and let them decide, who will take the bug ![image.png](/api/files/9d66b6b1-7030-4d7f-8152-bc9946a045ff#align=%3Aalignment%2Fblock-left&width=822&height=672) If you have too many QA and what to notify the one, who has fewer bugs&stories assigned - contact us via Intercom and we would be glad to set it up together. ### When the feature is ready set all stories and bugs as Done **Expected result:** when the feature is ready set all stories and bugs as Done (sorry, just failed to find other words not similar to the name) **Rule:** ![image.png](/api/files/6abc5ff3-17c7-4900-b542-f63e8a7b66f3#align=%3Aalignment%2Fblock-left&width=748&height=251) ![image.png](/api/files/0adbdf62-2fc4-417e-bd87-accfde1334f5#align=%3Aalignment%2Fblock-left&width=732&height=607.2875366210938) ### When Sprint is finished, move all undone Stories to the next sprint * Find next iteration * Assign all open bugs to it * Assign all open stories to it ![image.png](/api/files/2c001dd6-da07-462b-9590-40000484a02a#align=%3Aalignment%2Fblock-left&width=1021&height=812) ``` Sprints.Filter((Dates.Start() > Today()) and ([Step 1 Sprint].Dates.End() < Dates.Start())).Sort(Dates.Start(), false).First() ``` ### Document template for Bugs **Expected result:** when a new Bug appears, the default description is loaded to reduce the cognitive load when raising bugs **Rule:** ![image.png](/api/files/8edf063c-fdee-498a-abdd-4f4555421f05#align=%3Aalignment%2Fblock-left&width=667&height=625) ``` 📃 **Steps to reproduce** Insert link to page and screen size e.g. desktop 👀 **Current result / situation** Replace with text / image that describes the current situation 👌 **Expected result** Replace with explanation, that shows how it should be ``` **Result:** ![image.png](/api/files/feab6f7f-3094-43d6-a496-167ec3bf1a01#align=%3Aalignment%2Fblock-left&width=569&height=369) For this rule & simple, but so helpful example, we need to thank our [community](https://community.fibery.io/t/how-to-increase-quality-of-the-created-tickets/2662/2) champions. # CUSTOM APP: REST ENDPOINTS ____________________________ Below are a list of the HTTP endpoints expected in an integration application. **Required** * `GET /`: returns app information * `POST /validate`: performs validation of the account * `POST /api/v1/synchronizer/config`: returns synchronizer configuration * `POST /api/v1/synchronizer/schema`: returns synchronizer schema * `POST /api/v1/synchronizer/data`: returns data **Optional** * `GET /logo`: returns an image/svg+xml representation of the application's logo * `POST /api/v1/synchronizer/datalist`: returns possible options for filter fields * `POST /api/v1/synchronizer/filter/validate`: performs filter fields validation * `POST /api/v1/synchronizer/resource`: returns files those behind security wall * `POST /api/v1/synchronizer/webhooks`: setting up webhook * `POST /api/v1/synchronizer/webhooks/pre-process`: verify and process incoming event * `POST /api/v1/synchronizer/webhooks/transform`: convert event payload into data that can be handled by Fibery ## **GET /** GET "/" endpoint is the main one which returns information about the app. You can find response structure in [Custom App: Domain](https://the.fibery.io/@public/User_Guide/Guide/Custom-App:-Domain-269). Response example: ``` { "version": "1.0", // string representing the version of your app "name": "My Super Application", // title of the app "description": "All your base are belong to us!", // long description "authentication": [], // list of possible account authentication approaches "sources": [], // empty error "responsibleFor": { // app responsibility "dataSynchronization": true // indicates that app is responsible for data synchronization } } ``` **Authentication Information** The `authentication` object includes all account schema information. It informs the Fibery front-end how to build forms for the end-user to provide required account information. This property is required, even if your application does not require authentication. At least one authentication object must be provided within array. In case when application doesn't require authentication, the `fields` array must be omitted. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#e72065) > Read more about fields [Custom App: Fields](https://the.fibery.io/@public/User_Guide/Guide/Custom-App:-Fields-270) *Important note:* if your app provides OAuth capabilities for authentication, the authentication identifiers *must* be `oauth` and `oauth2` for OAuth v1 and OAuth v2, respectively. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#e72065) > Check [Custom App: OAuth](https://the.fibery.io/@public/User_Guide/Guide/Custom-App:-OAuth-273) Only one authentication type per OAuth version is currently supported. ``` { "authentication": [ { "id": "basic", // identifier "name": "Basic Authentication", // user-friendly title "description": "Just using a username and password", // description "fields": [ //list of fields to be filled { "id": "username", //field identifier "title": "Username", //friendly name "description": "Your username, duh!", //description "type": "text", //field type (text, password, number, etc.) "optional": true, // is this a optional field? }, /* ... */ ] } ] } ``` ## **POST /validate** This endpoint performs account validation when setting up an account for the app and before any actions that uses the account. The incoming payload includes information about the account type to be validated and all fields required: If the account is valid, the app should return HTTP status 200 with a JSON object containing a friendly name for the account: Incoming body: ``` { "id": "basic", // identifier for the account type "fields": { //list of field values to validate according to schema "username": "test_user", "password": "test$user!", /*...*/ } } ``` Success Response: ``` {"name": "Awesome Account"} ``` If the account is invalid, the app should return HTTP status 401 (Not Authorized) with a simple JSON object containing an error message: Failure Response: ``` {"message": "Your password is incorrect!"} ``` **Refresh Access Token** In addition this step can be used as a possibility to refresh access token. The incoming payload includes refresh and access token, also it can include expiration datetime. Response should include new access token to override expired one. Refresh Access Token Request: ``` { "id": "oauth2", "fields": { "access_token": "xxxx", "refresh_token": "yyyy", "expire_on": "2018-01-01" } } ``` Response sample after token refresh: ``` { "name": "Awesome account", "access_token": "new-access-token", "expire_on": "2020-01-01" } ``` ## **POST /api/v1/synchronizer/config** The endpoint returns information about synchronization possibilities based on input parameters. It instructs Fibery about: * Available types * Available filters * Available functionalities **Request** All input parameters are optional. | Name | Type | Description | | --- | --- | --- | | account | object | selected account's fields | Request example: ``` { "account": { "token": "user-token" } } ``` **Response** Response example: ``` { "types:": [ {"id": "bug", "name": "Bug"}, {"id": "us", "name": "User Story"}, ], "filters": [ { "id": "modifiedAfter", "title": "Modified After", "optional": true, "type": "datebox" } ] } ``` Output parameters: | Name | Type | Description | | --- | --- | --- | | types | `[{id: string, name: string}]` | supported types list with id and display name | | filters | Array of filters | it is used to help the user to exclude non-required data. | | webhooks | `{enabled: true, type: 'ui'}` | Optional fields that indicates that webhook functionality is supported | ### **Filter information** The `filter` object is used to help the user to exclude non-required data. Just like other field-like objects, the `filter` object is not required. If nothing is provided, users will not be able to filter out data received from the app. For more information about filters, please refer to [Custom App: Domain](https://the.fibery.io/@public/User_Guide/Guide/Custom-App:-Domain-269) and [Custom App: Fields](https://the.fibery.io/@public/User_Guide/Guide/Custom-App:-Fields-270) ## **POST /api/v1/synchronizer/schema** Integration app must provide data schema in advance so Fibery will be able to create approriate types and relations and then be able to maintain them. It should provide a schema for all requested types. Each type must contain `name` and `id` field. In additional there is a reserved field `__syncAction` that should be added to the schema if delta synchronization with possibility of removing items should be supported. **Request** Request contains: * `types` - an array of selected type ids * `filter` - currently configured filter * `account` - selected account Request example ``` { "types": ["pullrequest", "repository"], "filter": { "owner": "fibery", "repositories": ["fibery/core", "fibery/ui"] }, "account": { "token": "token" } } ``` **Response** Includes schema for all requested types Schema is JSON object where key is field and value if field description. Field description contains: | field | description | type | | --- | --- | --- | | id | Field id | string | | ignore | Is field visible in fields catalog | boolean | | name | Field name | string | | description | Field description | string | | readonly | Disable modify field name and type | boolean | | type | Type of field | "id", "text" ,"number" , "date", "array\[text\]" Learn more in [Integration Schema types](https://the.fibery.io/@public/User_Guide/Guide/Integration-Schema-types-213) | | relation | Relation between types | see relations section | | subType | Optional Fibery sub type | "url" , "integer", "email", "boolean","html", "md", "files", "date-range" Learn more in [Integration Schema types](https://the.fibery.io/@public/User_Guide/Guide/Integration-Schema-types-213) | Response example: ``` { "repository": { "id": { "type": "id", "name": "Id" }, "name": { "type": "text", "name": "Name" }, "url": { "type": "text", "name": "Original URL", "subType": "url" } }, "pullrequest": { "id": { "type": "id", "name": "Id" }, "name": { "type": "text", "name": "Name" }, "repositoryId": { "type": "text", "name": "Repository Id", "relation": { "cardinality": "many-to-one", "name": "Repository", "targetName": "Pull Requests", "targetType": "repository", "targetFieldId": "id" } }, "__syncAction": { "type": "text", "name": "Sync Action" } } } ``` ### **Relations** `relation` field provides a possibility to create a relation between entities in Fibery. It contains following fields: | field | description | type | | --- | --- | --- | | cardinality | Type of relation | "many-to-one", "many-to-many", "one-to-one" | | name | Name of the field on source side | string | | targetType | Id of target type | string | | targetName | Field name of target side | string | | targetFieldId | Find relation by value from field | string | Repository will have following fields (example includes only relation fields): * Pull Requests - Array Pull Request will have following fields: * Repository Id - string - this field will be hidden from end user * Repository - Repository Example: ``` { "repository": { "id": { "type": "id", "name": "Id" }, "name": { "type": "text", "name": "Name" }, "url": { "type": "text", "name": "Original URL", "subType": "url" } }, "pullrequest": { "id": { "type": "id", "name": "Id" }, "name": { "type": "text", "name": "Name" }, "repositoryId": { "type": "text", "name": "Repository Id", "relation": { "cardinality": "many-to-one", "name": "Repository", "targetName": "Pull Requests", "targetType": "repository", "targetFieldId": "id" } } } } ``` **Reserved field - `__syncAction`** Sync action is reserved field that won't be visible for end user. The field is used for delta synchronization when entity should be deleted. ## **POST /api/v1/synchronizer/data** Data endpoint performs actual data retrieving for the specified integration settings. Data retrieving is run by each type independently. Data synchronization supports: * pagination * delta synchronization **Request** Inbound payload includes following information: * `types` - array of selected type ids * `requestedType` - currently fetching type * `account` - account on behalf of data should be fetched * `filter` - currently configured filters * `lastSynchronizedAt` - OPTIONAL field that indicated when last successful synchronization was run * `pagination` - OPTIONAL field includes pagination settings that was returned from previous data request * `schema` - current integration schema Request example: ``` { "requestedType": "pullrequest", "types": ["repository", "pullrequest"], "filter": { "owner": "fibery", "repositories": ["fibery/core", "fibery/ui", "fibery/apps-gallery"] }, "account": { "token": "token" }, "pagination": { "repositories": ["fibery/ui", "fibery/apps-gallery"] }, "lastSynchronizedAt": "2020-09-30T09:08:47.074Z" "schema": { "repository": { "id": { "name": "Id", "type": "text" } } } } ``` ### **Response** Outboud payload includes: * `items` - REQUIRED array of fetched data rows * `pagination` - OPTIONAL parameter that includes information about pagination * `hasNext` - boolean attribute that indicates that there are more pages available * `nextPageConfig` - object that will be passed in `pagination` request body parameter with next page request * `synchronizationType` - OPTIONAL parameter with possible values `delta` or `full`. It indicates how data will be handled on Fibery side. If `delta` is set then only provided changes will be applied. Fibery will be looking for `__syncAction` field to identify whether row should be set or removed. If `__syncAction` equal `REMOVE` then corresponding entity will be removed. If `full` is set then unsynced data will be removed (if keep unsynced is unchecked). Response example: ``` { "items": [ { "id": "PR_1231", "name": "Improve performance" }, { "id": "PR_1232", "name": "Fix bugs" } ], "pagination": { "hasNext": true, "nextPageConfig": { "repositories": ["fibery/apps-gallery"] } }, "synchronizationType": "full" } ``` ### **Errors** If something goes wrong then integration app should respond with corresponding error HTTP status code and error message. Sample of error about sync failure: ``` { "message": "Unable to fetch data." } ``` But some errors can be fixed if try to fetch data later. In this case error body should include `tryLater` flag with value `true`. Fibery will retry this particular page later on. Sample of error about limits ``` { "message": "Rate limits reached", "tryLater": true } ``` ## **GET /logo** `OPTIONAL` The `/logo` endpoint is used to provide a SVG representation of a connected application's logo. This endpoint is entirely optional. Valid responses are a HTTP 200 response with a `image/svg+xml` content type, a HTTP 204 (No Content) response if there is no logo, or a 302 redirect to another URI containing the logo. If no logo is provided, or an error occurs, the application will be represented with our default app logo. ## **POST /api/v1/synchronizer/datalist** `OPTIONAL` **Request** The inbound payload includes: * `types` - an array of selected type ids * `account` - selected account * `field` - name of requested field * `dependsOn` - object that contains filter key-value pairs of dependant fields Request body: ``` { "types": ["pullrequest", "branch"], "account": { "token": "token" }, "field": "repository", "dependsOn": { "owner": "fibery" } } ``` This endpoint performs retrieving datalists from filter fields that marked with `datalist` flag. **Response** The response from your API should include `items` that is a JSON-serialized list of name-value objects: The `title` in each object is what is displayed to the end-user for each value in a combobox and the `value` is what is stored with the filter and what will be passed with subsequent requests that utilize the user-created filter. Response sample: ``` { "items": [ { "title": "fibery/ui", "value": "124" }, { "title": "fibery/core", "value": "125" } ] } ``` ## **POST /api/v1/synchronizer/filter/validate** `OPTIONAL` This endpoint performs filter validation. It can be useful when app doesn't know about what filter value looks like. For example, if your app receives sql query as filter you may want to check is that query is valid. **Request** Request body contains: * `types` - array of selected type ids * `account` - account on behalf of data should be fetched * `filter` - currently configured filters Request example: ``` { "types": ["repository", "pullrequest"], "filter": { "owner": "fibery", "repositories": ["fibery/core", "fibery/ui", "fibery/apps-gallery"] }, "account": { "token": "token" } } ``` **Response** If the filter is valid, the app should return HTTP status 200 or 204. If the account is invalid, the app should return HTTP status 400 (Bad request) with a simple JSON object containing an error message: Error response sample: ``` {"message": "Your filter is incorrect!"} ``` ## POST /api/v1/synchronizer/resource `OPTIONAL` This endpoint is used to access files that require authentication. E.g. if synchronizer schema contains `files` field but files are not accessible by direct link then connector developer can instruct synchronizer core to use this route to download file by specifying url as `app://resource?url=:url&value=1`. As a result the route will be called with `url` and `value` params. Resource endpoint is called with all query parameters those specified in `app://resource` url. **Request** Request body contains: * `types` - array of selected type ids * `account` - account on behalf of data should be fetched * `filter` - currently configured filters * `params` - list of parameters. **Response** File content as a stream ## POST /api/v1/synchronizer/webhooks `OPTIONAL` The endpoint is responsible for installing, updating or reinstalling webhook based on provided parameters. It's the place where webhook based configuration starts. **Request**. It accepts following parameters: * `types` - an array of selected types ids * `filter` - currently configured filter * `account` - authenticated external account * `webhook` - OPTIONAL. If it's `null` then new webhook is going to be installed, otherwise it will contain current webhook configuration (that is returned by THIS endpoint) ``` { "types": ["pullrequest", "repository"], "filter": { "owner": "fibery", "repositories": ["fibery/ui", "fibery/core"] }, "account": { "token": "token" }, "webhook": null } ``` **Response:** Response is a JSON object with following required fields * `id` - some random id * `workspaceId` - 3rd party workspace id linked to webhook/synchronization (e.g. slack workspace, intercom workspace, gitlab organization) * any other data that you want to receive on reinstall event. ``` { "id": "webhook_id", "workspaceId": "workspaceId", "events": ["create_repo", "delete_repo"] } ``` ## POST /api/v1/synchronizer/webhooks/pre-process `OPTIONAL` The route is responsible for initial pre processing of request. Data that is received by this route is the same as 3rd party service sends without any changes (almost). It's done to be able to calculate request signature properly. Goals of the service: * verify incoming request (usually it means that service should verify signature based on 3rd party system chosen algorithm, e.g. [hubspot webhook verification](https://developers.hubspot.com/beta-docs/guides/apps/authentication/validating-requests#validating-requests-from-hubspot)) * response with data that should be sent to 3rd party caller and list of workspace ids this event will work for. HTTP status code of the response will also be forwarded to 3rd party system **Request** Request payload and headers depends on 3rd party service **Response** Response should include following fields: * `reply` - data will be send as a response to 3rd party caller * `workspaceIds` - array of workspace ids this event can be applied on. Array can be empty ``` { "reply": { "challenge": "value" }, "workspaceIds": ["team-a", "team-b"] } ``` ## POST /api/v1/synchronizer/webhooks/transform `OPTIONAL` This route is responsible for converting event payload into data that can be handled by Fibery. Data is applied by `delta` synchronization rules. **Request** Request payload includes: * `params` - event headers that comes from external system. * `payload` - event body that comes from external system. * `types` - an array of selected type ids * `filter` - currently configured filter * `account` - selected account ``` { "params": { "x-github-id": "1234", "x-github-signature256": "dsadsa" }, "payload": { "action": "create", "repository": { "id": "repo1" } }, "types": ["pullrequest", "repository", "branch"], "filter": { "owner": "fibery", "repositories": [] }, "account": { "token": "token" } } ``` **Response** Response includes `data` object that is a map of data arrays by type id. ``` { "data": { "repositories": [ { "id": "repo1", "name": "Repo1", "__syncAction": "SET" } ], "branches": [ { "id": "master", "name": "master", "repositoryId": "repo1", "__syncAction": "SET" } ] } } ``` # EMOJI OR ICON INSTEAD OF DEFAULT VIEW ICON ____________________________________________ Feel free to pick an emoji or icon instead of the default View icon. ![custom-view-icon.gif](/api/files/5c2cb628-476c-4019-a2f4-7e928a38fd44#align=%3Aalignment%2Fblock-center&width=2006&height=1026 "Adding custom View Emoji or Icon") If you don’t feel like doing so, you can always stick to the default View icons. ## How to add emoji or icon instead of default View icon 1. Click on the View in the sidebar to open it. 2. Click on the Add Icon button in the top left corner. 3. In the pop-up window, choose an emoji or icon you like. You can also set a default skin color for all emojis. 4. To return to the default View icon, repeat steps 1-2 and choose Remove in the pop-up window. We recommend using either emojis or icons in one workspace for a more clear and concise appearance. # CAPTURE PRODUCT FEEDBACK FROM SLACK _____________________________________ [https://youtu.be/8pxvVxwxW4Q](https://youtu.be/8pxvVxwxW4Q) # FIELD TYPES _____________ Fields in Fibery report denote either user-supplied fields or fields within an information schema. There are various types of fields that each represent a different type of data. Fields are also used internally to denote information both required and optional for accounts and filters. ## Field Types The table below lists the types of fields referred to in the Fibery App REST API. The first column denotes the string name of the type as expected in the API, the second column the type of underlying data, the third column any comments and remarks for each field type and the last one show additional options that may be specified. | type | datatype | comments and remarks | Additional options | | --- | --- | --- | --- | | text | string | UTF-8 encoding | \- | | number | number | can be decimal, integer, or float | \- | | bool | boolean | validates as true/false | \- | | password | string | only used in account schemas, rendered as a password input | \- | | link | \- (used for view) | show link to external source | Need to specify "value" field. It should contain link, for example "http://test.com". | | highlightText | string | text with syntax highlight (json and sql supported for now) | Need to specify "editorMode" field. For now "json" and "sql" are supported. | | date | date | date selection | \- | | oauth | \- (used for view) | display Fibery Oauth form | \- | | list | variant | allows to select value from multiple options | Optional "datalist_requires" can be specified. For example "datalist_requires" = \["owner"\] means that fetching the list depends on "owner" field. | | multidropdown | Array | allows to select multiple values from dropdown list | Optional "datalist_requires" can be specified. For example "datalist_requires" = \["owner"\] means that fetching the list depends on "owner" field. | expand ## A Special Note on Dates Dates, both with and without times, that are parsed as a result of user-input (through the [Custom App: Date range grammar](https://the.fibery.io/@public/User_Guide/Guide/Custom-App:-Date-range-grammar-271)) are `timezone-naive` objects. Dates received from connected applications may be either aware or naive of timezones and should represent those dates as strings in an [ISO-8601 format](http://www.iso.org/iso/catalogue_detail?csnumber=40874). # FIBERY MCP SERVER ___________________ > [//]: # (callout;icon-type=icon;icon=github-alt;color=#199EE3) > Get it here → [Fibery MCP Server](https://github.com/Fibery-inc/fibery-mcp-server) You can chat with your Fibery workspace through Claude or any other MCP-supporting LLM. Current tools enable LLM to check schema, query databases, create and update entities. Here is an example how you can fetch information about competitor and update relevant entity in Fibery with a single phrase. ### Features * Query Fibery entities using natural language * Get information about your Fibery databases and their fields * Create and update Fibery entities through conversational interfaces ### Installation #### Prerequisites * A Fibery account with an API token * Python 3.10 or higher * [uv](https://github.com/astral-sh/uv) ``` uv tool install fibery-mcp-server ``` ### MCP Integration Add this configuration to your MCP client config file. In Claude Desktop, you can access the config in **Settings → Developer → Edit Config**: ``` { "mcpServers": { "fibery-mcp-server": { "command": "uv", "args": [ "tool", "run", "fibery-mcp-server", "--fibery-host", "your-domain.fibery.io", "--fibery-api-token", "your-api-token" ] } } } ``` Note: If "uv" command does not work, try absolute path (i.e. /Users/username/.local/bin/uv) **For Development:** ``` { "mcpServers": { "arxiv-mcp-server": { "command": "uv", "args": [ "--directory", "path/to/cloned/fibery-mcp-server", "run", "fibery-mcp-server", "--fibery-host", "your-domain.fibery.io", "--fibery-api-token", "your-api-token" ] } } } ``` ### Available Tools #### 1. List Databases (`list_databases`) Retrieves a list of all databases available in your Fibery workspace. #### 2. Describe Database (`describe_database`) Provides a detailed breakdown of a specific database's structure, showing all fields with their titles, names, and types. #### 3. Query Database (`query_database`) Offers powerful, flexible access to your Fibery data through the Fibery API. #### 4. Create Entity (`create_entity`) Creates new entities in your Fibery workspace with specified field values. #### 5. Update Entity (`update_entity`) Updates existing entities in your Fibery workspace with new field values. # EMAIL INTEGRATION AND HIRING PROCESS ______________________________________ Email integration can be really helpful for the Hiring process, that can live in Fibery. You will have a Candidate pipeline, and directly in Fibery track all the Candidate communications without any extra manual effort. Also, you can automate some processes - set reminders for answers, mark with color candidates, you haven't contacted for more than N days, etc. Let's see, how we can configure that! > [//]: # (callout;icon-type=icon;icon=envelope;color=#fba32f) > We recommend configuring a separate inbox in your email provider that will collect all the Candidate emails. > > For example, careers@fibery.io > > That will help to avoid multiple integrations (if you have many hiring managers), and also reduce the number of spam and non-candidate emails. ## Configure the email integration Here is a complete guide to that [Email integration (Gmail, Outlook & IMAP)](https://the.fibery.io/@public/User_Guide/Guide/Email-integration-(Gmail,-Outlook-&-IMAP)-66) We suggest adding this integration directly to the Hiring Space. Navigate to Hiring Space Settings, click Add Integration and select Email. As a result, you will have two new databases: Emails and Contacts. ## Connect emails with candidates > [//]: # (callout;icon-type=icon;icon=exclamation-triangle;color=#1fbed3) > All integration databases (Emails and Contacts) are read-only. That is done, to keep data consistency. However, you can add new fields, and connect this data with "active" Fibery databases Candidate should have Email field set properly to make the connection. Create a new Relation for Candidate to Email database, enable "Automaitically link Candidates to Emails" and select Email field in both databases: ![Screenshot 2024-11-26 at 2.53.18 PM.png](/api/files/d72c04a0-a2c2-4fba-ac9b-b2357dc9fdd7#width=2052&height=1584) Navigate to any Candidate with a proper Email and find a list of Emails. ### Ideas and tips * With [Formulas](https://the.fibery.io/@public/User_Guide/Guide/Formulas-39) you can show the last reply, and how many days passed since the last reply - it can be used for various notifications * For example - notify the responsible Manager, if we have no answer from the Candidate for more than three days * With [Forms](https://the.fibery.io/@public/User_Guide/Guide/Forms-134) you can collect Candidates and set notifications when a new person applied # CREDITS AND REFERRAL PROGRAM ______________________________ ![image.png](/api/files/5ef4b26f-3252-4788-b095-09b0177147a4#width=2560&height=1440) You can earn credits by referring others to Fibery using a unique referral link. When a new user signs up for Fibery using your referral link, they receive a $50 credit (valid for 60 days). In return, once the person you refer spends $100 as a Fibery customer, you get $100 in credit. There’s no limit to the amount of referral credit you can earn. > [//]: # (callout;icon-type=emoji;icon=:coin:;color=#d40915) > You cannot receive referral credit as cash or transfer the credit to another account. ## How the Referral Program works **For You (Referrer):** * Earn $100 in credits for each new user who signs up with your referral link and spends $100 in Fibery (excluding the $50 invite bonus). **For the Referred account (Invitee):** * Invitees receive a $50 bonus when they sign up using your referral link. * The Invitee credit is valid for 60 days. > [//]: # (callout;icon-type=emoji;icon=:clock130:;color=#1fbed3) > Please note that the Invitee's credits will be granted and appear in their account within ∼one day after signing up. ## Using the Referral Program 1. Navigate to the `Referrals and Credits` page in your account Settings. 2. Copy your unique invite link. 3. Share your referral link with your friends via social media, private Slack channels, DMs, or any other creative way you can think of. > [//]: # (callout;icon-type=emoji;icon=:link:;color=#99A2AB) > The referral link works at the workspace level. While it is unique to each workspace, it is not unique to each user within the workspace. ### **Tracking your referrals** You can view your referral statistics on the `Referrals and Credits` page dashboard. On the dashboard, you can track: * **Referral sign-ups** — the number of users who signed up for Fibery using your link * **Successful referrals** — the number of users who signed up via your link and spent $100 in Fibery * **Total credits earned** — the total amount of credits earned, including both available and spent credits When you receive a new credit, you'll be notified via Inbox. ### **Applying your credits** To use available credits, you need to have a subscription plan. **If you already have an active Fibery subscription:** * Your available credits will be automatically applied to your new payment, including payments at the start of the next billing cycle, plan upgrades, and adding new users to your workspace. **If you don't have an active Fibery subscription:** * You’ll need to choose a plan to apply your credits towards. The available credit will be automatically applied at checkout. Information about the used credits will be included in your invoices. ## Program Policies **Eligibility Criteria:** * Invitees must be new Fibery users. * Referrals to colleagues within your own company (using the same email domain) are not eligible. **Credit Details:** * Invitees receive a $50 welcome credit, which expires 60 days after issuance. * All $100 credits for Referrers have no expiration date. * Referrers can accumulate credits, with no limit on how many credits can be earned. **Program Modifications:** * We reserve the right to modify or terminate the referral program at any time.\ Changes will be communicated via our website, email, or in-app notifications. **Preventing Abuse:** * Any fraudulent activity or misuse will result in disqualification from the program. > [//]: # (callout;icon-type=emoji;icon=:bookmark_tabs:;color=#99A2AB) > Please check the detailed Terms here: ## Frequently Asked Questions #### **How long are the credits valid?** * A $50 welcome credit for Invitees expires 60 days after issuance. * All $100 credits for Referrers have no expiration date. * However, if you delete your account, the credits will be deleted as well and cannot be restored. #### **Do my credits expire if someone cancels their subscription?** If the account you invited spent $100 in Fibery and then canceled their subscription, you will still receive the $100 in credits. They will not expire. #### **What should I do if I haven't received my referral credits?** If you believe you should have received credits but they haven't been applied, please contact our customer support team for assistance. * The credits for Invitees will be granted within approximately 1 day after sign-up (if the Invitee is eligible, i.e. a new user). * The first earned credit for the Referrer is expected to be received within 14-30 days after the new account is registered. #### **Will I be notified when I have a successful referral conversion?** Yes, all admins in the workspace will be notified if the user who signed up via the referral link becomes a Fibery customer and spends $100 towards any plan. # FORMULAS __________ **Formulas** are read-only Fields where the value is automatically calculated. Use Formulas to calculate metrics that are important for you. In Fibery, you can also use 💫 AI to come up with Formulas. Also, you can do all the same things with Formula Field as with all other [Fields](https://the.fibery.io/@public/User_Guide/Guide/Fields-15). For example, you can display a Formula Field on entity card (see [Board View](https://the.fibery.io/@public/User_Guide/Guide/Board-View-9)), filter on a Formula Field, sort by Formula Field, use it inside [Reports Overview](https://the.fibery.io/@public/User_Guide/Guide/Reports-Overview-58), etc. > [//]: # (callout;icon-type=icon;icon=bookmark-full;color=#673db6) > Check [Formulas Reference](https://the.fibery.io/@public/User_Guide/Guide/Formulas-Reference-44) for more details and examples. [https://youtu.be/9Ozqwkk85xs](https://youtu.be/9Ozqwkk85xs) ## Create a Formula To create a Formula, navigate to any Database and click `+ Add Field or Relation`, then select `Formula`. > [//]: # (callout;icon-type=icon;icon=exclamation-triangle;color=#d40915) > Please, note that to save a formula, you need to have at least Read access to all the databases, which participate in this formula. You will see Formula Field creation form. In this form specify the Field Name and the Formula itself. The returned data type will be guessed automatically, but in some cases you can configure it. For example, for Number you may select Decimal or Integer. If you're not sure how your Formula should look, click `Generate using AI` button, and let the AI magic do the work. ![image.png](/api/files/164a6f18-2a48-45a2-8ff7-b2378f404b1b#align=%3Aalignment%2Fblock-center&width=3392&height=2240 "A Formula example ") > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#fba32f) > Once a Formula Field has been created, its data type cannot be changed. This means that some updates to the Formula will not be permitted, e.g. if you have created a formula that gives a Number result, but decide to change it to give a Text result. ## Formula basics The most basic Formula just uses [Fields](https://the.fibery.io/@public/User_Guide/Guide/Fields-15) from the same database. For example, you can create a Progress Formula for Feature that uses `Completed Effort` and `Total Effort` Fields. ``` [Completed Effort] / [Total Effort] * 100 ``` You can use Fields from related Databases to build Formulas as well. For example, if a Feature has a collection of Tasks and Task has Effort Field, then you can calculate total effort of a Feature: ``` Tasks.Sum(Effort) ``` If Feature has a relation to Product and Product has Risk Level field, you can access it from the Feature like that: ``` Product.[Risk Level] * Effort ``` ## Some formulas examples Inside Product we want to calculate effort of all completed Features. We create `Completed Effort` Formula Field: ``` Features.Filter(State.Final = true).Sum(Estimate) ``` 🔜 We can also use Product Fields when filtering Features. For example, let's calculate the number of Features that were created by someone besides the Product leader: ``` Features.Filter([Created By] != [This Product].Leader).Count() ``` Text Field that indicates `Importance`: ``` If((Confidence > 10) and (Reach > 10),"Important","So-so") ``` `Cycle Time` Formula Field that calculates Feature's duration in days: ``` If([Planned Dates].End > Today(), ToDays(Today() - [Planned Dates].Start), ToDays([Planned Dates].End - [Planned Dates].Start)) ``` ## FAQ ### Why brackets are different for different Relation names? If Field name contains Spaces, then its name is in brackets.\ If Field name contains no Spaces, then its name is without brackets. ### **How to create a formula that abbreviates Entity name?** Here is the one: ``` Upper(Replace(ReplaceRegex(Name, "(?<=([^ ]))([^ ]+)", ""), " ", "")) ``` ### **How to copy the first 50 characters of a text without cutting a word in half?** This code is designed to truncate a text description and add an ellipsis ("...") if it exceeds a certain length, specifically 50 characters. ``` If( Length([Description (Snippet)]) < 50, [Description (Snippet)], ReplaceRegex([Description (Snippet)], "(^.{0,50})\s(.*)", "\1…") ) ``` Here's how it works: * **`If(...)`:** This is a conditional statement. It checks if the condition inside the parentheses is true. * **`Length([Description (Snippet)]) < 50`:** This part checks if the length of the text within the `Description (Snippet)` field is less than 50 characters. * **`[Description (Snippet)]`:** If the condition (`Length(...) < 50`) is true, the code simply returns the original text in the `Description (Snippet)` field without modifications. * **`,`:** This represents the "else" part of the condition. It executes if the length is 50 or more characters. * **`ReplaceRegex([Description (Snippet)], "(^.{0,50})\s(.*)", "\1 …")`:** This section uses a regular expression to replace the text for truncation: * **`ReplaceRegex(...)`:** A function that replaces text based on a regular expression pattern. * **`"(^.{0,50})\s(.*)"`:** The regular expression pattern has three parts: * `(^.{0,50})` Matches the first 50 characters at the beginning of the text. * `\s` Matches a single whitespace character. * `(.*)` Matches any remaining characters after the whitespace. * **`"\1 …"`:** The replacement string. The `\1` refers to the first group captured by the regular expression (the first 50 characters) and appends a space and an ellipsis (" ..."). ### **I can't access the modification date Field in Formulas. Why?** The modification date records when changes have been made to the Entity. It is not accessible in Formulas and Rules because there are very high risks of loops occurring. If a Formula depends on the modification date, it will update when the modification date changes. This would cause the modification date to change again, leading to the formula updating, and so on. ### How can I achieve formula granularity on the Hours() and Minutes() levels? Unfortunately, natively we don't support that with our formula syntax. However, it's possible via script. Or via a series of `IF` statements in the formula. The example below rounds `NOW()` to an hour, not half an hour. But it can be modified to round to half an hour in a similar manner. ``` If(Minute(Now()) > 30,DateTime(Year(Now()),Month(Now()),Day(Now()),Hour(Now()) + 1,0,0),DateTime(Year(Now()),Month(Now()),Day(Now()),Hour(Now()),0,0)) ``` # CHART _______ Chart is one of the four visualisation types for [Reports](https://the.fibery.io/@public/User_Guide/Guide/Reports-346). For Charts, the visualisation pane looks like this: ![image.png](/api/files/ed1aae83-3ada-423b-8fe8-cb791d05936b#width=1216&height=836) ## Chart types There are six different types of charts that can be visualised: scatterplot, bar chart, line chart, stacked bar chart, area chart, stacked area chart. ## Parameters For any chart, there are 5 dotted boxes used for parameterising the chart: x-axis, y-axis, color, size and label. ### x-axis and y-axis The dotted boxes for the x- and y-axis allow you to choose the parameters that will be plotted. For example, you might want to use a date field for the x-axis, and a number field for the y-axis. Each axis supports multiple parameters, allowing you to split the axis into smaller facets. > [//]: # (callout;icon-type=icon;icon=lightbulb-alt;color=#6A849B) > The [**TIMELINE**](https://the.fibery.io/User_Guide/Guide/Date-functions-351/anchor=TIMELINE--9bb2c6b2-91b5-4771-aefc-7536bb5b6c7c) function is particularly useful for chart visualisations where the data set contains fields representing a date range It's possible to reverse the axes by clicking on the double-headed arrow in the bottom left of the visualisation pane. #### Scale If a date type value is used for an axis, then the parameter configuration includes a `Scale` option: Continuous or Period. The main difference between these date scales is how they are rendered, and how the values are treated. Values on a period scale are treated as ordered unique categories, while the continuous scale is treated like a linear scale. #### Annotations For parameter on either axis, it is possible to add annotations. These are lines or areas which serve to provide context for the plotted data. For example, if the x-axis is a date field, you could have an annotation line which marks an important milestone. Or for a scatterplot, you could display an area annotation to indicate the 'normal' ranges, based on minimum and maximum values for x and y values. See [Annotations](https://the.fibery.io/@public/User_Guide/Guide/Annotations-358) for all the functions supported within annotations. ### Color The dotted box for color allows you to define a parameter by which the data points can be visually distinguished with color. This can be particular useful if you want to see the break down within a stacked bar chart or stacked area chart, or if you want to identify specific groups within a scatterplot. If you have multiple parameters on the x- or y-axis, using the adding colour coding will mean that the parameters can share the same axis ### Size The dotted box for size allows you to define a parameter by which the data points can be visually distinguished with size. This is often useful to add an extra dimension of numerical information to a standard scatterplot. ### Label The dotted box for label allows you to define a labelling parameter. Since charts are often used for visualising numerical information, this can be useful for adding informative text. ## Trendlines and interpolation Depending on the chart type, there may be checkbox options for showing trendlines, and/or an for choosing the interpolation style between data points. ## Data review You can review the data on which the chart has been built by clicking on the `Chart data` button, adjacent to the `Filter` button in the top right of the report. You can also examine individual data points by hovering over an element within the chart. From here you can also export the source data to CSV. # USER GROUPS _____________ ## Why use Groups Managing access to everything for every person individually is an admin nightmare if you have plenty of users in the workspace. Here's when the User Groups come in handy. ![Space Setup - Groups - Initial.png](/api/files/c81846c0-67c9-441b-b4d2-fe511b11ae83#width=2880&height=1280) Unlike most work management software, Fibery [doesn't have pre-defined permission groups](https://fibery.io/blog/group-permissions/). Instead, we give extra power to existing Databases that organize Users. > [//]: # (callout;icon-type=emoji;icon=:unicorn_face:;color=#673db6) > User Groups are available on Pro and Enterprise [plans](https://fibery.io/pricing). ## How to use existing Database for User Groups Any Database with a People Field that allows multiple people can become a User Group DB. If you already have a Teams, Roles, Squads, or Tribes in your workspace, they are the perfect candidates: ![Space Setup - Groups - New Pressed.png](/api/files/24dd28ee-f89c-4028-ba62-9919f85094b5#width=2880&height=1280) 1. Enable creator's mode via `Show Databases` icon at the top of the sidebar. 2. Expand User DB settings → navigate to `Groups`. 3. Depending if you have any User Group DBs already: 1. if you do, click `+ New Database` and select `Use existing >`; 2. if not, click `Use existing` button. 4. Pick the People Field that will host group members. --- Alternatively, you can enable the User Group toggle directly in the People Field's settings: ![mark-database-as-group-database.png](/api/files/0be0d0d7-d15d-4555-aa61-4ba1a8c0b815#align=%3Aalignment%2Fblock-center&width=779&height=463) The result is the same => the Database will appear on the User Group management screen. > [//]: # (callout;icon-type=emoji;icon=:juggling:;color=#1fbed3) > You are free to organize Users using several different kinds of Groups simultaneously. The most common example is by Team and by Role (or Squad + Tribe). ## How to create a new User Group DB If you don't have an existing Database that contains groups, you can create a new one: ![Space Setup - Groups - New Pressed - 2.png](/api/files/ad8ca1dc-63f4-4676-a08d-8e04d3f26f4b#width=2880&height=1280) 1. Enable creator's mode via `Show Databases` icon at the top of the sidebar. 2. Expand User DB settings → navigate to `Groups`. 3. Depending if you have any User Group DBs already: 1. if you do, click `+ New Database` and select `Create new >`; 2. if not, click `New Database` button. 4. Pick the Space where the Database should belong to (don't sweat on it too much, you can always move it later). 5. Type the Database name and pick its color. 6. Once the Database is created, you can manage it just like all other [Databases](https://the.fibery.io/@public/User_Guide/Guide/Databases-7). ## How to limit each person to one Group By default, people can belong to multiple groups. If you'd like to limit a person to a single Team/Role/etc.: 1. Make sure you haven't shared anything with (see the callout below if you have). 2. Delete the People Field that currently hosts group members. 3. Create a new People Field with both of these toggles enabled: 1. `Use as User Groups` 2. `Limit to one per person` 4. Start sharing Spaces, Databases, and Entities with . > [//]: # (callout;icon-type=emoji;icon=:point_up:;color=#fba32f) > If you've already shared quite a few things with , there is currently no easy way to limit each person to a single group. Please reach out to us via support chat if you find yourself in this situation. ## How to share a Space with a User Group Once you have a User Group DB (e.g. Roles) with at least one entity inside, you can share a Space with people in this group: ![image.png](/api/files/c07e741c-97e9-4563-b028-de2a2c52f9fb#align=%3Aalignment%2Fblock-center&width=750&height=416) 1. Enable creator's mode for the Space by clicking `Show Databases` icon in the sidebar. 2. Navigate to `Access`. 3. Add groups you'd like to share the Space with. 4. Select the appropriate access level. 5. Click `Invite`. > [//]: # (callout;icon-type=emoji;icon=:point_up:;color=#1fbed3) > If you'd like some group member (e.g. group leader) to receive higher access, share the Space with them individually *in addition* to sharing with the whole group. > > For example, Developer group can have `Viewer` access while its head, Sarah, has `Editor` access. ## How to share a Database with a User Group ![image.png](/api/files/87ba7019-510e-4c61-bb61-f1f2f0c94768#align=%3Aalignment%2Fblock-center&width=1008&height=632) To share a Database with a Group: 1. Show Databases in the sidebar 2. Open the context menu for the corresponding Database 3. Click `Share` 4. Add Groups 5. Select the appropriate access level 6. Click `Add` Check out [Share Database](https://the.fibery.io/@public/User_Guide/Guide/Share-Database-342) for more details. ## How to share an Entity with a User Group ![share-entity-with-group.png](/api/files/a6f12b85-f5e9-4275-906e-e61aa275abb1#align=%3Aalignment%2Fblock-center&width=632.6796875&height=392) To share a Task or a Feature with a Group: 1. Navigate to the Entity you'd like to share 2. Click `Share` in the top right corner 3. Pick your Groups 4. Select the appropriate access level 5. Click `Invite` Check out [Share Entity](https://the.fibery.io/@public/User_Guide/Guide/Share-Entity-233) for the overview of access levels, on how to extend access, and more. ## How to automatically share Entities with assigned User Groups In addition to manually sharing an Entity, you can configure automatic access for assigned teams, squads, or departments. These are the typical use cases: * An external Team should only see Features assigned to them. * Everyone can see Projects but only members of the assigned Squad should be able to edit. * Department members should see wiki Pages relevant to them. If you find yourself repeatedly providing access to a Group that is already linked to an Entity, consider automatic sharing. Once configured, it will save you and your teammates clicks and will prevent awkward situations when an assigned Group can't access their task. Check out [Automatically Share Entities with linked Groups](https://the.fibery.io/@public/User_Guide/Guide/Automatically-Share-Entities-with-linked-Groups-395) for the guide on how to configure automatic access. ## Q&A ### In which plan are Group permissions available? Group permissions are available on Pro and Enterprise plans. Check the [pricing page](https://fibery.io/pricing) for the most up-to-date info. ### What if a User has permissions for a Space via multiple Groups? We take the maximum level. Here is an example: *Alex is a Developer in Team Sharks.* 1. *Team Sharks receives Viewer permissions for a Space → Alex is a Viewer.* 2. *Developers receive Editor permissions to a Space → Alex is now an Editor.* 3. *Alex receives Creator permissions for a Space directly → Alex is now a Creator.* 4. *Alex loses the individual access → Alex is back to being an Editor (through Developers) again.* ### Is there any Group inheritance (ex. Department → Group)? Not at the moment — at least, not out of the box. Please ping us via Intercom if that's what you are looking for. Most likely, we'll find a workaround. Most certainly, the priority of out-of-the-box inheritance as a feature will go up. # SLACK INTEGRATION ___________________ # Collect feedback from Slack Messages By capturing feedback through Slack, product teams can make data-driven decisions and continuously improve their products. However, by manually transferring the feedback to other tools, they may be missing out on opportunities to innovate and streamline their processes. Fibery's Slack integration enables easy collection of Slack messages, streamlines feedback processes, and creates references with product features and insights. This is similar to Fibery's [Intercom integration](https://the.fibery.io/@public/User_Guide/Guide/Intercom-integration-73) and [Discourse integration](https://the.fibery.io/@public/User_Guide/Guide/Discourse-integration-75) . Fibery is configured to collect messages in real time from the designated Slack channels. The messages are then added to a structured database in Fibery that includes crucial information such as sender, time, reactions, the message itself, and many more. For example, you may have `#feedback` channel in your team Slack so you can fetch all messages from this channel to Fibery. Storing all this information in the Fibery databases allows for easy filtering and sorting of messages, and different views can be created for improved organization. Furthermore, automation can be built on top of it. The messages are saved in rich text format, which can be linked to other databases such as features or insights. By connecting this information, better product decisions can be made. ![screen 20240209-181158@2x.png](/api/files/73ed95bd-8e6f-4a77-a348-89297f0dd3df#align=%3Aalignment%2Fblock-center&width=4804&height=2164 "The Fibery x Slack integration in three simple steps") Check the [Slack Actions and Notifications](https://the.fibery.io/@public/User_Guide/Guide/Slack-Actions-and-Notifications-102) for more tips. # Slack Integration Overview Using Slack Integration, you can import Slack messages from different channels into Fibery for further processing. This is done through a synchronization process that is event and time-based. This means messages and reactions will show up on Fibery immediately, but some information will be synced by pulling it from Slack Workspace at regular intervals. This approach helps to ensure the integrity of the information. ![Integration settings.gif](/api/files/1d659070-8e59-4d48-a8fa-1b79be882d25#align=%3Aalignment%2Fblock-center&width=1226&height=720 "Slack Integration quick setup") # Setup 1. Create a Space. 2. Navigate to Space settings and click `Integrate` button. 3. Select `Slack`. 4. Authentication of your Slack account can be done through OAuth (recommended), but you may use a personal API [auth token](https://api.slack.com/authentication/token-types "https://api.slack.com/authentication/token-types") if you prefer. ![screen 20240202-144434.png](/api/files/35d531b9-55bb-4ed3-8593-d771b11f7d38#width=606&height=312) 5. Allow the permission request. ![screen 20240202-144907.png](/api/files/309edb8d-404c-4aa0-990b-dad4b59599f9#width=762&height=739) 6. Customize the Integration settings. ![screen 20240205-151640.png](/api/files/58309220-9499-43af-9660-f0b4e035a756#width=783&height=510) **Databases** * **Message:** Each message sent in a configured Slack channel is recorded as a single entry in the Message database. * **Reaction:** Each use of an emoji represents a separate entry, even if it's used multiple times in the same message. * **Channel:** Each configured Slack channel is counted as one entry. * **User:** Every user in the Slack workplace. * **User Group:** Every workgroup in the Slack workplace. **Channels** Select the Slack channels that you want to collect messages from. > [//]: # (callout;icon-type=icon;icon=exclamation-triangle;color=#fba32f) > Archived channels will also be listed in the dropdown menu but **NOT included** in the synchronization process. > > Please be aware that private channels are **NOT supported** for security reasons. **\ Oldest Message** Any messages sent before that date will not be included. **User Messages Only (Filter out Fibery Bot messages)** Enabling this option filters out the Slack messages and replies from the Fibery Slack Bot during synchronization. 7. Set up Fields and Databases. The provided Slack fields by the integration can be mapped and configured to the Fibery integration database. Click on the `Sync now` button to start the sync process. ![screen 20240213-212411.png](/api/files/d56b8462-5a8a-47dd-be3a-47002db78cc9#width=781&height=1014) 8. Add Fibery Slack Bot to the channels. \ Before starting the synchronization process, invite the Fibery Slack Bot to all the channels you have set up. Otherwise, you will receive an error message indicating that the synchronization setup could not be completed. All you need to do is mention the name (`@Fibery Automation` by default) of the Bot in the channel, and click on the `Add to Channel` button to approve it. ![screen 20240202-181045.png](/api/files/856a5192-ebe4-4f9b-a816-456f618956be#width=725&height=193) ![screen 20240202-181153.png](/api/files/84d69efd-de0f-4b05-b352-79409dc90665#width=551&height=313) 9. Start the sync Once you finish configuring, save and click `Sync now` to start synchronization. # Supported objects, fields, and the default mapping Fibery supports syncing the following type of information/object from Slack Workspaces. | | | | | --- | --- | --- | | **Slack** | **Status** | **Fibery Integration/Import** | | Channel | ⚠️ | partly — archived and private channels are not supported | | Message | ✅ | supported | | User | ✅ | supported | | User Group | ✅ | supported | | Canvas | ❌ | not supported | **Database structure** ![screen 20240205-145507.png](/api/files/f8c097f7-9f03-4803-9198-1ac4607f6bc3#align=%3Aalignment%2Fblock-center&width=268&height=305) ![screen 20240205-145211.png](/api/files/e864ed2e-1452-4d91-b225-74af0c13a6a1#width=582&height=109) **Channel:** Every configured Slack channel is one entry. | | | | | | --- | --- | --- | --- | | **Slack field** | **Type** | **Fibery field** | **Description** | | **Name** | **Name** | **Name** | **Name of the Channel, mandatory field** | | Archived | Checkbox | Archived | Represent the Slack channel archive status | **Message:** Every single message in the configured Slack channel(s) is one entry. | | | | | | --- | --- | --- | --- | | **Slack field** | **Type** | **Fibery field** | **Description** | | **Name** | **Name** | **Name** | **Generated from Message (first x character), mandatory field** | | Channel Id | Relation | Channel | The Channel where the Message is. Message has one Channel | | Date | Date and Time | Date | Message creation date in Slack (not in Fibery) | | Files | Files | Files | Slack message attachment(s) | | Message Id | Text | Message Id | Unique message identifier | | Order | Decimal number | Order | Message order | | Root Message Id | Text | Root Message Id | Unique identifier of the root message | | Thread Id | Relation | Thread / Replies | The parent message of the message. If there is no parent, this is empty. Message has one Message | | URL | URL | URL | The permanent link to the Slack message | | User | Relation | User | The sender of the message. Message has one User | | **Name** | **Name** | **Name** | **Generated from Message (first x character), mandatory field** | **Reaction:** Every emoji is one entry, even for the same message. | | | | | | --- | --- | --- | --- | | **Slack field** | **Type** | **Fibery field** | **Description** | | **Name** | **Name** | **Name** | **Emoji names with semicolons,** **mandatory field** | | Message | Relation | Message | Emoji on the message. Reaction has one Message. | | User | Relation | User | Creator of the emoji. Reaction has one User. | **User:** Every user of the Slack workplace. | | | | | | --- | --- | --- | --- | | **Slack field** | **Type** | **Fibery field** | **Description** | | **Name** | **Name** | **Name** | **Slack User name** **mandatory field** | | Bot | Checkbox | Bot | Indicates whether the user is a [bot user](https://api.slack.com/bot-users#creating-bot-user). | | Deleted | Checkbox | Deleted | When the value is `true` the user is deactivated. | | Display Name | Text | Display Name | Display Name of the Slack user | | Email | Email | Email | Email address of the Slack User | | First Name | Text | First Name | The user's first name. | | Last Name | Text | Last Name | The user's last name. | | Phone | Text | Phone | The user's phone number, in any format. | | Title | Text | Title | The user's title. | **Usergroup:** Group of users with one handle address | | | | | | --- | --- | --- | --- | | **Slack field** | **Type** | **Fibery field** | **Description** | | **Name** | **Name** | **Name** | **Slack Usergroup name** **mandatory field** | | Description | Rich Text Markdown | Description | Explains the purpose of the group | | Handle | Text | Handle | Indicates the value used to notify group members via a mention without a leading @ sign. | | Users | Relation | User | Member of the users | # Understanding and Resolving Errors You may encounter the following issues when setting up or syncing with the Slack integration. Follow the instructions below to resolve them. Ensuring that data loss does not occur during the synchronization process is critical, and handling synchronization errors is vital. Our synchronization framework is designed to halt the process if the issue cannot be resolved automatically. To avoid further complications, we do not automatically remove any channel or change the configuration when a problem arises. If you need to change the configuration, for example, if the Slack channel has been deleted, you can move or export the database. This is important because any data from non-configured channels will be deleted when the sync restarts. ## Fibery Slack Bot is not a member of one of the selected Slack channel > [//]: # (callout;icon-type=icon;icon=exclamation-triangle;color=#d40915) > Fibery Slack Bot is not a selected channel(s \[channel(s)\] member. Please invite the bot to the channel to sync messages and reactions. > > Removing Fibery Slack Bot from the channel will permanently delete all previous channel information, messages, and reactions from the Fibery databases. If you are having trouble with the Fibery Slack bot, it might be because the bot is not added to the configured Slack channels. To fix this, please check Step 8 in this guide and ensure that the Fibery Slack bot is added as a member of the relevant channels. If the Fibery Slack Bot has been removed from the channel and you do not want to add it back, you can remove the channel from the setting. But do note that removing the channel will also delete all channel-related information, including conversations and reactions. Therefore, exporting or moving any necessary information elsewhere is important before removing the channel if you want to keep the data. ## No Channel selected > [//]: # (callout;icon-type=icon;icon=exclamation-triangle;color=#d40915) > No channel has been selected. Please specify the channel in the configuration when selecting a message, reaction, or channel. While setting the channel is optional in the configuration, it becomes mandatory when you want to sync messages, reactions, or channels. So, if any of these databases are enabled, please also specify the channel. Otherwise, the sync will not work. ## Configured Slack channel is archived > [//]: # (callout;icon-type=icon;icon=exclamation-triangle;color=#d40915) > The Fibery Slack Bot is not a selected channel(s) \[channel(s)\] member because it has been archived. To sync messages and reactions, please unarchive the Slack channel and reinvite the Slack bot to the channel. > > Removing the channel from the configuration will permanently delete all previous channel information, messages, and reactions from the Fibery databases. When a Slack channel is archived, we can no longer sync information. This means the synchronization will stop, and you will need to unarchive the channel from the configuration if you want to keep the channel information synced. However, if you remove the channel from the sync, all the channel messages and reactions will also be deleted. Therefore, if you want to keep the data, it is important to export or move any necessary information elsewhere before removing the channel. ## Insufficient permission for Fibery Slack Bot > [//]: # (callout;icon-type=icon;icon=exclamation-triangle;color=#d40915) > Fibery Slack Bot requires additional permissions for full functionality. Please recreate the account with the necessary permissions and attach it to the integration. This issue occurs when necessary permissions were not granted during Fibery Slack Bot installation in the Slack Workspace or were changed afterward. To start or restart the sync, this issue must be resolved. ## Configured Slack channel is deleted > [//]: # (callout;icon-type=icon;icon=exclamation-triangle;color=#d40915) > The previously configured channel is no longer accessible. This may be because it was deleted or set to private. Please fix the configuration by removing unavailable channels or making them available again. > > Removing the channel from the configuration will permanently delete all previous channel information, messages, and reactions from the Fibery databases. When a Slack channel is deleted, we can no longer sync its information. This means the synchronization will stop, and you must remove the channel from the configuration if you want to keep the channel information synced. However, if you remove the channel from the sync, all the channel messages and reactions will also be deleted. Therefore, if you want to keep the data, it is important to export or move any necessary information elsewhere before removing the channel. # Build User Inventory Synchronizing user information from different third-party systems to keep track of the number of users in each system, their identities, and costs is feasible. Numerous companies rely on Slack’s user database as one of the best-maintained sources of user information. Slack user information can be imported or synced into a Fibery database by integrating the two platforms. This will allow you to develop a backbone of user information in Fibery. You only need to synchronize the User and Usergroups database to achieve this. # Known issues * Slack user avatar sync is not supported. * User or user group mentions in Slack messages are not processed to connect to the database and entities. * The preview of Slack messages from another channel (when you paste a link) is not supported. This is because link previews in Slack are mainly intended for visual enhancement and not for storing and retrieving data. # WORK WITH ENTITIES ON WHITEBOARD __________________________________ You can put real entities (tasks, features, bugs, projects, etc) onto a Whiteboard and work with them as you would with boxes (connect, move around). ### Insert an entity into Whiteboard 1. Click `Insert a Card` option in the bottom menu (or use `I` shortcut) 2. Click on a Whiteboard where you want to insert an entity. 3. Find required entity and click on it. ![2022-06-23 13.13.43.gif](/api/files/9b5476bf-6e00-47e0-88da-75055a67aa35#width=1251&height=800) Another way is to just copy entity URL and paste it to the whiteboard, card will be created: ### Open an entity Double click on entity card to open it. It will appear on the right and you can edit it easily. ### Customize visible fields You can customize visible fields on entity cards. 1. Click on an entity card. 2. Click `Fields` menu. 3. Select fields that you want to see. Note that fields selection will be applied to all cards of this database type in this Whiteboard. ![Screenshot 2022-06-23 at 1.19.56 PM.png](/api/files/c3e1f686-3d10-4f5a-846b-d60e20849416#align=%3Aalignment%2Fblock-left&width=488&height=400) ## Convert Boxes into Entities You can quickly convert boxes into real entities. For example, you may generate many Features from your brainstorming session. 1. Select one or many boxes. 2. Click `Convert to Entity` menu. 3. Select database and boxes will be converted into entities. Double click to open an entity. ![2022-06-23 13.24.09.gif](/api/files/8983bc4e-1949-4d87-be6c-b7fdf207cdf3#align=%3Aalignment%2Fblock-left&width=593&height=342) ## ## Connecting entities In some cases you may set *real* relations between entities from Whiteboard. For example, you see Feature and Bug in Whiteboard that are not connected, and Feature has a collection of Bugs. In this case when you connect Feature with the Bug on Whiteboard the Bug will be added into a Feature collection. See [Whiteboard Relation Tool](https://the.fibery.io/@public/User_Guide/Guide/Whiteboard-Relation-Tool-298). ## Expand cards to show nested collections Manipulating and organizing entity collection hierarchies on the whiteboard is challenging. You can use Collections, they will help you to quickly add related cards to the whiteboard, thus exploring hierarchies fast. Click on any card and find Collections menu. Here you can select nested entities and apply filter to show only relevant to you. You can also remove collections from the board with two clicks. Essentially, it works like collapse and expand, but with some tricks, since there can be many collections and various filters. ## FAQ ### What if I delete a connection between entities? Nothing happens, the entities will remain linked. ### What if I try to connect entities which have a many-to-many relation? Nothing happens. Only one-to-many relation is supported currently. # PRIORITIZATION SCORE ______________________ The prioritization score helps you rank items based on their importance and the effort required. Understanding how this score is calculated will help you manage your backlog more efficiently. ## Priority Calculation The default prioritization score is calculated using the following formula: `(Highlights.Sum(Score) * 10) / IfEmpty(Effort.Value, 1)` * `Highlights.Sum(Score)`: The sum of all highlight scores. * `Effort.Value`: The effort value assigned to the feature. If no effort is set, a default value of 1 is used. The highlight score is multiplied by 10 to enhance usability. If no Effort value is set, a default value of 1 is used, making the calculation similar to having a Small effort value. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6A849B) > In the [Customize Highlights](https://the.fibery.io/@public/User_Guide/Guide/Customize-Highlights-324) you can learn how the Highlight score is calculated. ## Feature Effort Features are categorized by effort values, ranging from small to XLarge. You can add new effort categories and values to match your project's requirements. By understanding and utilizing these prioritization and effort metrics, you can effectively manage your backlog and ensure that the most important tasks are addressed first. [https://demo.arcade.software/DGyZOp4ISei7BiYS8RES?embed&show_copy_link=true](https://demo.arcade.software/DGyZOp4ISei7BiYS8RES?embed&show_copy_link=true) ## # AUTOMATION EXECUTION LOGIC ____________________________ With automations, it can sometimes be difficult to know why something happened (or didn't happen) and looking at the activity log of a single automation may not provide enough information to figure everything out. Also, as the number of automations in a workspace grows, it becomes more likely that automations start triggering each other, and/or at the same time as each other. The behaviour of automation rules can get quite complicated, but the underlying logic for how they work is relatively simple. ## Basic logic rules for automations * A workspace has a single 'automation engine' which is responsible for handling all automation activity. * This means that only one automation can be executing at any one time. * An automation's actions occur in sequence, and all actions in one automation will be completed before any other automation rule execution is started. * Formulas used in automation actions are evaluated at the time the automation action executes. * When an automation triggering event occurs, an 'event notification' is sent to the automation engine, letting it know that the automation needs to happen. * If an automation has a trigger filter set, when the automation engine receives the notification, it will evaluate the filter criteria to determine whether or not the automation actions should be executed. * The filter evaluation is done based on the entity field values at the time when the event notification is received by the automation engine, which will be *slightly* delayed from when the triggering event actually occurred. * If the filter criteria are met, the actions for the automation rule will be queued up, to be executed when the automation engine becomes available. * If more than one automation has the same trigger, the order in which they are evaluated/execute will be the order of the rules on the automation editor page. * Automation activity is asynchronous to other activity in the workspace. * This means that while the automation engine is working, other things might be happening: users making changes, [Formulas](https://the.fibery.io/@public/User_Guide/Guide/Formulas-39) getting updated, [Lookups](https://the.fibery.io/@public/User_Guide/Guide/Lookups-16) getting calculated, entities being linked/unlinked due to [Auto-linking (Set Relations Automatically)](https://the.fibery.io/@public/User_Guide/Guide/Auto-linking-(Set-Relations-Automatically)-50) rules, etc. ## What does this mean in practice? The above rules can result in the following behaviour: > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#199ee3) > The values of an entity's fields may get changed between the time of the triggering event and the time the automation engine evaluates/executes the automation. ### Example #1 An automation is configured to trigger when an entity checkbox field is updated. The automation includes a filter to only execute actions if the checkbox is true. A user rapidly clicks the checkbox field from false to true and back again, several times. Each change of the checkbox field results in an 'event notification' being sent to the automation engine. The automation engine examines the state of the checkbox field for each event notification that is received, in order to determine whether to execute the actions. There is no guarantee what the state of the checkbox might be for each of the event notifications received, so there is no way to determine how many times the automation will execute. ### Example #2 An automation is configured to trigger when an project's due date field is updated. The project has a formula field to determine if the due date is today, and the automation rule includes a filter to only execute actions if the formula field is true. Any change of the due date field results in an 'event notification' being sent to the automation engine. The automation engine examines the state of the formula field each time an event notification is received, in order to determine whether to execute. There is no guarantee that the formula calculation will have updated to the correct value by the time the automation engine checks it. 🧠In this case, it might be better to change the automation to trigger on an update to the formula field instead of the date field. ### Example #3 An automation rule is configured to run when an task's state is updated, from *In Progress* to *Done*, and it has two actions: 1) create a linked report entity, and 2) remove all assignees. Another automation rule is configured to run any time a report entity is created, and has a single action: to overwrite the report's summary rich text field with information from the linked task, making use of [Markdown Templates](https://the.fibery.io/@public/User_Guide/Guide/Markdown-Templates-53). The markdown template includes the name of the linked task and its assignees. Although a report entity will be created *before* assignees are removed from the task, the report summary will show no assignees, since the second rule will not execute until the first has fully completed (by which time, the assignees will have been removed). 🧠In this example, it might be better to only have the 'create report' action in the first automation, and then clear the task assignees as a second action in the report automation. Remember: actions can be used to update the fields of the entity that triggered the automation, but can also be used update the values of fields in related entities. ## Rich text as a trigger It is possible to define automations that trigger on changes to a rich text field. However, it's worth bearing in mind that an event notification will not be generated for every character being added/deleted (otherwise the automation engine would quickly get overloaded). Instead, rich text changes are considered to have occurred in batches, corresponding to version updates (see [Text history](https://the.fibery.io/@public/User_Guide/Guide/Text-history-32)). This means that there will be latency before an automation gets triggered following rich text changes. ## Loop prevention Loops in automations/formulas can cause problems, and when they are detected, the automation/formula will be disabled. See [Loop Prevention in Fibery](https://the.fibery.io/@public/User_Guide/Guide/Loop-Prevention-in-Fibery-190). Generally, an automation that directly (or indirectly via a formula field) causes itself to be retriggered, will be detected as a loop, and stopped/disabled. However, if an automation is re-triggered but its actions are not executed (because filter criteria are not met) it will not be considered that a loop has occurred. ### Example An automation is configured to trigger on a checkbox field change, with a filter to only execute if the checkbox is true. The automation includes an action is to clear the checkbox. This action will re-trigger the automation, but because the automation filter means that no actions are executed when re-triggering occurs, no loop is detected. ## An alternative (visual) explanation If you find the above rather wordy, perhaps a more visual explanation might help: Imagine a database with a number of fields, and two automations: rule A and rule B. In the visualisations below, the fields are shown as colours. Automation rule A | | | | --- | --- | | Trigger | 🔴 | | Filter | 🔷 | | Action 1 | 🟪 | | Action 2 | 🟨 | | Action 3 | 🟩 | | Action 4 | 🟧 | Rule A triggers on an update of the 'red' field, checks the state of the 'blue' field, and then updates the 'purple', 'yellow', 'green' and 'orange' fields Automation rule B | | | | --- | --- | | Trigger | 🟢 | | Filter | 🔶 | | Action 1 | ⬛ | Rule B triggers on an update of the 'green' field, checks the state of the 'orange' field and then updates the 'black' field. Now, the user makes some updates to the various fields, while the automation rules are enabled. The visualisation below shows the interplay between the user's activity and the automation engine: | | | | | --- | --- | --- | | **Workspace events** | | **Automation engine** | | **Rule A** | **Rule B** | | 1 | User updates field | 🟦 | | | | | 2 | User updates field | 🟥 | | 3 | User updates field | 🟦 | Event #2 received 🔴 | | 4 | User updates field | 🟩 | Check filter 🔷 | | 5 | User updates field | ⬛ | start execution … | Event #4 received 🟢 | | 6 | *Rule A updates field* | 🟪 | Action 1 🟪 | Check filter 🔶 | | 7 | *Rule A updates field* | 🟨 | Action 2 🟨 | wait … | | 8 | *Rule A updates field* | 🟩 | Action 3 🟩 | | 9 | *Rule A updates field* | 🟧 | Action 4 🟧 | Event #8 received 🟢 | | 10 | User updates field | 🟦 | | start execution … | Check filter 🔶 | | 11 | *Rule B updates field* | ⬛ | Action 1 ⬛ | wait … | | 12 | User updates field | 🟨 | | start execution … | | 13 | *Rule B updates field* | ⬛ | Action 1 ⬛ | Things to note: * The user updates the blue field (#1) and then triggers Rule A by updating the red field (#2). * By the time the automation engine receives the (red) trigger event and checks the (blue) filter, the blue field value has been updated again (#3) so the automation executes even though the user might expect it not to based on the filter condition. * The user updates the green field (#4) and this gets received by the automation engine, but the engine is busy executing Rule A. * Rule A actions include an update to the green field (#8) and so Rule B is triggered a second time (but still needs to wait its turn). * And just like with the Rule A run, by the time the (orange) filter is checked, the orange field value has been updated in the meantime (#9). * After Rule A has executed all actions (#6 - #9) the automation engine starts executing the action of Rule B for the first time (#11) and when this is done, it executes the action again (#13) for the second triggering of Rule B. It's easy to see why a user might be confused by some of the behaviours of the workspace: * Rule A was executed when it was expected that the filter setting would prevent this * the user only set the green field once, but Rule B got executed twice * Rule B automation actions happened much later than the triggering event(s) # PRODUCT TEAM TEMPLATE _______________________ # Getting started Fibery is a dynamic no-code platform designed to offer unmatched flexibility. The Product Team template is a comprehensive guide, offering inspiration and support to help you craft a custom solution that meets your unique needs. The Product Team template assists you in: * 💬 Capturing customer feedback from various sources * 🔗 Linking insights to the product backlog * 🔝 Prioritizing backlog items * 🗺️ Bridging the gap between the product roadmap and delivery * 📢 Communicating the roadmap to stakeholders and the wider audience. # Feedback Collection and Integration Feedback comes from multiple sources: user research calls, support tickets, notes from the sales team, emails, surveys, and more. The Fibery integration ecosystem helps you to collect all the feedback in one place: Feedback feed. ![Screen 2023-10-28 --11-54-13.png](/api/files/e723c807-8efc-4360-9e3b-4fca36dc8d0f#width=1848&height=1087) Feedback is sorted by date by default and shows a small summary (AI can create that). Once feedback is processed, you can mark it as *Processed*, remove it from the feed, and later locate it in the *All Feedback* view. To connect more sources, follow the integration guides: | | | | --- | --- | | **Specific Integration** | **Generic Integration** | | [Intercom integration](https://the.fibery.io/@public/User_Guide/Guide/Intercom-integration-73) [Discourse integration](https://the.fibery.io/@public/User_Guide/Guide/Discourse-integration-75) [HubSpot integration](https://the.fibery.io/@public/User_Guide/Guide/HubSpot-integration-76) [Zendesk Integration](https://the.fibery.io/@public/User_Guide/Guide/Zendesk-Integration-74) [Email integration (Gmail, Outlook & IMAP)](https://the.fibery.io/@public/User_Guide/Guide/Email-integration-(Gmail,-Outlook-&-IMAP)-66) [Readwise integration](https://the.fibery.io/@public/User_Guide/Guide/Readwise-integration-185) | [Zapier Integration](https://the.fibery.io/@public/User_Guide/Guide/Zapier-Integration-81) [Make (Integromat) integration](https://the.fibery.io/@public/User_Guide/Guide/Make-(Integromat)-integration-82) [RSS integration ](https://the.fibery.io/@public/User_Guide/Guide/RSS-integration--146) [Fibery Browser Extension (Chrome)](https://the.fibery.io/@public/User_Guide/Guide/Fibery-Browser-Extension-(Chrome)-217) or [Create Custom Integrations](https://the.fibery.io/@public/User_Guide/Guide/Create-Custom-Integrations-83) | > [//]: # (callout;icon-type=icon;icon=question-circle;color=#6A849B) > **FAQ** > > * [Customize the Feedback View](https://the.fibery.io/@public/User_Guide/Guide/Customize-the-Feedback-View-244) > * [Generate Feedback Summary by AI](https://the.fibery.io/@public/User_Guide/Guide/Generate-Feedback-Summary-by-AI-236) > * [Calculate Sentiment Score by AI](https://the.fibery.io/@public/User_Guide/Guide/Calculate-Sentiment-Score-by-AI-242) # User Research This template serves User research in several ways. ## Persona Management Think of this as your secret weapon in the product development world. It's like having a crystal ball that lets you peek into your users' minds. You get to know them, understand what makes them tick, and then use that knowledge to make decisions that hit the bullseye. And the best part? You end up creating products that your users can't get enough of. You can whip up different personas, like creating characters for a novel, and link them up with your real-life customers. It's like playing matchmaker but in a business sense. ![Screen 2023-10-29 --16-25-01.png](/api/files/f14ab041-f942-4324-9289-3b43e41a3547#align=%3Aalignment%2Fblock-center&width=942&height=907 "Contacts organized by Persona") ![Screen 2023-10-29 --16-11-50.png](/api/files/de085da6-f262-4c70-8c31-7aa5e5753727#align=%3Aalignment%2Fblock-center&width=952&height=910 "Persona view") ![Screen 2023-10-29 --16-34-15.png](/api/files/42d7c783-3ba6-4c9a-9eec-b4e6230648e0#align=%3Aalignment%2Fblock-center&width=1216&height=937 "Interviews by Persona") > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6A849B) > **FAQ** > > If you want to connect multiple contacts to a persona, use one-to-many Relations. More on that in the guide about [Relations](https://the.fibery.io/@public/User_Guide/Guide/Relations-17). # The Product Hierarchy A product hierarchy can be understood as a structured representation of the various elements that make up a software product. This hierarchy can be broken down into the following levels: * **Product** is the highest hierarchy level and represents the software solution being developed. It encompasses all the components, features, and subfeatures of the software. This is only needed when you have more than one product in your portfolio. * **Component** is a distinct part of the product that performs a specific function. Components typically comprise multiple features and can operate independently of other components. For example, in project management software, components could include task management, team collaboration, and reporting. * **Feature** is a specific functionality within a component that provides value to the user. For example, within the task management component of a project management software, features could include task creation, task assignment, and task tracking. * **Subfeature** is a specific aspect of a feature that provides additional functionality or detail. For example, subfeatures could include setting due dates, adding task descriptions, and attaching files within the task creation feature. This hierarchy helps organize the development process, making planning, tracking, and managing the work easier. It also aids in communicating the structure and functionality of the software to stakeholders, including developers, project managers, and end-users. ![Screen 2023-10-29 --12-07-36.png](/api/files/90616349-c205-48ed-b152-6f0162fee3dd#width=1425&height=1206) > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6A849B) > Similar to most features in Fibery, the Product Hierarchy is adaptable. You can modify the names, the number of levels, and many other things to fit your needs. *Opportunities* are placeholders for potential areas of growth or improvement in product management. They allow ideas and observations to be documented and revisited later for refinement. Once thoroughly evaluated, *Opportunities* can be linked to specific features for development, ensuring valuable insights are not lost. They provide a flexible and efficient way to manage ideas and feedback, bridging the gap between idea generation and feature definition. ![Screen 2023-10-29 --13-19-27.png](/api/files/940abc62-2df4-44ce-b1b8-bb24f5c6477b#width=2118&height=1505) > [//]: # (callout;icon-type=icon;icon=question-circle;color=#6A849B) > **FAQ** > > * [Extend or Reduce the Product Hierarchy](https://the.fibery.io/@public/User_Guide/Guide/Extend-or-Reduce-the-Product-Hierarchy-238) # Connect Feedback to Backlog items You can use [Entity mentions and bi-directional links](https://the.fibery.io/@public/User_Guide/Guide/Entity-mentions-and-bi-directional-links-31) highlight specific details from the Feedback and link them to a particular aspect of the product, such as a feature or component. This simplifies future prioritization by aligning feedback with the relevant part of your product. ![Screen 2023-10-28 --16-37-48.png](/api/files/2e43ecbe-7827-476e-ad62-1be13f59e6e1#width=1003&height=523) If you're uncertain where to connect this feedback within the product structure, you can create an 'Opportunity.' These can subsequently be linked to existing Features or serve as inspiration for new ones. All the Feedback for a Feature (or any item in the Product hierarchy) can be found on the Feature View. ![Screen 2023-10-28 --16-43-34.png](/api/files/6ae67c2d-3ea3-42b4-ac32-adfafaa47c4a#width=1056&height=474) # Prioritization Prioritizing the backlog is complex, with no universal solution that perfectly suits every product or development team. The number of drivers used for product prioritization can vary widely and is often tailored to the specific needs and context of the product and team. Choosing a framework and set of drivers that align with your product strategy and customer needs is crucial. In Fibery development, flexibility is paramount. That's why we offer various options in the *Product Team* template. While we recommend using one of these options, they can be freely modified, removed, or replaced with new ones to suit your specific needs. ## Priority by Strategic Drivers Product feature Drivers are inherited from OKRs (Objectives and Key Results) in product development by aligning the objectives and key results with the product features that will deliver the desired outcomes. There is no fixed number, and it can be customized based on the product, team, and company's needs. In the *Product Team* template, we set two Drivers. The Drivers can be set in the Priority by Drivers view ![Screen 2023-10-28 --18-09-07.png](/api/files/2f7f53d4-447a-42eb-ab70-4ee3ee2a4009#width=1125&height=788) The Drivers' settings and effort determine the Value/Effort score. The default formula is this: `[Driver - Adaption].Value + ([Driver - Engagement].Value * 20) / Effort` You can change the formula to fit your needs. AutoEffort is a nice function that helps to sum up Subfeature efforts to its Feature. Using the AutoEffort option, the efforts of the SubFeatures belonging to the Feature are added together. This can be turned off, even per Feature, and is a good example of how small things can simplify things. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6A849B) > **FAQ** > > * [How to change the Drivers name?](https://the.fibery.io/@public/User_Guide/Guide/Use-Strategic-Drivers-for-Feature-Prioritization-243/anchor=How-to-change-the-Drivers-name--0596f1c9-388b-4938-af6c-f8f7d59f0da5) > * [How to set up more Drivers?](https://the.fibery.io/@public/User_Guide/Guide/Use-Strategic-Drivers-for-Feature-Prioritization-243/anchor=How-to-set-up-more-Drivers--54ca9132-64f2-4c6d-bd7d-20d01a6d985f) > * [How to change the Driver values?](https://the.fibery.io/@public/User_Guide/Guide/Use-Strategic-Drivers-for-Feature-Prioritization-243/anchor=How-to-change-the-Driver-values--a95341e8-e21f-4b1d-b67f-df6a3c9d4857) > * [How to change the calculation formula or Driver's weight?](https://the.fibery.io/@public/User_Guide/Guide/Use-Strategic-Drivers-for-Feature-Prioritization-243/anchor=How-to-change-the-calculation-Formula-or--e495ea50-e63b-4452-a2df-1c31d27053b2) > * [How to change AutoEffort in bulk?](https://the.fibery.io/@public/User_Guide/Guide/Use-Strategic-Drivers-for-Feature-Prioritization-243/anchor=How-to-change-AutoEffort-in-bulk--8a87869a-5079-4b98-959f-b51dfcb6a07a) > * [How to create multiple formulas?](https://the.fibery.io/@public/User_Guide/Guide/Formulas-39) ## RICE prioritization RICE prioritization is a framework used to evaluate and prioritize project ideas based on four factors: Reach, Impact, Confidence, and Effort. ![Screen 2023-10-28 --20-43-38.png](/api/files/49de5044-68bd-471d-a372-d76b98e1ff51#width=1169&height=637) RICE stands for: * **Reach** refers to the number of people each project will affect within a given period. For example, "how many customers will this project impact over a quarter?" * **Impact** measures the effect of the project on an individual user. The impact is usually scored on a scale, for instance, 12 for massive impact, 8 for high impact, 4 for medium impact, 2 for low impact, and 1 for minimal impact * **Confidence** helps control projects where the team has data to support one aspect of the score but relies more on intuition for another. Confidence is typically scored as a percentage, with 100% being high confidence, 80% medium confidence, and 50% low confidence * **Effort** is the estimated work required to complete the project, typically measured in "person-months." ## MoSCoW prioritization The MoSCoW method is a prioritization technique used in management, business analysis, project management, and software development to reach a common understanding with stakeholders on the importance they place on the delivery of each requirement. The board view is highly beneficial as it facilitates swift prioritization through the ranking of cards. ![Screen 2023-10-28 --20-52-06.png](/api/files/7d8ea693-1058-4f37-b803-ab4ed8496635#width=1506&height=1043) The categories are typically understood as: * **Must have** are critical requirements that the project must meet for success. * **Should have** are important but not critical requirements. The project would still be a success even if some of these requirements were unmet. * **Could have** are desirable requirements that are not necessary for project success. They are typically included if time and resources permit. * **Won't have** are requirements that stakeholders have agreed will not be implemented in a given release of the product ## Feedback-driven prioritization Feedback-driven prioritization is used in product management and Agile methodologies to prioritize tasks, features, or improvements based on feedback from end-users or stakeholders. ![Screen 2023-10-28 --21-05-46.png](/api/files/b9135398-e4a7-4ddb-bcda-177568f10981#width=1094&height=517) In this table * **Reference count** refers to the total number of direct links from feedback to the Feature. * **Opportunity count** represents the total number of links to the Opportunity associated with the Feature. * **Feedback count** is the combined total of the Reference Count and the Opportunity Count. Feedback-driven prioritization is not a one-time event but a continuous process. It requires constant iteration and improvement based on the results and feedback received. It's also crucial to monitor and evaluate the effectiveness and efficiency of the feedback methods and tools and make necessary adjustments or changes. # Feature Tracking Feature Tracking is your go-to method for keeping an eye on how your features are progressing. It gives you a bird's-eye view of where each feature is at in its journey. Tracking fields come in handy for keeping tabs on the usual tasks that apply to a bunch of your features, like Product specs, Design, Development, Launch status, or any other stuff you need to follow up on. The assigned people in charge of these tasks set the statuses themselves based on the info they get from their teams. ![Screen 2023-10-29 --18-20-01.png](/api/files/5d124fed-fb5d-4745-8d6d-c6ae9ff8bd4e#width=1263&height=798) You can customize the status values that can be assigned to each task and the colors associated with them. Special task fields can be linked to a delivery planning tool such as Jira, Trello, GitHub, or GitLab issues. This integration can automatically keep you updated with information from remote systems. Please check the following integration option: * [Jira integration: Cloud & Server ](https://the.fibery.io/@public/User_Guide/Guide/Jira-integration:-Cloud-&-Server--69) * [Trello Integration](https://the.fibery.io/@public/User_Guide/Guide/Trello-Integration-79) * [GitHub integration](https://the.fibery.io/@public/User_Guide/Guide/GitHub-integration-71) * [GitLab integration](https://the.fibery.io/@public/User_Guide/Guide/GitLab-integration-72) > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6A849B) > **FAQ** > > * [How to add or remove tasks from Features?](https://the.fibery.io/@public/User_Guide/Guide/Feature-Tracking-250/anchor=How-to-add-or-remove-tasks-from-Features--def9c1cb-73e9-4301-9039-335595e26b04) > * [How to calculate weighted progress from the statuses?](https://the.fibery.io/@public/User_Guide/Guide/Feature-Tracking-250/anchor=How-to-calculate-weighted-progress-from--ba51e958-9f82-4fe7-91b7-35cbd1e49fa7) Also, consider using Fibery for both product management and software delivery. The tool is flexible and feature-rich, allowing you to keep all the information and run all the processes in one tool. You won't need to switch contexts and will have instant access to reports, requests, etc. > [//]: # (callout;icon-type=icon;icon=bolt;color=#fba32f) > Check out the guide on [How to Use Fibery for Software Development ](https://the.fibery.io/@public/User_Guide/Guide/How-to-Use-Fibery-for-Software-Development---245) # Roadmap After collecting essential insights, associating them with particular features, and ranking them using one or multiple methods, the subsequent step is to define the development sequence and set a timeline. This provides a clear vision of the future product deliverables. A roadmap serves as a vital tool for stakeholders and the broader audience. Product roadmaps are diverse in their forms to serve various audiences. In this template, we've incorporated several innovative ideas for your inspiration. Please feel empowered to modify, reinvent, or eliminate elements per your requirements. ## Kanban A Kanban roadmap helps product managers leverage the Kanban methodology in strategic planning. The Kanban technique involves grouping initiatives into clearly marked buckets by the state of the features. The name and the number of buckets represent your process. ![Screen 2023-10-29 --14-00-17.png](/api/files/6c3478e9-d8d8-4f2c-b6fd-cc2190f4d54f#width=1734&height=1015) ## Timeline This bar chart displays a detailed schedule of features related to a feature. It helps show cross-functional teams what work they must complete in what order before they can move on to the next stage of a project. ![Screen 2023-10-29 --14-01-57.png](/api/files/3aab4dbe-f145-4c7e-a36c-02ff610bf774#width=1733&height=984) ## Kanban Style Organizing in Releases This visualization organizing elements in releases involve grouping features to be released together. This approach allows for more flexible planning options, faster output, clearer focus, and transparency throughout the development cycle. ![Screen 2023-10-29 --14-03-04.png](/api/files/fdd37330-d017-400e-b3de-700e9b345b15#width=1728&height=949) ## ## Kanban Style Organizing by Quarters Using the financial quarter structure can effectively establish and track goals. It interests stakeholders and allows for timely adjustments and decision-making. This approach helps organizations stay focused and results-oriented. ![Screen 2023-10-29 --14-03-48.png](/api/files/5eb76456-f1dc-4de9-8c35-c03a175740d8#width=1731&height=986) # Write stunning PRDs Fibery provides a user-friendly interface to organize and document your product requirements easily. With the [Rich Text](https://the.fibery.io/@public/User_Guide/Guide/Rich-Text-28) editor, you can create PRDs that effectively communicate your vision and streamline development. ![Screen 2023-10-29 --14-59-59.png](/api/files/669086e9-03be-4632-8f5d-1b2f505c9e45#width=1388&height=1291) ![Screen 2023-10-29 --14-54-07.png](/api/files/8100eb44-f1e1-401c-a622-146a56fb84cb#width=1445&height=1578) All information is in one place. You can find all the linked feedback and components on the Feature view. You can even write the Public Announcement, which will be handy when preparing the Release Notes for the Releases. # Releases Users must be informed of what has happened when the completed Features are sorted into Releases and released. This is exactly what the Release Notes do. Putting this together is not always an easy task. But it would be best to collect them since you can create a Public Announcement for Features as soon as the PRD is finalized. With Fibery's Automation feature, they can be put together at the touch of a button. ![Screen 2023-10-29 --18-10-54.gif](/api/files/60620d4f-c877-4b27-b8e0-1e58349d10a7#width=800&height=540) # Public Roadmap and Release Notes Transparency helps to create a bridge between the product team and the customers we serve. The Public Roadmap can be shared as an interactive platform with colleagues and customers. It serves as a tool for validating ideas and maintaining open communication combined with [Discourse integration](https://the.fibery.io/@public/User_Guide/Guide/Discourse-integration-75): * It allows for collecting feedback on ideas still under consideration. This helps to understand which ideas benefit our users most and why. * It provides a platform to share upcoming plans and recent launches, ensuring everyone is updated. This information can be channeled to the Feedback source as well. ![Screen 2023-10-29 --18-26-16.png](/api/files/2c718578-1bd6-4113-9e0d-ab0160c90a73#width=1421&height=999) > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6A849B) > **FAQ** > > * How to integrate Public Roadmap with Discourse to collect feedback? - *soon* Release notes enhance the overall product experience by offering a valuable chance to connect with customers and the wider market. When executed effectively, they can foster engagement and boost customer loyalty. Release notes serve as a means to convey messages and communicate with customers and the broader market. Well-written release notes have the potential to enhance customer loyalty and promote engagement. ![Screen 2023-10-29 --18-22-30.png](/api/files/4fd41376-1ca7-410b-8791-4ff00a5cbf26#width=1460&height=1641) Once you have compiled all the views within the Public Roadmap space, it will be shared with the world. Please use the [Share Space to web](https://the.fibery.io/@public/User_Guide/Guide/Share-Space-to-web-36) guide to set it up. ![Screen 2023-10-29 --20-13-55.png](/api/files/c718e92c-f9c0-4593-bbde-b17ccfa4eb4b#width=387&height=255) # HUBSPOT INTEGRATION _____________________ # Enhanced Decision Making with CRM information Integrating HubSpot with Fibery creates a powerful ecosystem that combines customer relationship management and product development. This integration allows for more informed decision-making, better resource allocation, and a product that closely aligns with customer needs and business goals. ![Group 115.png](/api/files/76784865-7373-4e81-9afb-e8dc396f8d33#width=1688&height=1025) You can utilize CRM data to customize your priority list as per your preferences. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6A849B) > Please check the [Product Management template](https://the.fibery.io/@public/User_Guide/Guide/Product-Management-template-323) Using HubSpot integration, you can import any CRM information for further processing through a time-based synchronization process. The synchronization is a one-way process from HubSpot to Fibery, and you cannot sync back any data from Fibery to HubSpot. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#d40915) > Please note that you have to be Admin in Fibery and[ Super-Admin](https://knowledge.hubspot.com/user-management/hubspot-user-permissions-guide?hubs_content=knowledge.hubspot.com/integrations/connect-apps-to-hubspot&hubs_content-cta=super%20admin#super-admin) in HubSpot, to create this integration. ## # Setup 1. Create a Space 2. Navigate to Space settings and click `Integrate` button. 3. Select HubSpot by clicking on the `Sync` button. 4. Authenticating your HubSpot account can be done through OAuth, to start the process, please click the `Connect` button. 5. Complete the HubSpot authentication process and select the account you wish to synchronize. ![image.png](/api/files/1ee4fac2-386a-40ac-b1f7-33d354c28b6f#width=1506&height=1022) ![image.png](/api/files/e6afacd4-96e4-46f2-b0a2-0c70bc4004d3#width=1698&height=1800) ![image.png](/api/files/4d3ebd2c-7826-4850-b767-db211f19c52f#width=1700&height=2254) ![image.png](/api/files/1c5b4359-4b22-484e-806d-edcea1ca0666#width=1702&height=1812) 6. Customize the Integration settings. ![image.png](/api/files/679657be-89ef-430f-bcb2-babef50fdad2#width=2426&height=1448) **Databases** The list includes all accessible databases from HubSpot that you can enable or disable. Please choose wisely. CRM databases can be large, and syncing through the API can take a long time. **Updated After** and **Created After** These optional filters allow you to sync database entries updated or created after a specific date. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#d40915) > The filters are applied to all entries. It can happen if you sync a Contact but filter out the connected Company entry. 7. Set Up Fields and Databases You can map and configure the provided HubSpot fields in the integration to the Fibery integration database. You can also select which fields to sync. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6A849B) > Fibery has a limit of 234 fields, so it is important to sync only the fields you need. Click on the `Sync now` button to start the sync process. The synchronization could take several minutes to a few hours depending on the amount of data. ![image.png](/api/files/6a2a9b33-bd33-42ef-bc11-7e597234f6ab#width=2430&height=1826) ## Working with HubSpot data The HubSpot integration template offers views to replicate similar views in Hubspot for all the databases. ![image.png](/api/files/f3f08823-858a-4e6f-93e9-2b5e77c0877d#width=2728&height=1888) > [//]: # (callout;icon-type=icon;icon=book-open;color=#6A849B) > All the integrations work in a similar way. Please refer to the [Integration templates](https://the.fibery.io/@public/User_Guide/Guide/Integration-templates-68) for generic features such as synchronization settings, field editing, and integration deletion. ## FAQ #### `Canceling statement due to statement timeout. Cause: ERROR: canceling statement due to statement timeout` When encountering this error message frequently, please remove unnecessary rich-text and checkbox fields during synchronization as a workaround. #### Is there a way to update the password of an integration without having to re-add it? Unfortunately no. But you can add a new account with updated login data. ![image.png](/api/files/6129326a-d437-4c69-b95a-b19cef89cf1a#align=%3Aalignment%2Fblock-center&width=637.3500366210938&height=428) #### How the data is synced? At the moment we are subscribed for: * ‘contact.creation’ * ‘contact.deletion’ * ‘company.creation’ * ‘company.deletion’ * ‘deal.creation’ * ‘deal.deletion’ So you should get instant updates when entities are created or deleted. Technically Hubspot allows also subscription for property changes but it’s quite limited (e.g. no support for custom ones and each property requires a separate subscription) - thus we didn't implement it. #### Is it possible to send data from Fibery to Hubspot? Fibery doesn't have two-ways Hubspot sync yet. However, you can use webhooks for external actions. Please, [join this community discussion](https://community.fibery.io/t/hubspot-api-script-examples/8236) if you are interested. # CUSTOM APP: EXTERNAL ACTIONS API (BETA) _________________________________________ To execute actions in third-party systems, either extend an existing custom integration app, or create a new one. ## **External Actions Domain** Check [Custom App: Domain](https://the.fibery.io/@public/User_Guide/Guide/Custom-App:-Domain-269). You can extend domain with **actions**. | Name | Type | Description | Example | | --- | --- | --- | --- | | name | string | Name | "MyApp" | | website | string | Website | "http://myawesomeapp.com" | | version | string | Version | "1.0.0" | | … | | | | | **actions** | Array | Actions | `[]` | ### **Action** Action model has the following structure: | Name | Type | Description | Required | Example | | --- | --- | --- | --- | --- | | action | string | Identity of action | true | "Give the id for action" | | name | string | Name of action | true | "Give the name for action" | | description | string | Description of action | false | "Give the description for action" | | args | Array | Action arguments | true | `[]` | ### **Action Argument** Action argument model has the following structure: | Name | Type | Description | Required | Example | | --- | --- | --- | --- | --- | | id | string | Identity of arg | true | "Give the id for argument" | | name | string | Name of arg | true | "Give the name for argument" | | description | string | Description of arg | false | "Give the description for argument" | | type | string | Type of arg | true | Currently support `text` and `textarea` | | textTemplateSupported | boolean | Whether templating is supported | false | `true` or `false` | ## **POST /api/v1/automations/action/execute** Executes specific action with specified parameters. In case of success response just return empty object with success status code. Request body sample: ``` { "action": { "action": "create-pull-request", "args": { "repo": "me/my-repo", "name": "new-branch-name", "ref": "main" } }, "account": { "username": "test_user", "password": "test$user!" } } ``` Success response: ``` {} ``` Failure response: ``` { "message": "Pull request with specified name exists." } ``` # TABLE _______ Table is one of the four visualisation types for [Reports](https://the.fibery.io/@public/User_Guide/Guide/Reports-346). A table visualisation allow you to show the selected data source as columns of information. For Tables, the visualisation pane looks like this: ![image.png](/api/files/a1834224-3bcc-4586-b58c-f05b636c490f#width=1242&height=789) ## Parameters As well as defining the parameters to be used for the table columns, you can also define one or more parameters for hierarchically grouping the data. ### Column parameters For the table column, it is possible to resize the column width, and to choose whether an aggregation value should be shown at the bottom of the column. #### Visual encoding The cells in a column can be visually encoded. This includes both static coloring, i.e. all cells in the column have the same color, or (for numerical parameters) dynamic encoding, i.e. the opacity of the color highlighting, or the size of a colored line/bar depends upon the cell value. #### Pivot and sparklines If the column parameter is a number type, then it is possible to break down the data according to another parameter. This allows you to create another dimension to your table. For example, imagine Tasks have an Effort value associated with them, and also have a Completion date field. You could have the Task owner as one column, and SUM(\[Effort\]) as the second column, and then pivot the second column according to Completion date. This would allow you to see how the effort of completed tasks varies over time for each owner. The breakdown can be shown as numbers, lines or bars. ## Data review You can review the raw data on which the table has been built by clicking on a row within the table and clicking on Data. From here you can also export the source data to CSV. # GENERATE AND SEND CUSTOM DESIGNED PDF FILES _____________________________________________ In this guide, we'll understand how to generate and send a PDF file on a use case. Let's imagine you're a freelancer who offers services for website creation and maintenance. After a project completion, you would like to send an invoice to a customer. This means you want to automate the following flow when project's status is set to 'Done': 1. Generate a custom-designed PDF invoice containing names and costs of services provided. 2. Send the generated PDF file to a customer. Let's do it using Automation Rule. ## Step 1. Set space structure Let's configure a Space first - we need to add Databases and Formulas required for the Automation Rule. **Databases in Freelance Space** 1. **Customer Database** with fields Name, Email, Address. 2. **Project Database** with fields Name, State, Description, Customer (many-to-one relation to Customer) and Files. 3. **Task Database** with fields Name, State, Description, Cost, Project (many-to-one relation to Project). **Formulas on Project Database** **Total Cost** is calculated from cost of all Tasks in 'Done' state using `Tasks.Filter(State.Final = true).Sum(Cost)` **Delivered** is a collection of completed Tasks of Project calculated using `Tasks.Filter(State.Final = true)` ## Step 2. Set trigger for automation rule Using Fibery terminology, you would like to set Automation that perform the following actions: 1. Generate PDF file using `Attach PDF using HTML template` (first Action). 2. `Send email` with the generated PDF file to a customer (second Action). To set this Automation, you need to choose Project Database, click `Automations` in the upper right corner, and choose `Rule` in the opened window. Let's set a Rule trigger, or an answer to 'When' question. Rule should be executed when state is changed to 'Done' and 'Total Cost' is greater than 0. ![image.png](/api/files/6c311780-2350-4c62-9ae3-05df4be2d243#align=%3Aalignment%2Fblock-left&width=718&height=289) Let's continue to Actions, or answers to 'Then' question. ## Step 3. Add action 'Attach PDF using template' To generate a custom-designed PDF invoice containing names and costs of services provided: * Select `Attach PDF using template` Action. * Provide an HTML template to generate a PDF file from it. We recommend searching the web for a suitable template to use as a starting point for your specific needs. In this example, we used an HTML template that is based on [Simple HTML Invoice Template](https://github.com/sparksuite/simple-html-invoice-template) (it's inserted as code block below). * Tick `TREAT TEMPLATE AS HTML PAGE` checkbox to keep the custom formatting. Here is the first Automation Action: ![image.png](/api/files/b49b5439-5c85-441b-9435-20a8cc5e7513#align=%3Aalignment%2Fblock-left&width=698&height=382) And here is an HTML example that we used as `Template`: ``` {! Delivered:Name,Cost !}
<% for(let task of Entity.Delivered) {%> <%}%>
Freelance Studio
Invoice #: {{Public Id}}
Date: <%= (new Date()).toLocaleDateString('en-US') %>
Freelancer's Bank
Account No
777 Flower St
Sometown, USA
Bill to
{{Customer.Name}} {{Customer.Address}}
{{Name}} Services
<%= task.Name %> <%= task.Cost %>
Total: ${{Total Cost}}
``` > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#673db6) > File name is built using formula: `"Invoice #" + [Step 1 Project].[Public Id]` > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#673db6) > `{! Delivered:Name,Cost !}` used for hidden initialization of collection which contains completed Tasks. ## Step 4. Add action 'Send email' To send the generated PDF file to a customer, use `Send Email`. `[Step 1 Project].Files.Filter(StartsWith(Name, "Invoice") = true)` is used for sending only invoice file. `[Step 1 Project].Customer.Email` is used as a customer email. Here is the final second Automation Action: ![image.png](/api/files/90c102dd-629d-4714-a6ed-2866d4b70f44#align=%3Aalignment%2Fblock-left&width=670&height=655) ## Example of automation rule execution Let's assume the project status is changed to 'Done'. ![image.png](/api/files/81e3a24d-0058-48a1-9399-3340a46d2808#align=%3Aalignment%2Fblock-left&width=516&height=532) The customer will receive the following email message: ![image.png](/api/files/5d6e6a56-c2a2-43c4-8f83-8895533ee893#align=%3Aalignment%2Fblock-left&width=402&height=158) And the PDF file content is the following: ![image.png](/api/files/41cedccb-b054-4eeb-bf7a-5ca543b77a5c#align=%3Aalignment%2Fblock-left&width=404&height=345) > [//]: # (callout;icon-type=emoji;icon=:question:;color=#673db6) > If anything from this guide is unclear or you have any questions — please contact us in support chat! # HOW TO USE MAP VIEW FOR EMPLOYEE MANAGEMENT _____________________________________________ Hey there! We wanted to share with you one of the many ways that having Map View can be helpful for companies. ## Map: show Employees by location The first map we'll create will show the number of employees we have worldwide. This will give us an overview of our global workforce and help us identify areas where we may need more support or resources. ### 1. Prepare Employees database > [//]: # (callout;icon-type=icon;icon=laughing;color=#6a849b) > **Y**ou can use `User` database from People Space instead. If you run with this option, please, skip this step. Although we have Fibery `Users`, that are logged into the system users (and most likely your teammates), it still makes sense to create another database. It will store all organizational information that is valid for your HR team - joined date, contact phone, legal name, and, of course, location. Here is what Polina's card looks like: ![image.png](/api/files/b47cf18f-1d17-4cbd-a497-3d22778712e8#width=1478&height=569) Make sure that you have [Location field](https://the.fibery.io/@public/User_Guide/Guide/Location-field-163) added. ### 2. Fill in the data Now - for every employee, we have to set its location. Granularity is up to you. Probably full address can be overkill, so simple City + Country has to be enough. OK, looks like we're almost done. ![image.png](/api/files/10a10d2a-9f27-48cf-8d59-c13d71254768#align=%3Aalignment%2Fblock-center&width=992&height=183 "the more employees you have, the more time it will take 😅") ### 3. Visualize it And now, let's create a Map View itself. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6a849b) > Only Users with `Creator` permission level can add new Views to the Space * Create a new Map View * Choose Employee as a Layer * And Location as a source field ![image.png](/api/files/61c0ebeb-2b51-4c35-acdd-c8106522d12a#align=%3Aalignment%2Fblock-left&width=349&height=179) Here is what we will have as a result ![image.png](/api/files/e3dd8bd4-540c-4c1e-aee7-2a46e4684b1a#align=%3Aalignment%2Fblock-center&width=1120&height=485 "Yep, we're a pretty remote team :)") ## Map: show the location of our offices This map will show the locations of our representative offices. It may help everyone in the company understand where we have a physical presence and what opportunities may be available in those regions. ### 1. Prepare the Office database and fill in the data In Fibery, everything starts with a database 😅 In the `Office` the database, you can store not only its location but also such boring details as wi-fi password, contact person, some legal documents, and whatever comes to your mind. ![image.png](/api/files/ddb3d44a-45e4-4bd8-b448-0d132af4e36e#align=%3Aalignment%2Fblock-center&width=1438&height=674 "As you can see, here we have a more granular Location value") The location here is more granular, compared to the `Employee` database from the previous example. At first, any employee may check the address if forgotten. Second - we may have multiple offices in one city. ### 2. Visualize it And now let's create a Map View itself. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6a849b) > Only Users with `Creator` permission level can add new Views to the Space * Create a new Map View * Choose Office as a Layer * And Location as a source field ![image.png](/api/files/15868b54-971c-4084-b8ce-42e50bed9247#align=%3Aalignment%2Fblock-left&width=382&height=194) Here is what we will have as a result ![image.png](/api/files/1f28fa62-6370-4df7-af0a-6151a3cfa2da#align=%3Aalignment%2Fblock-center&width=1540&height=845 "Maybe your map will be more impressive than ours 😅") This is it! If you have any questions or feedback — don't hesitate to contact us in chat, or [ping in the community!](https://community.fibery.io/ "https://community.fibery.io/") # SIDEBAR _________ The sidebar shows Folders, [Spaces](https://the.fibery.io/@public/User_Guide/Guide/Spaces-18), [Smart Folders](https://the.fibery.io/@public/User_Guide/Guide/Smart-Folders-26), and some special areas, including [Personal (with Favorites)](https://the.fibery.io/@public/User_Guide/Guide/Personal-(with-Favorites)-390), [Private Space](https://the.fibery.io/@public/User_Guide/Guide/Private-Space-25). There are two sections (tabs) in the sidebar: `Workspace` and `Personal`. * In `Workspace` admin controls everything, so the order of folders, views and spaces is the same for all users. * In `Personal` every user can arrange items as they wish. A user can add Views, Entities, and even Spaces to Personal → Favorites. We recommend to educate users to use Personal section and enjoy a much simpler sidebar. ## Folders and Spaces in sidebar You can create Folders and Spaces in top level. What is the difference? | | | | | --- | --- | --- | | **Folders vs. Spaces** | **Space** | **Folder** | | Contains Views, Documents, Whiteboards | ✔️ | ✔️ | | Contains Databases | ✔️ | ❌ | | Manages access to content (views and databases inside) | ✔️ | ❌ | | Contains Spaces | ❌ | ✔️ | Folders are useful when you want to group several Views or Spaces together. For example, you have Company, Vacations and Hiring Spaces, and it maybe good to put them into Company folder. Spaces are required when you want to create Databases and set access. Every Space has its spot in the sidebar. A Space contains Views and data relevant to a specific process. In every Space, you can create Folders (and [Smart Folders](https://the.fibery.io/@public/User_Guide/Guide/Smart-Folders-26)) to organize information better. ![image.png](/api/files/bc328307-7601-4739-8819-d5a2579bca47#align=%3Aalignment%2Fblock-center&width=846&height=730) You can use drag and drop to rearrange Spaces and Views. > [//]: # (callout;icon-type=icon;icon=user;color=#fba32f) > Note that in Workspace tab the **order is the same for all users.** It means admin sets this structure and only admin can change it. > > Note that Folder on a top level is visible to a user if this Folder has at least one View or a user has access to at least one Space inside this Folder. You can also set icons for Folders and Smart Folders. Only Icons are allowed (no color, no emojis). ![image.png](/api/files/6b4b4124-c992-4ada-bc4c-4afb99e4bcd6#align=%3Aalignment%2Fblock-center&width=859.984375&height=510) ### How to create a new Space An Admin can create new Spaces using one of three options: * With [Templates](https://the.fibery.io/@public/User_Guide/Guide/Templates-19). * From scratch using `+ New Item → Space` action (see [Create your first Space](https://the.fibery.io/@public/User_Guide/Guide/Create-your-first-Space-6)). * Or with the help of AI using `+ New Item → Space` action. ### Moving Views and Documents between Spaces You can move any View from one Space to another. Just drag and drop the View into expanded Space. You can also move Folder to another Space via `Move to Space` action or using drag and drop. ## Personal section [Personal (with Favorites)](https://the.fibery.io/@public/User_Guide/Guide/Personal-(with-Favorites)-390) is a special section in the sidebar where you can add and access all important things. ### Private Space [Private Space](https://the.fibery.io/@public/User_Guide/Guide/Private-Space-25) is an area for [Views](https://the.fibery.io/@public/User_Guide/Guide/Views-8) that are only visible to you. You can duplicate View in an existing Space so that a copy of it is in My Space. For this, click `•••` and click `Copy to Private`. You can move View out of Private into any other Space using drag and drop. ## Find items in the sidebar Use 🔎 icon on top of all Spaces to find Spaces, Views, Documents, Folders and Smart Folders in the sidebar. Just type 2+ letters and the sidebar will only show relevant items from Workspace and Personal tabs. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#fba32f) > Content of the Smart Folders will not be found ## Change the sidebar width and collapse it You can change the width of the sidebar - find the width dragger and drag it to the left or right. To collapse or expand the sidebar, click on the collapse/expand button or use `Cmd + \` shortcut. You can also collapse all Views in + into View section ![image.png](/api/files/6b341b81-c9ca-4e5a-9243-70cef34068c8#align=%3Aalignment%2Fblock-center&width=592&height=514) ## Workspace menu When you click on the Workspace name, you will access the Workspace menu. ![image.png](/api/files/13704f62-e074-4fa3-b5fc-25dda57f92ff#align=%3Aalignment%2Fblock-left&width=283.75&height=439) This menu has the following options: * Switch Workspace. If you have several Workspaces, this will help you to navigate them quickly. * Workspace Map shows workspace overview (all Spaces & Databases). There you can also create Relations and change the structure. * [Activity Log](https://the.fibery.io/@public/User_Guide/Guide/Activity-Log-92) and [Trash](https://the.fibery.io/@public/User_Guide/Guide/Trash-90) - that will give you history of changed and undelete capabilities * [Workspace settings](https://the.fibery.io/@public/User_Guide/Guide/Workspace-settings-62) — set Workspace icon, invite users, import or export data, SSO, etc. * Templates - templates gallery you want to install * Appearance - Light, Dark and System designs You can also choose preferred visual style in the Workspace menu. ## FAQ ### Can I organize Spaces into folders or groups? Yes, just create Folder on a top level and put several Spaces into this folder. Only admin can do it. ![image.png](/api/files/47314ec9-146e-42be-a955-34cef6dcba1c#align=%3Aalignment%2Fblock-left&width=345.9140625&height=610 "Fibery team folders organization") ### Why do Whiteboards and Documents disappear from the left menu? This is actually how it’s designed to work! When a Whiteboard or Document is linked to a specific entity, it disappears from the left menu. This helps keep the left menu clean and organized, so it only shows standalone items. Documents and Whiteboards that belong to a particular entity are now accessible directly from that entity, making things tidier and easier to manage. # FORMULAS STEP-BY-STEP _______________________ In this guide, we will explain step-by-step how to create Formulas that will help in your product management work. * [Collections (Sum, Min, Max, Avg, Count)](https://the.fibery.io/User_Guide/Guide/Formulas-Step-by-Step-40/anchor=Collections-\(Sum,-Min,-Max,-Avg,-Count\)--8e5ef03b-a7cb-4032-b5f8-7cbbc4fa68a6 "https://the.fibery.io/User_Guide/Guide/Formulas-Step-by-Step-40/anchor=Collections-(Sum,-Min,-Max,-Avg,-Count)--8e5ef03b-a7cb-4032-b5f8-7cbbc4fa68a6") - how to use aggregation functions in Collections. For example, how to calculate sprint capacity, number of Tasks in the Project, OKR progress, etc. * [Filter inside Collections](https://the.fibery.io/User_Guide/Guide/Formulas-Step-by-Step-40/anchor=Filter-inside-Collections--23e15848-ffd5-4ed2-85a5-562a67e64dd1 "https://the.fibery.io/User_Guide/Guide/Formulas-Step-by-Step-40/anchor=Filter-inside-Collections--23e15848-ffd5-4ed2-85a5-562a67e64dd1") - how to filter data for Sum, Min, Max, Avg, Count functions in Collections. It's apllicable when, for example, you need to calculate effort spent on completed Tasks or remaining effort for Tasks that are not completed. * [Operations with Dates](https://the.fibery.io/User_Guide/Guide/Formulas-Step-by-Step-40/anchor=Dates-Operations--5ecc443e-6b22-40c8-9b09-b8a4e123960a "https://the.fibery.io/User_Guide/Guide/Formulas-Step-by-Step-40/anchor=Dates-Operations--5ecc443e-6b22-40c8-9b09-b8a4e123960a") - how to work with date functions. For example, when you need to calculate planned and actual duration, days left before the deadline, etc. * [Logic (If, and, or)](https://the.fibery.io/User_Guide/Guide/Formulas-Step-by-Step-40/anchor=Logic-\(If,-and,-or\)--5c464056-6a48-4257-9e28-0a63451cf47e "https://the.fibery.io/User_Guide/Guide/Formulas-Step-by-Step-40/anchor=Logic-(If,-and,-or)--5c464056-6a48-4257-9e28-0a63451cf47e") - how to use logic operators for various cases. For example, how to mark urgent Tasks based on deadline coming, check whether your Employee has too many tasks, etc. * [Common Formula errors](https://the.fibery.io/User_Guide/Guide/Formulas-Step-by-Step-40/anchor=Common-Formula-Errors--3efde08b-087f-4f10-9cd8-0f9e2365550c "https://the.fibery.io/User_Guide/Guide/Formulas-Step-by-Step-40/anchor=Common-Formula-Errors--3efde08b-087f-4f10-9cd8-0f9e2365550c") - explanation of what common errors mean. For each part, we will indicate difficulty level (from ⭐ to ⭐⭐⭐⭐), provide a table with info needed to create a Formulas, and a detailed explanation on how to read and to build a Formula. Let's start. ## **Collections (Sum, Min, Max, Avg, Count)** ### Difficulty level: ⭐ | | | | | | --- | --- | --- | --- | | **Calculate (Sum):** | **Databases** | **Field to sum** | **Formula syntax** | | Spent Effort on the Project Level | Project ➡ Task | Effort | `Tasks.Sum(Effort)` | | Sprint Capacity on the Sprint Level | Sprint ➡ Story | Effort | `Stories.Sum(Effort)` | | Total Revenue on the Project Level | Project ➡ Invoice | Invoice Value | `Invoices.Sum(Invoice Value)` | | Billable Total using Time Tracking App | Project ➡ Time Log | Hours | `Time Logs.Sum(Hours)` | | Total Expenses on the Project Level | Project ➡ Expenses | Spent | `Expenses.Sum(Spent)` | Now, let's take the first row as an example and create these Formulas step-by-step 💪 ### Example: Calculate spent Effort We will calculate spent Effort on the Project Level. #### Schema ![](https://downloads.intercomcdn.com/i/o/269548797/730172e58e196b445de70d57/image.png#align=%3Aalignment%2Fblock-left) #### Data ![](https://downloads.intercomcdn.com/i/o/275004167/aa3af1210771d11e27b89e55/image.png) #### Formula text Formula field must be created on the Project level. Here we go: `Tasks.Sum(Effort)` #### Formula explanation ![](https://downloads.intercomcdn.com/i/o/275004814/569d6e123786ada9b72c4249/image.png) > [//]: # (callout;icon-type=emoji;icon=:thinking_face:;color=#fba32f) > * If you have an existing formula (like the one used above), and then change a field name, Fibery will automatically update your formula to reflect the new field name. > * Please, check that your child Database has a field you are going to work with. Similar Formula syntax works for these Aggregation Numerical calculations: | | | | --- | --- | | **Function** | **Formula syntax** | | Avg *Returns the avg of a series of numbers* \- average OKR progress \- average delivery cost \- average goods price \- average effort per task | `Key Results.Avg(Progress)` `Deliveries.Avg(Cost)` `Goods.Avg(Price)` `Task.Avg(Effort)` | | Count *Returns the count of values* \- count number of tasks for the project \- count number of stories for the sprint \- count anything you want | `Tasks.Count()` `Stories.Count()` `Anythingyouwant.Count()` ***Note:*** since you are counting the total number of records, not the values from the fields, the Count formula will always have "empty" parentheses and look like TypeName.Count() | | Max *Returns the max of a series of numbers* \- check the highest price \- check the most complicated task (by effort) *-* check the task, that was planned to finish last | `Goods.Max(Price)` `Tasks.Max(Effort)` `Tasks.Max(Planned.End)` | | Min *Returns the min of a series of numbers* \- check the lowest price \- check the easiest task (by effort) *-* check the task, that was planned to start first | `Goods.Min(Price)` `Tasks.Min(Effort)` `Tasks.Min(Planned.Start)` | ## **Filter inside Collections** Filter data for Sum, Min, Max, Avg, Count functions in Collections. **Difficulty level:** ⭐⭐ | | | | | --- | --- | --- | | **Calculate (Filter(Conditions).Sum):** | **Filter Condition** | **Formula syntax** | | Spent Effort on the Project Level for Tasks, that are in "Done" State **Databases:** Project ➡ Task | State.Name = "Done" **Field to sum:** Effort | `Tasks.Filter(State.Name = "Done").Sum(Effort)` | | Progress on the Project Level, based on the total amount of Tasks and finished one **\*\*(pro level)** **Databases:** Project ➡ Task | State.Final = true **Field to sum:** Effort | `(100 * Tasks.Filter(State.Final = true).Sum(Effort)) / Tasks.Sum(Effort)` | | Remaining Effort on the Project Level for Tasks, that is still not done yet **\*\*(pro level)** **Databases:** Project ➡ Task | State.Final != true **Field to sum:** Effort | `Tasks.Filter(State.Final != true).Sum(Effort)` | | Total Revenue on the Project Level from Invoices, that are Paid already **Databases:** Project ➡ Invoice | State.Name = "Paid" **Field to sum:** Revenue | `Invoices.Filter(State.Name = "Paid").Sum(Revenue)` | | Spent Effort on the Project Level for Tasks, that has Planned Start before Today **Databases:** Project ➡ Task | Planned.Start < Today() **Field to sum:** Effort | `Tasks.Filter(Planned.Start < Today()).Sum(Effort)` | Now, let's take the first row as an example and create these Formulas step-by-step 💪 We will calculate spent Effort on the Project Level but for those Tasks that are done already ( Project ➡ Task ). ### Example: Calculate spent effort only for completed Tasks #### Schema From our Project Management Template: ![](https://downloads.intercomcdn.com/i/o/269823114/5cce16365358de3fc1320793/image.png) #### Data ![](https://downloads.intercomcdn.com/i/o/269823230/4fd554fb193b987452f7a319/image.png) #### Formula text Formula field must be created on the Project level. Here we go: `Tasks.Filter(State.Name = "Done").Sum(Effort)` #### Formula explanation ![](https://downloads.intercomcdn.com/i/o/275013472/6ecc49579717b6639b01be3a/image.png) **Notes:** * If you have an existing formula (like the one used above), and then change a field name, Fibery will automatically update your formula to reflect the new field name. * Please, check that your Child Database has a field, you are going to work with 🧐 * On this formula, we are writing "Done" in quotes - by quotation marks we denote Names. So, if your field, you are going to filter is called is "Amazing", then the formula will look like `Tasks.Filter(State.Name = "Amazing").Sum(Effort)` * Instead of summarizing fields in the end you can use any other formula (count, min, max, avg. and etc.) **Pro users tips:** In the Table, you could see this formula | | | --- | | `Tasks.Filter(State.Final != true).Sum(Effort)` | What does `State.Final` mean? Well, you can open any State from the Workflow Extension Field, and mark it as a Final one. ![](https://downloads.intercomcdn.com/i/o/275008556/9587c679ae5aef6ad07107c0/How+to+mark+State+as+Final.gif) And: \- `!=` - is not \- `= `-is ## **Dates Operations** **Difficulty level:** ⭐ | | | | --- | --- | | **Function** | **Formula syntax** | | **Todays** *Convert a time duration into a number of days.* \- calculate planned duration in days \- calculate actual duration in days ***Note:*** to use that formula you have to have a Date filed with Duration | `ToDays(Planned.End - Planned.Start)` `ToDays(Actual.End - Actual.Start)` | | **Today** *Date function which returns the current date.* *Can be used as a part of another formula, to compare the current date with another one.* \- calculate how many days are left before the start \- calculate how many days are left before the deadline | `ToDays(Planned.Start - Today())` `ToDays(Planned.End - Today())` | | **ToHours/ToMinutes/ToSeconds** *Convert a time duration into a number of hours/minutes/seconds.* \- calculate planned duration in hours/minutes/seconds \- calculate actual duration in hours/minutes/seconds | `ToHours(Minutes(120))` `ToMinutes(Seconds(120))` `ToSeconds(Actual.End - Actual.Start)` | | **Days/Hours/Minutes/Seconds** *Returns Duration for days/hours/minutes/seconds* *That formula works well with other formulas* \- create a field that will show date N days before the deadline (Deadline - N days) \- create a field, that will show a Review date (Actual end + 7 days) | `[Due Date] - Days(2)` `Actual.End + Days(7)` | Now, let's take the first row as an example and create these Formulas step-by-step 💪. We will check how many days did we plan to spend on the Task, and how much have we really spent. That formula affects one Database only, so we only need Task Database. ### Example: Calculate time spent on the Task (planned vs actual) #### Schema From our Project Management Template: ![](https://downloads.intercomcdn.com/i/o/269824952/3ca2a91ecebcaa42d380b9ea/image.png#align=%3Aalignment%2Fblock-left) #### Data ![](https://downloads.intercomcdn.com/i/o/275009335/b4eb6db71373654db465757d/image.png) #### Formula text Formula field must be created on the Task level. Here we go: * `ToDays(Planned.End - Planned.Start)` - how many days did we plan to spend? * `ToDays(Actual.End - Actual.Start)` - how many days have we really spent? #### Formula explanation ![](https://downloads.intercomcdn.com/i/o/275009606/f0d6a1725b5d4833377e55ca/image.png) ![](https://downloads.intercomcdn.com/i/o/269825366/d19e7eeb7c2583e59da53a7b/image.png) ![](https://downloads.intercomcdn.com/i/o/275009956/b7f09e8231876b53c8331ebd/image.png) **Notes:** * If you have an existing formula (like the one used above), and then change a field name, Fibery will automatically update your formula to reflect the new field name. 🦹 **Pro users tips:** Too many formulas make Views cluttered. So, if we want to check the difference between Actual and Planned Durations, we can input that into one formula field. The syntax will look like this: `(ToDays(Planned.End - Planned.Start) - ToDays(Actual.End - Actual.Start))` ![](https://downloads.intercomcdn.com/i/o/269825600/afbe39e29e8e9b107619110d/image.png) And it will be also helpful to know how many days have we spent on the Project Level - let's summarize all the Tasks duration. The syntax will look like this, and the Formula will be created on the Project Level. * `Tasks.Sum(ToDays(Planned.End - Planned.Start))` - how many days did we plan to spend * `Tasks.Sum(ToDays(Actual.End - Actual.Start))` - how many days have we really spent ![](https://downloads.intercomcdn.com/i/o/269825793/58fdb8f3b2d95e14883d8f62/image.png) ![](https://downloads.intercomcdn.com/i/o/269825919/6bffc44060682fb3dc299e1f/image.png) And we can even see the difference between Planned and Actual on the Project Level. Here is how the formula will look like: `Tasks.Sum((ToDays(Planned.End - Planned.Start) - ToDays(Actual.End - Actual.Start)))` ![](https://downloads.intercomcdn.com/i/o/269826067/f1b2b909b0f4bc3b487d4401/image.png) ## **Logic (If, and, or)** **Difficulty level: ⭐⭐⭐⭐** | | | | --- | --- | | **Function** | **Formula syntax** | | **If** *Returns some results based on condition. Switches between two options based on another value.* *-* mark urgent tasks based on deadline coming \- check whether your employee has too many tasks \- cycle time | `If(Actual.End < (Today()-Days(3)), "Urgent","Ok")` `If(Tasks.Count() > 10, "Overwork", "Ok")` `If([Planned Dates].End > Today(), ToDays(Today() - [Planned Dates].Start), ToDays([Planned Dates].End - [Planned Dates].Start))` | | **Or** *Use it when you want to add some conditions, comply with any of which will work for you. The number of conditions is almost unlimited.* *-* you want to mark Deal Done, if it was Won or Lost, and cherish Hopes in other cases | `If(`[`State.Name`](http://state.name/)` = "Won" or `[`State.Name`](http://state.name/)` = "Lost", "Done","Hope")` | | **And** *Use it when you want to add some conditions, comply with all of which will work for you. The number of conditions is almost unlimited.* \- if your Task wasn't finished till today as planned, then it is called Missed, if it was, then Finished. *-* rank your Task based on several conditions | `If(Actual.End > Today() and State.Final != true, "Finished","Missed")` `If((Confidence > 10) and (Reach > 10),"Important","So-so")` | Now, let's create If Formula step-by-step 💪 We will check the Status of our Sprint - whether it is a Past, Current, or Future one - based on its period. This Formula already lives in our Software Management template, but it is better to understand it, not only use 🧐 ### Example: Check Sprint status based on the time period #### Schema This is an example from our Software Development Template: ![](https://downloads.intercomcdn.com/i/o/269826811/b155f7404a689ec6788ed5a4/image.png) #### Data ![](https://downloads.intercomcdn.com/i/o/275010344/0429011bcd31db780739bbae/image.png) #### Formula text Formula must be created on the Sprint level. Here we go: `If(Dates.End < Today(),"Past",If((Dates.Start <= Today()) and (Dates.End >= Today()),"Current","Future"))` Its looks very long, so let's cut it into two parts: * `If(Dates.End < Today(),"Past"` - this is smth that happens if the End Date is less than Today * `If((Dates.Start <= Today()) and (Dates.End >= Today()),"Current","Future")` - and this is what happens if it is not #### Formula explanation `If` formula consists of three parts - ***Condition*** + (coma) + **what happens if Condition is met** + (coma) + **what happens if Condition is not met** - `If(condition, true result, false result)` But here comes the tricky part - you can set an `If` formula inside the `If` formula. Lets have a look at our Formula again. ![](https://downloads.intercomcdn.com/i/o/275011339/da588792106ed091193ac65c/image.png) And go a bit deeper: ![](https://downloads.intercomcdn.com/i/o/275011513/9efc249f697de2c9b2f716ea/image.png) And how do we read this formula? If the End Date of our Sprint is before Today, then we say, that this Sprint is Past. If the End day of this Sprint is not before Today, then we have to check - whether the Start Date of our Sprint is Today or before and the End day is Today or after, then this Sprint is Current. If Sprint is neither Past, nor Current, then it is a Future one. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#2978fb) > A joke as a bonus:`If(You understood the explanation, "🌞", you are still "🌞" but explanation is "💩")` ### Another example Let's check one more example to be sure we understood how it works 💪 At first, formulate the expected result in your head as usual - in text. Like "Ok, I think, that this Task is Urgent if it has high Priority and the deadline is coming. Deadline is coming means that is it less than 2 days before the end". And then just convert your thoughts into Formula step by step. * If it has high Priority - `If(Priority.Name = "High")` * and the deadline is coming. Deadline is coming means that is it less than 2 days before the end - `If(Priority.Name = "High" and Planned.End < (Today() - Days(2))` * Then I think, that this Task is Urgent - `If(Priority.Name = "High" and Planned.End < (Today() - Days(2), "Urgent")` * If this Priority is not high or a Deadline is not coming, then this Task is not Urgent - `If(Priority.Name = "High" and Planned.End < (Today() - Days(2), "Urgent", "Not Urgent")` ![](https://downloads.intercomcdn.com/i/o/269827586/d5e85cedd2269e3d6cddff7a/image.png) **Notes:** * If you have an existing formula (like the one used above), and then change a field name, Fibery will automatically update your formula to reflect the new field name. * Please, check that your Database has a field, you are going to work with 🧐 * In this formula, we are writing a lot of words in quotes ("Urgent". "Past", "Current")- by quotation marks we denote Names. * Your True/False result doesn't have to be Text. It can be actions - formulas - Sum, Avg, Min, Max, etc. ## **Common Formula Errors** Here is an explanation of the most popular Formula errors. 1. **Reference to undefined field** This Error means that field, you are going to operate with doesn't exist. Maybe you've forgotten to create it, or maybe just made a syntax mistake. Here I'm asking Fibery to summarize all the Points Bugs have. But I haven't created such a field, this is why it will not work. ![](https://downloads.intercomcdn.com/i/o/269827784/aaa1c52db94b4f9b29973b29/image.png) **2. The Count function does not accept any arguments** This Error means that smth wrong happens with the Count function. We don't mention what are we going to Count. We are Counting the number of Entities only, this is why there should be nothing in brackets. ![](https://downloads.intercomcdn.com/i/o/275012050/117a42faa84b5b707bcda4a3/image.png) **3. Missing closing parenthesis or comma while parsing argument list for undefined** Well, that means, that you've just forgotten to put a punctuation mark somewhere, and for Formulas that is crucial. The only thing that can help here - your attention. For now, Fibery formulas are not smart enough to show you where is smth missed 😥 ![](https://downloads.intercomcdn.com/i/o/275012246/0f6907427ce2d77f548917dc/image.png) # FIND HIGHLIGHTS (MANUALLY AND WITH AI HELP) _____________________________________________ Highlights are an important connection between customer feedback and the Product Hierarchy. Once a Highlight has been identified, it can be linked to any level in the Product Hierarchy. However, not all connections are equal. Sometimes, a Highlight may indicate an issue that could lead to customer churn, making it crucial for product management to take note. On the other hand, it could also represent positive feedback that helps marketing determine which features customers appreciate the most. [https://youtu.be/FuZiwykut5E](https://youtu.be/FuZiwykut5E) Proper prioritization of feedback requires identifying the type and quality of the link between the feedback and the product, which we call Highlights and can have various attributes. ## Capturing Highlights manually Highlights can be created by selecting a specific text in a source database entity. [https://demo.arcade.software/TZleai2cyafFsTcL9wre?embed&show_copy_link=true](https://demo.arcade.software/TZleai2cyafFsTcL9wre?embed&show_copy_link=true) ## Capturing Highlights via AI Suggestions There are two ways to capture Highlights via AI. You can do it in any Target entity. For example, you can go to any Feature and click `Suggest Highlights` button in the top right corner. With some luck, Fibery will show some suggestions. Review them and use `Link` button to create new Highlights. [https://app.arcade.software/share/KLr2Py4T6KmzZy4s06nP?embed&show_copy_link=true](https://app.arcade.software/share/KLr2Py4T6KmzZy4s06nP?embed&show_copy_link=true) Alternatively, you can open an Source entity and try to find some good Targets. For example, you can go to an Interview, click Suggest Highlights and see a list of suggested Highlights on the right. There can be several potential Targets, so you can click the best match on your opinion and a new Highlight will be created. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#199ee3) > **How AI suggestions work?** > > Fibery indexes all source and all targets databases and try to find matching entities based on this information. > > **What is indexed?** > > In source databases: Name, all rich text fields > > In target databases: Name, all rich text fields, and all linked highlights > > **How can I improve AI suggestions?** > > Put decent description into target rich text fields and link more highlights. When you link more highlights, Fibery knows more about what this item is about. # RELATION FILTERS AND SORTS ____________________________ Imagine you are linking a Feature to a Release — most often than not, it should be either the latest or the upcoming Release, not the one dating back to 2019. Or when linking a Task to a Project, rarely you want to see archived Projects. Relation filters allow you to narrow down the selection — for example, exclude old Releases and finished Projects. ### Reasons to add relation filters **Simplify the workspace for your teammates**\ No one likes to sift through a bunch of data. Picking from 3-5 relevant options with a single click is another story! ![image.png](/api/files/3c47788f-83e1-46fa-986b-1387cba5d7eb#align=%3Aalignment%2Fblock-left&width=597&height=290 "6 people to choose from instead of 30") **Cut on loading time**\ If your related Database has thousands of Entities, you can go from seconds to milliseconds by applying the filters. ![slow-relation-public.gif](/api/files/d7837678-f822-4ec6-98d8-bc24f1103954#align=%3Aalignment%2Fblock-left&width=348&height=312 "With 40K+ Workspaces, loading takes time...") **Enforce a process or a workflow**\ For example, don't suggest a Sprint if it's full or an Assignee if they are on vacation.\ ☝️ Check out *Disabling `Show other…` option* section below if you want to be stricter. As with most Fibery features, it takes one capable person (you!) to make the workspace work better for everyone. ### How to configure relation filters Configure filters in the same way you do it on Views with [Filters](https://the.fibery.io/@public/User_Guide/Guide/Filters-141): ![relation-filters-configure.gif](/api/files/f96311ca-9fe6-4e4d-bd28-38c35d6be4c9#align=%3Aalignment%2Fblock-left&width=638&height=288.2109375 "Removing former employees and bots from assignees selection") For relations to User DB, we add a filter to exclude deactivated Users by default. ### Using dynamic values ![image.png](/api/files/0c640d39-7134-4283-9cb2-527b4ca52743#align=%3Aalignment%2Fblock-center&width=1996&height=897 "When planning a Story, show only relevant Sprints for the Team") Often one relation dropdown depends on another one: 1. when planning a Story into a Sprint, show only the Sprints of the relevant Team; 2. when assigning a person to a Task, show only those who work on the Project; 3. when linking a Feature to an Epic, show only the Epics in the relevant Product. In this case, pick a dynamic value marked with `𝑥` instead of a specific Entity. The relation dropdown will adapt as you navigate to different Entities. ![dynamic-values-assignees.png](/api/files/30aa32b5-236c-49a0-a1a8-f7d719180250#align=%3Aalignment%2Fblock-center&width=1904&height=908 "When assigning a person to a Task, show only those who work on the Project") ### Where relation filters apply Filters apply, basically, everywhere you see the control on the screenshots above. Namely: * Entity View: Fields on the right and pinned Fields * Table View: relation Field cells * Editable units on all Views and in rich-text mentions * Buttons: ask user to provide value * Automation actions: updating a relation Field * Full Add internal Forms > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#fba32f) > If relation filters use a dynamic value and it's not accessible (ex. there is no `This …` in automations), we don't apply any of the filters. The only place where we don't apply the filters is… filters! Sorry, dawg, we can't pimp your Fibery: ![image.png](/api/files/d4d782fc-76e3-4ded-9365-18937324e8fa#align=%3Aalignment%2Fblock-left&width=523&height=353) The filters also **do not** apply when you link an Entity via a search popup: ![image.png](/api/files/aff548ea-4918-4222-8e6f-eaeb4b4b9a38#align=%3Aalignment%2Fblock-left&width=1326&height=694) This popup shows recent items by default instead. As usual, if this doesn't fit your workflow, please let us know via Intercom. ### Sorting suggested options Once you narrowed down the number of suggested options to a manageable number using filters, apply relevant sorting: ![relation-sort.gif](/api/files/347bd1fe-56b3-461f-bb45-6873a5c6c6de#align=%3Aalignment%2Fblock-left&width=805&height=305.63543701171875) [Sorts](https://the.fibery.io/@public/User_Guide/Guide/Sorts-180) work in the same way they do on Views. ### Disabling "Show other…" option To prevent users from picking an option that doesn't satisfy the filter criteria, switch the toggle to off: ![relation-filter-show-other-toggle.gif](/api/files/03a1d6f8-a82a-4151-8082-57a6470c9d8a#align=%3Aalignment%2Fblock-center&width=1742&height=676 "Disabling the toggle hides "Show other..." line") > [//]: # (callout;icon-type=emoji;icon=:point_up:;color=#fba32f) > This setting applies to UI only, a User is still able to link an arbitrary Entity via the API, by dragging and dropping on a Board or copy and pasting on a Table. When the option is turned off, we try to automatically set the filter values for newly created Entities, in the same way we do on Views — see [Filters](https://the.fibery.io/@public/User_Guide/Guide/Filters-141). # WHY DO YOU NEED FIBERY? _________________________ In a modern world you have plenty of choices and limited time. Why choose Fibery? There are three main reasons that may resonate with you: ### **1. Can’t find a tool that fits your unique work process** You’ve tried many tools, but still feel that you struggle with them most of the time. They can’t be customized to satisfy your needs, so you check new tools from time to time in an endless search for something better. Fibery might be the tool you are looking for. It's very likely Fibery can reflect your terminology, workflows, specific domain and processes. It can be used in schools, VC funds, consulting companies, software development startups, media agencies, etc. Unlike other flexible tools ([Notion](https://fibery.io/blog/fibery-vs-notion "https://fibery.io/blog/fibery-vs-notion"), [Coda](https://fibery.io/blog/fibery-vs-coda-the-power-of-workarounds/ "https://fibery.io/blog/fibery-vs-coda-the-power-of-workarounds/") or [Airtable](https://fibery.io/blog/fibery-vs-airtable-we-connect-your-bases!/ "https://fibery.io/blog/fibery-vs-airtable-we-connect-your-bases!/")), Fibery focuses on work management.  ### **2. Want to replace several tools with a single one** You feel that you have too many tools to manage your work. You have to learn and maintain each of them. You regularly switch context to accomplish a single task. Collaboration with colleagues is a mess, because you all use different apps. Fibery provides a platform that covers most popular work processes: HR, Product Management, Software Development, Content Management — you name it. Use Fibery to track vacations and bugs, plan roadmaps, share knowledge, set strategic goals and follow their execution. Create new Spaces to replace the in-house tools you have and unite many work management processes in a single tool. It saves time, saves money and makes data discovery easier. ### **3. Tired of changing a tool when work process changes** You’ve noticed that you have to change a tool with every major process change. For example, you decided to try Kanban and purchased Leankit. Now Kanban is your destiny, the tool forces you to continue doing Kanban, even if you decide to try Scrum. Then you chose Scrum and migrated to JIRA. The cost of switch is high: you have to migrate data and train people. Then you want to adopt SAFe (god knows why) and purchased AgileCraft. What if you need your own SAFe-like process, but much lighter? You will still have to live with the whole SAFe burden in your tool of choice. Process-opinionated tools make organizations heavy and slow. Fibery is designed as a process-agnostic platform. Try new processes and evolve — Fibery will adapt. # FIBERY PHILOSOPHY ___________________ We created Fibery based on four main principles. ### **LEGO-like experience** Fibery is built for Creators. It comes with some instructions and pre-sets, but most importantly we provide the freedom to combine building blocks, explore and invent new things. ### **Process-agnosticism** We don’t promote any development or work process. We believe that every organization is unique and should decide for itself how it runs. We make it easy to tweak Fibery to support any process. ### **Adaptation and evolution** Organizations are not static. They change and evolve, their processes change and evolve. Fibery adapts to various organizations and evolves with them. Fibery handles changes in work process gracefully and powers experiments. ### **Transparency and fairness** We don’t make your data export unnecessarily complicated and migration harder than it should be.\ We don’t hide basic features under expensive pricing schemes.\ We don’t obscure our plans, metrics and problems.\ We trust you by default. # AUTHENTICATION METHODS ________________________ Manage how your users sign in: via email+password, Google or Microsoft account, or SAML SSO (Okta, ActiveDirectory, etc.) Once you invite Users into a Workspace, they can sign in using their preferred method: * Email and password * Google account * Microsoft account * [SAML SSO](https://the.fibery.io/@public/User_Guide/Guide/SAML-SSO-49) provider account ## Enabling and disabling authentication methods If this variety is too much for your security standards, feel free to disable some of the methods: 1. Navigate to `Settings` in the sidebar and the `Security`. 2. Switch toggles on/off to configure allowed authentication methods. ![Screenshot 2023-06-01 at 5.32.40 PM.png](/api/files/157298fa-ad2c-4ace-bbdd-fa6fa9397716#width=2532&height=1012) When you limit the ways to sign in, the Workspace login page changes accordingly. ## Signing in from the global login page The Workspace settings don't affect the global login page though: it always sticks to the default methods and doesn't include [SAML SSO](https://the.fibery.io/@public/User_Guide/Guide/SAML-SSO-49). A user is free to authenticate using any method and see the list of all Workspaces associated with their email address: ![image.png](/api/files/6cb45407-6a56-4cb3-bf3f-7842436b57e3#align=%3Aalignment%2Fblock-center&width=838&height=550) When the user picks a Workspace, this happens: * If the authorization method is allowed in a particular Workspace, the user is able to continue. * Otherwise, they are redirected to the Workspace login page. ## Two-factor authentication (2FA) Fibery doesn't support 2FA natively yet, but if your organization uses Google Suite, Microsoft O365, or another identity provider there is a solution: 1. Disable all authentication methods apart from your identity provider (ex. Google). 2. When inviting users, use their work emails linked to the identity provider (ex. @company.com emails hosted by Google Suite). 3. Enforce 2FA on the identity provider's side. This way users can't bypass the 2FA when signing into Fibery. > [//]: # (callout;icon-type=emoji;icon=:nerd_face:;color=#6a849b) > It is possible to restrict access via IP address. See [Workspace settings](https://the.fibery.io/@public/User_Guide/Guide/Workspace-settings-62). ## Troubleshooting #### Access to workspace is forbidden for ![image.png](/api/files/b58dcf9e-9ba5-49e5-8d07-ec86684202a7#align=%3Aalignment%2Fblock-center&width=709&height=33) This error appears, if the User, that doesn't have access to this workspace, tries to log in. Please, make sure that you log in under the email, that is a Member of this workspace, and that your User is not deactivated. Admin of your workspace has access to this data. # REPORTS _________ Fibery reports allow you to create simple or complex visualisations from data sets. * [Report editor](https://the.fibery.io/@public/User_Guide/Guide/Report-editor-352) * [Chart](https://the.fibery.io/@public/User_Guide/Guide/Chart-353) * [Table](https://the.fibery.io/@public/User_Guide/Guide/Table-354) * [Metric (KPI)](https://the.fibery.io/@public/User_Guide/Guide/Metric-(KPI)-355) * [Report filters](https://the.fibery.io/@public/User_Guide/Guide/Report-filters-359) * [Calculations in Reports](https://the.fibery.io/@public/User_Guide/Guide/Calculations-in-Reports-347) * [Current vs Historical data in Reports](https://the.fibery.io/@public/User_Guide/Guide/Current-vs-Historical-data-in-Reports-168) ## Data sources The most common source of data for reports is the Fibery workspace itself, i.e. the entities in the Fibery [Databases](https://the.fibery.io/@public/User_Guide/Guide/Databases-7) are the data. However, it is also possible to create reports based on external data sources, such as Google Sheets, Trello, Jira, mongoDB and more. You can even create [custom integrations](https://the.fibery.io/@public/User_Guide/Guide/Custom-integration-for-reports-361) to allow reporting on any data source you choose. ## Report visualisation types There are 4 types of visualisations within a report: [Chart](https://the.fibery.io/@public/User_Guide/Guide/Chart-353), [Table](https://the.fibery.io/@public/User_Guide/Guide/Table-354), [Metric (KPI)](https://the.fibery.io/@public/User_Guide/Guide/Metric-(KPI)-355) and [Pie chart](https://the.fibery.io/@public/User_Guide/Guide/Pie-chart-356). ![image.png](/api/files/bd363848-9f74-4363-9db8-72ef18b87b22#width=952&height=181) Every report will contain one or more views, and each view can be of any one of these four visualisation types. ## How to create a report 1. Click `+` next to the Space name 2. Select `Report` 3. Choose a data source, e.g. `Fibery` (see below) 4. Select a visualisation type (`Chart`, `Table`, `Metric (KPI)` or `Pie Chart`) for the first view, or choose from a predefined template 5. Choose the options and click `Create` (the available options depend upon the chosen data source) You will be taken to the [Report editor](https://the.fibery.io/@public/User_Guide/Guide/Report-editor-352). ## Fibery data source options If Fibery is chosen as the data source, the following options are available during configuration: ![image.png](/api/files/e21af1a3-9b47-42f5-81fc-d0227f3482fc#width=537&height=409) ### Data source Choose `Current data` or `Historical data`. See [Current vs Historical data in Reports](https://the.fibery.io/@public/User_Guide/Guide/Current-vs-Historical-data-in-Reports-168) for the distinction. ### Databases Choose one or more databases from within your workspace - these define the basic data set to be used. ### Filtering the source data Limit the entities that will form the data set by applying filters to the databases. You can toggle context filters if the report is a [context view](https://the.fibery.io/User_Guide/Guide/Context-Views-20). Additionally, filters can be defined when configuring the report (in the [Report editor](https://the.fibery.io/@public/User_Guide/Guide/Report-editor-352)) and when viewing the report. See [Report filters](https://the.fibery.io/@public/User_Guide/Guide/Report-filters-359). ### Cache When you view a report, you will be shown the last time the report was updated (to reflect changes in the source data set). The report is 'cached' (= not refreshed) unless a minimum period of time has elapsed since the last update. This is the cache setting. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6A849B) > You can always manually force an update on any report view by clicking the last updated message in the top right of the report: > > ![image.png](/api/files/44bb58db-1d0e-4c93-a706-0d636a6c4a7f#width=310&height=135) > > You can also see/change the cache setting by clicking on the clock: > > ![image.png](/api/files/ef77d9ef-6086-4cb1-a4c0-3113a09eb423#width=219&height=332) Once you have chosen the source and options, you will be taken to the report configuration page (a.k.a. the [Report editor](https://the.fibery.io/@public/User_Guide/Guide/Report-editor-352)). ## Sharing You can make a report available to people outside of your workspace by sharing the report. Click `Share` in the options menu for the report (top right corner) and you will be taken to the sharing options. ![image.png](/api/files/1935a005-343e-4b9c-b9a7-9ac5e6b7fd47#width=193&height=518) ![image.png](/api/files/8a168dbe-16c1-4384-926b-f3234784cd6d#align=%3Aalignment%2Fblock-center&width=481&height=233.93333435058594) The upper URL can be directly pasted into a browser address bar, allowing anyone to see the report. The lower URL can be used to embed the report anywhere iframe is supported. ## Exporting and printing A visualisation view in a report can be exported from the options menu in a number of formats: JSON, CSV or PNG. The first two options will generate text records of the presented data, the PNG option will generate an image of the selected view. The `print` option will allow the current visualisation view to be printed. Next: [Report editor](https://the.fibery.io/@public/User_Guide/Guide/Report-editor-352) # METRIC (KPI) ______________ Metric is one of the four visualisation types for [Reports](https://the.fibery.io/@public/User_Guide/Guide/Reports-346). The 'metric' visualisation allows you to present one or more aggregated numerical figures. This is often useful for providing a simple overview of a data set. For Metrics, the visualisation pane looks like this: ![image.png](/api/files/e75a250a-86a9-4b7c-bbe1-72aa42a3f3b1#width=1232&height=317) ## Parameters Drag and drop a field into the dotted box at the top of the visualisation pane, or click on the `+` to define a calculation. Each field/calculation added to the box will generate a single number in the report, and you can shuffle the order of the values as you please. ### Parameter options The title, aggregation method, formatting and color of each number in a metric visualisation can be chosen. # HOW TO CREATE A FORM FOR CAPTURING BETA TESTERS _________________________________________________ Code was written, bugs were smashed, and developers were only moderately sleep deprived: it is time to release your first private beta and grab some feedback. Form View is an ideal way to do this. This guide will take you through how to create a simple form, link it to a CRM, and share it via a URL. ## Explore the Sales CRM Every contact you make is a potential networking, partner, or sales opportunity so we want to make sure that it is in some way linked to a CRM to prevent a data silo. There are two ways to do this: install the Sales CRM template and modify it to suit us, or create a new database to capture beta testers that are then linked to a CRM. > 🤔 With any form you make, take a moment to choose which option is best for your use case based on the goal of the data you are collecting and who needs to be aware of changes. ## Option 1: Modify an Existing Database 1. Find Templates at the bottom of the sidebar, and search for CRM. Choose the Sales CRM and install it. 2. If you haven't seen this space before, feel free to go through the readme - we put some suggestions on how to customize every template you install. 3. Click on the Sales CRM space and take a look at the databases that are installed. ![ht-leadCapture-01.svg](/api/files/452e9901-f61a-4241-bd01-96f84029917b#align=%3Aalignment%2Fblock-center&width=580&height=268) The Account database is for a company with many contacts (one-to-many), and we are collecting individual users at this point. We are going to modify the Contact database and add a few new fields to make it more useful for this use case, however. ### Add new fields All views are built off of the fields in a database. We need at least a Name and an Email to contact them with instructions on how to participate in the beta (already there), but there is an opportunity to build a fuller profile of users interested in your product. Here are some ideas to get you started: * `Origin` *(text field)* * How did you hear about us? * `Size` *(number field)* * How big is your team? * `Insight` *(text field)* * What feature is missing from the tool you are currently using? * `Updates` *(checkbox)* * Can we contact you through email with updates about our product? > [//]: # (callout;icon-type=emoji;icon=:thinking_face:;color=#fba32f) > Users are more likely to abandon the form completely if [there are too many fields to fill out or what you are asking for is unclear.](https://www.smashingmagazine.com/2018/08/best-practices-for-mobile-form-design/) If you wouldn't enjoy filling out this form, your users probably won't either. ## Option 2: Create a New Database Creating a new database to hold form data means we need to decide which Space it lives in. To answer this question, look at your workspace and ask yourself which person or department should own this data. Is it your sales team? Create it in a CRM-oriented Space. Does the product owner want to keep an eye on new entries? Maybe in software development then. We're making this specifically for lead capture, so let's stick with the CRM. Create a new database and add the fields you need. ![ht-leadCapture-02.svg](/api/files/3bfe04b9-7110-47e4-8abe-3531d66651a8#align=%3Aalignment%2Fblock-center&width=730&height=372) ![tour-export.excalidraw.svg](/api/files/64e2605a-3c6b-4764-938d-dd21f73f4349#align=%3Aalignment%2Fblock-center&width=731&height=168) ## Create a Form View 1. Find one of your Spaces and click the `+` button to add a new View. Form will be listed with the `beta` tag beside it. 2. Click `Form` and you will be brought to a blank page. In the top right of your screen, there will be a dropdown asking you to select a `Database`. 3. And just like that, we have a form! ![formview-01.e.svg](/api/files/a6ae1391-5457-401b-939e-ef9ab2ce77e9#align=%3Aalignment%2Fblock-center&width=736&height=340) ### Modify the Form View 1. Notice on the right sidebar that the fields created in the Database you chose are the ones available as a field. You can choose which ones to **show to the public** and which ones are **only used internally.** 2. With each form view block, you can adjust whether the field is required, change the wording of the question, add a description, or add some default text in [Rich Text](https://the.fibery.io/@public/User_Guide/Guide/Rich-Text-28) fields to help users input what you intended them to. 3. Preview the form to see if you're happy with the flow and how it looks to the world wide web. Input some dummy data, press submit and watch an entry automagically appear in the contact database, proper relations and all! ## Share to the public To share the form with your users, click the **Share** button to generate a public link. This link is an ordinary URL, you can put it anywhere URL's go. Here are some ideas to get you started: * YouTube description of a product demo * a Fibery Document explaining the highlights of your beta * a Tweet * a button on your website * in a QR code ## Try this next * Automation to alert the Product Owner when the maximum number of users is reached * Create a List of all users who opted into receiving updates # CAPTURE FEEDBACK FROM THE WEB _______________________________ [https://youtu.be/4VZ65dtxVDo](https://youtu.be/4VZ65dtxVDo) # FIELD API ___________ Field is a part of Type (Database). Learn more about [Fields](https://the.fibery.io/@public/User_Guide/Guide/Fields-15) in the guide. > [//]: # (callout;icon-type=emoji;icon=:point_up:;color=#1fbed3) > In the interface, Type = Database, App = Space. To find out why, check [Terminology](https://the.fibery.io/@public/User_Guide/Guide/Fibery-API-Overview-279/anchor=Terminology--15f750ec-571c-48f6-9b0b-6861222c1a27). ## Create Field ### Primitive Field JavaScript ``` const Fibery = require('fibery-unofficial'); const fibery = new Fibery({host: "YOUR_ACCOUNT.fibery.io", token: YOUR_TOKEN}); await fibery.field.createBatch([ { 'fibery/holder-type': 'Cricket/Player', 'fibery/name': 'Cricket/Salary', 'fibery/type': 'fibery/int', 'fibery/meta': { 'fibery/readonly?': false, 'fibery/default-value': 1000, 'ui/number-unit': 'USD' } } ]); ``` cURL ``` curl -X POST https://YOUR_ACCOUNT.fibery.io/api/commands \ -H 'Authorization: Token YOUR_TOKEN' \ -H 'Content-Type: application/json' \ -d \ '[ { "command": "fibery.schema/batch", "args": { "commands": [ { "command": "schema.field/create", "args": { "fibery/holder-type": "Cricket/Player", "fibery/name": "Cricket/Salary", "fibery/type": "fibery/int", "fibery/meta": { "fibery/readonly?": false, "fibery/default-value": 1000, "ui/number-unit": "USD" } } } ] } } ]' ``` Result (cURL): ``` [ { "success": true, "result": "ok" } ] ``` Primitive Field types | Field type | Example | Comments | | --- | --- | --- | | `fibery/int` | 42 | | | `fibery/decimal` | 0.33 | | | `fibery/bool` | true | | | `fibery/text` | Don't panic | Up to 1k characters. Can be styled using `ui/type` meta flag: text \| email \| phone \| url | | `~~fibery/email~~` | [~~contact@megadodo.com~~](mailto:contact@megadodo.com) | This field type is deprecated. Use a "fibery/text" field with `ui/type` meta set to "email": { "ui/type": "email" } | | `fibery/emoji` | 🏏 | | | `fibery/date` | 1979-10-12 | | | `fibery/date-time` | 2019-06-24T12:25:20.812Z | | | `fibery/date-range` | { "start": "2019-06-27", "end": "2019-06-30" } | | | `fibery/date-time-range` | { "start": "2019-06-18T02:40:00.000Z", "end": "2019-07-25T11:40:00.000Z" } | | | `fibery/location` | { "longitude": 2.349606, "latitude": 48.890764, "fullAddress": "Métro Marcadet Poissonniers, 67 boulevard Barbès, Paris, 75018, France", "addressParts": { "city": "Paris", "country": "France" } } | All address parts are optional. Check supported values in [Location field](https://the.fibery.io/@public/User_Guide/Guide/Location-field-163) | | `fibery/uuid` | acb5ef80-9679-11e9-bc42-526af7764f64 | | | `fibery/rank` | 1000 | | | `fibery/json-value` | { "paranoid?": true } | | Command parameters | Parameter (required in bold) | Description | Example | | --- | --- | --- | | **`fibery/holder-type`** | Holder Type name in `${space}/${name}` format | `Cricket/Player` | | **`fibery/name`** | Field name in `${space}/${name}` format. | `Cricket/Salary` | | **`fibery/type`** | One of the primitive Field types above or a Type for a one-way relation. | `fibery/int` | | meta.`fibery/readonly?` | If users are able to change value from UI | true | | meta.`fibery/default-value` | The value automatically set when a new entity is created | "(empty)" | ### Relation (entity \[collection\] Field) To create a relation between two Types, we create a pair of entity \[collection\] Fields and connect them with a unique identifier. The relation is to-one by default. Set entity Field's meta.`fibery/collection?` to `true` for to-many relation. JavaScript ``` const Fibery = require('fibery-unofficial'); const fibery = new Fibery({host: "YOUR_ACCOUNT.fibery.io", token: YOUR_TOKEN}); // The unofficial client is closer to UI than to API here. // Note the missing 'fibery/' namespace in Field type name and meta parameter — // these things are unique to the client. await fibery.field.createBatch([ { 'fibery/holder-type': 'Cricket/Player', 'fibery/name': 'Cricket/Current Team', 'fibery/type': 'relation', meta: { to: 'Cricket/Team', toName: 'Cricket/Current Roster', isFromMany: true, isToMany: false } } ]); ``` cURL ``` curl -X POST https://YOUR_ACCOUNT.fibery.io/api/commands \ -H 'Authorization: Token YOUR_TOKEN' \ -H 'Content-Type: application/json' \ -d \ '[ { "command": "fibery.schema/batch", "args": { "commands": [ { "command": "schema.field/create", "args": { "fibery/holder-type": "Cricket/Player", "fibery/name": "Cricket/Current Team", "fibery/type": "Cricket/Team", "fibery/meta": { "fibery/relation": "d9e9ec34-9685-11e9-8550-526af7764f64" } } }, { "command": "schema.field/create", "args": { "fibery/holder-type": "Cricket/Team", "fibery/name": "Cricket/Current Roster", "fibery/type": "Cricket/Player", "fibery/meta": { "fibery/collection?": true, "fibery/relation": "d9e9ec34-9685-11e9-8550-526af7764f64" } } } ] } } ]' ``` Result (cURL): ``` [ { "success": true, "result": "ok" } ] ``` Command parameters | Parameter (required in bold) | Description | Example | | --- | --- | --- | | **`fibery/holder-type`** | Holder Type name in `${space}/${name}` format | `Cricket/Player` | | **`fibery/name`** | Field name in `${space}/${name}` format. | `Cricket/Current Team` | | **`fibery/type`** | Related Type name in `${space}/${name}` format | `Cricket/Team` | | meta.**`fibery/relation`** | UUID shared between the pair of Fields. | d9e9ec34-96... | | meta.`fibery/collection?` | `true` for to-many relation (entity collection Field) | true | | meta.`fibery/readonly?` | If users are able to change value from UI | true | ### Single-select Field A single-select Field is not what it seems to be. Actually, every single-select option is an Entity of a newly created special Type. This way unlocks 'name on UI + value in Formula' scenario (think `Self conviction` → `0.01` in GIST) and enables an easy transition to a fully functional Type. To create a single-select Field we should: 1. Create a new `enum` Type 2. Create a Field of the newly created `enum` Type 3. Create an Entity for each single-select option 4. Make the selection required and set the default value The new `enum` Type name is built using this format: `${space}/${field}_${app}/${holder-type}`. JavaScript ``` const Fibery = require('fibery-unofficial'); const fibery = new Fibery({host: "YOUR_ACCOUNT.fibery.io", token: YOUR_TOKEN}); // The unofficial client is closer to UI than to API here. // Note the missing 'fibery/' namespace in Field type name and meta parameter — // these things are unique to the client. await fibery.field.createBatch([ { 'fibery/holder-type': 'Cricket/Player', 'fibery/name': 'Cricket/Batting Hand', 'fibery/type': 'single-select', meta: { options: [ { name: 'Right' }, { name: 'Left' } ] } } ]); ``` cURL ``` curl -X POST https://YOUR_ACCOUNT.fibery.io/api/commands \ -H 'Authorization: Token YOUR_TOKEN' \ -H 'Content-Type: application/json' \ -d \ '[ { "command": "fibery.command/batch", "args": { "commands": [ { "command": "fibery.schema/batch", "args": { "commands": [ { "command": "schema.enum/create", "args": { "fibery/name": "Cricket/Batting Hand_Cricket/Player" } }, { "command": "schema.field/create", "args": { "fibery/holder-type": "Cricket/Player", "fibery/name": "Cricket/Batting Hand", "fibery/type": "Cricket/Batting Hand_Cricket/Player" } } ] } }, { "command": "fibery.entity/create", "args": { "type": "Cricket/Batting Hand_Cricket/Player", "entity": { "enum/name": "Right", "fibery/id": "4a3ffb10-9747-11e9-9def-016e5ea5e162", "fibery/rank": 0 } } }, { "command": "fibery.entity/create", "args": { "type": "Cricket/Batting Hand_Cricket/Player", "entity": { "enum/name": "Left", "fibery/id": "4a402220-9747-11e9-9def-016e5ea5e162", "fibery/rank": 1000000 } } }, { "command": "fibery.schema/batch", "args": { "commands": [ { "command": "schema.field/set-meta", "args": { "name": "Cricket/Batting Hand", "holder-type": "Cricket/Player", "key": "fibery/default-value", "value": { "fibery/id": "4a3ffb10-9747-11e9-9def-016e5ea5e162" } } }, { "command": "schema.field/set-meta", "args": { "name": "Cricket/Batting Hand", "holder-type": "Cricket/Player", "key": "fibery/required?", "value": true } } ] } } ] } } ]' ``` Result (cURL): ``` [ { "success": true, "result": [ { "success": true, "result": "ok" }, { "success": true, "result": { "fibery/id": "4a3ffb10-9747-11e9-9def-016e5ea5e162", "fibery/public-id": "1", "enum/name": "Right", "fibery/rank": 0 } }, { "success": true, "result": { "fibery/id": "4a402220-9747-11e9-9def-016e5ea5e162", "fibery/public-id": "2", "enum/name": "Left", "fibery/rank": 1000000 } }, { "success": true, "result": "ok" } ] } ] ``` ### Rich text Field In Fibery, every [Rich Text](https://the.fibery.io/@public/User_Guide/Guide/Rich-Text-28) Field instance is, in fact, a collaborative document. It means that for each Entity with N rich text Fields Fibery automatically creates N documents. Each of these documents is stored in Document Storage and is connected to its Entity through an auxiliary `Collaboration~Documents/Document` Entity: Entity --- (magic) ---> `Collab Doc/Document` --- (`fibery/secret`) ---> Document in Storage So to create a rich text Field we just connect our Type with `Collaboration~Documents/Document` Type. Type `Collaboration~Documents/Document` has a special property, namely, the entities of this Type inherit access from their Parent Entity. To indicate that Parent-Child relationship we pass `fibery/entity-component?` meta flag, but only for ordinary Fields (e.g. not Lookup and not Formula) Selecting and updating a rich text Field is a two-step process: 1. Get `fibery/secret` of the related Document. 2. Work with this Document via `api/documents` Storage endpoint. JavaScript ``` const Fibery = require('fibery-unofficial'); const fibery = new Fibery({host: "YOUR_ACCOUNT.fibery.io", token: YOUR_TOKEN}); // The unofficial client is closer to UI than to API here. // Note the missing 'fibery/' namespace in Field type name and meta parameter — // these things are unique to the client. await fibery.field.createBatch([ { 'fibery/holder-type': 'Cricket/Player', 'fibery/name': 'Cricket/Bio', 'fibery/type': 'Collaboration~Documents/Document', 'fibery/meta': { 'fibery/entity-component?': true, } } ]); ``` cURL ``` curl -X POST https://YOUR_ACCOUNT.fibery.io/api/commands \ -H 'Authorization: Token YOUR_TOKEN' \ -H 'Content-Type: application/json' \ -d \ '[ { "command": "fibery.schema/batch", "args": { "commands": [ { "command": "schema.field/create", "args": { "fibery/holder-type": "Cricket/Player", "fibery/name": "Cricket/Bio", "fibery/type": "Collaboration~Documents/Document", "fibery/meta": { "fibery/entity-component?": true, }, } } ] } } ]' ``` Result (cURL): ``` [ { "success": true, "result": "ok" } ] ``` ## Rename Field > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#d40915) > At the moment, renaming a Field breaks related Views, Formulas and Reports. After you rename a Field, make sure to update the related configs. JavaScript ``` const Fibery = require('fibery-unofficial'); const fibery = new Fibery({host: "YOUR_ACCOUNT.fibery.io", token: YOUR_TOKEN}); await fibery.field.renameBatch([ { 'holder-type': 'Cricket/Player', 'from-name': 'Cricket/Position', 'to-name': 'Cricket/Role' } ]); ``` cURL ``` curl -X POST https://YOUR_ACCOUNT.fibery.io/api/commands \ -H 'Authorization: Token YOUR_TOKEN' \ -H 'Content-Type: application/json' \ -d \ '[ { "command": "fibery.schema/batch", "args": { "commands": [ { "command": "schema.field/rename", "args": { "holder-type": "Cricket/Player", "from-name": "Cricket/Position", "to-name": "Cricket/Role" } } ] } } ]' ``` Result (cURL): ``` [ { "success": true, "result": "ok" } ] ``` Command parameters | Parameter (required in bold) | Description | Example | | --- | --- | --- | | **`holder-type`** | Holder Type name in `${space}/${name}` format | `Cricket/Player` | | **`from-name`** | Current Field name in `${space}/${name}` format | `Cricket/Position` | | **`to-name`** | New Field name in `${space}/${name}` format | `Cricket/Role` | ## Delete Field JavaScript ``` const Fibery = require('fibery-unofficial'); const fibery = new Fibery({host: "YOUR_ACCOUNT.fibery.io", token: YOUR_TOKEN}); await fibery.field.deleteBatch([ { 'holder-type': 'Cricket/Player', 'name': 'Cricket/Role', 'delete-values?': true } ]); ``` cURL ``` curl -X POST https://YOUR_ACCOUNT.fibery.io/api/commands \ -H 'Authorization: Token YOUR_TOKEN' \ -H 'Content-Type: application/json' \ -d \ '[ { "command": "fibery.schema/batch", "args": { "commands": [ { "command": "schema.field/delete", "args": { "holder-type": "Cricket/Player", "name": "Cricket/Role", "delete-values?": true } } ] } } ]' ``` Result (cURL): ``` [ { "success": true, "result": "ok" } ] ``` ### **Command parameters** | Parameter (required in bold) | Default | Description | Example | | --- | --- | --- | --- | | **`holder-type`** | | Holder Type name in `${space}/${name}` format | `Cricket/Player` | | **`name`** | | Field name in `${space}/${name}` format | `Cricket/Role` | | **`delete-values?`** | false | See the behavior in the table below | true | > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#1fbed3) > To remove a relation, delete both entity \[collection\] Fields within the same `fibery.schema/batch` command. `delete-values?` parameter behavior | | | | --- | --- | | | **`delete-values?`** | | **false** | **true** | | **Field type** | **Empty [primitive](https://api.fibery.io/#primitive-field) Field** | Field is deleted | Field is deleted | | **Non-empty primitive Field** | Error is thrown | Field and values are deleted | | **Empty entity \[collection\] Field** | Field is deleted | Field is deleted | | **Non-empty entity \[collection\] Field** | Error is thrown | Field and links (but not related Entities) are deleted | ## FAQ #### Is there a way to modify the `meta.fibery readonly?` value? Is there any way to convert a field away from read-only? Use `"command": "schema.field/set-meta".`So, if you can set `meta readonly?` value to false, that has to work. #### How to create header anchor links in a script? If you retrieve the doc content as JSON (instead of markdown) you will find that paragraphs have attributes, including the ‘level’ and a GUID.\ The level will tell you if it’s a header. and anchors are formed by adding the GUID property to the base URL. # USING HIGHLIGHT DATABASE VIEWS ________________________________ Highlight is a database, so you can create Views and work with Highlights as with usual databases. ## Board View Create a new Board View and select Highlight as Cards database. You can use Highlights fields as usual to group entities, here we group Highlights by Severity: ![image.png](/api/files/c0141a64-ea5d-416a-aeb4-ae3a6c0b5be1#width=3392&height=2182) ## Whiteboard View You can add Highlights to Whiteboard and organize them spatially. Click `Multi Entity insert` action, select Highlights space and select Highlight database. You can open Highlights and move them around. [https://app.arcade.software/share/4MwuU1JhPnp0phhHuEK4](https://app.arcade.software/share/4MwuU1JhPnp0phhHuEK4) ## Feed View Feed View with Highlights might be useful if you want to track and read new Highlights. Create new Feed View, select Highlights as a database, sort by creation date: ![image.png](/api/files/8e4c6aec-522c-4acb-a403-f1797f6f79ba#width=1696&height=1054) In a similar way you can create other views, like List, Table, and even Report. # LOCATION FIELD ________________ Location field stores location as an address or coordinates. ## How to add a location field? Navigate to an entity where you want to add the location field, click `New Field` on the right and select `Location`. ### How to set values in the location field? Location field can store partial address or full address. To add a location, just start typing and you will see a list of potential addresses below. ![Screenshot 2023-02-23 at 8.58.55 AM.png](/api/files/dcac5785-aedd-4879-9574-24a9adc4a1e9#align=%3Aalignment%2Fblock-left&width=417&height=325) You can also paste some addresses to narrow the search. > [//]: # (callout;icon-type=icon;icon=asterisk;color=#d40915) > Please, make sure that your address is in the correct format > > We don't plan to fasten the address auto-correction in the near future. ### How about coordinates? Sometimes you have coordinates that are not linked to any address. In this case, you can just store exact coordinates in a location field. Paste coordinates into the field and click `Keep as coordinates` option. ![Screenshot 2023-02-23 at 9.02.37 AM.png](/api/files/388bd574-d1ad-492a-8021-ee083ad05778#align=%3Aalignment%2Fblock-left&width=320&height=356) > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6a849b) > You can store coordinates both ways `34°43'46.4"N 33°02'54.3"E` or `34.729546, 33.048420`. [More formats are supported](https://github.com/otto-dev/coordinate-parser#supported-formats) in fact. ## Visualize Location on Map View Location field works best with [Map View](https://the.fibery.io/@public/User_Guide/Guide/Map-View-167). Here you can visualize location values as items on a map: ![Screenshot 2023-03-14 at 3.17.56 PM.png](/api/files/e3359f1d-b974-4db8-a0a4-cf183e72d941#width=2720&height=1374) ## How to extract Country, City, and other parts from the Location field? You can extract address parts from the location field using [Formulas](https://the.fibery.io/@public/User_Guide/Guide/Formulas-39). Create new Formula and invoke `AddressPart` function. It has two parameters: 1. Location Field Name. 2. Address Part Name: country, region, postcode, district, place, locality, neighbourhood, address, poi For example, to extract a Country from a field named Location, you have to create this formula: ``` AddressPart(Location,"country") ``` ![Screenshot 2023-02-23 at 9.04.38 AM.png](/api/files/0ebcd318-f41a-49b3-bedc-9adf45b6b0c1#align=%3Aalignment%2Fblock-left&width=610&height=486) ### Here is the full specification of the AddressPart function Extracts specific parts of the address component. Available options (case-sensitive): * **country** Generally recognized countries or, in some cases like Hong Kong, an area of quasi-national administrative status that has been given a designated country code under [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html). * **region** Top-level sub-national administrative features, such as states in the United States or provinces in Canada or China. * **postcode** Postal codes used in country-specific national addressing systems. * **district** Features that are smaller than top-level administrative features but typically larger than cities, in countries that use such an additional layer in postal addressing (for example, prefectures in China). * **place** Typically these are cities, villages, municipalities, etc. They’re usually features used in postal addressing and are suitable for display in ambient end-user applications where current-location context is needed (for example, in weather displays). * **locality** Official sub-city features are present in countries where such an additional administrative layer is used in postal addressing, or where such features are commonly referred to in local parlance. Examples include city districts in Brazil and Chile and arrondissements in France. * **neighborhood** Colloquial sub-city features are often referred to in local parlance. Unlike **locality** features, these typically lack official status and may lack universally agreed-upon boundaries. * **address** Individual residential or business addresses. * **poi** Points of interest. These include restaurants, stores, concert venues, parks, museums, etc. --- Here we have two formulas that extract Country and Zip code from the Location field. Note that in some cases this information can not be extracted and the result will be empty. ![Screenshot 2023-02-23 at 9.10.24 AM.png](/api/files/39c13229-c333-40c6-9792-cf43dcb33427#align=%3Aalignment%2Fblock-left&width=601&height=164) ### Create a report by Country Then you can use these formula fields to filter data and do other things. For example, you have a Contact Database with addresses, and you want to create [Reports Overview](https://the.fibery.io/@public/User_Guide/Guide/Reports-Overview-58) to see in contacts distribution by countries. 1. Create a Country formula field as shown above 2. Create a new Report for Contact Database 3. Select the Country field as a row 4. Set Bar Chart as a Chart Type ![Screenshot 2023-02-23 at 10.04.55 AM.png](/api/files/7645a071-e3dd-4809-aaff-066d2c25a6e6#width=2122&height=1416) You can create other reports by Region, District, or City. # LOOP PREVENTION IN FIBERY ___________________________ With Fibery Formulas and Automations, it is possible to create a logical loop. In this case, Admins will receive a notification on that with a link to the database, where such a loop was detected, and the formula will be "deactivated". ## Loop example Let's say you have a `Task` database with the `Effort` field. You also added a many-to-many [self-relation](https://the.fibery.io/User_Guide/Guide/Self-relations-328). So, every Task has multiple Tasks inside (Children's Tasks) and can belong to multiple Tasks (Parent Tasks) as well. You decided to calculate the total effort spent on a Task. So it will be Tasks' effort itself plus its children's effort. The syntax will look like this. `ChildTasks.Sum(TotalEffort) + Effort` ![image.png](/api/files/7772ba95-6e2e-4472-9970-da65f74b6f6b#width=2123&height=597) Then you set your relations in the following way: * Task 1 has one ChildTask Task 2 * And Task 2 has one ChildTask Task 1. ![image.png](/api/files/7197e216-ff53-4ece-928c-b537a64de50d#align=%3Aalignment%2Fblock-left&width=655&height=355) Fibery won't prevent you to set relations in such a way 😅. But this will cause a logical loop in your hierarchy tree. And such a loop may cause infinite Formula recalculation. When you change the Effort of Task2, this will cause an update TotalEffort of Task1. And update of TotalEffort in Task1 will cause an update of TotalEffort in Task2 again. And this will cause an update TotalEffort in Task1 and so on. ## How does Fibery prevent such cases? To prevent such calculation, we introduced loop detection mechanics in Fibery. Let's name Formula field update or Automation Rule execution a *calculation.* Change done by a *calculation* can cause a chain of future calculations. For example, Automation Rule is called as a result of a Formula field update and this rule updates another field. Or the Formula field is updated because of changes by Automation Rule, etc. If some *calculation* caused another chain of calculations, in which the same *calculation* appears, we detect such a situation as a loop and disable Automation Rule or Formula. In the example above, a loop will be detected when TotalEffort for Task1 field is updated the second time. We will disable the Formula1 field and send a notification to all Admins in a workspace. The same loop detection idea is applied to Automation Rules. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#d40915) > We disable a Formula/Automation immediately after we see that it is calculated/executed again in the calculation chain. Maybe real use cases will help you to better understand the problem. * [Broken Financial template](https://community.fibery.io/t/new-template-finance/2685 "https://community.fibery.io/t/new-template-finance/2685") * [Path hierarchy calculation](https://community.fibery.io/t/this-formula-is-disabled/4371 "https://community.fibery.io/t/this-formula-is-disabled/4371") If you have any questions, please, don't hesitate to ping us in chat or in our community. # COMMENTS AND MENTIONS _______________________ ## Inline Comments You may add comments to any word/phrase in [Rich Text](https://the.fibery.io/@public/User_Guide/Guide/Rich-Text-28) fields and [Documents](https://the.fibery.io/@public/User_Guide/Guide/Documents-85). 1. Select text. 2. Click `Add Comment` action in the popup menu. 3. Type a comment and click `Send` button. 4. The comment will be added and the text underlined with yellow. Click on yellow text to access comments linked to the text. Click on `Copy Link` to send a link to an exact comment. ![image.png](/api/files/3b1761ea-ce79-4695-8485-fd0bdaf8202d#align=%3Aalignment%2Fblock-center&width=817.4625244140625&height=339) ## Mentions Type `@` to mention any Fibery user. The mentioned user will be notified and receive [Inbox and notifications](https://the.fibery.io/@public/User_Guide/Guide/Inbox-and-notifications-35) ![image.png](/api/files/12d5510b-7e47-4a86-ad68-41e7ceb867e9#align=%3Aalignment%2Fblock-left&width=470&height=364) ## Shortcuts An inline comment in rich text can now be added using the `Cmd + Option + M` shortcut, just like you used to do in Google Docs. ## Entity Comments You may also add comments on an entity level as well. First, you need to add the `Comments` field. Check out the [Fields](https://the.fibery.io/@public/User_Guide/Guide/Fields-15) article. There is a comments icon in the top right entity menu to quickly navigate to comments. Entity Comments are in fact [Rich Text](https://the.fibery.io/@public/User_Guide/Guide/Rich-Text-28), so you can do same things: insert images & videos, mention people, format text, give links to entities via `#` command, etc. ### Replies in comments You can add replies to comments. To add the first reply, find `Reply to Comment` icon in a comment and click it. Comment author receives notifications about all replies. ![image.png](/api/files/03930761-c55c-4680-9deb-1c1ccc7025e6#align=%3Aalignment%2Fblock-center&width=843.8875122070312&height=436) Those replies are collapsed by default, so it's handy to check comments, you're interested in. ### Emoji reactions in comments You can react to comments. Find `Add reaction` icon in the top right corner to add the first reaction. ![2023-10-27 11.16.39.gif](/api/files/d1b2f6ce-ec2e-4aaf-b3e4-8b677052aa46#align=%3Aalignment%2Fblock-left&width=719&height=367) When someone reacts to your comment, you will get a notification in your Inbox. One of the Inbox filter options is `Reacted to comment` ![image.png](/api/files/716a0a44-b178-45d5-b4f5-1512763c64ee#align=%3Aalignment%2Fblock-center&width=817.3250122070312&height=522) > [//]: # (callout;icon-type=emoji;icon=:sweat_smile:;color=#fba32f) > Note that emoji reactions work only for entity-level comments, inline comments do not have them. ## Reviewing all comments You can review all comments in entity view or document quickly. Click in a comment icon on the top right corner and you will see all open and resolved comments in the right sidebar. Here you can: * Click on a comment and left side will jump to it. * Reply to comments. * Resolve inline comments. ![image.png](/api/files/2cfa9dc1-9b68-436e-9049-c57fe6bc7338#width=4308&height=2812) This panel can be collapsed and resized for a better fit of content, providing greater comfort. > [//]: # (callout;icon-type=icon;icon=heart;color=#d40915) > Even if you remove the text that was used as an anchor for an inline comment in a rich text, the comment will still be available. You can find these comments in the comment sidebar under the "unlinked" tab. This ensures no important feedback gets lost. ## FAQ ### Can I resolve entity-level comments? Not yet, but they are in plans. # GRAPHQL API _____________ The Fibery GraphQL API provides a way to integrate Fibery with your external systems and automate routine tasks. It’s capable of performing most of the tasks at hand: * Read, create, update and delete Entities in Databases. * Execute a variety of additional actions. * Work with rich text Fields. > [//]: # (callout;icon-type=emoji;icon=:star:;color=#6A849B) > You can find more information about GraphQL basics [by this link](https://graphql.org/?utm_source=Fibery&utm_medium=iframely "https://graphql.org/?utm_source=Fibery&utm_medium=iframely"). > [//]: # (callout;icon-type=emoji;icon=:bulb:;color=#d40915) > Non-ASCII or non-English characters in field or database names will be transliterated to English. Check getting started first and follow the guides below: * [GraphQL authentication ](https://the.fibery.io/@public/User_Guide/Guide/GraphQL-authentication--257) * [GraphQL queries](https://the.fibery.io/@public/User_Guide/Guide/GraphQL-queries-255) * [GraphQL mutations](https://the.fibery.io/@public/User_Guide/Guide/GraphQL-mutations-256) > [//]: # (callout;icon-type=emoji;icon=:point_up:;color=#1fbed3) > Before you proceed, please keep in mind that Type = Database, App = Space. To find out why, check [Terminology](https://the.fibery.io/User_Guide/Guide/Fibery-API-Overview-279/anchor=Terminology--15f750ec-571c-48f6-9b0b-6861222c1a27). # **Getting started** Every Fibery space has its own GraphQL end-point which can be found at `https://YOUR_ACCOUNT.fibery.io/api/graphql/space/YOUR_SPACE` or the list of all your space's end-points can be found at `https://YOUR_ACCOUNT.fibery.io/api/graphql` ![image.png](/api/files/3be3149e-2dac-4f53-8c03-941d47fdb332#align=%3Aalignment%2Fblock-left&width=720&height=444) By opening space's end-point in your browser you will find a graphical interactive in-browser GraphQL IDE. Here you can explorer space's GraphQL documentation and execute your GraphQL queries. ![g-explorer-68787e96.gif](/api/files/1d805e39-2df6-4f45-a193-f6f9d488eb3e#width=2110&height=1448) To read or edit data, you need to send a POST JSON request to the `https://YOUR_ACCOUNT.fibery.io/api/graphql/space/YOUR_SPACE` endpoint from your code. ## Request limits To ensure system stability and consistent user experience, our API is rate-limited. Rate-limited requests will return a "Too Many Requests" error (HTTP response status `429`). The rate limit for incoming requests is **3 requests per second per token**. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#fba32f) > Rate limits may change. In the future we may adjust rate limits to balance for demand and reliability. ## FAQ #### Is there `or` operator avaliable? Indeed there is no `or` operation. We propose use several queries in this case. ``` { nullName: findProjects(name:{isNull:true}){ id } emptyName: findProjects(name:{is:""}){ id } } ``` #### **Can a graphQL “find” query return *only* the count of records found, and no record contents?** Unfortunately, it is not supported in GraphQL for now. However many things can be done using native [Fibery API](https://api.fibery.io/#select-fields). #### Can you provide an example of a GraphQL insert statement that adds multiple selections to a multi-select field? ``` mutation { articles(id:{isNull:false}){ linkTags(name:{in:["One", "Two"]}){message} } } ``` Example above for databases, and for enums you can just use update ``` mutation { articles(id:{isNull:false}){ update(multiSelect:{name:{in:["One", "Two"]}}){message} } } ``` # PERSONAL (WITH FAVORITES) ___________________________ Personal is a special section in the sidebar where you can add and access all important things. * [Private Space](https://the.fibery.io/@public/User_Guide/Guide/Private-Space-25) . Here you can create private views and documents visible only to you. * Shared with me. If somebody shared and entity with you, it will appear in this view * Favorites: Spaces, Smart Folders, Folders and Views you added to Favorites by yourself. On top of the sidebar there is a filter that you can use to quickly switch between Workspace and Personal. Note that in Personal mode left sidebar is more focused and less cluttered. ![2025-02-26 16.27.55.gif](/api/files/d490f7cc-21e7-4b78-b169-1ae8ac608626#align=%3Aalignment%2Fblock-center&width=634&height=518) ### Add or remove Spaces, Entities or Views into Favorites To add Space, Entity or View into Favorites section, click on the empty star icon near the Entity or View name, or click … near Space name and use `Add to Favorites` action. To remove Space, Entity or View from Favorites section, click on … and select Remove from Favorites. You can also use yellow start to remove Entities and Views from Favorites. ## FAQ ### Are there any rules to add Spaces or Entities into Favorites automatically? Not yet, but we are collecting useful cases, please contact us in Help & Support → Human Support and describe your case, it will help us to prioritize this feature. # AIRTABLE INTEGRATION ______________________ To integrate with Airtable, you need to add your Airtable account using one of the authentication methods and configure record links and Field types. ## **Step 1. Add your Airtable account** 1. Click `Templates` and find `Airtable` template. 2. Click Sync. 3. Choose the Authentication method: either **OAuth Authentication** (preferred) or **Personal Access Token** (alternative). * **OAuth Authentication** (preferred)\ Click on the `Connect` button. ![image.png](/api/files/8ef75056-5a8a-4478-b59b-2cf96aa82d27#align=%3Aalignment%2Fblock-center&width=524&height=221) Authenticate using your credentials to grant appropriate access to Fibery and click on the `Grant access` button. ![image.png](/api/files/9047d02a-a5ef-4265-9d3f-414b08f38216#align=%3Aalignment%2Fblock-center&width=434&height=470) * **Personal Access Token** (alternative)\ Create your [Personal Access Token](https://airtable.com/create/tokens/new) in Airtable and add it to the `Token` field and click on `Connect` button. ![image.png](/api/files/decb3f2a-8d42-406b-ae0d-c4fecc7f1ea2#align=%3Aalignment%2Fblock-center&width=442&height=261) ## 4. Select the Databases you would like to sync and click on the `Next` button. ![image.png](/api/files/6d095a83-7e0d-46c6-8747-381f13b8b8ba#align=%3Aalignment%2Fblock-center&width=436&height=229) ## **Step 2. Configure record links and change field types** Choose the specific Fields from each Database that you wish to synchronize. If you want to modify the default settings, adjust the `Type` and `Fibery` Fields accordingly. ![image.png](/api/files/083a405f-a98e-4742-9bcd-75d8636bc19c#align=%3Aalignment%2Fblock-center&width=618&height=894) ## Limitations Airtable integration supports most Database Fields, though some restrictions apply. | | | | | --- | --- | --- | | **Airtable Field Type** | **Status** | **Fiber type** / comment | | AI text | ❌ | not supported | | Attachment | ✅ | Files | | Auto number | ✅ | Number | | Barcode | ✅ | Text | | Button | ❌ | not supported | | Checkbox | ✅ | Checkbox | | Collaborator | ✅ | Single select | | Count | ✅ | Number | | Created by | ✅ | Single select | | Created time | ✅ | Date with Time | | Currency | ⚠️ | Number with default format | | Date | ✅ | Date | | Date and time | ✅ | Date with Time | | Duration | ❌ | not supported | | Email | ✅ | Text formatted as Email | | Formula | ⚠️ | If we understand the formula Result Type | | Last modified by | ✅ | Single select | | Last modified time | ✅ | Date with Time | | Link to another record | ✅ | Relation | | Long text | ✅ | Rich text, at least some formatting persists | | Lookup | ❌ | not supported | | Multiple collaborator | ✅ | Multi-select | | Multiple select | ✅ | Multi-select, preserves some color settings also | | Number | ✅ | Number, preserves decimal places | | Percent | ⚠️ | Number not formatted | | Phone | ⚠️ | Text | | Rating | ⚠️ | Number | | Rich text | ✅ | Rich text, at least some formatting persists | | Rollup | ⚠️ | If we understand rollup Result Type | | Single line text | ✅ | Text | | Single select | ✅ | Single select | | Sync source | ❌ | not supported | | Url | ✅ | Text formatted as URL | # MONTHLY USAGE CAPS FOR AUTOMATIONS, INTEGRATIONS, AND AI __________________________________________________________ Starting November 2024, every [pricing plan](https://fibery.io/pricing) has a monthly cap for resource-intensive services like automations, integrations, and AI: ![image.png](/api/files/f94f05f9-5a3e-48e9-89f1-6a5f58fb6efd#align=%3Aalignment%2Fblock-center&width=836&height=572) This ensures fair resource allocation and incentivizes effective setups. The limits are rather generous and target only the heaviest of users: at the moment of introduction, only about 5% [were affected](https://fibery.io/blog/product-updates/pricing-2024/). From now on, we aim to keep this number as the target: as Fibery's costs per run/sync go down and customers' usage goes up, we'll adjust the numbers. ## How are the limits calculated? Every plan has a base number of runs, syncs, and hours, plus some bonus ones for each paid seat on paid plans. Fibery is a collaborative tool, after all, and as your company scales and you invite more people, we increase your monthly cap. For example, as of this writing, a 50-person company on a Pro plan gets `10,000 + 50 × 1,000 = 60,000` automation runs a month. If they invite another 10 people, the cap goes up to 70,000 monthly runs. You can always see the up-to-date numbers for each plan on our [pricing page](https://fibery.io/pricing). > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#d40915) > Pro trial doesn't have paid seats, so it's capped at the base number, e.g., 10,000 runs. The quotas are per calendar month and are not tied to your billing cycle. At the start of each month, the counters go back to zero (applies to the annual plan as well). ## Where do we check how many we have left? For the % of automation runs and integration entity syncs left in the current calendar month, navigate to `Help & Support` → `Workspace status` at the bottom of the sidebar: ![monthly-limits-workspace-status.gif](/api/files/dd633dc7-1946-4279-99be-fcd262e965ac#align=%3Aalignment%2Fblock-center&width=728&height=410) Other limits are either displayed in-place like for finding patterns: ![image.png](/api/files/05ef93f2-af12-4088-8172-8c2277199460#width=1604&height=762) Or are they not currently displayed anywhere as barely anyone reaches them, as is the case with some of our (too?) generous AI limits? ## Do we get notified if we are getting close to a limit? For automations and integrations, we send two warning notifications to all workspace Admins: 1. 75% of the limit reached before the 20th day of the month; 2. 90% of the limit reached before the 25th day of the month. We also display a sidebar banner to Admins suggesting an upgrade to the next plan: ![image.png](/api/files/2b191dfd-72d0-4fac-bc19-340aaa209f83#align=%3Aalignment%2Fblock-center&width=883.65625&height=565) ## What happens if we reach a limit? When you use all of your monthly quota for a given service, it stops working: * **Integrations** stop syncing data from external tools. * **Automation Rules** stop running, and **Buttons** fail when users click them. The rest of the workspace remains fully operational. The affected service will work again once you upgrade or when a new month starts and the quotas are reset. ## How do we avoid reaching the limits? Most workspaces (at least those on paid plans) shouldn't worry about the monthly limits since the caps only affect the heaviest of users. However, if you find yourself approaching a certain limit, there are things you can do to optimize your usage: * **Integrations** * filter the data source by excluding old or irrelevant data; * sync less often; * if you use a custom connector via [Create Custom Integrations](https://the.fibery.io/@public/User_Guide/Guide/Create-Custom-Integrations-83), make sure you have a delta sync that avoids unnecessary data updates. * **Automations** * if you use the same Button to update many entities at a time, select them all (e.g. in a Table View) and click the Button once: for 100 entities, it's going to be 2 automation runs (50 entities per batch) instead of 100 runs when clicking the Button 100 times for each entity; * make sure your script actions work effectively with an array of incoming entities, as we can batch up to 50 entities together for a single automation run. If none of the optimizations save you enough syncs/runs or you don't think they are worth your time, upgrade to the next plan for much higher or even unlimited quotas. > [//]: # (callout;icon-type=icon;icon=heart;color=#e72065) > Note: imported entities are not counted towards the integrations monthly usage limit. # SAML SSO __________ Configure single sign-on using Okta, Azure, OneLogin, or your custom identity provider. Manually managing dozens of users across tools and platforms is a hell of a job. This is when single sign-on (SSO) steps in by centralizing access management. Single sign-on via Google and Microsoft accounts with the ability to enable and disable authentication methods is available to all customers. In addition to that, our [Enterprise plan](https://fibery.io/pricing) includes SAML SSO — making it possible to connect Fibery to Okta, Azure, OneLogin, or a custom identity provider (IDP) and provides SCIM endpoint to handle automatic user provisioning/deprovisioning. ## Configuring Fibery 1. Navigate to `Settings` in the sidebar. 2. Enable `SAML SSO` authentication method. 3. Paste the URL and the certificate provided by the IDP (ex. Okta). 4. *(optional)* Enable just-in-time provisioning to create Users in Fibery automatically on sign-in instead of inviting them manually in advance. ![Screenshot 2023-06-01 at 5.35.36 PM.png](/api/files/d391cee7-d8dd-4a3c-a8b6-50e1a25b4336#width=1642&height=1544) Feel free to disable all the alternative authentication methods for extra security. ## Signing in Once you enable and configure SAML SSO, a new button appears on your Workspace login page: ![image.png](/api/files/b047147c-f849-4b4a-8aff-d8f691d9ae0d#align=%3Aalignment%2Fblock-left&width=514&height=366) Once a user clicks this button, they are redirected to the IDP login before continuing to their Workspace. The [global login page](https://fibery.io/login) doesn't know anything about the IDP of your particular Workspace, so please navigate directly to `YOUR_WORKSPACE.fibery.io` to sign in with SSO. ## Configuring Okta ### Step 1. Create a new Okta app: 1. Navigate to `Applications`. 2. Click on `Create App Integration`. 3. Pick `SAML 2.0` as sign-in method, click `Next`. ![image.png](/api/files/e97cf0ca-90e7-4e8a-859e-1e54953c55b5#width=1302&height=492) ![image.png](/api/files/702507bc-4aa8-43cb-af25-b3e0598a4190#width=1305&height=864) ### Step 2. Make it a Fibery app. 1. Name the App `Fibery` or `Fibery (Workspace Name)` if your organization has multiple Workspaces. 2. Upload the [logo](https://tf-fibery-public-files.s3.amazonaws.com/media/Logo/logo-1000-transparent.png). ![image.png](/api/files/f167b070-dd85-4463-915b-425fe477550f#width=2230&height=1794) ### Step 3. Configure SAML basics 1. Put `https://YOUR_WORKSPACE.fibery.io/login/sso/saml2` in both `Single sign on URL` and `Audience URI` (you can copy this URL in the `Workspace Settings` in Fibery). 2. Leave `Default RelayState` blank. 3. Pick `EmailAddress` as `Name ID format` 4. Pick `Emal` as `Application username` 5. Leave the last option as `Create and update` ![image.png](/api/files/51712d98-6873-4956-a913-c6ecef057b12#width=1023&height=787) ### Step 4. Configure optional SAML attributes to set Users' names (not just emails) via JIT provisioning. 1. `firstName` (Basic) = `user.firstName` 2. `lastName` (Basic) = `user.lastName` 3. Go to the next step. ![image.png](/api/files/89b61ae6-3d61-46ad-9f19-6bfa060714a9#width=1610&height=732) ### Step 5. Provide feedback (if you'd like to) and finish Okta app creation. 1. Pick `I'm an Okta customer adding an internal app`. 2. (optional) Provide feedback to Okta and finish the setup. ![image.png](/api/files/f2ff248a-47b9-496f-a44d-ae9480611cdb#width=2238&height=2128) ### Step 6. Grab the URL and the certificate and paste them into Fibery. 1. View Setup Instructions for SAML 2.0. 2. Copy first the URL (1) and then the certificate (3). 3. Paste them into Fibery SAML SSO configuration. ![image.png](/api/files/8e1d7ef0-9fbe-4781-943c-4d2154395d41#width=2190&height=2096) ![image.png](/api/files/1f4297d7-b0b2-410a-809f-08ae246e7852#width=2288&height=2102) ![image.png](/api/files/f1a40bab-12b0-473d-b6ad-e210fd5460c1#width=1990&height=968) ## Configuring another identity provider If you use another IDP and their guide is of no help, please reach us via Intercom — we'll make it work together. Once we do, a new section will appear in this guide :) If you are using AD FS as an SSO provider, there might be a need to disable sending the `RequestedAuthnContext` flag, be sure to contact support in this case. ## SCIM endpoint Fibery provides SCIM endpoint which can be used by SSO providers to update users' status, i.e. add new users to a workspace or deactivate existing ones. **Step 1**. Make sure `JIT provisioning` is disabled in the `Workspace settings` in Fibery as SCIM handles the same thing but provides automatic de-provisioning as well. Rest of configuration is done on OKTA's side. **Step 2**. Navigate to the existing app **Step 3**. Edit it and enable `SCIM` provisioning, save changes: ![image.png](/api/files/a43fa539-5014-492d-b4ea-ee33031d6900#width=757&height=924) **Step 4**. Open the `Provisioning` tab and fill out details: SCIM connector base URL: `https://.fibery.io/api/scim/v2` (URL is also available in `Workspace Settings` in Fibery) Unique identifier field for users: `email` Supported provisioning actions: check `Import New Users and Profile Updates`, `Push New Users`, `Push Profile Updates` Authentication Mode: `HTTP Header` Authorization: Provide your [API token](https://api.fibery.io/#generate-a-new-token), note you need to be an admin in the workspace Please note that integration is set up on behalf of a specific user. As for safety precautions, Fibery will not deactivate this user based on SCIM request so that API token stays valid. If a user needs to be deactivated be sure to update API token first. Save changes. ![image.png](/api/files/99f9a077-b498-4bdd-b55b-808664dd4f9f#width=1128&height=1048) **Step 5.** Navigate to `To App` section in the sidebar and enable `Create Users` and `Deactivate Users` options, save changes. ![image.png](/api/files/a7f42199-08d5-419d-afd7-e7f3557e37d3#width=1034&height=844) Now all users who are assigned to the application in Okta will be automatically created in Fibery and all users deactivated or unassigned in Okta will also be deactivated in Fibery. **Step 6 (optional).** Sync assignments between Fibery and Okta This step can be safely skipped if your workspace doesn't have other users yet. But if there are existing users in Fibery who are also assigned in Okta before SCIM was set up you need to run the `Import now` command on the `Import` tab in Okta to "match" them between systems to enable future deactivations to be handled correctly. In this scenario, Fibery serves as the source of truth for assignments. That means that if some assignments were present in Okta but not in Fibery they would be automatically removed from the app in Okta. And if Fibery had more assignments then there will be a prompt to create new assignments in Okta. Matching assignments will be "linked" automatically during import. ![image.png](/api/files/ab84a8a1-4b74-4250-aff7-bb44b1ed5686#width=1021&height=384) ### **Troubleshooting** Things fail sometimes and if this happens to SCIM endpoint then Okta stores actions to be performed on the `Dashboard` → `Tasks` page. ![image.png](/api/files/5ffafa9e-25b8-4bd4-8f6d-0f3484986e38#width=1558&height=996) ## FAQ #### If a company is on the Enterprise plan and has SSO enabled for the internal team and uses their corporate credentials, can the normal login with Fibery credentials be used by other users? Admin has full control over what authentication method is used and you can work in combinations: SSO + Google, for example. But you can not configure that some sets of users can only use SSO but others can only use Microsoft accounts. This means that there are still some limitations and potential conflicts. Imagine you have a company and you use SSO. So you enable it, configure it, and use it in Fibery as well. Then some contractors or customers appear. You invite them to Fibery but you can't invite them to SSO. You have to enable some other option, in general case it would be email + password. But at the same time you want to restrict your employees from using email + password, only SSO. Sorry, that's not possible. #### When users are created, what type of user are they created as? They are created as Members. #### If "Google account" is enabled, and a user account doesn't already exist for a user, what happens? It will say that workspace is forbidden for this user. JIT provisioning is applicable only for SSO, usual Google Sign-in won’t trigger it. #### I'm using third parties (like Zapier and Make.com ) that push information into Fibery. Will those zaps stop working if we turn off the "Email and Password" authentication option? Nope, everything will survive. # TIMEZONES ___________ Timezones in programming is challenging, and Fibery is no exception. In this guide, we will explain how we handle timezones in Fibery. ## Overview Here are some important points to keep in mind when thinking about timezones in Fibery: 1. At the moment, Fibery does not allow the timezone to be defined for a Workspace or for a particular user. 2. Fibery stores all date-time fields on the server in UTC format. 3. UTC date-times are converted to the appropriate local time in the UI. 4. The timezone conversion applies only for date Fields with time. ![](https://downloads.intercomcdn.com/i/o/376917800/67310afc811999e1267ce788/help+timezone+1.png) The only exception is when you convert your Date Field to Date Time Field using Formula. In this case, you might face some issues. ![](https://downloads.intercomcdn.com/i/o/376918028/e1c6f79de00b2d8ca4f8bbf2/help+timezone+2.png) ## An example Let's say your timezone is GMT +2. Here is how it works in Fibery: * You enter 13:00 for a date-time field in the UI. * The server will store this as 11:00 UTC. * After refresh, the backend will send 11:00 to the UI * It will be converted back to your local timezone * You will see 13:00. If someone in the GMT+3 timezone opens the same entity, they will see 14:00. ![](https://downloads.intercomcdn.com/i/o/376918761/7947663104f470040846ae62/timezone+3.png) Everything looks good so far, right? ## Timezones in Formulas, Automations, Reports There are some functions in Fibery that are executed on the server, which operates in UTC. It's important to note that there is no defined timezone for the Workspace, and the server is unaware of each user's timezone. UTC time is utilized in Formulas, Automations, and Reports. Let's get into details. ### Timezones in Formulas and Automations > [//]: # (callout;icon-type=emoji;icon=:white_check_mark:;color=#4faf54) > All examples assume that the user is in the GMT+2 timezone. #### Example 1 Formula: `ToText([Creation Date])` Creation Date: \ *Jun 14, 2021, 18:03* Formula result: \ *2021-06-14 16:03* How it works? * The result in formula is a text field. * Formulas are executed on the server. * You get a text representation of the \[Creation Date\] field in UTC. * No conversion to local timezone is being applied here. If you want to retrieve 18:03 (which is what you see on UI for \[Creation Date\] field), you can change the formula to `ToText([Creation Date] + Hours(2))`. However, in this case, every user will see 18:03 regardless of their timezone, because the result is a text field. ![](https://downloads.intercomcdn.com/i/o/376920457/7c435dafc989147c3142327c/timezone+4.png) #### Example 2 Formula: `DateTime(2021, 1, 6, 12, 0, 0)` Formula result: \ *Jun 1, 2021, 14:00* How it works? * You define a date-time value in UTC. * It converts according to your local timezone. #### Example 3 Automation Rule: "When \[Some field\] is updated, set \[DateTime field\] value to `Today()`" \[Some field\] is modified at \ *Jun 14, 2021, 18:03* \[DateTime field\] value: \ *Jun 14, 2021, 02:00* ![](https://downloads.intercomcdn.com/i/o/376923121/de791b281e3e7c6738689c78/image.png) `Today()` returns a UTC date without a time value. As \[DateTime field\] is of the type date-time, we convert `Today()` to a date-time value, setting the time as the beginning of the day in UTC. You will see 02:00 in the UI because you're in the GMT+2 timezone. In this particular case, it might be better to use the `Now()` function instead. ![](https://downloads.intercomcdn.com/i/o/376923912/6e930829a6e48cf7593685c2/image.png) ### Timezones in Reports You want to see how many bugs were completed during a specific period. Therefore, you need to build a histogram chart report "Count of Bugs vs Completion Date-Time." * For one particular bug, the Completion Date-Time is set to \ ***Jun 14, 2021 01:00*** in the UI. * This is equivalent to \ ***Jun 13 23:00***** i**n UTC So this bug will be shown in the report as counting in the bar that corresponds to Jun 13. ## FAQ ### How do I add offset hours? Offset hours refer to the difference in time between two locations. It indicates how many hours ahead or behind one location is compared to another location in terms of time. Here is how you add them in Formulas & Automations: `[Your Date Field] + Hours(number of offset hours in your timezone)` > [//]: # (callout;icon-type=emoji;icon=:earth_americas:;color=#3e53b4) > Please keep in mind that there can be confusion if your teammates live in different time zones. # SORTS _______ Custom sorting is available for most data Views: * [Table View](https://the.fibery.io/@public/User_Guide/Guide/Table-View-11) * [Board View](https://the.fibery.io/@public/User_Guide/Guide/Board-View-9) * [List View](https://the.fibery.io/@public/User_Guide/Guide/List-View-10) * [Timeline View](https://the.fibery.io/@public/User_Guide/Guide/Timeline-View-12) (for groups) * [Feed View](https://the.fibery.io/@public/User_Guide/Guide/Feed-View-14) In addition, it works in the same way in [Relation Filters and Sorts](https://the.fibery.io/@public/User_Guide/Guide/Relation-Filters-and-Sorts-177). > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6A849B) > Choosing a sort order only affects how the entities are shown in the specific view - it does not change anything about the entities themselves. Sorting can be applied in many places, and an entity doesn't 'know' where it sits in the sorting order for any given view. > > For this reason, it is not possible to make calculations based on the position of an entity in a view, e.g. you cannot create a formula which calculates a running sum of number values. Nor can you use a formula to get an entity's position in a list. > > You can do these kinds of calculations in a [Report](https://the.fibery.io/@public/Intercom/Tag/Report-58) view however, since reports operate on databases, not individual entities. ### Default sorting When no custom sorting is specified, the items are ordered manually via drag'n'drop (aka by `Rank`): ![sort-rank.gif](/api/files/00a34fb5-0d92-4e0e-8402-eac0daf93741#align=%3Aalignment%2Fblock-center&width=2350&height=856 "Reordering cards via drag'n'drop on a Board View") As soon as any custom sort is enabled, the drag'n'drop reordering stops working. ### Add custom sorting To order items by a certain Field, add a sort: ![sort-custom.gif](/api/files/e64ddfd8-c840-482b-b8d3-366ef9088de2#align=%3Aalignment%2Fblock-center&width=3040&height=830 "Sorting Features by their RICE score, the highest scoring go on top") > [//]: # (callout;icon-type=emoji;icon=:confused:;color=#FC551F) > One can't sort by collections: many-to-many relations, multi-select Fields, and Assignees. > > While sorting by a relation Field uses `Name` of related Entities, sorting by select values (incl. `State`) uses the values' `Rank` (aka manual prioritisation). ### Use multiple sorts ![image.png](/api/files/6b0ea65f-2e58-469c-a371-c5645d6391dc#align=%3Aalignment%2Fblock-center&width=885.8500366210938&height=258) In case multiple sorts are applied, every next sort serves as a tie-breaker for the previous ones. In the example above: 1. Features are sorted by state 2. Features with the same state are sorted by RICE score To change the order in which sorts are applied, drag'n'drop them. ### Sort per DB (+ columns and rows) When cards of multiple DBs are present on the same Board, List, or Feed View, you can specify custom sorting for each DB independently: ![sort-multiple-dbs.gif](/api/files/129126ec-9722-4fe2-905c-00591f6388bc#align=%3Aalignment%2Fblock-center&width=639.25&height=291 "Each of the 3 DBs has its own custom sorting") In this case, all Entities will be first sorted by DB and then by each DBs custom sorting. In the example above: 1. Dev Tasks go first sorted by State and Feature 2. Bugs come next sorted by Urgent 3. Features come last sorted by Release In a similar way, you can specify custom sorting for rows and columns. # INBOX AND NOTIFICATIONS _________________________ ## Overview The Inbox is your notification center in Fibery where you’ll find important updates on all events in your workspace. ![image.png](/api/files/a9adfed7-476f-4c8d-906c-bc72d58866c6#align=%3Aalignment%2Fblock-center&width=2280&height=1032 "Our updated Inbox contains three tabs: Do Today, Later, and Done") Fibery sends notifications about the following events by default: 1. Someone mentions you using `@` command. 2. You are assigned to any entity. 3. Someone commented on an entity you are assigned to. 4. Someone commented on a Document, you are a creator of. 5. An admin created a rule that sends notifications on some event. 6. Someone reacted to the comment you left > [//]: # (callout;icon-type=icon;icon=star;color=#e72065) > If you want to receive a notification when you mention yourself, enable "A notification when I mention @myself in text" option in Settings → Notifications. Find Inbox in the sidebar to access in-app notifications. Inbox has three tabs: * **Do Today** — all new & unprocessed notifications are here. * **Later** — you moved some notification here via Later action. * **Done** — you moved some notification here via Done action. > [//]: # (callout;icon-type=icon;icon=asterisk;color=#d40915) > Notifications aren't sent to the person who makes the change. ## View notifications Click on a notification to open the relevant entity (comment in an entity, etc). Notifications in Inbox are grouped by entity. ![image.png](/api/files/e62d0f8c-af75-45ab-b780-9fd910bf925a#align=%3Aalignment%2Fblock-center&width=3392&height=1400 "Select a notification to see its context in the right panel") You may use up & down arrows keys to navigate between notifications. From the list view you can take Inbox-related actions such as moving notifications to some state, deleting notifications, etc. You can move all entity-related notifications to Done with a single click. ## Inbox Actions You can change the state of notifications. Put a mouse over some notification item and actions panel appears. It shows states buttons so you can change the notification state quickly. For example, in Do Today tab you see Later and Done buttons. Click the menu icon `⋯` and see available actions, like `Mark as read/unread` and `Delete notification`. ![image.png](/api/files/3389a161-fefb-44d7-afc5-b8de42c2aac7#align=%3Aalignment%2Fblock-center&width=2280&height=1032 "Manage a specific notification using the context menu") When a notification is deleted, it is gone forever. > [//]: # (callout;icon-type=icon;icon=keyboard;color=#bec5cc) > You can navigate between notifications using up and down keys. > > Other shortcuts: > > `L` - move notification to Later > > `D` - move notification to Done > > `T` - move notification to Today > > `Delete` - delete notification > > `U` - mark notification as Unread. ### Batch actions You can execute some actions on all notifications in the current tab. Click `Actions` button in the top right corner. Here are available actions: * **Mark all as read** — removes read status. * **Move all read to Done** — moves read notifications to Done tab. * **Move all to Done** — moves notifications to Done tab. * **Delete all read notifications** — deletes read notifications from the current tab forever (🚨 there is no undo). * **Delete all notifications** — deletes all notifications from the current tab forever (🚨 there is no undo). ![image.png](/api/files/130bd053-e78a-4b67-82e6-47691f09ddd5#align=%3Aalignment%2Fblock-center&width=2280&height=1032 "Manage all notifications in the tab using the actions menu at the top of the Inbox panel") ## Automation between Notifications Done state and your actions on the Entity * When entity is moved to Final state by **me**, move all notifications **for me** to Done state * When I replied to some comment, move notification about all comments in this thread to Done in **my** Inbox. * When I marked some thread as Resolved, move all notifications about comments in this thread to Done in **my** Inbox. ## Filter notifications You may receive many notifications but want to focus on some important, like mentions or new comments. You can filter your inbox by event type and read status. Simply click the Filter button at the top of your Inbox and customize it according to your needs. ![Screenshot 2023-08-31 at 9.10.44 AM.png](/api/files/983574f9-19e5-4c37-9790-283c55c2600d#align=%3Aalignment%2Fblock-left&width=672&height=264) ## Enable Slack and Email notifications You may receive notifications in your email or Slack. 1. Click the notifications settings icon. 2. Click `Email` checkbox to enable email notifications. 3. Click `Connect` button and follow the steps to enable Slack notifications. ![Screen Recording 2023-08-24 at 14.20.01.gif](/api/files/657ee54d-8bdf-4768-bac0-931256fc6403#align=%3Aalignment%2Fblock-center&width=1280&height=576 "Receive your notifications via Email or Slack") > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#1fbed3) > Note that you can also create automations to send Slack notifications, check [Slack Actions and Notifications](https://the.fibery.io/@public/User_Guide/Guide/Slack-Actions-and-Notifications-102) guide. ## Enable Browser notifications You may receive notifications in your browser as a toast. 1. Click the notifications settings icon. 2. Click `Browser` checkbox to enable browser notifications. 3. Click `Allow` when prompted by your web browser. 4. Click `Send test notification` link to check whether it works. ![Screenshot 2023-10-13 at 10.49.42 AM.png](/api/files/f16f687a-1991-40f1-97d1-2d06b7eb3b28#align=%3Aalignment%2Fblock-left&width=400&height=169) If you see nothing, grab some ☕ and check [Browser notifications FAQ](https://the.fibery.io/@public/User_Guide/Guide/Browser-notifications-FAQ-216). ## Watch entity (subscribe to all changes) You can receive updates about an entity into your Inbox using `Watch` action. Check this guide [Watch Entity and Documents and get notifications](https://the.fibery.io/@public/User_Guide/Guide/Watch-Entity-and-Documents-and-get-notifications-210) ## Special Admin notifications Every `Admin` will be also notified when: * `Formula` was broken - notification link will guide you to the broken formula * `Automation rule` stopped working. * [Auto-linking (Set Relations Automatically)](https://the.fibery.io/@public/User_Guide/Guide/Auto-linking-(Set-Relations-Automatically)-50) was broken ## Notification Settings You can configure notification settings in `Settings → Notifications` area. Configuration section contains some events you can subscribe to. Events are also grouped by notification channel. For example, you can receive some notification to inbox, but not receive it to Slack. ![Screenshot 2023-10-05 at 11.02.49 AM.png](/api/files/35f0c8d0-fbdc-43e0-a38d-e5d9bb0981b0#width=2956&height=1676) You can also set rules that enable Watch action automatically. Find Watch rules section and uncheck some rules if you don'g need them. ![Screenshot 2023-10-05 at 11.05.29 AM.png](/api/files/8f83df6e-622c-49d0-ab3b-0d1da405c6d8#align=%3Aalignment%2Fblock-left&width=701&height=255) ## FAQ ### Can I archive notifications? Done tab is the Archive you need. Just move the notification to "Done" when you don't want to see it in the Today or Later tabs. ### I deleted some important notifications, can I get them back? Unfortunately, it is not possible. ### Are there any reminders? Not yet. We have them in plans for the bright shiny ☀️ future though. ### Who gets notified when an Automation rule fails, or is disabled? #### Rule failures * Notifications about rule failures are sent to the rule 'owner' * The rule owner is the user who created the rule, or the user who last saved the rule.\ You can see who this is at the bottom of the automation configuration, next to the Save button ('Updated by X') * If you install a template that contains rules, the user who installed the template will be the default rule owner #### Disabled rules * If a rule fails multiple times, it will be disabled * All admins get notified about a rule being disabled * For a disabled rule, the owner will only receive failure notifications if the rule is re-enabled and fails again # SYNC VACATIONS FROM GOOGLE CALENDAR _____________________________________ Usually people add vacations using Out of Office event type in Google Calendar. In this case you can sync Vacations into Fibery. 1. Sync Google Calendar as described here [Google Calendar integration](https://the.fibery.io/@public/User_Guide/Guide/Google-Calendar-integration-136) 2. Create a View that shows only Out of Office events. It is easy to do via Filter ![Screenshot 2022-12-08 at 5.09.42 PM.png](/api/files/c21cb480-a88c-4bb2-b0b4-0f16789bc9a4#width=1352&height=556) 3. You can create more advanced Views, like Timeline with all Out of Office events. # FINDING FEEDBACK FOR A NEWLY ADDED FEATURE ____________________________________________ [https://youtu.be/1JM3IaXYAcM](https://youtu.be/1JM3IaXYAcM) # DATABASES ___________ A Database is a collection of data records (Entities) that share the same characteristics (Fields). To add something into Fibery, you need to create a Database first. For example, if you want to add some projects with details like Name, Effort, Risk, etc., it is necessary to create a Project Database and add the relevant Fields. ## Add new Database To add a new Database into an existing Space, click + near Space name and select `Database`. ![Screenshot 2025-01-30 at 6.09.02 PM.png](/api/files/3f7fe03d-6d90-489f-99e4-52a434b18a86#align=%3Aalignment%2Fblock-left&width=579.4765625&height=476) ### Name a Database You can give your Database any name you like, but it is worth noting that when creating relations etc. Fibery will attempt to intelligently name the fields, based on the plural or singular version of the database name. This process assumes that a Database has is named using an English word, so you might get weird defaults if you name Databases with words from other languages. ### Add Fields To make the Database more useful, add additional [Fields](https://the.fibery.io/@public/User_Guide/Guide/Fields-15). Expand Database in left sidebar, navigate to Fields and click `+ New Field` button. ![Screenshot 2025-01-30 at 6.10.12 PM.png](/api/files/2898af9a-85b5-4558-919b-5f7aa3c87dfd#align=%3Aalignment%2Fblock-left&width=762&height=518) ## Delete Database To delete a Database, click `…` next to the Database name, and proceed to `Delete`. When you delete a Database, all data (Entities) and connections (Relations) will be deleted as well. For example, if you delete Opportunity Database, all Opportunities will be deleted. So make sure you don’t have anything important in there. ## Restore Database If the unfortunate deletion does happen, you can restore Database from [Trash](https://the.fibery.io/@public/User_Guide/Guide/Trash-90) or [Activity Log](https://the.fibery.io/@public/User_Guide/Guide/Activity-Log-92). ## Rename and set color for a Database To rename or set color for a Database, right-click on a Database name or click `…` next to it. ## Move Database You can move Databases between Spaces. Just right-click on a Database name or click `…` next to it. > [//]: # (callout;icon-type=emoji;icon=:crown:;color=#FC551F) > You need to have Creator or Admin permission levels for that action. ![Screenshot 2025-01-30 at 6.12.57 PM.png](/api/files/9307861a-1237-4438-8546-7981c39b5193#width=2480&height=1678) What are the consequences? 1. All Relations will be preserved. 2. [Views](https://the.fibery.io/@public/User_Guide/Guide/Views-8) will stay in the Space where they were created in. You can move them separately or recreate them in the new Space. 3. New permissions will be applied to Views. For example, you moved Component Database from Product Space to Research Space. To see Views where Components are chosen as a source, a User has to have at least Viewer access to Research Space. ## Database size limit Fibery performance depends on the complexity of a Database. For instance, if you have a large Database with only a few Fields, it will work fine. However, if you have 100 Fields, it may be slow. > [//]: # (callout;icon-type=emoji;icon=:ok_woman:;color=#6A849B) > In general, Fibery works well up to 300K Entities in a single Database. Beyond that, we cannot guarantee optimal performance. If you have 500K records in some Fibery Database and experience performance problems, ping us in support chat or in [Fibery Community](https://community.fibery.io "https://community.fibery.io"). ## FAQ ### How can I determine if I need a new Database or a new Field? Sometimes you may wonder when to create a Database and when a Field (for example, Single-Select Field) is enough. If you're accustomed to spreadsheets, you might be used to creating a new sheet for every new batch of data. However, Fibery separates data storage and data visualization using Views. So there is no need to add a new Database for every new batch of data. We recommend creating a new Database **when the new data has a different structure**, meaning there are different Fields and Relations. Here's a nice video that might help you think about what should be a database: [https://youtu.be/X5JfZk72ZfU](https://youtu.be/X5JfZk72ZfU) ### When to create a new Database and when to create a new Space? Space represents a process, for example, Hiring. Consequently, Database represents a part of the process, for example, you can have All Candidates and New Employees Database in the Hiring Space. # CUSTOMIZE THE FEEDBACK VIEW _____________________________ ## What is Feedback View and how to customize it Feedback comes from multiple sources: user research calls, support tickets, notes from the sales team, emails, surveys, and more. ![image.png](/api/files/d4e14616-878a-4fe8-adee-01aa88f9d30e#width=3392&height=2240) ### Source customization You can find out what things will be shown on your Feedback View with the `Posts` Tab. ![image.png](/api/files/4e9b13d1-ad35-4fe5-ab7d-552de590a8ea#align=%3Aalignment%2Fblock-center&width=922&height=530) We see two Databases as sources - `Interview` and `Web`. At this screen, we can either remove an existing Database or add a new one. ![image.png](/api/files/6c9a98e1-e358-47c4-91d4-10513dee502f#align=%3Aalignment%2Fblock-center&width=712&height=372) ### Context customization Every source has a [Rich Text](https://the.fibery.io/@public/User_Guide/Guide/Rich-Text-28) Field where all the context is kept. By default, you have two Rich text fields - `AI Summary` and `Description`. ![image.png](/api/files/4ec9f087-26bb-43af-823a-422f120eeba7#align=%3Aalignment%2Fblock-center&width=830&height=648) On the Feedback View, you can choose what you want to see - the summary (generated by AI) or full notes. * For the product manager, `AI Summary` may be more helpful. It allows to distinguish quickly whether the conversation is interesting for them. Does it cover a particular Product manager's area of interest or not? * For the customer success manager, the `Description` field can be more relevant. Having a whole context is extremely important for being a trusted advisor. To understand how it works, duplicate the original Feedback View and set a new context source. ![image.png](/api/files/be9f4c19-b90a-4330-8a50-4c5ae5a3b8ad#align=%3Aalignment%2Fblock-left&width=415.5&height=466) ### Other visualization options For sure, [Feed View](https://the.fibery.io/@public/User_Guide/Guide/Feed-View-14) is not the only one. If the "who" (customer's segment, persona, particular company) left the feedback is more important than "what" this feedback is about, you can try using [Table View](https://the.fibery.io/@public/User_Guide/Guide/Table-View-11) . ![image.png](/api/files/10bec4dc-2cce-4e4e-a940-641e2cc11489#align=%3Aalignment%2Fblock-center&width=3392&height=1350 "Here PM may easily find interviews from companies & personas he is interested in") > [//]: # (callout;icon-type=icon;icon=heart;color=#9c2baf) > If you don't feel confident in creating new visualizations - check the guide [Views](https://the.fibery.io/@public/User_Guide/Guide/Views-8) [Sort](https://the.fibery.io/@public/Intercom/Tag/Sort-65) and [Filter](https://the.fibery.io/@public/Intercom/Tag/Filter-32) also may help a lot. * `Sort` may help to show the latest conversations on top. * `Filter` will help to get rid of Interviews that were processed already, meaning those for which feedback was linked. * `My Filters` will help to find current areas of interest easily. For example, "Show me interviews with product managers only that were held this month." ![image.png](/api/files/d0a09c32-cefc-43a6-8929-18c93a094f5e#align=%3Aalignment%2Fblock-center&width=3498&height=1272 "My Filters are set per User meaning it won't affect other teammates") ## How to process feedback in bulk When you mark feedback as Processed, it gets removed from the Feedback Feed, but you can always locate it in the All Feedback View. If you want to process several feedback pieces at once, go to the All Feedback View, select needed pieces, go to `Action` in the top menu and choose `Processed`. You'll immediately will see the name of the person who completed the operation in `Process`ed by column. ![image.png](/api/files/082de85c-a8a9-4eba-a534-682f2068e33c#width=3176&height=2024) ## How to update the current Feedback View with new data sources The feedback might come from multiple sources. Some sources require manual input, such as interviews and web pages. However, others can be collected automatically through Integrations. Some tools you can connect automatically with a single click (like [Intercom integration](https://the.fibery.io/@public/User_Guide/Guide/Intercom-integration-73) or [Discourse integration](https://the.fibery.io/@public/User_Guide/Guide/Discourse-integration-75) ). If you can't find the tool you want to integrate with in[ our gallery](https://fibery.io/features/integrations), you can create a custom integration or connect it by using Make.com or Zapier. > [//]: # (callout;icon-type=icon;icon=laughing;color=#8ec351) > Let us know which tool you use as a feedback source we are missing integration with [through this form](https://the.fibery.io/@public/forms/ylxUN4kP). After integration, synced data will be also represented as a set of connected databases. That means you may connect it with the Fibery databases you already have. ![image.png](/api/files/8e8ded9c-e610-4e47-9835-8c9eccaa01e0#align=%3Aalignment%2Fblock-center&width=590&height=500 "These are Intercom and Discourse structures") > [//]: # (callout;icon-type=icon;icon=robot;color=#1fbed3) > The way Databases are connected within a specific integration is determined by the other tool. That part we can't change. If you want to know about the overall Fibery approach to integrations, please [read this post](https://fibery.io/blog/product-updates/fibery-approach-to-integration/ "https://fibery.io/blog/product-updates/fibery-approach-to-integration/"). Once the integration is ready, we need to add Fields that we use in the Feed View but are missing in the integration. 1. We need to add a new `Rich Text field` called `AI Summary` and that will be automatically populated by AI. 1. You may set the AI part a bit later. To update a Feedback View, we need to add a Field only. 2. When ready, check this guide for details - [Generate Feedback Summary by AI](https://the.fibery.io/@public/User_Guide/Guide/Generate-Feedback-Summary-by-AI-236). 2. We need to add a `Checkbox field` called 'Processed'. This has to be done on the Database that contains the feedback. So, in Intercom it will be Conversation, in Discourse it will be Topic, etc. ![image.png](/api/files/849fd7ca-cb7f-4731-b1b2-93511f7409ac#width=3472&height=1476) > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#d40915) > It's important to name new Fields the same way as you named Fields in other databases - AI Summary, Processed, etc. Fibery Views can only group databases by fields with the same name, and even the case of symbols matters. Now it's time to add a new source Database to the Feedback View we want to see. ![Add new database as a source.gif](/api/files/de6e9b57-3ea9-40ca-a65e-e8aec680348d#align=%3Aalignment%2Fblock-center&width=790&height=451) > [//]: # (callout;icon-type=icon;icon=lightbulb-alt;color=#fba32f) > Maybe a single Feedback View is not perfect for all Database sources. Perhaps you can create two Views - one for manually added sources, and another for integrated sources. You may need more Views if you have different workflows for different sources. Experiment and over time, you will discover which View is the most convenient to use. # CUSTOM APP: DOMAIN ____________________ ## **App schema** Each app should follow strict schema with the following structure (all fields are required): | Name | Type | Description | Example | | --- | --- | --- | --- | | name | string | Name | "MyApp" | | website | string | Website | "http://myawesomeapp.com" | | version | string | Version | "1.0.0" | | description | string | Description | "My awesome app" | | authentication | Array | Authentications | `[{id: "none", name: "no auth"}]` | | sources | Array | Empty array | `[]` | | responsibleFor | Object | Responsibilities | `{dataSynchronization: true}` | ## **Authentication** Authentication model represents type of authentication in app and has following structure: | Name | Type | Description | Required | Example | | --- | --- | --- | --- | --- | | id | string | Identity of authenticaiton | true | "oauth" or "token" | | name | string | Name of authentication | true | "Connection Settings" | | description | string | Description of authentication | false | "Give the name for connection" | | fields | Array | Authentication fields | false | `[{optional: false, id: "accountName", name: "Title", type: "text", description: 'Give the name for connection'}]` | If your app doesn't require authentication, add authentication with *id* = "none". In the case you can omit *fields*. ## **Authentication field** Authentication field represents the field in account. So account that will send to API endpoints will consist of the authentication fields. Authentication field has following structure: | Name | Type | Description | Required | Example | | --- | --- | --- | --- | --- | | id | string | Id of field. The id will be specified in account object. | true | "accountName" | | name | string | Name of the field. Will be displayed in auth form. | true | "Title" | | type | string | Type of the field | true | "text" | | description | string | Description of the field | true | "Give the name for connection" | | optional | boolean | Is the field optional | false | false | | value | string | Default value of the field | false | null | Read about [Custom App: Fields](https://the.fibery.io/@public/User_Guide/Guide/Custom-App:-Fields-270). Note that authentication field with some types requires more information to specify. For example, for *highlightText* type you also need to specify *editorMode* in authentication field. ## **Filter** Filter represents filter that will be applied on data. Filter has following structure: | Name | Type | Description | Required | Example | | --- | --- | --- | --- | --- | | id | string | Id of filter | true | "table" | | title | string | Title of filter | true | "Table" | | type | string | Type of filter | true | "list" | | datalist | boolean | Is filter has values to select from | false | true | | optional | boolean | Is filter optional | false | false | | secured | boolean | Secured filter values are not available for change by non-owner | false | true | Some additional properties should be specified in case when filters should be displayed in special modes, for example JSON or SQL. For example, for *highlightText* type you also need to specify *editorMode* for the filter field. # VIEWS _______ A View is a way to visualize and edit data records from one or several Databases in order to analyze it and make decisions. > [//]: # (callout;icon-type=emoji;icon=:window:;color=#673db6) > A View is how you look at data, and a Database is where data is stored. Therefore, adding or deleting a View does not impact the stored data. ## How to add a View You can add a View from the sidebar in the related Space or right from a Database. You can create as many Views as you need for each Space. Note that every person with an access to a Space sees all its Views. ### Add a View from the sidebar For that, click `+` next to the Space name. ![image.png](/api/files/1cfb1475-8a8b-477c-bbb8-d3cbf85356c3#width=3392&height=2240) ### Add View with AI When adding a View from the sidebar, you can also describe a View for AI to create. Click `AI View`, and it will automatically pick a layout and configure filters. This is a beta feature, so please let us know how it goes! ### Add a View from a Database To add a View from a Database, click on the `View` next to Database description. ![image.png](/api/files/54933e36-91a0-41cd-809a-e22ee84551af#align=%3Aalignment%2Fblock-center&width=505.97222900390625&height=539) > [//]: # (callout;icon-type=emoji;icon=:rainbow:;color=#d40915) > Customize Views with [Emoji or Icon Instead of Default View Icon](https://the.fibery.io/@public/User_Guide/Guide/Emoji-or-Icon-Instead-of-Default-View-Icon-188). ## Data Views A data View is configured to show data (Entities). You can think of it as a way to visualize your data to answer a particular question: * What are we working on and what’s next? — “Tasks Kanban” Board * What work has been added recently? — “Recently added Tasks” Table * When will the work be ready? — “Tasks Roadmap” Timeline These are the data Views: * [Table View](https://the.fibery.io/@public/User_Guide/Guide/Table-View-11) * [Board View](https://the.fibery.io/@public/User_Guide/Guide/Board-View-9) * [List View](https://the.fibery.io/@public/User_Guide/Guide/List-View-10) * [Timeline View](https://the.fibery.io/@public/User_Guide/Guide/Timeline-View-12) * [Calendar View](https://the.fibery.io/@public/User_Guide/Guide/Calendar-View-13) * [Feed View](https://the.fibery.io/@public/User_Guide/Guide/Feed-View-14) * [Map View](https://the.fibery.io/@public/User_Guide/Guide/Map-View-167) * [Reports Overview](https://the.fibery.io/@public/User_Guide/Guide/Reports-Overview-58) Narrow down the selection with [Filters](https://the.fibery.io/@public/User_Guide/Guide/Filters-141) and order the items with [Sorts](https://the.fibery.io/@public/User_Guide/Guide/Sorts-180). > [//]: # (callout;icon-type=emoji;icon=:bulb:;color=#fba32f) > [Context Views](https://the.fibery.io/@public/User_Guide/Guide/Context-Views-20) is a great way to create the same pre-filtered visualization for all Entities of the same Database. ## Content Views A content View can contain information that is not available elsewhere, unlike the data View, which displays data. You can think of it as of the way to capture and collaborate on knowledge: * [Documents](https://the.fibery.io/@public/User_Guide/Guide/Documents-85) * [Whiteboards](https://the.fibery.io/@public/User_Guide/Guide/Whiteboards-38) A Document and a Whiteboard can live in several places: * It can be in the sidebar, belonging to the Space, but not tied to anything else. * It can be nested inside another Document. * It can belong to an Entity. In the case of the last example, a creator needs to configure the Database to allow Documents or Whiteboards to be added to Entities. You can do it by adding `+ New field` to the Database, and this results in collections of Documents or Whiteboards showing up in the Entity View. > [//]: # (callout;icon-type=emoji;icon=:nerd_face:;color=#6A849B) > When a Database is configured to support adding Documents or Whiteboards to an Entity, this is sometimes referred to as enabling the Document or Whiteboard 'Extension'. ## Form View There is also a [Forms](https://the.fibery.io/@public/User_Guide/Guide/Forms-134) to collect data from users, customers, co-workers, and potential employees. Think of it as Google Forms inside of Fibery - check it out. ## Views options ### Hide fields when empty You can selectively hide empty fields on most views with a per-field setting. This feature allows you to hide fields that are empty and unnecessary while keeping others visible. Accessible through the "Fields" menu, simply click the ">" button next to a visible field and toggle the "Hide when empty" setting. ![preview_gif.gif](/api/files/a4c1bf3a-3e6a-4266-9801-d756e1049248#width=1519&height=900) ### Rich Text on Views (Snippets) Rich text Fields are supported on the Board, Table, List, and Canvas Views. There is a special `Rich Edit Field Name (Snippet)` unit that you can select. This snippet size is based on the Card size. ![image.png](/api/files/dfccea4a-0d45-4e75-8b77-dc87b25183e5#align=%3Aalignment%2Fblock-center&width=2738&height=2174 "Here you can turn it on and see the result on the Board View") ![image.png](/api/files/dcf7ec5b-7367-48d2-a0d5-3d8919e608de#align=%3Aalignment%2Fblock-center&width=1920&height=1077 "Whiteboard View") ### Display fields as Icon buttons You can display URL, Phone, and Email fields as small icons. Use Display As property in Fields selector to configure it in any view. ![2024-11-28 13.08.20.gif](/api/files/14f75027-bb32-4516-becc-da51f154d534#align=%3Aalignment%2Fblock-center&width=836&height=316) ### Filter, Sort, add Colors to Snippets You can Filter, Sort and add Colors to rich text Snippets. This is applicable in all the Views. For example, you can filter out Entities with empty rich text Field. ![image.png](/api/files/3f1a67a9-5b1b-4ee1-a0c8-6274a5263c61#align=%3Aalignment%2Fblock-center&width=805.6124877929688&height=532) > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#fc551f) > Rich Text Snippet is not-editable (and we don’t have plans to make it editable). ### Navigating to relevant Views Fast navigation to relevant Views added to all top level Views. Find >> Icon in the top right corner of any View, click it, and it will show all Views with the same databases: ![image.png](/api/files/37e402a5-95e9-478b-a7a6-63566fd3f2d0#align=%3Aalignment%2Fblock-center&width=874&height=463) ### Search in Views You can search in normal views and in relation views. Click search icon or use `Cmd + F` (`Ctrl + F` on Windows) (if the view is in focus): ![2024-09-19 09.15.58.gif](/api/files/232d6fce-90cc-4aad-8945-265c696354bf#align=%3Aalignment%2Fblock-center&width=811.6875&height=388) Sometimes you need to search by related entities in views. Search in views works for all relation units visible on the view. For example, you can quickly filter features list by state, assigned people and product areas. ## FAQ ### Is it possible to have a permalink of a view? You just need to keep a numeric part of the URL. For example: * [https://the.fibery.io/@my-space/New-table-11426](https://the.fibery.io/@my-space/New-table-11426) * [https://the.fibery.io/@my-space/11426](https://the.fibery.io/@my-space/11426) are equivalent # HOW TO USE FIBERY FOR SOFTWARE DEVELOPMENT ______________________________________________ ## Getting Started Fibery offers a variety of solutions for product management needs. However, product development can't be disconnected from software development. Product development is where magic is planned, and software development is where magic happens. Fibery is feature-rich, powerful and flexible, allowing you to keep both product management and software development in one place. You can: * 🐞 Store Stories and Bugs connected to relevant Features. * 🏃 Create Sprints to track team capacity and plan as needed. * 📊 Build powerful reports with Burndown, Cumulative Flow Diagram, and Burnout charts. * 🤝 Have two-way integrations with Gitlab, GitHub, and Bitbucket (and there is also an API). * 🪄And of course, there are Automations to automate whatever you want. The result? The development team will be able to see all specifications without switching the context. Furthermore, they will have access to all recent customer report and requests, and sometimes that's a motivation needed. > [//]: # (callout;icon-type=emoji;icon=:thinking_face:;color=#4faf54) > If you are already using some SoftDev tools and doubt giving Fibery a chance, consider the next questions: > > * Do you really need all those features? > * Is it worth having product development disconnected from software development? > * Is it worth paying twice? Most likely at least some users need to have access to both tools, right? In this guide, we will cover several scenarios: * [Using Software Development template](https://the.fibery.io/User_Guide/Guide/How-to-Use-Fibery-for-Software-Development-245/anchor=Software-Development-template--a72e5f9f-9197-4a7f-99ee-51b3b99d2217 "https://the.fibery.io/User_Guide/Guide/How-to-Use-Fibery-for-Software-Development-245/anchor=Software-Development-template--a72e5f9f-9197-4a7f-99ee-51b3b99d2217") * [Setting up SoftDev structure from scratch](https://the.fibery.io/User_Guide/Guide/How-to-Configure-a-Structure-for-Software-Development-From-Scratch-248 "https://the.fibery.io/User_Guide/Guide/How-to-Configure-a-Structure-for-Software-Development-From-Scratch-248") * [Setting up Sprints](https://the.fibery.io/User_Guide/Guide/How-to-Setup-Sprints-249 "https://the.fibery.io/User_Guide/Guide/How-to-Setup-Sprints-249") * [Setting up Sprints for multiple dev teams](https://the.fibery.io/User_Guide/Guide/How-to-Set-Up-Sprints-for-Multiple-Development-Teams-247 "https://the.fibery.io/User_Guide/Guide/How-to-Set-Up-Sprints-for-Multiple-Development-Teams-247") * [Automating existing processes](https://the.fibery.io/User_Guide/Guide/How-to-Use-Fibery-for-Software-Development-245/anchor=How-to-automate-existing-processes--2344b8f3-2310-4a60-8ef0-ad5687985e89 "https://the.fibery.io/User_Guide/Guide/How-to-Use-Fibery-for-Software-Development-245/anchor=How-to-automate-existing-processes--2344b8f3-2310-4a60-8ef0-ad5687985e89") * [Integrating with external development tools](https://the.fibery.io/User_Guide/Guide/How-to-Use-Fibery-for-Software-Development-245/anchor=How-to-connect-to-external-developer-too--8498380d-7675-4195-8bbf-951a5a82c705 "https://the.fibery.io/User_Guide/Guide/How-to-Use-Fibery-for-Software-Development-245/anchor=How-to-connect-to-external-developer-too--8498380d-7675-4195-8bbf-951a5a82c705") ## Software Development template Yes, you can start from a ready-to-go template where everything is configured and set. To find a template that suits your need, check out the software development section in the template gallery: navigate to the bottom of sidebar and click `Templates.` ![image.png](/api/files/fa998987-5508-4531-bf74-32e11851adce#width=4500&height=2614) Also, you can check the webinar that we held to explain Fibery for software development 👇 [https://youtu.be/pUsLloLzmSk?si=IHn1zU6nHJQ2wjo9](https://youtu.be/pUsLloLzmSk?si=IHn1zU6nHJQ2wjo9) We go into details of sprint planning, work boards, integrations, automations, reports and retrospectives. > [//]: # (callout;icon-type=emoji;icon=:point_down:;color=#8ec351) > You can install the template by the following link - [Software Development template](https://shared.fibery.io/t/937623e0-6c8b-4c56-9413-fd45749906d1 "https://shared.fibery.io/t/937623e0-6c8b-4c56-9413-fd45749906d1"). ## How to set up SoftDev processes from scratch If you prefer to build a structure from scratch, proceed to [How to Setup SoftDev Structure From Scratch](https://the.fibery.io/@public/User_Guide/Guide/How-to-Setup-SoftDev-Structure-From-Scratch-248). ## How to automate existing processes When you're happy with the structure and the processes you've set, it's time to automate them. We created a separate guide where we collected the most popular [Automations](https://the.fibery.io/@public/User_Guide/Guide/Automations-27), and explained how to set them. In [Automations for Software Development](https://the.fibery.io/@public/User_Guide/Guide/Automations-for-Software-Development-124), you will find explanation for the following cases: * Create new Sprints automatically. * Automatically mark Sprints as Done. * Change Bug priority based on the number of complaints. * Change Story priority when the Due Date is coming. * Assign QA when the Bug is ready for testing. * When the feature is ready set all stories and bugs as Done. * Split iterations - move all undone bugs and sprints from one sprint to another. * Document template/default description for Bugs. > [//]: # (callout;icon-type=emoji;icon=:bulb:;color=#8ec351) > If Fibery is missing some actions or if you want to trigger changes in another tool, you can write your own [Scripts in Automations](https://the.fibery.io/@public/User_Guide/Guide/Scripts-in-Automations-54) and run it with the Automation Rule. ## How to connect to external developer tools (Gitlab, Github, Bitbucket) Gitlab, Github, Bitbucket development tools are supported natively. You may find detailed guides here: * [GitLab integration](https://the.fibery.io/@public/User_Guide/Guide/GitLab-integration-72) * [GitLab Actions](https://the.fibery.io/@public/User_Guide/Guide/GitLab-Actions-131) - this part is about two-way integration * [GitHub integration](https://the.fibery.io/@public/User_Guide/Guide/GitHub-integration-71) * [Bitbucket integration](https://the.fibery.io/@public/User_Guide/Guide/Bitbucket-integration-88) What is important to know? When Fibery syncs with tools, and it represent data as a set of connected Databases. Check blog post about [Fibery approach to integration](https://fibery.io/blog/product-updates/fibery-approach-to-integration/ "https://fibery.io/blog/product-updates/fibery-approach-to-integration/") for more details. ![image.png](/api/files/40a590c1-4264-4ce4-940b-4524c9adc9e6#align=%3Aalignment%2Fblock-center&width=744&height=384) That means you can easily connect Integration Databases with Fibery Databases in a way that reflects your processes and have a clear picture of everything that is happening. > [//]: # (callout;icon-type=emoji;icon=:grey_exclamation:;color=#8ec351) > If there are tools you're missing, please fill out this form - [Suggest App Integration or Import.](https://the.fibery.io/@public/forms/ylxUN4kP "https://the.fibery.io/@public/forms/ylxUN4kP") # NOTION INTEGRATION ____________________ 🥲 WARNING: Only Notion database records are synced (so far). Documents sync is not yet supported. All file fields are synced into one files section in Fibery. ## Setup Notion sync 1. Create a Space. 2. Navigate to Space settings and click `Integrate` button. 3. Select `Notion`. 4. Authenticate your Notion account. OAuth is the preferred (easiest) method. but you may for got API token. ### Notion API token Open Notion, click `Connect` and select the pages or databases you would like to be integrated. ![image.png](/api/files/2b355370-22fe-40d9-a9cd-0421cd11113e#align=%3Aalignment%2Fblock-left&width=419&height=484) NOTE: Select the parent pages if your databases are inside pages and are not visible on Notion Access Page. In my case [Demo page](https://fibery-dev.notion.site/Demo-cc147e7b2af04d259ccd98444c67b9b4) has two databases (Features and Tasks) inside. ### Database selection Select the databases you would like to sync in the integration settings. Click `Sync Now` and the integration process will be started. ![image.png](/api/files/70a80a2c-2bbd-4b07-b4d8-8259d30d7744#width=1512&height=762) ## How to migrate from Notion to Fibery? If you want to completely migrate from Notion to Fibery you can set up the integration, sync the data and disable the integration once your data has been fully synchronized. To do this, click on the Notion icon and then choose Disable Integration from the options menu. At this point, the integration databases will be converted to native Fibery databases and can be configured/edited in all the normal ways. 🥲 WARNING: Only Notion database records are synced (so far). Documents sync is not yet supported. All file fields are synced into one files section in Fibery. ## Troubleshooting * `Could not load app setting. Please try again later. Config response [types] item should include non empty string [name]` Most likely the issue is in the pages you try to connect. If they are not connected to any database, and just contained blocks with pages and DB views, we won't be able to sync them. # PIE CHART ___________ Pie chart is one of the four visualisation types for [Reports](https://the.fibery.io/@public/User_Guide/Guide/Reports-346). A pie chart (or a circle chart) is a circular statistical graphic, which is divided into slices to illustrate numerical proportion. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6A849B) > Statisticians generally regard [pie charts as a poor method](https://en.wikipedia.org/wiki/Pie_chart) of displaying information, and they are uncommon in scientific literature. One reason for this is that it is more difficult for comparisons to be made between the size of items in a chart when area is used instead of length and when different items are shown as different shapes. For Charts, the visualisation pane looks like this: ![image.png](/api/files/3fcd5ef5-bdc5-40a3-9f2b-ce4deefee07b#width=1227&height=278) ## Parameters There are three parameters available for a pie chart visualisation: value, color and multiple pies. The `value` parameter must be a number type field (or a calculation that results in a number), and it determines the relative size of each wedge in the pie. The `color` parameter determines how the pie will be split, i.e. what each wedge should represent. It should be a calculation that results in multiple possible options. You can choose whether or not the value or color parameters are shown on the wedges. `Multiple pies` allows you to break the data into separate pies, according to the value of this parameter. ## Data review You can review the data on which the pie chart(s) has (have) been built by clicking on the `Chart data` button, adjacent to the `Filter` button in the top right of the report. You can also see the raw data by hovering over a chart, and from here you can export the source data to CSV. # TRASH _______ You can restore deleted Entities, Views, Fields, Databases, and Spaces from Trash. * You can apply `Filters` to find exactly what you need. * To restore something, you need a place to restore it to. For example, if both a Field and the Database it belonged to were deleted, you need to restore the Database first. Check the [Activity Log](https://the.fibery.io/@public/User_Guide/Guide/Activity-Log-92) to investigate/identify what you need to recover first. > [//]: # (callout;icon-type=icon;icon=frown;color=#fc551f) > Please, note that on `Standard` plan history is limited for 90 days. > > Use `Pro` version for the unlimited history. ## How to access Trash Click on your workspace name in the top left and choose `Trash` from the drop down menu. ![New Frame-4.png](/api/files/2c88703b-f9ad-4ae9-80f2-291e04c1e2a7#width=1696&height=932) ## How to recover deleted Entities 1. Navigate to the bottom left corner and find `Trash` 2. Select deleted Entities. 3. Click `Restore` button ![image.png](/api/files/17549479-d807-41e4-92b9-6b5b586b134f#width=1046&height=621) ## How to recover deleted Documents and Views Both Documents and Views are types of Entities, so just follow the above mentioned steps. ![image.png](/api/files/059035d2-9541-42d4-887e-453db25121ca#width=1046&height=554) ## How to restore a Smart Folder? A Smart Folder is similar to a signpost or a pointer. When you delete a Smart Folder, you are only deleting the path to the Context Views stored within it. Deleting the Smart Folder removes the path in the sidebar to those Views. However, the Views themselves remain accessible with a direct link - they are not deleted. Because a Smart Folder is like a signpost or a pointer, when it is deleted, it does not appear in the Trash the same way Entities, Documents, or Views do. Therefore, it cannot be restored from the Trash. However, if you create a new Smart Folder with the same Database, it will restore the path, and the Views can be found again in the sidebar. ## FAQ #### **I can't see the Entity/Field/View that I have deleted in Trash. What can be the reason?** Most likely it means that you've also deleted a place where this Entity/Field/View belonged to. To restore them, go to [Activity Log](https://the.fibery.io/@public/User_Guide/Guide/Activity-Log-92) #### I can't see the Database **that I have deleted** in Trash. What can be the reason? Most likely it means that you've also deleted the Space that this Database belonged to. Please restore the Space first. #### What happens if I restore an Entity or a Field that is included in a Rule? Restoring an Entity or a Field triggers a related Rule. For example, you have a Rule that runs when an Entity is created. If you delete an Entity and then restore it, the Rule will run. If you have a Rule that Links Entities via Relation Field, if you delete that Field and restore it, the Rule will run. If that's undesirable, please temporarily disable the Rules. #### If I restore a Relation Field, will the linked Entities be restored too? Yes, links to Entities will be restored when a Relation Field is restored. Based on the number of linked Entities, it may take a couple of minutes. # CUSTOM EMOJI ______________ Custom emojis play an essential role in company culture in an all-virtual environment. They foster communication and help create inside jokes and preserve memories. Here is how you can add custom emojis to Fibery :fibery: ## How to prepare a picture or GIF Use JPG, PNG, or GIF. Size is unlimited to a reasonable degree but we scale down to a 64×64 square. Make sure there are no white borders around the image, otherwise, it will make your custom emoji look smaller. ## How to add a custom emoji There are two ways: from the emoji panel or from `Settings` **From the emoji panel** You can access the emoji panel in rich text, View, Entity, and some Fields (Single Select, Multi Select, and Workflow). Check [Emojis](https://the.fibery.io/@public/User_Guide/Guide/Emojis-204) to see a detailed explanation of adding emojis in Fibery. To add a custom emoji, simply click `Add Emoji` in the emoji panel and then select `Upload` and `Name` the emoji. ![add-custom-emoji.gif](/api/files/67de8025-229d-437e-b545-50d4732d13ac#align=%3Aalignment%2Fblock-left&width=486&height=352 "Adding custom emoji through rich text ") Note: In rich text, you can only add custom emoji through `/emoji` as shown in the example above. **From Settings** 1. Go to `Settings` in the sidebar. 2. Choose `Customization` 3. Click `Add Emoji` 4. Upload the picture you want to use for custom emoji. 5. Name the emoji. Regardless of how you uploaded the custom emoji to the library, it will be available across Fibery. ## How to name custom emoji * The default name comes from the file name (non-supported characters are omitted). * A name must be 2+ characters long, so it's possible to insert the emoji into rich text by typing `:xx` * A name must be unique. ## How to rename or delete custom emoji Go to `Settings` in the sidebar, choose `Customization` and click on the name of a custom emoji to change it. ![Change-custom-emoji-name](/api/files/e725ebe3-7c50-469e-a338-805645b5dd6d#align=%3Aalignment%2Fblock-left&width=698&height=319) To delete a custom emoji, click Trashbin icon next to a custom emoji and confirm your action. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#fc551f) > Please note that a custom emoji can only be renamed or deleted by an Admin or the person who added it. ## \ How to import custom emojis from Slack Go to `Settings → Customization` and click `Import from Slack` to add your entire company culture to Fibery. # GET AND SET OPENAI API KEY FOR FIBERY AI __________________________________________ > [//]: # (callout;icon-type=emoji;icon=:x:;color=#d40915) > This guide is deprecated. Fibery AI does not require any Open AI Key now [Fibery AI Assistant](https://fibery.io/ai "https://fibery.io/ai") requires an OpenAI API key to work properly after the free trial. During the trial, we provide 101 free requests per account. > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#4A4A4A) > Please note that for the OpenAI API key to work, you must upgrade to the paid version of OpenAI. ## How to set OpenAI API Key in Fibery AI 1. Navigate to and sign up 2. Navigate to and click `Create new secret key` button ![Screenshot 2023-02-09 at 11.25.12 AM.png](/api/files/10a76bc5-3fd9-4cf0-84f3-0350a78274c1#align=%3Aalignment%2Fblock-center&width=672&height=327) 3. Copy the key 4. Navigate to Fibery → `Settings` and find AI assistant section. 5. Enable AI Assistant. 6. Paste the key to the field and save changes. ![Screenshot 2023-02-09 at 11.27.31 AM.png](/api/files/bf3269a2-3acb-4bf9-a94d-575b7b3c5bf2#align=%3Aalignment%2Fblock-center&width=613&height=114) You're all set! Here is also a short video instruction: [https://www.loom.com/share/2031ca78fc2c46b8b2a1af046b4a9bc0](https://www.loom.com/share/2031ca78fc2c46b8b2a1af046b4a9bc0) # FIBERY API KEYS _________________ Any Admin and Member user can create API keys that allow them to access their Fibery data via the API. To create an API key for Fibery, you can follow these general steps: 1. Go to the `Settings` Page 2. Click on the `API Keys` in the `Personal` section. 3. Click on the `Generate API Key` button to generate a token. Copy this token, as it will only be visible right after creation. > [//]: # (callout;icon-type=icon;icon=lock;color=#d40915) > Once the API key is generated, store it securely and avoid sharing it publicly. You can revoke existing API Keys by clicking on the `Delete` button next to it. Once the API key is deleted, you cannot restore or use it, but you can create a new one anytime. > [//]: # (callout;icon-type=icon;icon=exclamation-triangle;color=#fba32f) > It's allowed to generate only 2 API keys due to rate limits. # BOARD VIEW ____________ On a Board each Entity is represented as a card — just like sticky notes on a wall. The cards are then grouped by rows and/or columns. Board View is useful to visualize work by states, entities by relations, etc. ![Screenshot 2022-06-03 at 4.20.31 PM.png](/api/files/65890875-1162-464d-abd0-a3c9f9b1aaf7#align=%3Aalignment%2Fblock-center&width=1900&height=1378 "Board View with Features by States and by Objectives") ## Add board view to a space 1. Put mouse cursor on a Space and click `+` icon 2. Select Board from the menu ![2022-06-03 17.00.41.gif](/api/files/d557f2a2-d60a-4b12-9117-11b4175ac519#align=%3Aalignment%2Fblock-center&width=1185&height=635 "Add a board view") ## Configure board view 1. Select one or more databases to be visualized as Cards on Board View 2. Select Columns field to group cards by vertical columns. 3. Select Rows field to group cards by horizontal rows > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6a849b) > You can easily group by [Relations](https://the.fibery.io/@public/User_Guide/Guide/Relations-17) as well, since relations are [Fields](https://the.fibery.io/@public/User_Guide/Guide/Fields-15) in Fibery. ![Screenshot 2022-06-03 at 5.07.42 PM.png](/api/files/0aa2aac4-49ef-4589-beec-0d616d2ccab2#width=1890&height=1372) ## Configure cards, rows and columns You may select what [Fields](https://the.fibery.io/@public/User_Guide/Guide/Fields-15) will be visible on Cards, Rows and Columns: 1. Click `Fields` in the top menu 2. Select required fields 3. Click on a Column/Row on the left and select fields for Column/Row ![Screenshot 2022-06-03 at 5.12.24 PM.png](/api/files/fff896a5-660b-4712-98a9-c8512d9c3203#width=1898&height=1196) ## 🌁 Show Images as Covers on Cards You may see images (uploaded into Files section in an entity) as covers on a Board View → Gallery view. Check this guide [Show Images as Covers on Cards](https://the.fibery.io/@public/User_Guide/Guide/Show-Images-as-Covers-on-Cards-184) ## Add new cards There are several ways to add a new card. 1. Click `+ New` button in the top menu and new card will be added in the first column. 2. Put the cursor in a column and `+ New [Entity]` button will appear in the bottom of the column. ## Add new Rows and Columns You may add new Rows and Columns. 1. Click `•••` in top right menu and find `+ New [Entity]` for row or column 2. Scroll to the right and find `+ New [Entity]` to add a new column 3. Scroll to the bottom and find `+ New [Entity]` to add a new row ## Open cards Just click on a card and it will be opened on the right. ## Drag and drop cards You may drag and drop cards from one column/row to another column/row, thus changing card values. ## Change card size You can choose large, medium, or small card sizes. 1. Click `Cards` in the top menu 2. Click the `Size` dropdown and make your selection ## Hide columns and rows You may hide columns and rows completely. 1. Click `•••` near the column name 2. Click `Hide Column` option All hidden fields are added into Filter section. If you need to make them visible again, click Filter and exclude hidden fields. ![Screenshot 2022-06-03 at 5.23.06 PM.png](/api/files/dbb4e8fa-6d45-4cd8-8fdc-cb82478850e9#width=1662&height=636) > [//]: # (callout;icon-type=emoji;icon=:nerd_face:;color=#199ee3) > "Done" column may contain a lot of cards. It's a good candidate to be hidden. Alternatively, you may keep the "Done" column, but filter out all done cards. ## Filter cards, columns and rows You may filter Cards, Columns and Rows to make the Board View more compact. 1. Click `Filter` in the top menu 2. Select required properties and build filter conditions 3. Do the same for Rows and Columns ![Screenshot 2022-06-03 at 5.26.10 PM.png](/api/files/f145151d-b79d-4c58-8683-07fb01fbe521#width=1678&height=738) You can choose whether an entity should be shown only if it matches all filters or if it matches any of the filters. It's not currently possible to use more complex logic in filters (e.g. if A and B or C). > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6a849b) > Each Board has Global Filters and My Filters. Global Filters will be applied for **all** users, while My Filter is visible to you only. You can also quickly find something on Board View, just use Cmd + F shortcut and type some keyword. This quick search works for Name, ID, numbers and other visible basic text fields. ## Sort cards, columns and rows You may sort Cards, Columns and Rows by fields. 1. Click `Sort` on the top menu 2. Add one or more sorting rules 3. Do the same for Columns and Rows if you need ![Screenshot 2022-06-03 at 5.26.37 PM.png](/api/files/80a9d9a3-8d82-4b23-b782-05e0fcec274e#width=1344&height=496) ## Color cards You may color code cards to highlight some important things. For example, mark features with bugs red. 1. Click on `Colors` in the top menu 2. Set one or many color rules. ![Screenshot 2022-06-03 at 5.27.20 PM.png](/api/files/137eba33-a23e-4319-9f49-ef28c3282b9d#width=1354&height=426) ## Duplicate board view You may duplicate current board view into the same Space. 1. Click `•••` on the top right 2. Click `Duplicate Board` option ## Link to your board You can copy an anchor link to this specific view of your board so you can share it elsewhere. There are two ways to do it: 1. Click `•••` on the top right and click Copy Link 2. Click on board `Id` in top left corner and the link will be copied to your clipboard # ACCESS MANAGEMENT: HOW TO COLLABORATE WITH CLIENTS AND FREELANCERS IN FIBERY ______________________________________________________________________________ [https://youtu.be/BeMOfpFZffY](https://youtu.be/BeMOfpFZffY) > [//]: # (callout;icon-type=icon;icon=heart;color=#e72065) > Note, that in these solutions our purpose is: > > 1. Give access each User (Client or Freelancer) to their data only > 2. Make sure they have access to the data they are interested in seamlessly and in a human-friendly way ## 💰 Collaborating with Clients: #### Creating Access Templates * Create [Custom Access Templates](https://the.fibery.io/@public/User_Guide/Guide/Custom-Access-Templates-240) at the highest level of hierarchy (client manager template) * Define access permissions for projects and tasks within the template. * Apply the template to clients to automatically extend access to their data. #### Improving User Experience for Clients * Use [Smart Folders](https://the.fibery.io/@public/User_Guide/Guide/Smart-Folders-26) to create context views for clients. * Slice work by clients and replicate the work breakdown and task support views. * [Create smart folders](https://the.fibery.io/@public/User_Guide/Guide/Smart-Folders-26) with unique filters for each client to enhance usability. #### Sharing with Clients * Share access by typing client’s email, applying the custom template, and sending an invite. * Clients authenticate and access a simplified workspace with only relevant information visible to them. ## 👷‍♀️ Collaborating with Freelancers * Create a smart folder by users and filter out freelancers. * Add projects and clients to the smart section for freelancers to work across clients. * Share specific tasks with freelancers and assign them to ensure clarity. #### User Experience for Freelancers * Freelancers see assigned tasks in a simple board view. * The workspace for freelancers is intuitive and familiar for efficient task management. # ENTITY VIEW _____________ Entity represents a database record. For example, you may have Features database, and every record in this database is an entity. Entity View is how you see this record. Here is Entity View for Feature database record with 2 Columns layout: ![Screenshot 2024-08-26 at 12.43.21 PM.png](/api/files/ec8addf1-e320-40b7-b081-50459cc93a00#width=2856&height=1754) ## Organize Entity View You can do many things to organize entity view: hide fields, move fields around, change layout, etc. Let's dig into it. ### Choose layout Click `Manage Fields and Layouts` icon on top and select between `1 Column` or `2 Columns` layouts. * 1 Column layout has two sections: top and bottom * 2 Columns layout also has two sections: left and right (and you can also pin fields on top here). Here is how the same Feature looks in `1 Column` layout: ![Screenshot 2024-08-27 at 10.25.10 AM.png](/api/files/dc14c8fe-533b-4fa3-a880-0a9e17e4cd5e#width=2850&height=1654) ### Add new fields to a Database Find `+ New Field` button in the top section (for 1 Column layout), or in the right side section (for 2 Columns layout). Select some field type and create a new field. ### Hide fields You can hide fields in different places. One way is to click `Manage Fields and Layouts` icon on top and hide some fields. ![Screenshot 2024-08-26 at 1.59.44 PM.png](/api/files/cfab770b-d291-4d07-87b3-4178d0d72822#align=%3Aalignment%2Fblock-left&width=633.84375&height=481) Another option is to click … on a field and hide it. Note that you can choose between two hide options: * Always hide. * Hide when empty (in this case a field will not be visible if it has empty value). ![Screenshot 2024-08-26 at 1.58.59 PM.png](/api/files/53544819-af3c-48a0-8019-56b00d25073c#align=%3Aalignment%2Fblock-left&width=587.8515625&height=248) ### Move fields There are several ways to move fields around. * Drag and drop fields using the left side handle. * Click … near the field and find: * `Move above` / `Move below` actions for 1 Column layout. * `Move left` / `Move right` actions for 2 Columns layout. ### Pin fields Pinned fields section is only visible in 2 Columns layout and it is visible on top. Click … near some field and select `Pin` action. ![Screenshot 2024-08-26 at 2.10.47 PM.png](/api/files/7d104628-8641-41df-99e9-a01c649c6a44#align=%3Aalignment%2Fblock-left&width=340.5234375&height=194) ### Collapse/Expand fields You can collapse rich text fields and relations. Find an arrow on the left of the fields and collapse it. Overall, you can collapse them in the left (main) area only. ### Choose display view for a field Some fields can be displayed differently. For example, you can display a collection as a Relation View (default) or as a Compact List (just a selector). Click … near a field and select `Display as` action. ![Screenshot 2024-08-26 at 2.15.56 PM.png](/api/files/68f53f8c-7451-4256-8319-87ac25639fc1#align=%3Aalignment%2Fblock-left&width=600&height=231) Here is the list of fields that have different display options: * Rich Text field * Relations / Collection > [//]: # (callout;icon-type=emoji;icon=:bulb:;color=#1fbed3) > For many-to-many collections it may be handy to switch to Compact List in some cases. For example, you have Tag databases linked to Project and see a list of Tags. Full relation view for tags make no sense, and compact list will be nice. ### Relation Views Every to-many relation on an Entity View can be visualized using a set of Relation Views. Check the detailed guide about [Relation Views](https://the.fibery.io/@public/User_Guide/Guide/Relation-Views-309). ### Go-to navigation Find `>>` icon in the top right corner. You can quickly jump to database setup or to any view that contains this database. For example, here you can see all Views we have with Features and can quickly jump to relevant views and go back. ## ### Multiple Entity Views Multiple Entity Views allow you to create and manage multiple layouts for any database entity. Check the detailed guide about [Multiple Entity Views](https://the.fibery.io/@public/User_Guide/Guide/Multiple-Entity-Views-335). ## Actions ### Duplicate You can easily duplicate an entity via Duplicate action. Click … in the top menu and select `Duplicate` action. New entity will be created that looks exactly as the old one. ### Convert You can convert entities from one database to another. For example, you can convert a Feature entity into a Bug entity while preserving the original Feature. Click … in the top menu and select `Convert` action. Check more details [Convert entity from one database to another](https://the.fibery.io/@public/User_Guide/Guide/Convert-entity-from-one-database-to-another-331). ### Merge The `Merge into` action allows you to merge duplicate entities while preserving important information. Click … in the top menu and select `Merge into`. Check more details about [Merge entities](https://the.fibery.io/@public/User_Guide/Guide/Merge-entities-330). ### Export to Markdown You can export entity to markdown file. It will be saved into a markdown archive with all images and videos from all rich text fields. Click … in the top menu and select `Export to markdown` action. ### Custom Actions When you create [Action Button](https://the.fibery.io/@public/Intercom/Tag/Action-Button-2)s for a database, these actions are also available as buttons on entity view. Even if you hide the buttons, all actions are still available via top … menu. ### View activity and Watch/Unwatch You can watch entity and receive notifications about all important events. Click `Expand Activity` icon on the top and then click `Watch` (or `Unwatch`) action. ![Screenshot 2024-08-27 at 10.21.07 AM.png](/api/files/701acb0e-d577-4cba-9eb2-2747c8ac8075#align=%3Aalignment%2Fblock-left&width=409.453125&height=253) Check more details [Watch Entity and Documents and get notifications](https://the.fibery.io/@public/User_Guide/Guide/Watch-Entity-and-Documents-and-get-notifications-210). ### Share Entity You can publish an entity to the web and share with any person. You also can invite people to an entity so they can collaborate and work on it. Check [Share Entity](https://the.fibery.io/@public/User_Guide/Guide/Share-Entity-233) guide for more details. ## Work with comments Comments is a nice way to collaborate inside an entity. Check [Comments and mentions](https://the.fibery.io/@public/User_Guide/Guide/Comments-and-mentions-34) guide. # DATE RANGES IN FORMULAS _________________________ In this article, we'll explain how date ranges are handled in Fibery, and how to make use of them in formulas. ## **What is a date range?** In Fibery, a date range is a date field, where the option to include start and end dates has been chosen. A date-time range is the same but where the option to include time has also been chosen. ![image.png](/api/files/b1820bc6-4775-4784-a839-c67134da453e#align=%3Aalignment%2Fblock-center&width=460&height=377) Ranges appear in the entity view as 'start → end' and on the timeline as bars: ![image.png](/api/files/5014e007-62b5-464d-aa24-915b56cac97a#align=%3Aalignment%2Fblock-center&width=463.28125&height=300) ## But really, what *is* a date range?! Any range (date range or date-time range) is basically an interval of time from the start to the end, so for example, `Aug 20, 2021 → Sep 7, 2021` covers all the days in that range: Aug 20, Aug 21, Aug, 22, … Sep 6, Sep 7. Fibery stores the data internally as two values (start and end) but for a number of technical reasons (feel free to discuss the mathematics of [intervals](https://en.wikipedia.org/wiki/Interval_\(mathematics\)) with our developers 🥱😛) the end value stored is actually greater than what is shown on the UI by +1 🤨 One way to think about this is that the interval of time `Aug 20 → Sep 7` starts at the very beginning of the day on August 20th and ends at the very end of the day on September 7th ... and the end of September 7th is equivalent to the start of the next day, Sep 8th 🤔 Similarly, a date-time range is actually stored internally as two values (start and end) where the end date-time value is stored internally as one second later than what is shown on the UI. ## **Too confusing! What do I need to know?** Most of the time, this technical decision makes no difference to your experience of using Fibery, and you can rest easy 😴 but if you start using date ranges (or date-time ranges) in formulas, things might not behave completely intuitively for you. In the example date range above (`20 Aug → 7 Sep`) if you want to get the start date, as shown on the UI, use the following formula: ``` [Date Range].Start() ``` If you want the end date, as shown on the UI, use this formula: ``` [Date Range].End() ``` However, if you are planning on calculating the duration of a task (in days) then you will probably want to use the following formula: ``` ToDays([Date Range].End(false) - [Date Range].Start()) ``` This corresponds to the total duration of the interval, and you will get an answer of 19 (12 days in August + 7 days in September). This is because `.End(false)` returns the end date *as stored internally* ( = value shown on UI + 1 ) ### **What about date-time ranges?** It's basically all the same for date-time-ranges, so you can use `.Start()` and `.End()` on these fields... ...and/or use `.End(false)` when it suits you to get the end date-time + 1 second 😵 At this point, it's worth mentioning that you may need to consider how [Timezones](https://the.fibery.io/@public/User_Guide/Guide/Timezones-41) work in Fibery if you're using date-time ranges in formulas, but that's a whole other story, and now it's just time for a cup of tea and a lie down ☕🛏😴 Here how final formula may look like: `DateTimeRange(([Due Date].Start() + Days(7)) + Hours(1),(([Due Date].End() + Days(7)) + Hours(1)))` ## FAQ ### Is there a way to apply automation on the date range that will only change the end or the start? Yes. * When: * The: Update the Date range field. It's set with a formula, and the Start date is the same (so we set it in fact but keep the original) and then the End date is updated ![image.png](/api/files/b0638090-07b1-4c0c-9093-4418c5cd3ae9#align=%3Aalignment%2Fblock-center&width=784&height=576) ### How can I determine if a vacation falls within the current month? A vacation is considered to be within the current month if any of the following conditions are met: 1. The vacation **starts** within the current month. 2. The vacation **ends** within the current month. 3. The vacation **spans across multiple months**, including the current month (i.e., it started before and ends after the current month). Thus, formula will look like this ``` VacationDateRange.Start() < Date( If(Month(Today()) = 12, Year(Today()) + 1, Year(Today())), If(Month(Today()) = 12, 1, Month(Today()) + 1), 1) and VacationDateRange.End() >= Date( Year(Today()), Month(Today()), 1) ``` # LIST VIEW ___________ On a List each Entity is represented as a row. Note that you can create a hierarchical list of any depth, like Products → Features → Tasks. List View is handy to visualize hierarchies: work breakdown structures & backlogs. ![Screenshot 2022-06-06 at 12.09.57 PM.png](/api/files/a52ebebd-0ae8-45d1-a10c-3f725ef79cc6#width=1810&height=1378) ## Add list view to a space 1. Put mouse cursor on a Space and click `+` icon 2. Select List from the menu ## Configure list view Select one or more databases to be visualized as rows on List View. You can group by relation, state, single-, or multi-select fields, click `+ Group by` and select a field. ![Screenshot 2024-05-11 at 10.01.28 AM.png](/api/files/175e67d1-7207-406e-be3e-a567193b44a2#width=2366&height=1238) > [//]: # (callout;icon-type=emoji;icon=:nerd_face:;color=#199ee3) > You may mix databases in a list, for example, you may show tasks and bugs as the first level, thus creating a list of tasks and bugs. ## Configure cards, rows and columns You may select what [Fields](https://the.fibery.io/@public/User_Guide/Guide/Fields-15) will be visible on Rows: 1. Click `Fields` in the top menu 2. Select required fields. You can show unique fields for every database, just click on a database on the left and select required fields. ![Screenshot 2022-06-06 at 12.13.34 PM.png](/api/files/35567186-b07f-41d6-9e98-cc7e4c815275#width=1814&height=810) ## Add new rows There are several ways to add a new row. 1. Click `+ New` button in the top menu and new row will be added in the bottom. 2. For hierarchical lists, put the cursor on a row and click `+` button. ![Screenshot 2022-06-06 at 12.15.26 PM.png](/api/files/0f1d3ca1-d601-4445-8c7d-2826a26d83e1#width=1808&height=702) ## Open entities Just click on a row and an entity will be opened on the right. Note that you can explore the entities in a list easily by clicking them. ![2022-06-06 12.17.30.gif](/api/files/cebf9110-b280-4a1c-81c3-0c63fd81df4a#width=1140&height=689) ## Drag and drop rows You may drag and drop rows to prioritize entities. It does not work if you applied any Sorting. ## Filter rows You may filter rows. 1. Click `Filter` in the top menu 2. Select required properties and build filter conditions ![Screenshot 2022-06-06 at 12.20.04 PM.png](/api/files/a6d70d70-9a61-4316-826a-fdeccf05ae6b#width=1660&height=566) You can choose whether an entity should be shown only if it matches all filters or if it matches any of the filters. It's not currently possible to use more complex logic in filters (e.g. if A and B or C). > [//]: # (callout;icon-type=icon;icon=exclamation-circle;color=#6a849b) > Each List has Global Filters and My Filters. Global Filters will be applied for **all** users, while My Filter is visible to you only. You can also quickly find something on List View, just use `Cmd + F` shortcut and type some keyword. This quick search works for Name, ID, numbers and other visible basic text fields. ## Sort rows You may sort rows by fields. 1. Click `Sort` on the top menu 2. Add one or more sorting rules ## Color cards You may color code rows to highlight some important things. For example, mark features with bugs red. 1. Click on `Colors` in the top menu 2. Set one or many color rules. ## Duplicate list view You may duplicate current list view into the same Space. 1. Click `•••` on the top right 2. Click `Duplicate List` option ## Link to your list You can copy an anchor link to this specific view so you can share it elsewhere. There are two ways to do it: 1. Click `•••` on the top right and click Copy Link 2. Click on list `Id` in top left corner and the link will be copied to your clipboard # FIND DUPLICATES _________________ Enable [Semantic Search (AI Search)](https://the.fibery.io/@public/User_Guide/Guide/Semantic-Search-(AI-Search)-203) to make it work. When a database is indexed, Fibery will proactively look for duplicates. When you open an entity view and Fibery finds a duplicate, it will present a badge. Click on a badge to see duplicates. Here you can open an entity and review it, and `Merge` duplicates. If found entity is not a duplicate, click `Ignore` button and Fibery will stop showing this item as a duplicate. ![image.png](/api/files/4e83935f-8e37-4f17-83c8-21834192fc53#width=2384&height=1713) ## # ENTITY API ____________ ## Get Entities ### Overview The general shape of an entity query is: ``` { "q/from": // "fibery/user", "Kanban/Story" "q/select":