Contact
Crimson includes a dedicated Contact page with a clean two-column layout:
Left column: support email + social links
Right column: contact form (optional—only shown when a form endpoint is configured)
Note that the contact form is designed to work with a third-party form service (like Formspree) so submissions can be delivered to your email.

Routes and URL
Crimson enables the Contact page using a template route in routes.yaml:
This maps the URL /contact/ to the theme template file contact.hbs. Template routes are the standard Ghost way to map a custom URL to a theme template.
How the Contact page layout works
Two-column layout (default)
When a CONTACT_ENDPOINT is provided, the Contact page displays:
Left column: social links + support email
Right column: contact form

Single-column layout (when the form is disabled)
If no contact endpoint is configured:
The contact form is hidden
The page becomes single column (only the left column is shown)

Adding contact form endpoint and social profile links is explained in Code Injection and Code Injection Variables
Configure the Contact email
Crimson pulls the “Contact email” from your Ghost Portal Support email address.
Why this matters
Ghost Portal uses a default noreply address unless you change it. Ghost explicitly recommends setting a real support email so members can reach you.
In a fresh install, that default “noreply…” address can cause your Contact page email to look wrong (often showing just “noreply”). So set a proper support email first.
How to change the Support email address
In Ghost Admin, open Signup portal
Click Customize
Open the Account page tab
Update the Support email address
Save


Ghost confirms the Account tab contains the Support email address setting, and that it’s publicly available inside the Portal interface.
Recommended: Use a real inbox like [email protected] (or a helpdesk email), not a noreply address.
Configure the Contact form
Crimson’s Contact form is powered by a form endpoint. Crimson recommends using a third-party service like Formspree and adding the endpoint so you can receive submissions.
What is the endpoint?
It’s the URL where the form will send data (usually a POST request), for example:
a Formspree endpoint - E.g.
https://formspree.io/f/abc123efg456your own API endpoint (advanced)
Behavior when it’s not set
If CONTACT_ENDPOINT is an empty string (''):
the form is hidden
the Contact page becomes single-column (social/email only)
Read Code Injection Variables for information on adding Contact Form Endpoint.
Configure Social links
Crimson’s Contact page supports:
Facebook + X (Twitter) via Ghost’s built-in Social accounts settings
Other networks via Crimson Code Injection variables (YouTube, Instagram, WhatsApp, TikTok, Threads, LinkedIn)
Facebook and X (Twitter) links
To set Facebook and X links, use Ghost’s Social accounts:
Ghost Admin → Settings → Social accounts
Add your Facebook URL
Add your X (Twitter) URL
Click Save

Other Social Media Links
Crimson reads these variables from Ghost Admin → Settings → Code Injection → Site Header.
How to add these variables is already explained in Code Injection Variables
Rules to remember
If a social link variable is
'', that icon is hidden.If
CONTACT_ENDPOINTis'', the contact form is hidden and layout becomes single-column.These values must be set before theme scripts load (the Code Injection page already explains the required
window.GLOBALpattern).
Variables used by Crimson for the Contact Page
Troubleshooting
Contact page shows only one column
Cause: CONTACT_ENDPOINT is empty.
Fix: Add a valid endpoint (then the form column will appear).
Email shows as ‘noreply’ or looks incorrect
Cause: Portal support email is still the default noreply.
Fix: Set Support email address in Portal → Account tab.
/contact/ is a 404 error
Cause: routes.yaml wasn’t uploaded or route is missing/incorrect.
Fix: Upload routes in Settings → Labs → Routes and confirm the route exists.
Form submits but I don’t receive messages
Common causes:
endpoint is wrong (paste error)
your form provider requires verification/activation
messages are going to spam
your endpoint blocks requests (CORS / rate-limits) if it’s your own API
This issue is related to your Form endpoint provider/Domain/server.
Last updated