Skip to content
MintGuides

Build

Pages: tables, forms & detail pages

Fine-tune how each model looks and works — its table, filters, form and detail page — with drafts you publish.

Open Pages
On this page

What it is

Build → Pages: every model’s page, and how it looks and behaves.

Creating a model gives it a page. Pages lets you refine that page without touching the model: which columns the table shows, the filter buttons, the form’s layout and rules, the record’s own page and its tabs, the ⋯ menu on each row, actions on ticked rows. Click a page in the list to open its editor.

The editor’s tabs each have a colour, used on the tab, its card on the Overview and the banner at its top:

TabWhat it changes
Table page (teal)The list of records: title, buttons, columns, the ⋯ row menu, actions on ticked rows.
Form (orange)The add and edit form: sections, fields side by side, fields that show only when needed.
Record page (pink)A record’s own page: sections, linked records, tabs of related lists.
Filters (purple)The filter buttons above the table.
Linked Relationships (green)What saving a record does to the records it picks — a payment marking its invoice paid.
Fields & rules (blue)Required, editable, sortable, searchable — and the input each field uses.
Versions (cyan)Every published version, to bring an older one back.
A model’s fields are changed in Models. Pages changes how those fields are shown and used.

Drafts and publishing

Nothing changes for your team until you publish.

  1. Edit in any tab. While something is unsaved a bar stays at the bottom of the page with Undo all, Preview, Save draft and Publish.
  2. Save draft keeps them on the server — they survive a reload and a teammate can carry on. Saving is refused while a tab shows an error (a menu item without a title, a filter without a field…).
  3. Publish, with an optional note, makes the draft live. Each publish is a new version you can go back to.
  4. Discard draft throws the draft away; the live page is untouched.

The Overview tab sums the page up — its columns, form, record page, filters and fields, and whether a draft is waiting — with each card opening its tab (Change it) or its preview. The header shows whether the page is Live or has a Draft not published yet.

Preview

See the page before anyone else does.

Preview — in the header, the bottom bar, each tab’s banner and the Overview cards — opens a window with three pictures: the Table page, the Form and a Record page. They’re drawn from your changes as they are, saved or not, and filled in with your five latest records (placeholders when there are none). Nothing in the preview can be clicked; Back to editing closes it.

Fields & rules

How each field is stored, checked and typed in.

Each row is one field: its picture and name (with the API name in small grey letters), Asked as — the input people fill in (text, long text, a date, a dropdown, tags, an image, a record picker…) — and its rules. Required and Can be changed later are switches right in the row; any other rule that’s on shows as a coloured chip. Find a field narrows a long list.

RuleOnce published
RequiredMust be filled in when a record is added.
Can be changed laterPeople can edit it after the record is created.
No duplicatesA second record with the same value is refused.
SearchableThe table’s search box finds records by it.
SortableThe table can be sorted by it.
Trim spacesSpaces before and after the value are removed.
Hidden everywhereNever shown or sent anywhere — not even to you.

Click a field to open its settings — the open field is raised and edged in blue so it’s easy to tell apart, and Done or Esc puts it away. They come in groups: Rules (each with what it does), How it looks (its label, how the table shows it, whether its column shows from the start), Limits or Length for numbers and text, Picking a linked record for record pickers, and — folded away — Advanced: how it’s stored, which details of a linked record are loaded, and the raw settings. Fields marked automatic, like createdAt, are filled in by the system and can’t be changed.

The ⋯ at the end of a field moves it up or down, puts it back as it started (once you’ve changed it), copies its API name, or removes it from the page. A field from linked records can also be duplicated there. You can still drag a field by ⋮⋮.

Locked when makes a field changeable only until the record reaches a state. A bill’s status can move between draft and due, but once it is void or paid it stays: add the condition status · is one of · void, paid. Conditions are a field, a test and a value, and all of them must hold. They’re checked against the record as it’s saved, so the change that marks a bill paid goes through and every change after it is refused — in the edit form (the field shows muted, with the reason; a section list loses its add, edit and delete buttons), in bulk edits, and through the public API. Other fields can be locked the same way: lock amount when status is paid.

Two or more conditions show a Match switch: All of these (each must hold) or Any of these (one is enough) — “status is void” or “status is paid”. For a choice field, is one of lets you tick several values in one condition. The same switch is on tab conditions and on fields from linked records.

