Skip to main content

CMS Content Configuration

All participant-facing text, labels, and content in GLHF are managed through the Strapi admin panel — not hardcoded. This page documents every configurable field, organized by content type.

Strapi Content Manager showing GLHF content types

Global Single Type

Strapi path: Content Manager → Global

The Global single type controls site-wide settings and layout. All fields support i18n localization.

FieldTypeRequiredDescription
studyNamestringyesParticipant-facing study name (e.g., "GamePlay.Study"). Used in emails, footer, and survey headers. See Study Parameters for details.
supportEmailstringSupport contact email
metaTitleSuffixstringyesAppended to all page titles for SEO
faviconmedia (image)Site favicon
metadatacomponent (meta.metadata)Default SEO metadata (title, description, image)
notificationBannercomponent (elements.notification-banner)Site-wide notification banner displayed at the top of every page
navbarcomponent (layout.navbar)Navigation bar content (logo, links)
footercomponent (layout.footer)Footer content (logo, links, text)

Login Page

Strapi path: Content Manager → Login page

The Login Page single type controls the login/sign-up page. This content type does not support i18n localization. Draft/publish is supported.

FieldTypeRequiredDescription
titlestringPage heading
descriptionrichtextPage description
metadatacomponent (meta.metadata)Page SEO metadata
FAQcomponent (sections.accordion)FAQ accordion section
showLoginSectionbooleanToggle login form visibility (default: true)
closeSignUpcomponent (elements.close-sign-up)Sign-up capacity control (see Close Sign-Up below)

Close Sign-Up

Component: elements.close-sign-up

Controls whether new sign-ups are accepted and what message is shown when sign-up is closed.

FieldTypeDefaultDescription
signUpEnabledbooleantrueMaster toggle for new sign-ups
maxUsersinteger (min: 0)4000Maximum user cap — sign-up closes when this limit is reached
descriptiontextMessage shown to visitors when sign-up is closed

Pages

Strapi path: Content Manager → Pages

The Pages collection type holds marketing and landing pages with dynamic content sections. All content fields support i18n localization (except slug). Draft/publish is supported.

FieldTypeRequiredLocalizedDescription
shortNamestringyesShort display name
slugstringnoURL path (regex: ^$|^[a-zA-Z/-]+$)
metadatacomponent (meta.metadata)yesyesPage SEO metadata
contentSectionsdynamic zoneyesPage content blocks (see Content Sections below)

Content Sections Dynamic Zone

The contentSections dynamic zone allows study admins to build pages from the following section types:

ComponentDescription
sections.heroHero banner with title, label, description, picture, and buttons
sections.rich-textRich text content block
sections.feature-columns-groupGrid of feature columns
sections.feature-rows-groupList of feature rows with media
sections.teamTeam member showcase
sections.logosLogo grid
sections.lead-formLead capture form
sections.bottom-actionsCTA buttons
sections.large-videoVideo showcase
tip

Pages are rendered by the frontend's catch-all route ([[...slug]].js). The slug field determines the URL path — for example, a page with slug about is available at /about.

Profile Page

Strapi path: Content Manager → Profile Page

The Profile Page single type controls the participant profile page content. This content type does not support i18n localization.

Strapi Profile Page editor

FieldTypeRequiredDescription
titlestringPage heading
metadatacomponent (meta.metadata)Page SEO metadata
researchConsentrichtextyesConsent text shown to participants before they can proceed
FAQcomponent (sections.accordion)FAQ accordion section
accountsdynamic zoneIntegration cards (see Integration Cards below)
deleteAccountcomponent (profile.account-data)Account data management section (see Account Data below)
feedbackcomponent (profile.feedback, repeatable)Study feedback sections per provider (see Feedback below)

Integration Cards (accounts Dynamic Zone)

The accounts dynamic zone on the Profile Page holds integration cards for Discord and Steam. Both integrations share an identical top-level structure with three state-dependent sub-components.

Top-Level Structure

