Contact page
A working contact form in one setting: paste a form-service URL and readers can write to you, with the confirmation appearing in place. The sidebar is yours to write in the editor.
Two columns: a form on the left, and on the right whatever you write in the page body. Ghost has no form handling of its own, so the form posts to a form service, and pasting that service's address into one setting is the entire setup.
Create the page
Go to Pages → New page and give it a title, for example Say hello.
In the editor's settings panel, set Template to Contact.
Write the sidebar in the body (see below), then publish.
Contact page - Editor

Contact page

What each field becomes
| Field | On the page |
|---|---|
| Primary tag | The small label above the heading. Falls back to the word Contact |
| Title | The heading, and the subject line on the emails you receive |
| Excerpt | The line under the heading |
| Body | The sidebar on the right |
Turning the form on
Create a form at a service such as Formspree, Basin or Getform, and point it at your own email address.
Copy the endpoint URL, for example https://formspree.io/f/abcdwxyz.
In Ghost, go to Settings → Design & branding → Customize → Theme → Site wide and paste it into Contact form endpoint. Save.
Send yourself a test message.

What readers see
Three fields: name, email and message. No subject line and no dropdown, because the page title is already the subject of the email you receive.
When a message is delivered, the form is replaced in place by a short confirmation in your site's language. The reader stays on your page and is never sent to a stranger's thank-you screen.

Without an endpoint
Leave the setting blank and the form is replaced by a tidy email card, using the support address from Settings → Portal. It looks deliberate rather than broken, which makes it a reasonable permanent choice if you would rather just publish an address.
Which services work
A note on spam protection
The form carries a hidden field that real people never fill in and bots usually do, named the way Formspree expects (_gotcha). Basin and FormSubmit look for a differently named field, so their built-in trap will not catch anything here. Both offer their own spam filtering, which is worth switching on in their dashboard.
The sidebar
The page body becomes the right-hand column, and Quiet restyles the usual editor blocks to suit a narrow space:
| In the body | In the sidebar |
|---|---|
| A heading | A small uppercase label |
| A paragraph | Quiet secondary text |
| A list | A stack of lines, without bullets |
| A list item that is only a link | An accented row |
| A callout card | A soft panel in your accent colour |
| An image | Sits at the column's full width |
Good things to put there: how quickly you reply, what you would rather not be asked, your postal address, links to the places you are already reachable.
Leave the body empty and the form takes the full width of the page.

Without JavaScript
The form is a real HTML form, so it still submits: the reader lands on the form service's own confirmation page rather than staying on yours. Nothing is lost except the polish.
If a message cannot be sent
On a network failure, Quiet shows the reader a line in your own language rather than the service's English, and arms the form to submit the ordinary way if they press send again. It never claims a message was delivered when it was not, and it never sends twice.