Documentation > Developers

Development for Brisa can take place on the backend or frontend. The backend is written in Ruby on Rails with a PostgreSQL database, and the frontend is written in JavaScript with the VueJS framework and poi as a build system.

To make development easier, you can use a pre-built frontend package for the backend, or use IndexedDB (the default) as a setup-free "backend".

Structure

Brisa uses a "dumb backend" structure, with entries at the center, and being extensible via a metadata field to store whatever data is necessary. An entry looks something like this:
{title: 'My Title', description: 'My desc', tags: ['Important'], classes: ['_kanban'],
metadata: { _kanban: { ...kanban data...}, MyCustomData: { ...anything else...} }

The title and description fields are the base information. Tags are used to group entries (for example, labels in the UI are just saved tags. Classes are used to classify cards and define what additional information is in the metadata.

Boards

Boards are just entries with a class added to them (eg _kanban, _whiteboard, _sheet), and an entry may contain multiple boards. Rather than entries "belonging" to a board, a board specifies which tags (and classes) are required for the board, and auto-populates entries based on which ones match those fields.

For example, if you have a card in the web interface titled "My Recipes" and create a sheet to store the recipes in, the UI will add a _sheet class to the card, and generate a tag for it, eg:
{title: 'My Recipes', classes: ['_sheet'], metadata: { _sheet: { tags: ['My Recipes Sheet'] } } }
// This would be done through a library call, like:
entry.edit_class('_sheet', {tags: ['My Recipes Sheet']});

Because entries do not belong to a board, they can exist in multiple places, from a label in the dashboard, to any number of other boards, simply by tagging or classifying them.