Getting Started
Overview
BBase.pro lets you store, view, edit, and report on your business data through
a set of custom tables, pages, and reports — all accessible from the sidebar
navigation. No spreadsheets, no code, no developer required.
Every app you build in BBase.pro is isolated and purpose-built for your
organisation. You control what data is stored, how it is displayed, who can
access it, and what automated actions occur when records change.
What you can do in BBase.pro
- Browse and search data in configurable report tables
- Open individual records on custom pages to view or edit full detail
- Create new records using the Add Record button on any table
- Export any report to a CSV file for use in Excel or Google Sheets
- Generate formatted Word (.docx) or PDF documents from any record
- Run automated actions when records are created or updated
- Control exactly what each team member can see and edit via permissions
Note on formula fields: Any field labelled with a formula icon is
calculated automatically — you cannot type into it directly. Its value updates
whenever the record is saved.
Navigating the App
Sidebar
The sidebar on the left is the main way to move between areas of the app.
Click the hamburger icon (☰) in the top-left corner to
collapse or expand it.
- Home — the main landing page for this app.
- Tables — lists all available tables. Click Settings, Add Record, or open a report from here.
- Pages — custom pages for entering or viewing a single record (admin only).
- Automations — automated actions that run when records change (admin only).
- Users — manage user accounts and permissions (admin only).
Header buttons
The top-right corner of every page has a How To button that
opens this user guide, and a Logout button to end your session.
Working with Data
Viewing Records
Records are displayed in report tables. From the Tables
sidebar item, click Table or Summary next to
any report to open it.
Report Table view
The table view shows all records in rows. Each column header can be clicked
to sort. A search box under each column header lets you filter that column in
real time. Scroll right to see additional columns.
Opening a single record
Click any row in the table to open that record's detail page where you can
view and edit all its fields.
Tip: The column header row stays pinned at the top as you
scroll down through a long report.
Summary view
The summary view groups records by one or more fields and shows totals or
counts. Use the Summary button in any report toolbar to
switch to this view.
Creating Records
New records are created from the Tables page. If a table has a default page
assigned, an Add Record button will appear next to it.
- Open the Tables page from the sidebar.
- Find the table you want to add a record to.
- Click the Add Record button.
- Fill in the fields on the page that opens.
- Save the record using the save button on the page.
Note: Formula fields calculate automatically once the record
is saved — you do not need to fill them in.
Editing Records
Most records can be edited directly by clicking on them in a report table,
or by navigating to the record's page.
Inline editing in report tables
If a report is set to editable, you can click directly into a cell to change
its value. The change is saved automatically when you move to another field.
Editing on a record page
- Open the record by clicking a row in the report table.
- Modify any editable fields on the page.
- Click Save to store your changes.
Note: Fields shown in grey or without an input box are
read-only — either formula fields that calculate automatically, or fields
your account does not have permission to edit.
Searching & Filtering
Every column in a report table has a search box directly below the column
header. Type in any search box to filter the table to rows that match.
How filtering works
- Searching is not case-sensitive.
- You can filter multiple columns at once — all active filters apply together.
- Clear a search box to remove that filter.
- The table updates in real time as you type.
Tip: To find all records where a field is blank, type nothing
and press Enter — or ask your admin to set a report filter.
Pre-set report filters
Admins can pre-configure reports to only show certain records — for example,
only open items, or only records assigned to you. These filters are set in
Report Settings and are always active for that report.
Where filters can be used
| Location | Field name | What it does |
| Report Settings |
Filter |
Permanently restricts which records the report shows. Applied before any column search the user types. |
| Automation — Record Updated trigger |
Formula |
The automation only fires when this condition is true for the record that was just updated. Leave blank to fire on every update. |
| Automation — Search Records step |
Filter |
Limits which records are returned by the search. Only records matching the filter are passed to the next step. |
| Automation — Search Records and Loop step |
Filter |
Limits which records are included in the loop. The automation runs once for each matching record. |
Filter string syntax
A filter string is made up of one or more conditions joined by and
/ or. Each condition has the form:
left_value operator right_value
Spaces between tokens are ignored. Use parentheses to control grouping when
mixing and and or.
Referencing fields
Wrap a field name in square brackets to reference a column from the report's
table:
[field_name]
To reference a field from a related table, use table.field
notation inside the brackets:
[table_name.field_name]
Value types
| Type | Syntax | Example |
| Field reference | [field_name] | [status] |
| Text string | "text" (double quotes) | "Open" |
| Number | Integer, optionally negative | 42, -5 |
| Boolean | True or False | True |
| Empty / null | None | None |
| Relative date | Today() / Now() | Today(-7,Days) |
Operators
| Operator | Meaning | Notes |
= | Equals | When the right side is None or "", checks that the field is empty/null |
!= | Not equals | When the right side is None or "", checks that the field is not empty/null |
> | Greater than | Works on numbers and dates |
< | Less than | Works on numbers and dates |
>= | Greater than or equal | |
<= | Less than or equal | |
in | Contains | Checks whether the field contains the given text (substring match) |
Combining conditions
| Keyword | Meaning |
and | Both conditions must be true |
or | Either condition must be true |
( ) | Group conditions to control evaluation order |
Relative date functions
Use Today() and Now() as dynamic date values. These
evaluate at the time the report loads, so the filter always reflects the current
date.
| Function | Returns |
Today() | Today's date (no time component) |
Today(offset, Unit) | Today's date shifted by the given offset — positive moves forward, negative moves back |
Now() | The current date and time |
Now(offset, Unit) | The current datetime shifted by the given offset |
Supported units: Day, Days, Week,
Weeks, Hour, Hours, Minute,
Minutes, Second, Seconds.
Examples
| Filter string | What it shows |
[status]="Open" | Records where status is exactly "Open" |
[status]!="" | Records where status is not empty |
[priority]>=2 | Records where priority is 2 or higher |
[name] in "smith" | Records where name contains "smith" |
[status]="Open" and [priority]>=2 | Open records with priority 2 or higher |
[status]="Open" or [status]="In Progress" | Records that are open or in progress |
([status]="Open" or [status]="In Progress") and [priority]>=2 | Open or in-progress records with priority 2 or higher |
[due_date]<Today() | Overdue records (due date before today) |
[due_date]>Today(-7,Days) | Records with a due date within the last 7 days |
[due_date]<Today(14,Days) | Records due within the next 14 days |
[created_at]>Now(-1,Hour) | Records created in the last hour |
Reports
Using Reports
Reports are pre-configured views of a table. Each report shows a specific set
of columns, sorted and filtered as configured by an admin.
Report toolbar buttons
| Button |
What it does |
| Settings | Opens the report configuration (admin only). |
| Table | Switches to the row-by-row table view. |
| Summary | Switches to the grouped summary view with totals. |
| Create CSV | Generates a CSV export of the current report data. |
| Download CSV | Downloads the most recently generated CSV file. |
Tip: Always click Create CSV first to
refresh the export file, then Download CSV to get the
latest data.
Exporting to CSV
Any report can be exported as a CSV (comma-separated values) file, which can
be opened in Excel, Google Sheets, or any spreadsheet application.
- Open the report you want to export.
- Click Create CSV to generate an up-to-date export file.
- Once it finishes, click Download CSV to save the file to your computer.
- Open the downloaded file in Excel or your preferred application.
Note: The CSV includes all rows matching the report's current
filters — not just what is visible on screen if you have searched within the table.
Formula Fields
About Formula Fields
Formula fields are fields whose values are calculated automatically based on
other fields in the same record. You cannot type into them — the system fills
them in when a record is saved.
Example: A TotalPrice formula field might
calculate [Quantity] * [UnitPrice] automatically whenever either
of those fields changes.
Referencing field names
To reference another field in the same record, wrap its name in square brackets:
[Quantity] * [UnitPrice]
If [Quantity] = 3 and [UnitPrice] = 25, the formula
returns 75.
Important: Field names must always be surrounded by square
brackets — [FieldName]. Without brackets the system will not
recognise the reference as a field.
Blank values
If a referenced field is blank, arithmetic operators skip it gracefully rather
than producing an error. Division by zero also returns blank instead of crashing.
Formula Operators
Operators perform arithmetic calculations or comparisons between values:
| Operator |
Description |
Example |
Result |
| + | Add numbers | [field1] + [field2] | 5 + 10 = 15 |
| - | Subtract numbers | [field1] - [field2] | 10 - 5 = 5 |
| * | Multiply numbers | [field1] * [field2] | 5 * 2 = 10 |
| / | Divide numbers | [field1] / [field2] | 10 / 2 = 5 |
| >= | Greater than or equal | [field1] >= [field2] | True if 10 ≥ 5 |
| <= | Less than or equal | [field1] <= [field2] | True if 5 ≤ 10 |
| > | Greater than | [field1] > [field2] | True if 10 > 5 |
| < | Less than | [field1] < [field2] | True if 5 < 10 |
| = | Equal to | [field1] = [field2] | True if same value |
| & | Join text strings | "Hello" & " " & "World" | Hello World |
Note: Arithmetic operators skip blank or empty values
automatically. Division by zero returns blank rather than an error.
Formula Functions
Functions transform or evaluate values in a formula:
| Function |
Description |
Example |
Result |
| IF(condition, true, false) | Returns one value if condition is true, another if false | IF([field1] > 10, "High", "Low") | "High" |
| CONCAT(a, b, ...) | Joins multiple values into one string | CONCAT("A", "B", "C") | "ABC" |
| ROUND(x, decimals) | Rounds a number to the specified decimal places | ROUND(3.14159, 2) | 3.14 |
| INT(x) | Converts a value to a whole number (integer) | INT("5") | 5 |
| STR(x) | Converts a number or value to text | STR(5) | "5" |
| LEFT(text, n) | Returns the first n characters of text | LEFT("Apple", 2) | "Ap" |
| RIGHT(text, n) | Returns the last n characters of text | RIGHT("Apple", 3) | "ple" |
| CONTAINS(text, search) | Returns True if the search value is found in text | CONTAINS("Hello", "ell") | True |
| DATEFORMAT(date, format) | Formats a date field using a format string | DATEFORMAT([field1], "%b %Y") | "Oct 2025" |
| JOIN(list, separator) | Joins a list of values with a separator string | JOIN(["A","B"], "-") | "A-B" |
Chained IF — testing multiple conditions: List additional
condition/value pairs inside the same IF() call:
IF([field1] > 10, "High", [field1] > 5, "Medium", "Low")
Returns "High" if
[field1] > 10, "Medium" if
> 5, otherwise "Low".
Date Format Codes
Use these codes inside a DATEFORMAT() call to control how dates
are displayed:
| Code |
Meaning |
Example output |
| %Y | 4-digit year | 2025 |
| %y | 2-digit year | 25 |
| %m | Month as a 2-digit number | 10 |
| %B | Full month name | October |
| %b | Abbreviated month name | Oct |
| %d | Day of the month (2 digits) | 05 |
| %A | Full weekday name | Monday |
| %a | Abbreviated weekday name | Mon |
| %H | Hour (24-hour clock) | 14 |
| %I | Hour (12-hour clock) | 02 |
| %M | Minutes | 30 |
| %p | AM or PM | PM |
Example: DATEFORMAT([InvoiceDate], "%B %d, %Y")
→ October 05, 2025
Example Formulas
| Goal |
Formula |
Result |
| Multiply two fields | [Quantity] * [UnitPrice] | 3 * 25 = 75 |
| Add two fields | [field1] + [field2] | 5 + 10 = 15 |
| Combine first and last name | [FirstName] & " " & [LastName] | "John Doe" |
| Format a date | DATEFORMAT([InvoiceDate], "%b %d, %Y") | "Oct 05, 2025" |
| Conditional label | IF([Amount] > 100, "Large", "Small") | "Large" |
| Three-way conditional | IF([Score] >= 90, "A", [Score] >= 70, "B", "C") | "B" |
| Round to 2 decimal places | ROUND([TotalPrice], 2) | 19.99 |
| Check if a field contains text | CONTAINS([Notes], "urgent") | True |
| First 3 characters of a field | LEFT([ProductCode], 3) | "SKU" |
| Convert a number to text | STR([RecordID]) | "42" |
Other Features
Document Templates
Document templates let you generate a formatted Word (.docx) or PDF document
directly from a record's data. An admin sets up the template; users then
generate documents from individual records with a single click.
Generating a document
- Open the record you want to generate a document for.
- Find the document link or button on the record page (set up by your admin).
- Click it to generate and download the document immediately.
Output formats
| Format | Use when… |
| .docx | You need to edit the document further in Microsoft Word. |
| .pdf | You need a fixed, print-ready document to send or archive. |
For admins: Templates are uploaded in Table Settings →
Document Templates. Use Jinja2 variable syntax — e.g.
{{ FieldName }} — to insert field values,
and Jinja2 conditionals for dynamic content.
User Permissions
Permissions control what each user can see and do in the app. Permissions
are set by an admin and stored on each user account.
Permission levels
| Permission |
What it unlocks |
| admin | Full access: create and modify tables, fields, reports, pages, automations, and manage all users. |
| (custom) | Admins may define custom permission keys on specific tables and reports to restrict which users can view or edit them. |
What happens without access
- Admin-only sidebar items (Pages, Automations, Users) will not appear.
- Tables and reports without permission will not be visible.
- Fields that cannot be edited appear as read-only.
Need access to something? Contact your administrator to have
the appropriate permission added to your account.
Editing Page Layouts
Admins can customise which fields appear on a record page, how they are
arranged into columns and sections, and how wide each field is displayed.
All layout changes are saved immediately.
Entering edit mode
- Open any record page.
- Click the Edit Page button in the top-right corner of the page panel.
- A yellow toolbar appears and each field gains a grey drag handle at the top. Click Done Editing to leave edit mode.
Adding a field
- In the yellow toolbar, open the Add field dropdown and select the field you want to add.
- Click Add Field. The field appears at the top of the first column immediately.
- Only fields not already on the page are shown in the dropdown.
Removing a field
Click the × button on the right side of a field's grey
drag handle. The field is removed from the page immediately. This does
not delete the field or its data — it only removes it from
this page layout.
Reordering and moving fields
Grab a field's grey drag handle and drag it to one of these drop targets:
| Drop target | Result |
| Another field | Inserts the dragged field directly above the target field. |
| Empty space in a column | Moves the dragged field to the bottom of that column. |
| + New column zone (dashed box at the right of a section) | Creates a new column in that section and places the field in it. |
| Drop here to create a new section zone (below all sections) | Creates a new section at the bottom of the page and places the field there. |
Tip: If you move the last field out of a column, the empty
column is removed automatically. The same applies to empty sections.
Controlling field width
Each drag handle includes a small width input. Enter any CSS width value to
constrain how wide the field appears:
| Value | Effect |
| 200px | Fixed pixel width — the field is exactly 200 pixels wide. |
| 50% | Percentage of the column width. |
| (blank) | No constraint — the field fills its column naturally. |
Tip: Fields are left-aligned within their column, so setting
a narrower width leaves whitespace to the right rather than centring the field.
Interfaces
About Interfaces
Interfaces are purpose-built panels that go beyond the standard record table.
Where a regular table lets you view, create, and edit general-purpose records,
an interface provides a specialised layout and set of actions tailored to a
specific workflow — such as generating machine output files, processing designs,
or managing a production queue.
How interfaces differ from standard tables
- Custom layout — the screen is divided into a sidebar list and a detail panel rather than a standard row-and-column table.
- Workflow actions — interfaces expose buttons and controls specific to the task, such as generating files or triggering a background process.
- Live status — the interface can display real-time progress for long-running operations without needing a page refresh.
- Linked data — each interface is connected to an existing table in your app and reads or writes fields in that table directly.
Accessing an interface
Interfaces appear in the sidebar navigation alongside your regular tables and
reports. Click an interface item to open it. The interface loads its list of
records from the linked table automatically.
Note: Interfaces are configured by an admin who maps each
control in the interface to a specific field in the underlying table. If a
section or control is missing, ask your admin to check the interface
configuration.
GCode Interface
The GCode interface manages CNC carving designs. It reads a PNG image stored
against a record, converts it into a GCode machine-instruction file, and
reports back an estimated cutting time along with a visual preview of the
cutting path.
Interface layout
- Left sidebar — lists all designs. Each entry shows a thumbnail of the source image and the design name. Click any entry to open it in the detail panel.
- Detail panel — shows the settings for the selected design, the generate button, status indicator, time estimate, and path preview.
Generating GCode
- Click a design in the left sidebar to select it.
- Review or adjust the settings in the detail panel (dimensions, bit, cut program, speed, and so on).
- Click Generate GCode. The button changes to show that generation is in progress.
- Wait for the status indicator to clear. Generation runs in the background — you can leave the page open and it will update automatically.
- Once complete, the estimated cut time and a path preview appear in the panel.
Note: Generation time depends on image size and the number of
cutting passes configured. A complex design can take several minutes to process.
Design settings
The following settings control how the GCode is produced. All values are saved
back to the underlying record when you generate.
| Setting | What it controls |
| Name | The display name of this design, shown in the sidebar list. |
| Width / Height / Depth | Physical dimensions of the carve area in the units your machine uses. Depth is the maximum carving depth. |
| Bit | The cutting bit configuration used for this design. Determines point size, speed range, and depth limits. |
| Cut Program | The raster pattern direction: left_right_raster moves the bit across the work horizontally; up_down_raster moves it vertically. |
| Back | When set to y, the GCode is generated for the reverse (back) side of the piece. |
| Point Size | The size of each pixel in machine units. Smaller values produce finer detail but longer run times. |
| Max Speed at Min Depth | The fastest the machine moves when cutting at its shallowest depth. |
| Min Speed at Max Depth | The slowest the machine moves when cutting at its deepest point. |
| Overlap Percent | How much adjacent passes overlap, expressed as a percentage. Higher values can smooth ridges between passes. |
| Skip Zero Depth | When set to yes, pixels with a depth value of zero are not cut — the bit lifts and moves over them. |
| Bit Width Z Compensation | A depth correction applied to compensate for the physical width of the cutting bit at a given depth. |
| Edge Run Depth | If set, an additional pass is made around the perimeter of the design at this depth. |
| Edge Run Speed | The machine speed used during the edge run pass. |
| Vector Edge Depth | Depth for a first vector edge clean-up pass that traces the design outline. |
| Vector Edge Depth 1 | Depth for a second vector edge pass at a different depth, used to create a two-level outline effect. |
| Smooth Vector Edge | When enabled, the vector edge path is smoothed before cutting to reduce jagged corners. |
| Design Smoothing | A blur or smoothing filter applied to the depth image before generating passes, softening sharp transitions between depths. |
| Design Smooth Passes | The number of times the smoothing filter is applied. More passes produce a softer result. |
| Safe Move Type | Controls how the machine lifts and travels between cut segments to avoid dragging the bit across the surface. |
| Notes | Free-text notes about this design, stored with the record but not used in generation. |
Cut time estimate
After a successful generation, the interface displays the estimated cut time
broken down into hours, minutes, and seconds. This is calculated by summing
the distances of all cutting moves in the GCode file and dividing by their
respective feed rates.
Tip: Use the time estimate to compare the effect of different
settings. Reducing the overlap percent or increasing the minimum speed will
lower the estimated time; increasing design smoothing passes or adding vector
edge passes will raise it.
Path preview
The path preview renders a top-down view of all the cutting moves in the
generated GCode file. Moves are colour-coded by depth: shallower cuts appear
lighter and deeper cuts appear darker. Use the preview to verify that the
cutting pattern covers the design area as expected before loading the file onto
the machine.
Todo Interface
The Todo interface is a task-management panel that presents records from a
linked table as a checklist. Each item can carry a title, status, priority,
due date, notes, tags, and optional sub-tasks. All changes are saved
automatically — no Save button is needed.
Interface layout
- Sort bar — buttons at the top let you re-order the list by Default order, Priority, Due Date, or Title. The active sort is highlighted.
- Tag filter bar — if any items have tags, a filter bar appears. Click a tag to show only items carrying that tag; click Clear to remove the filter.
- Item list — each task is a row showing a completion circle, status selector, title, priority badge, due-date badge, and tags. Click a row to expand its detail panel.
- Quick-add bar — a sticky input at the bottom of the list lets you type a title and press Enter or click Add to create a new item instantly.
Completing an item
- Click the circle button on the left of any item.
- The circle turns green and the item title gains a strikethrough to indicate it is done.
- Click the green circle again to mark the item as incomplete.
Note: Completing an item records today's date in the
completed-date field. If a Complete Status Value is
configured, the status selector is also updated automatically.
Editing an item
Click anywhere on an item row (except the completion circle, status selector,
or title text) to expand its detail panel. The panel exposes the following
editable fields:
| Field | How to edit |
| Title | Click the title text to edit it inline. Press Enter or click away to save. |
| Status | Use the status dropdown on the item row to change the status. The change saves immediately. |
| Tags | Toggle the tag checkboxes in the expanded panel. The item's tag badges update instantly. |
| Due Date | Pick a date in the Due Date field. The due-date badge on the item row updates automatically and is colour-coded: overdue in red, today in amber, within 3 days in blue, further ahead in grey. |
| Notes | Click the notes area and type freely. Changes save when you click away. |
Sub-tasks
If the interface is configured to support sub-tasks, an expanded item panel
includes a Sub-tasks section. Click Add Sub-task
to append a new child item. Sub-tasks have their own completion circle and title,
and can be reordered by dragging their handle.
Reordering items
When a drag-order field is configured, each item shows a ≡
drag handle on the left. Grab the handle and drag the item above or below
another item to change its position. The new order is saved automatically.
Touch drag is also supported on mobile devices.
Deleting an item
Click the trash icon on the right of any item row. You will be asked to
confirm before the item is permanently deleted.
Configuration (admin)
A Todo interface is backed by a table in your app. An admin maps each
feature to a field in that table via the interface configuration settings:
| Setting | What it controls |
| Title Field | The field used as the item's display title. Editable inline on the item row. |
| Status Field | A dropdown field whose values become the status selector options. |
| Priority Field | A field whose value is shown as a coloured priority badge (High / Medium / Low or 1 / 2 / 3). |
| Due Date Field | A date field used to show the colour-coded due-date badge. |
| Completed Date Field | A date field that stores the date an item was completed. Drives the completion circle. |
| Complete Status Value | When an item is marked complete, the status field is automatically set to this value. |
| Notes Field | A text field shown in the expanded detail panel for free-form notes. |
| Tags Field | A comma-separated field whose values become the tag filter bar and tag badges. |
| Order Field | A numeric field used to persist drag-and-drop order. When set, items show a drag handle. |
| Parent Field | An integer field that links a sub-task back to its parent item by record ID. |
Quick setup: When creating a new Todo interface, use the
Create with New Table option. This creates a pre-configured
table with all the recommended fields and wires them to the interface
automatically — no manual field mapping required.