Each integration component (integrations.discord, integrations.steam) has:

FieldTypeDescription
showbooleanToggle whether the integration card is visible on the profile page
notConnectedcomponentContent shown when the account is not linked
connectedSuccesscomponentContent shown after successful linking
connectedFailcomponentContent shown when linking fails or requirements aren't met

notConnected State

Displayed when the participant hasn't linked the account.

FieldTypeDescription
titleNotConnectedstringHeading text
descriptionNotConnectedtextExplanation shown below the heading
buttonLabelNotConnectedstringCTA button label (e.g., "Link Discord", "Link Steam")

connectedSuccess State

Displayed after the participant successfully links the account.

FieldTypeDescription
titlestringHeading text
chipstringBadge label (e.g., "Connected")
descriptiontextSuccess message

connectedFail State

Displayed when account linking fails or requirements aren't met.

FieldTypeDescription
titlestringHeading text
chipstringBadge label
descriptiontextError explanation

Steam-Specific connectedFail Fields

The Steam connectedFail component has additional fields for privacy/requirement feedback:

FieldTypeDescription
feedbackFoundOwnedGamesstringShown when owned games check passes
feedbackNoOwnedGamesstringShown when no owned games are found
feedbackHasPlaytimePublicstringShown when playtime is publicly visible
feedbackHasPlaytimePrivatestringShown when playtime is private
feedbackFoundRecentlyPlayedGamesstringShown when recent playtime exists
feedbackNoRecentlyPlayedGamesstringShown when no recent playtime exists
buttonLabelRecheckstringLabel for the "recheck" button after settings change
note

The show toggle controls visibility only. Whether an integration is actually required for study activation is controlled by the DISCORD_REQUIRED and STEAM_REQUIRED environment variables.

Account Data

Component: profile.account-data

Controls the account data management section on the profile page (withdraw from study, delete data).

FieldTypeDescription
headerstringSection heading
withdrawHeaderstringWithdraw sub-section heading
withdrawDescriptionrichtextExplanation of what withdrawing means
withdrawButtonLabelstringWithdraw button label
deleteDataHeaderstringDelete data sub-section heading
deleteDataDescriptionrichtextExplanation of what data deletion means
deleteDataButtonLabelstringDelete data button label
deleteDataModalHeaderstringConfirmation modal heading
deleteDataModalrichtextConfirmation modal body text
deleteDataModalButtonCancelLabelstringModal cancel button label
deleteDataModalButtonDeleteLabelstringModal confirm-delete button label

Feedback

Component: profile.feedback (repeatable)

Each feedback entry corresponds to a recruitment provider and displays state-dependent content based on where the participant is in the study lifecycle.

FieldTypeDescription
providerenum: prolific, public, qualtricsWhich recruitment channel this feedback block applies to
notLinkedrichtextShown when required accounts are not yet linked
linkedNotActiverichtextShown when accounts are linked but study hasn't started
activerichtextShown during active data collection
surveySentrichtextShown after the survey has been sent
studyCompletedrichtextShown after the study is complete
progresscomponent (profile.progress)Progress tracker steps (see below)

Progress Component

Component: profile.progress

Configures the step-by-step progress indicator shown to participants.

FieldTypeDefaultDescription
showLinkStepboolean (required)trueShow the "link accounts" step
linkStepCompletedLabelrichtextLabel when link step is complete
linkStepNotCompletedLabelrichtextLabel when link step is not complete
showCheckPrivacyStepbooleanShow the "check privacy settings" step
checkPrivacyStepCompletedLabelrichtextLabel when privacy check passes
checkPrivacyStepNotCompletedLabelrichtextLabel when privacy check fails
showSurveyStepbooleanShow the "complete survey" step
surveyStepCompletedLabelrichtextLabel when survey is complete
surveyStepNotCompletedLabelrichtextLabel when survey is pending
showStudyCompletedStepbooleanShow the "study completed" step
studyCompletedLabelrichtextLabel for the completed state