Autofill, under a field’s Advanced settings, fills it in when a record is picked on the same form — a payment’s amount from the bill it pays, an order’s phone from its customer. Turn on Fill this from a linked record, choose the picker (Bill), then Its Total, or A formula over its fields… such as total - paid (the bill’s number fields, with + − × ÷, round, min and max). The field keeps its own kind. Only when limits it to a case (Delivery is Home, or the customer’s Type is Wholesale), and Read-only makes it the server’s: nobody types it, it follows the picked record, and while the conditions don’t hold it is cleared and stays locked. Left editable, the value can be typed over; opening a saved record never changes it, and picking another record fills it again. Autofill has the details.

Colours, under How it looks for a field with choices — a status, active / inactive, a yes / no — turns on Show as coloured tags: the table and the record page show the value as a coloured tag. Each option starts with a colour from what it means (paid and active green, void and cancelled red, due and pending orange, draft gray); click another swatch to change it, Default to go back.

Linked record in the table, under How it looks for a field that picks a record (a bill’s Client), shows it in the table as a chip, as the record page does: hovering shows a card of the client, with View to open its page and Quick view to open it in the side drawer without leaving the table. Quick view only shows for people whose role can view that model. Off, the column shows the client’s name as plain text.

Add a field from linked records makes a field worked out from the records linking to this one — a client’s Due payment: from bills whose client is this record, Add up a field of amount, only where status is due. It can also count them, or take their average, smallest or largest value. Give it a name, then add it to the table, the record page or the form in the page builder like any other field. It’s worked out whenever records are read, so it’s always current; it can’t be typed, sorted or searched, and it only counts linked records the person looking may see.

Linked-record pickers

For a field that picks records of another model.

Name shown in the picker is the field each record is listed by, and what the input shows once one is picked. It’s Name unless you pick another — an invoice’s number, a person’s email.

Shown under the name in the list adds up to four of the linked record’s fields in small type under each name in the picker — an invoice’s total and due date — so two alike can be told apart before picking. Only the values show, not the field names. With two or more, Show them puts them side by side on one line, separated by dots (1,200 · 12 Oct 2026), or each on its own line.

Add new from the form puts a + beside the picker: adding a booking for a guest who isn’t in the list yet, press +, fill in the guest, and they’re picked.

Which records are offered narrows the list with conditions — is, is not, is one of — against a fixed value or another field of the same form. On an invoice: offer only the projects whose client is this form’s client; pick another client and a project that no longer fits is cleared.

User guidelines

Rules in plain words for the people using the page.

Not everyone knows that a void invoice can’t be reversed, or that a paid bill locks. User guidelines, under the fields on the Fields & rules tab, is where you tell them: Add a guideline, give it a title — A void invoice can’t be reversed — and, if it helps, a few words under it on why and what to do instead. The arrows reorder them. Title names the list (User guidelines unless you change it), and the menu reads after it: Billing rules becomes View billing rules.

Once published, people find them in the table’s ⋯ menu beside the add button (Export and Bulk upload move in there too), and as a link above the add and edit forms. They open as a window, or a sheet from the bottom on a phone. Guidelines are words only — what the server actually refuses is set by the field rules (Can be changed later, Locked when), so write the guideline beside the rule that enforces it.

Around a value

Words before or after a value, and a second field under it.

Advanced: around a value sits at the bottom of the Fields & rules and Table tabs (both show the same settings). Pick a field and press Add, then choose what goes before and after its value: Words I type — an amount shown as BDT 1,200 — or Another field’s value, so a bill’s amount reads with its own currency field (USD 40 on one row, BDT 1,200 on the next).

Under it, in the table puts a second field in small type below the value — a customer’s email under their name — so the table needs one column for both. The words show on every row of the table and on the record page, in grey beside the value; an empty value shows on its own. The stored value doesn’t change: search, sorting, filters and exports still use the number or text itself.

Table page

The page’s list: its header and buttons, columns, row menu and actions on selected rows.

SettingWhat it does
Title / SubtitleThe page heading and the line under it.
Add buttonIts label, and whether it opens the form in a pop-up over the table or on a page of its own (/your-page/create — the same form, with more room).
Export buttonDownload the table as Excel, CSV or PDF.
Search / Filter rowThe search box (matching Searchable fields) and the filter chips.
Clickable rowsClicking a row opens the record.
Rows per pageThe default page size.
ColumnsWhich columns the table can show, in order — drag to reorder. Each person can still hide columns for themselves.

Row menu

