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
- Download the
vestige.zipfile from your purchase confirmation email. - In Ghost Admin, go to Settings → Design → Change theme.
- Click Upload theme and select the zip file.
- Once uploaded, click Activate.
.zip file directly.First Steps After Installation
After activating Vestige, complete these essential setup tasks:
- Set your site title and description — Settings → General.
- Upload a logo — Settings → Design → Brand. Recommended: SVG or PNG, max height 40px.
- Configure navigation — Settings → Navigation.
- Create tags — At minimum, create the tags that will appear as homepage sections (e.g., Essay, Newsletter, Interview).
- Set up membership — Settings → Membership to enable subscribe forms.
- 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).
Color Tokens
Dark mode uses a separate set of color tokens:
| Token | Light | Dark |
|---|---|---|
| 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.
Logo & Icon
Vestige supports two image types in Settings → Design & branding → Customize:
Publication Logo
When set, the logo replaces the site title text entirely in the header. Use this for a full wordmark or custom logo.
- Recommended format: SVG or PNG with transparency.
- Recommended max height: 40px for best header fit.
Publication Icon
When set (and no logo is uploaded), the icon displays next to the site title text. Use this for a small square mark or favicon-style icon (e.g., a monogram, symbol, or orb).
- Recommended: 60×60px square, SVG or PNG.
- Also used as the browser favicon.
Behavior Summary
| Logo | Icon | Header Shows |
|---|---|---|
| Set | Any | Logo image only |
| Not set | Set | Icon + site title text |
| Not set | Not set | Site title text only |
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:
- Open the post in Ghost Editor.
- Click the settings icon (gear) in the top right.
- 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.
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
- Go to Settings → Membership.
- Choose your access model: free, paid, or both.
- 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
- Open any post in the Ghost editor.
- Click the settings gear (top right).
- 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.
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
| Variable | Value | Use |
|---|---|---|
--color-bg | #FCFBF9 | Page background |
--color-bg-secondary | #F7F6F3 | Section backgrounds, cards |
--color-bg-tertiary | #F0EEEA | Hover states |
--color-text | #1C1917 | Primary text |
--color-text-secondary | #443F3A | Body text, descriptions |
--color-text-tertiary | #64766B | Metadata, captions |
--color-accent | #2D4A3E | Buttons, CTAs, drop caps, blockquote borders |
--color-accent-hover | #233A30 | Button hover states |
--color-link | #B85C38 | Inline links, read-more links |
--color-link-hover | #9E4C2C | Link hover states |
--color-border | #E4E1DB | Dividers, card borders |
--color-surface-card | #FFFFFF | Card backgrounds |
Dark Mode
| Variable | Value | Use |
|---|---|---|
--color-bg | #1C1917 | Page background |
--color-text | #FCFBF9 | Primary text |
--color-accent | #8C9B91 | Buttons, CTAs |
--color-link | #C48968 | Inline links |
--color-border | #2E2A26 | Dividers |
--color-surface-card | #201D19 | Card backgrounds |
Typography
| Variable | Default | Use |
|---|---|---|
--font-heading | Playfair Display, Georgia, serif | All headings (h1–h6) |
--font-body | Source Serif 4, Georgia, serif | Body text, excerpts |
--font-ui | DM Sans, system-ui, sans-serif | Navigation, buttons, metadata, labels |
--font-heading and --font-body via Ghost's --gh-font-heading and --gh-font-body variables.Spacing & Layout
| Variable | Value | Use |
|---|---|---|
--container-max | 1200px | Maximum width of content container |
--content-max | 680px | Maximum width of article text |
--radius-sm | 4px | Small border radius (tags, badges) |
--radius-md | 8px | Medium border radius (cards, inputs) |
--radius-lg | 12px | Large border radius (feature images) |
--radius-xl | 16px | Extra 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:
- Download the theme zip from Ghost Admin.
- Extract and edit
package.json. - Change
"posts_per_page": 10to your desired number. - Re-zip and upload the theme.
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
- Download and extract the theme zip.
- Open
locales/en.jsonto see all translatable strings. - Create a new file for your language, e.g.
locales/fr.jsonfor French,locales/de.jsonfor German. - Copy the contents of
en.jsonand translate the values (right side) while keeping the keys (left side) unchanged. - Set your site language in Settings → General → Publication language (e.g.,
frfor French). - 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"
}
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:
- Email: p@ccly.dev
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.
Comments
Vestige supports Ghost's native commenting system. Enable it in Settings → Membership → Commenting.
Options: