Custom Fields

FullFabric uses the Schemable system to let institutions define custom data fields on profiles, applications, forms, and other entities — without code changes. Schemas define the structure, field types, visibility rules, and completion tracking for dynamic data.

Overview

A schema is a container of sections, each containing fields. Fields can be text inputs, dropdowns, file uploads, matrices, and more. The system supports conditional visibility, field-level permissions, localization, and completion tracking.

Schemas

A schema is the top-level container. Institutions define schemas for profiles, applications, evaluations, forms, and other entities. Schemas can be duplicated to create copies with all sections, fields, and option sets.

Sections

Sections group fields into logical units (e.g., "Personal Information", "Education Background"). Each section has a localized label and description, an ordered list of fields, and optional conditional visibility rules.

Sections support the same conditional visibility rules as fields — an entire section can be shown or hidden based on the value of another field.

Field Types

The Schemable system provides 25 field types:

Text & Numbers

Type Description Configuration
SingleLineText Short text input char_length for max characters
ParagraphText Multi-line text area word_limit for max words
Number Numeric input allow_decimal for float values
Instructions Non-interactive display text Read-only content shown to users

Dates

Type Description Configuration
Date Date picker date_range_validation, date_min, date_max
DateTime Date and time picker Same as Date
MonthYear Month and year only Stored as hash

Selection

Type Description Configuration
DropDown Single or multi-select from options Uses option set or inline options
CheckBox Multiple checkbox selection Uses option set or inline options
CascadingDropDown Parent-child linked dropdowns Hierarchical option structure
Country Country selector Auto-linked to Countries option set

Contact & Identity

Type Description Configuration
Email Email with validation Standard email validation
SmartEmail Email with bounce/verification tracking Bounce, spam, and verification status
Address Multi-part address form Subfields: line_1, line_2, line_3, city, state, post_code, country

Files & Media

Type Description Configuration
File File upload (single or multi) accepted_file_extensions, multiple_files
Video Video embed or link URL-based

Structured Data

Type Description Configuration
Matrix Table grid with rows and columns matrix_options with rows, columns, and weights
ExtendableMatrix Matrix with dynamic row addition Same as Matrix, plus user-added rows
Rows Simple rows container Array storage

References

Type Description Configuration
Organisation Link to an Organization record Organization lookup
Programme Programme/course reference Programme selection
Referee Reference contact Contact details
SequentialId Auto-generated ID prefix for ID format (e.g., "APP-001")

Option Sets

Option sets are reusable lists of values shared across fields and schemas. Each option set contains ordered values with localized translations and integration mappings.

Value Properties

Each option value has:

  • Order — Position in the list
  • Translations — Localized display names (e.g., "British" in English, "Britisch" in German)
  • Integration mappings — External system values (e.g., HubSpot value, Salesforce value)

System Option Sets

Some option sets are built-in — like Countries — and are automatically linked to their corresponding field types.

Propagation

When an option set is updated, changes are automatically propagated to all fields using it.

Conditional Visibility Rules

Fields and sections can have rules that control their visibility and required status based on the values of other fields. This enables dynamic forms that adapt to user input.

Rule Types

Rule Description Example
Is Value equals Show "US State" if Country is "US"
IsNot Value does not equal Show "Other" field if Country is not in list
Contains Value contains substring Show field if notes contain "scholarship"
DoesNotContain Value does not contain Hide if description doesn't contain keyword
IsEmpty Value is blank Show prompt if field is empty
IsNotEmpty Value has content Show dependent field only when parent is filled
IsGreaterThan Numeric comparison Show section if score > 50
IsLessThan Numeric comparison Show warning if GPA < 2.0
IsGreaterThanOrEqualTo Numeric >= Require field if age >= 18
IsLessThanOrEqualTo Numeric <= Hide if years <= 0
Always Always satisfied Default visibility
Never Never satisfied Permanently hidden

Rule Applications

Rules are applied in three contexts:

Context Property Effect
Visibility is_visible_rules Controls whether the field is shown
Required is_required_rules Controls whether the field must be filled
Availability is_available_rules Controls whether the field is available for certain roles

Rules support nested field access — a rule can reference a field on a related object (e.g., organization.country).

Dependent Fields

When a field has visibility rules that reference another field, it becomes a dependent field. The system tracks these dependencies so that when a controlling field's value changes, dependent fields can be re-evaluated and cleared if they become invisible.

Completion Tracking

Schemas calculate completion percentage for a document — how many of the visible fields have been filled in.

Option Description
require: :all All visible fields must be complete (default)
require: :required Only required fields count toward completion
ignore: [types] Skip specific field types (e.g., File uploads)

The completion calculation:

  1. Collects all fields that are visible? for the document
  2. Filters by required-only if specified
  3. Excludes ignored field types
  4. Validates each field using type-specific validators
  5. Returns completed_count / total_count * 100

Field Configuration

Permission Controls

Every field has role-based visibility and editability. You can control which roles can see and which roles can edit each field. Values can be "anyone", a role state (e.g., "admin"), or a specific role (e.g., "staff::admissions"). See Schema Permissions for details.

Display Controls

Fields also support these display options:

Setting Description
Visible by default Whether the field is shown
Unique Whether the value must be unique across all profiles
Role-specific Show only for profiles with specific roles
Campus-specific Limit display to specific campuses
Bulk update Whether the field can be updated in bulk operations

Localization

Both sections and option set values support multiple locales. Each section has a locals collection with label and description per locale (e.g., "en-GB", "de-DE", "pt-BR"). The first locale is treated as the default.