Getting Started

Vestige is a reading-focused Ghost theme designed for newsletter writers and independent creators. It features a categorized homepage, social proof section, dark mode, and full membership support.

Latest version: 1.0.5

Requirements: Ghost 5.0 or later (Ghost 6.x recommended).

Installation

  1. Download the vestige.zip file from your purchase confirmation email.
  2. In Ghost Admin, go to Settings → Design → Change theme.
  3. Click Upload theme and select the zip file.
  4. Once uploaded, click Activate.
Tip: Do not extract the zip file before uploading. Ghost expects the .zip file directly.

First Steps After Installation

After activating Vestige, complete these essential setup tasks:

  1. Set your site title and description — Settings → General.
  2. Upload a logo — Settings → Design → Brand. Recommended: SVG or PNG, max height 40px.
  3. Configure navigation — Settings → Navigation.
  4. Create tags — At minimum, create the tags that will appear as homepage sections (e.g., Essay, Newsletter, Interview).
  5. Set up membership — Settings → Membership to enable subscribe forms.
  6. Configure testimonials — Settings → Design → Custom → Homepage section.

General Settings

These settings affect the overall look and behavior of your site.

Color Scheme (Light / Dark / Auto)

Vestige supports three color modes:

  • Auto — Follows the visitor's system preference (default).
  • Light — Warm cream background with forest green accents.
  • Dark — Dark background with muted green accents.

To change: Settings → Design → Theme → Site wide → Color scheme.

Dark / Light Mode Toggle

Vestige includes a sun/moon toggle button in the header that lets visitors switch between light and dark mode. Their preference is saved in the browser.

To enable/disable: Settings → Design → Theme → Site wide → Show dark mode toggle (enabled by default).

Tip: Logos and icons are automatically inverted in dark mode via a CSS filter. No extra configuration needed.

Color Tokens

Dark mode uses a separate set of color tokens:

TokenLightDark
Background#FCFBF9 (cream)#1C1917 (dark brown)
Text#1C1917#FCFBF9
Accent#2D4A3E (forest green)#8C9B91 (sage)
Link#B85C38 (terracotta)#C48968 (warm tan)
Cards#FFFFFF#201D19

Typography

Vestige uses three font families:

  • Headings: Playfair Display (serif)
  • Body: Source Serif 4 (serif)
  • UI elements: DM Sans (sans-serif)

You can override the heading and body fonts via Ghost's custom font picker in Settings → Design → Brand → Typography. Vestige respects Ghost's --gh-font-heading and --gh-font-body CSS variables.

Site Title

Set your site title in Settings → General → Title & description. The title appears in the header when no publication logo is uploaded, and is also used in the subscribe CTA, footer, and browser tab.

Homepage

The Vestige homepage is built with distinct sections, each designed to showcase different aspects of your publication.

Hero Section

The hero section displays your latest featured post with a large title, excerpt, feature image, and a "Read this issue" link.

To set a post as the hero:

  1. Open the post in Ghost Editor.
  2. Click the settings icon (gear) in the top right.
  3. Toggle Feature this post on.

The most recently published featured post appears in the hero. Make sure it has a feature image set for the best visual result.

Social Proof Section

Below the hero, Vestige includes a social proof section with:

  • "As featured in" logos — Press/publication logos displayed in a horizontal row.
  • Stats text — A single line of trust-building text (e.g., "Trusted by thousands of readers").
  • Testimonial cards — Up to 3 testimonials with star ratings, quotes, and author names.
  • Subscribe form — An inline email subscription form (visible to non-members only).

Configuring "As Featured In" Logos

Go to Settings → Design → Theme → Homepage:

  • featured_in_label — The heading text above logos (default: "As featured in"). Leave empty to hide the label.
  • featured_in_logo_1 through featured_in_logo_5 — Upload up to 5 brand/press logos (SVG or PNG recommended).
Tip: The "Featured in" row only appears when at least one logo is uploaded. All logos are automatically recolored to match the theme via a CSS filter, so any logo color works.

Configuring Stats Text

  • stats_text — The trust line displayed above testimonials (e.g., "Trusted by thousands of readers · Published weekly · Free & paid tiers").
Tip: The social proof section only appears when stats_text is set. Leave it empty to hide the entire section.

Configuring Testimonials

Go to Settings → Design → Theme → Homepage:

  • testimonial_1_quote / testimonial_1_author — First testimonial.
  • testimonial_2_quote / testimonial_2_author — Second testimonial.
  • testimonial_3_quote / testimonial_3_author — Third testimonial.
Tip: Testimonials only appear when at least the first quote is filled in. You can use 1, 2, or all 3 slots.

Category Sections