The ⋯ on every row: quick view, the detail page, edit in a dialog or on a page, duplicate, delete, a link, quick-edit of one field, add a linked record, and more. Drag to reorder — see Row menu.

Actions on selected rows

Select rows adds checkboxes and a menu for what’s ticked: export, delete (with undo), duplicate, archive, change status, compare, merge duplicates, print, set a field, and totals. Each needs the matching permission — see Working on many rows.

Row menu

What the ⋯ on every row offers — and on which rows.

Add items with Add menu item, name them, pick what each does, and drag them into order. Open an item (›) for its settings.

Show only when — on every item. The item shows only on rows that match: Status is not Paid. Other rows simply don’t offer it. It doesn’t stop a save made some other way; for that, add a Refuse the save rule on the other page (Linked Relationships).

Set a field changes one field to a value you pick — Mark as void: Status → Void. It asks first (“Mark as void? Status becomes Void.”, or your own words), isn’t offered on rows that already have that value, and is checked like any edit: locked fields and permissions still apply. Pair it with Show only when Status is one of Unpaid, Due so paid bills can’t be voided from the menu.

Download PDF downloads the row printed with one of the page’s PDF templates — pick one, or leave it on the page’s default. Pair it with Show only when to offer “Receipt” only on paid rows.

Download document downloads one rich-text field of the row — a blog post’s Body — as a Word file (.docx), a PDF, Markdown (.md) or plain text (.txt). Pick the field (only the page’s rich-text fields are offered) and a format, or leave the format on Ask each time so people choose when they download. The file keeps the headings, bold and italics, links, bullet and numbered lists, quotes, code and pictures. Rows where that field is empty don’t offer it.

Open in editor opens one rich-text field of the row on a page of its own, like a document: the full toolbar across the top, and a white page on a grey desk — white with black words in dark mode too, the way it prints. Save (or ⌘S / Ctrl+S) changes only that field; Export downloads it as Word, PDF, Markdown or text, saving first; Print (or ⌘P / Ctrl+P) prints just the words, on the page size you picked — choose “Save as PDF” in the print window for a quick PDF. Leaving with unsaved words asks before anything is lost. On the record page, every rich-text field’s panel has the same two at its top right: Open editor and Download. A long field shows its first 20 lines or so; Show more opens the rest.

  • Page size (top right of the toolbar): Infinite, one long page, is the default. Pick A4, Letter, Legal or A5 to see the words on sheets, page 1, page 2 and on; Word and PDF exports use the same paper. The editor remembers your choice for that field.
  • Right-click anywhere on the page for bold, italic, underline, case (UPPERCASE, lowercase, Title Case, Sentence case), text style, alignment, lists, quote, link, image and clear formatting. Select some words and a small bar for the most used ones appears above them.
  • Tables: the table button in the toolbar opens a grid; pick the rows and columns. Tab moves to the next cell. Right-click inside a table to insert or delete rows and columns, or the whole table. Tables show on your website and come through in every download.

Add a linked record opens another page’s add form with fields already filled in from the row — Add payment on a bill:

  • Page — where the new record goes (Payments). Its field that picks this page is filled in for you: Bill ← This bill, locked.
  • Filled in — more fields, each from the row (Amount ← Bill’s Due amount) or a fixed value (Method ← Cash).
  • The lock shows the field read-only, with where its value came from. Unlocked ones can be changed before saving.
The form is the other page’s own add form — its required fields, its rules and its “Will also update…” line all apply — and saving refreshes the list you’re on, so a bill that a payment marks paid shows Paid straight away. People need permission to add records on that page.

Status moves

Which moves “Change status” allows.

Under Bulk actions, Status picks the model’s status field (any options field). Every move is allowed until you switch one off — from Paid, switch off the rest so a paid invoice can’t go back. Ask for a reason makes each move need one; it’s kept in the record’s history.

Totals

“View total” for the ticked rows.

With rows selectable, the selection bar can add up the ticked rows: Total amount, Average amount, lowest, highest or count — across pages, counting only rows the person may see. Preset the calculations here, and choose whether people may calculate other number fields themselves.

Bulk upload

Many records from a file.

Switch on Bulk upload and the table’s ⋯ menu offers it. Upload Excel (its first sheet), CSV or JSON, then Check file. The first row names the columns — a field’s key or its label, any case — and the dialog downloads a template.

  • Every row is checked like the add form would: required fields, allowed values, formulas, unique fields — against the table and within the file.
  • Problems come back row by row, with the file’s row numbers, and nothing is saved until every row passes.
  • Import then saves them all, or none: if one still fails, the ones saved are removed again.
  • A linked record is found by its id, or by its name, code, title or email.
  • Up to 2,000 rows or 10 MB at a time; it needs the Add permission on the model.

