Skip to main content
Database Schema

Forms & Consent Schema

Every PF TECH form, its submissions, and — kept deliberately separate — the marketing-consent registry.

A work in progress
We've published these resources in the hope they're useful — you're welcome to copy or use anything you find on this site. We're still working through each record to optimise it for completeness and accuracy, so some entries are fuller than others for now.

What it stores

Every PF TECH form, its submissions, and — kept deliberately separate — the marketing-consent registry. The consent side is built to CASL, GDPR, and CAN-SPAM standards: double opt-in, suppression states, and right-to-erasure are all tracked in full.

Owned by the Forms agent. Lives in the Public Pages database · forms schema.

The tables

Friendly names first, with the real table name underneath. Key fields only.

Form Definitionsforms.definitions

The canonical definition of each form — its questions, routing, and lifecycle.

Columns in the forms.definitions table
ColumnType
slugURL-safe identifierText
titleText
statusdraft, active, paused…Choice
fieldsThe questions, in orderStructured
routing_configWhere a submission goesStructured

Relationships

  • one-to-manyforms.submissions. Receives many submissions
  • one-to-manyforms.versions. Has a version history

Field Typesforms.field_types

The registry of every supported question type.

Columns in the forms.field_types table
ColumnType
labelText
categoryinput, choice, upload, layout, consentChoice
supports_optionsYes/no
config_schemaValid settings for the fieldStructured

Submissionsforms.submissions

Every form submission. Note: a submission is not consent — see the Mailing List.

Columns in the forms.submissions table
ColumnType
form_slugText
emailText
payloadThe answers givenStructured
referenceHuman reference, e.g. PFT-123Text

Relationships

  • one-to-oneforms.definitions. Belongs to one form

Mailing List & Consentforms.mailing_list

The marketing-consent registry. Every record requires double-confirmed opt-in; suppression and erasure are tracked for compliance.

Columns in the forms.mailing_list table
ColumnType
emailText
statuspending, active, unsubscribed, bounced, complaintChoice
consent_versionPolicy in effect at opt-inText
double_opt_in_confirmed_atThe authoritative consent momentDate & time
unsubscribe_tokenPermanent one-click unsubscribe keyID
erasure_completed_atWhen personal data was anonymisedDate & time

Relationships

  • one-to-oneforms.submissions. Links to the opt-in submission

Version Historyforms.versions

An immutable audit trail — one snapshot per version of each form. Never edited or deleted.

Columns in the forms.versions table
ColumnType
version_numberNumber
snapshotThe form as it wasStructured
changed_byText
changed_atDate & time

Relationships

  • one-to-oneforms.definitions. A version of one form

You don't need all of this to start

Most of what these agents rely on has a simpler equivalent. Anywhere we use a database, you can usually start with a spreadsheet or a document — whatever you're comfortable with. Anywhere we built a custom MCP server, you can reach for a prebuilt AI connector instead of building your own.

We go further because it's where our experience pays off. Years of hands-on database work make a custom data layer feasible for us, and purpose-built MCP servers let us hand each agent a short, sharp instruction file and exactly the tools it needs — custom descriptions, only the endpoints we want, and the occasional extra gate — instead of a long manifesto or playbook. Nothing more, nothing less.

Ready to build technology that works for your mission?

Tell us where your organisation is and what's slowing your team down. We respond personally.

FAQ — Knowledge Base

Browse frequently asked questions about Knowledge Base

Request an Invitation to the MMP

Mission Multiplier cohorts form on a rolling basis. Request an invitation and we'll reach out when a cohort that fits you is coming together. No payment until you're invited and confirm your spot.