The homepage automatically groups posts by tag into categorized sections. Each section displays:

  • Tag name as section heading with post count pill.
  • Tag description as subtitle.
  • "View all" link to the full tag archive.
  • Up to 3 posts from that tag.

Sections appear for each of your primary tags. The display format varies:

  • List layout — Used for tags like "Essay" and "Interview" (text-focused posts).
  • Grid layout — Used for tags like "Newsletter" (image-heavy posts with feature image cards).

To control which tags appear, create tags in Ghost Admin → Tags and assign posts to them.

"Who's Writing?" Section

This section appears near the bottom of the homepage and includes:

  • Author avatar and bio.
  • "Topics we explore" — A grid of tag cards linking to tag archives.

The author information is pulled from the site owner's Ghost profile. Update it in Settings → Staff → [Your profile].

Subscribe CTA

A full-width subscribe call-to-action appears at the bottom of every page (except for logged-in members). It includes:

  • Site title as heading ("Subscribe to [Site Name]").
  • Description text.
  • Email input + subscribe button.
  • Trust text below the form.

This section is automatically hidden for signed-in members.

Post Page

Individual post pages are designed for long-form reading with generous whitespace and clear typography.

Layout

Each post page includes:

  • Primary tag label with published date and reading time.
  • Post title and excerpt.
  • Author name with avatar.
  • Feature image (container-width with rounded corners).
  • Post content (680px max-width for comfortable reading).
  • Tag pills at the bottom.
  • Author card with bio.
  • Previous/Next post navigation.

Reading Time

Reading time is displayed next to the date on post pages. To toggle it:

Settings → Design → Custom → Post → Show reading time

Set to false to hide reading time from all posts.

Membership & Subscriptions

Vestige is built with Ghost's membership system in mind.

Setting Up Membership

  1. Go to Settings → Membership.
  2. Choose your access model: free, paid, or both.
  3. For paid tiers, connect Stripe in Settings → Membership → Stripe.

Once membership is enabled, Vestige automatically shows:

  • Subscribe button in the header.
  • Sign in link in the header.
  • Subscribe forms in the social proof and CTA sections.
  • Account link for signed-in members (replaces Subscribe/Sign in).

Paywall & Content Gating

Vestige includes a custom paywall system with three components:

1. Post page paywall

When a reader doesn't have access to a gated post, Vestige shows:

  • A blurred excerpt preview (full-width) with a gradient fade, giving readers a taste of the content.
  • A paywall card (full-width) with a lock icon, title, description, and call-to-action button.

The paywall adapts based on the reader's membership status:

  • Non-members see a "Subscribe now" button that opens the Ghost signup portal.
  • Free members see an "Upgrade your plan" button that links to account plan settings.

2. Lock icon on post listings

Gated posts display a small lock icon next to the post title on the homepage, tag archives, and author archives. This helps readers identify members-only or paid content at a glance, without any additional text label.

3. How to gate a post

  1. Open any post in the Ghost editor.
  2. Click the settings gear (top right).
  3. Under "Post access", select:
    • Public — No paywall, visible to everyone. No lock icon.
    • Members only — Free and paid subscribers can read. Lock icon shown.
    • Paid members only — Only paid subscribers can read. Lock icon shown.

No theme code changes are needed per post — the same template handles all visibility levels automatically.

Tag & Author Pages

Tag Archive Pages

Each tag has an archive page at /tag/[slug]/. It displays:

  • Tag name and description.
  • All posts tagged with that tag, paginated.

Customize tag metadata in Ghost Admin → Tags → [Tag name]. Add a description to give context on the archive page.

Author Pages

Each author has a page at /author/[slug]/ showing their avatar, bio, and all their posts.

Update author information in Settings → Staff → [Author name].

Design System

Vestige uses CSS custom properties (variables) for all colors, fonts, spacing, and border radii. You can override any of these via Code Injection to customize the theme without editing source files.

Color Tokens

All colors are defined as CSS variables on :root (light mode) and [data-color-scheme="dark"] (dark mode).

Light Mode

VariableValueUse
--color-bg #FCFBF9Page background
--color-bg-secondary #F7F6F3Section backgrounds, cards
--color-bg-tertiary #F0EEEAHover states
--color-text #1C1917Primary text
--color-text-secondary #443F3ABody text, descriptions
--color-text-tertiary #64766BMetadata, captions
--color-accent #2D4A3EButtons, CTAs, drop caps, blockquote borders
--color-accent-hover #233A30Button hover states
--color-link #B85C38Inline links, read-more links
--color-link-hover #9E4C2CLink hover states
--color-border #E4E1DBDividers, card borders
--color-surface-card #FFFFFFCard backgrounds

Dark Mode