Filters

The chips above the table.

Each card is one chip; drag to order them. The first four show, the rest go under “Show more filters”. Picking a field fills in a sensible type and options.

TypeLets people
Multi selectPick any number of values
SelectPick one value
TextMatch typed text
Yes / NoTrue or false
Number rangeEqual, above, below, between
DateOn, before, after, between, in the last…

A select’s options can be typed on the card, be every record of another model, or every value the field currently holds.

Form

The add and edit form, in titled sections.

A section has a title, an optional description and rows; a row holds one field or several side by side. Drag sections and rows to reorder. Fields not placed anywhere are listed, so none are forgotten.

Fields that show only when needed

Make a field conditional… shows it only when others hold certain values — “Company name when Type is Business”. Tests include is, is not, is one of, more/less than, is filled in, is empty, is on and is off; several conditions can all have to hold, or any one. Rules chain: a hidden field counts as empty to the rules that depend on it.

The server applies the same rules: a hidden field’s value isn’t saved, and a required field is only required while it’s shown.

For a field that links to records — a payment method, a client — you don’t need its id: type part of its name and pick it from the list. The same search is used in Locked when and in record-page tab conditions.

Pickers that depend on other fields

On a bill with a Client and a Project, Project should offer only that client’s projects. Under Pickers that depend on other fields, each record picker in the form is listed with what it offers. When the linked model points at what another picker picks — a project has a client — a suggestion appears: Only where Client is this form’s Client. One press adds it; Add condition builds others (a field of the linked model, is / is not / is one of, and a fixed value or another field of the form). Choose While empty: offer none to show no projects until a client is picked. Picking another client clears a project that no longer fits. It’s the same setting as the field’s Which records are offered.

Sections that show only when needed

Make a section conditional… hides a whole section until it applies — Bank details only when Method is Bank transfer. Its conditions test fields in other sections. While it’s hidden its fields count as empty: their values aren’t saved and they aren’t required, and the section’s heading goes too.

Record page and tabs

The record’s own page and its quick-view dialog.

A list of sections, each with a title and 1–3 columns. Start from the form’s layout or from all fields. A section can hold the record’s own fields, chosen fields of a linked record (“Guest · Email”), or a list of related records (a guest’s bookings, newest first).

A section’s Copy button switch adds Copy details at its top right: one press copies its fields as text, one per line — Bank Name: City Bank, Routing Number: 225261187 — ready to paste into a message. Fields with no value are left out.

Shown only when needed

Under the sections, Sections shown only when needed lets each section appear only when the record holds certain values — Bank details only when Method is Bank transfer — and Hide fields with no value leaves out the section’s empty fields (and linked lists with no records). Fields shown only when needed does the same for single fields: IBAN only when Bank name is filled in. A section with nothing left to show is left out. This applies to the record page and the quick view; it only hides things from view — nothing is changed or removed from the record.

Tabs

After Overview, add tabs that list records of another model linked to this one — a client’s invoices, an author’s posts. Choose the columns, rows per page, and table or cards. Each tab has its own search, and an Add button that opens the other model’s form with this record already filled in.

When the other model picks several of these records (a product in many collections, a member in many groups), the tab also has Add existing: pick records already there and this one is added to their link — the others they’re in are kept. Each row gets Remove, which takes this one out of that row’s link; the record itself stays. Both are saved like an edit — they show in History and start automations — and need edit permission on the other model.

A tab can also reach one step further, through a model in between: a client’s documents, when each document belongs to a project and each project to a client. Under Linked by, pick the option under Through another route (“Documents of this record’s Projects”); the line beneath it spells out the path. The tab then lists every document of every project of that client. Its Add button is shown muted, because a new document needs a project picked — add documents from the project’s page instead.

Show only narrows a tab to the records that meet your conditions, so a client page can have All bills and, beside it, Due bills (status is due). Each condition is a field, a test (is, is not, is one of, more or less than, before or after, contains, is empty) and a value; a record must meet every one. Adding from a tab fills in its “is” conditions — Add bill on Due bills starts as due.

Every detail page also has a History tab: who changed what, and when.

Linked Relationships