VariableValueUse
--color-bg #1C1917Page background
--color-text #FCFBF9Primary text
--color-accent #8C9B91Buttons, CTAs
--color-link #C48968Inline links
--color-border #2E2A26Dividers
--color-surface-card #201D19Card backgrounds

Typography

VariableDefaultUse
--font-headingPlayfair Display, Georgia, serifAll headings (h1–h6)
--font-bodySource Serif 4, Georgia, serifBody text, excerpts
--font-uiDM Sans, system-ui, sans-serifNavigation, buttons, metadata, labels
Ghost font picker: Ghost 6 includes a built-in font picker in Settings → Design → Brand → Typography. Fonts selected there automatically override --font-heading and --font-body via Ghost's --gh-font-heading and --gh-font-body variables.

Spacing & Layout

VariableValueUse
--container-max1200pxMaximum width of content container
--content-max680pxMaximum width of article text
--radius-sm4pxSmall border radius (tags, badges)
--radius-md8pxMedium border radius (cards, inputs)
--radius-lg12pxLarge border radius (feature images)
--radius-xl16pxExtra large border radius (paywall)

Customization Examples

Override any variable via Settings → Code Injection → Site Header:

Change accent color to blue

<style>
:root {
    --color-accent: #2563eb;
    --color-accent-hover: #1d4ed8;
}
[data-color-scheme="dark"] {
    --color-accent: #60a5fa;
    --color-accent-hover: #93bbfc;
}
</style>

Change link color

<style>
:root {
    --color-link: #7c3aed;
    --color-link-hover: #6d28d9;
}
</style>

Use custom fonts

<link href="https://fonts.googleapis.com/css2?family=Lora:wght@400;600;700&display=swap" rel="stylesheet">
<style>
:root {
    --font-heading: 'Lora', Georgia, serif;
}
</style>

Widen the content area

<style>
:root {
    --content-max: 760px;
    --container-max: 1400px;
}
</style>

Advanced

Code Injection

Add custom CSS or JavaScript via Settings → Code injection. This is the recommended way to customize your theme without editing source files. See the Design System section above for all available CSS variables you can override.

Example: Invert logo for dark mode

<style>
[data-color-scheme="dark"] .gh-head-logo img {
    filter: invert(1);
}
</style>

Example: Hide "Powered by Ghost" in footer

<style>
.gh-foot-meta { display: none; }
</style>

Posts Per Page

By default, Vestige shows 10 posts per page. To change this, you need to edit the theme's package.json file:

  1. Download the theme zip from Ghost Admin.
  2. Extract and edit package.json.
  3. Change "posts_per_page": 10 to your desired number.
  4. Re-zip and upload the theme.

Comments

Vestige supports Ghost's native commenting system. Enable it in Settings → Membership → Commenting.

Options:

  • Off — No comments.
  • All members — Free and paid members can comment.
  • Paid members only — Only paid subscribers can comment.

Translations / Localization

Vestige ships with full translation support. All user-facing UI strings use Ghost's {{t}} helper and are defined in locales/en.json.

How to translate Vestige

  1. Download and extract the theme zip.
  2. Open locales/en.json to see all translatable strings.
  3. Create a new file for your language, e.g. locales/fr.json for French, locales/de.json for German.
  4. Copy the contents of en.json and translate the values (right side) while keeping the keys (left side) unchanged.
  5. Set your site language in Settings → General → Publication language (e.g., fr for French).
  6. Re-zip and upload the theme.

Example (French)

{
  "Subscribe": "S'abonner",
  "Sign in": "Se connecter",
  "Read more": "Lire la suite",
  "Previous": "Précédent",
  "Next": "Suivant"
}
Tip: You only need to include the strings you want to override. Any missing keys will fall back to the English value.

Translatable strings

Vestige includes translations for: navigation labels (Subscribe, Sign in, Account), post navigation (Previous, Next), paywall text, subscribe forms, error pages, member pages (signup, signin, account), and more. See locales/en.json for the complete list.

Continuous Deployment

You can set up automatic theme deployment using GitHub Actions. When you push theme changes to your repository, the workflow builds, zips, and uploads the theme to your Ghost instance via the Admin API.

Requirements:

  • A Ghost Admin API key (Settings → Integrations → Add custom integration).
  • Store the key as a GitHub secret (e.g., GHOST_ADMIN_API_KEY).

See the Ghost Theme Docs for more details on the Admin API.

404 Error Page

Vestige includes a styled 404 error page with the site header, footer, and a "Back to [Site Name]" link. No configuration needed — it works automatically.

Support

If you need help with Vestige, reach out to us:

When reporting an issue, please include your Ghost version, theme version, and a description of the problem with screenshots if possible.

Need a customized Ghost UI? Hire an expert to get a site tailored to your brand.