Saving one record changes the records it picks — record a payment, and its invoice turns Paid.

A rule on a page, read as a sentence: When a payment is added, if Mark as paid is ticked, update the invoice picked in Invoice: set Status to Paid, and set Payment date to this payment’s Payment date. Rules are part of the page, so they’re saved as a draft and go live when you publish.

Making a rule

  1. Open the page (Build → Pages) and its green Linked Relationships tab — or, for a new model, the last part of the wizard’s Check the pages step. This page changes… lists its rules; Changed by… lists rules on other pages that change this page’s records.
  2. Add a rule, name it, and fill in the sentence from the top: when the record is added, edited or deleted; if (conditions on it); the field that picks the record to change; only if (conditions on that record); then change it — or refuse the save with your message.
  3. Each change is a field of the linked page (only fields that can be edited there are offered) and how: Set to a value, Copy from this record, Add a number, Take off a number, Work out a formula, or Empty it. Add and Take off can have a Never below number and the message people see when a save would go under it. Copy from this record also offers the fields of the records it picks — a renewal’s Fee from Plan › Price. Work out opens the formula window: build it from this record’s fields, the records it picks and the linked record’s own values — a date for a date field, like add(latest(target.expiresAt, today()), this.plan.length, this.plan.unit).
  4. Choose what happens when the rule stops holding, then Save rule and publish the page.

The parts of a rule

PartWhat it does
WhenAdded, edited, deleted. Most rules run on added and edited.
IfConditions on this record — Mark as paid is Yes. All must hold, or any one.
Update the record picked inThe field that picks the record to change — Invoice. A field that picks several changes each.
Only ifConditions on the picked record — Status is not Cancelled.
Compare with this recordA condition can compare with a value, or with one of this record’s fields — Balance is less than this Transfer’s Amount; To account is this Transfer’s From account.
Then: changeSet a value, copy one of this record’s fields, add or take off a number, work out a formula, or empty a field.
Never belowWith Add or Take off: the field never goes under this number — the save is refused with your message instead.
Then: refuse the saveNothing is saved while the conditions hold; your message says why.
When it stops holdingThe record is deleted, the box is unticked, or another invoice is picked: put the fields back (unless someone changed them since), leave them, or don’t allow it.
Allow even if they can’t editWithout it, only people who may edit the linked page can save a record this rule changes.
Also for website and API savesOff by default: records your website or app saves through the public API don’t run the rule.

Example: a transfer between two accounts

A Transfers page picks a From account and a To account and has an Amount. Two rules move the money:

  • Take from the sending account — update the record picked in From account: Balance, Take off this record’s Amount, Never below 0, message Not enough money in the sending account.
  • Give to the receiving account — update the record picked in To account: Balance, Add this record’s Amount.

A transfer bigger than the balance is refused with your message under Amount, and nothing moves. Editing a transfer from 30 to 60 only needs the 30 more; deleting it gives the money back. Two transfers at the same moment can’t both spend the same balance. To stop a transfer to the same account, add a rule that refuses the save when the To account is this Transfer’s From account.

What people see in the form

The form follows the rules while it’s filled in: tick Mark as paid and Payment date gets its asterisk. Under the fields a line says what saving will also change — Will also update Invoice A: Status → paid, Payment date → 20 Oct 2026 — or why it would be refused. After saving, the message lists what else changed, and the invoice’s history says which rule and which payment changed it.

Where rules run

Everywhere records are saved: the form, Copy and Duplicate, bulk edit and status changes, bulk delete (and its undo, which runs the rules again), and bulk upload — checked for every row first, so nothing is saved unless all pass. A rule only ever reaches records in the same project.

Totals that must always be right — amount paid, balance — are better as a rollup or formula in Models: worked out when read, they can’t drift. Use a rule for a change that happens once: a status, a date, stock taken off.

Versions

Every publish is kept.

The Versions tab lists each published version with its note, who published it and when. Load as draft puts an older one in the draft; publish it to roll back.

Troubleshooting

SymptomWhy, and what to do
My change doesn’t showIt’s still a draft. Publish it.
I can’t save the draftA tab shows an error — look for the red marks.
A field can’t be added to the formIt isn’t Editable in Settings, or it’s a formula (worked out, not typed).
A new field isn’t in the tableAdd it under Table → Columns, or turn on “In the table by default”.
Bulk upload says a linked record wasn’t foundUse the record’s id, or a name, code, title or email that matches one record.