Kitchen Sink: Every Ghost Element in One Post
Typography
This is a regular paragraph with bold text, italic text, bold italic, inline code, a link, and strikethrough text. The quick brown fox jumps over the lazy dog.
Heading Three
Below the h3, a paragraph continues to demonstrate the spacing between heading levels and body text in the theme.
Heading Four
Fourth-level headings are used for sub-sections within a broader topic.
Heading Five
Fifth-level headings appear rarely but should still be styled correctly.
Heading Six
The smallest heading level. Useful for footnotes or minor labels.
Lists
Unordered List
- First item in the list
- Second item with more detail
- Nested item one
- Nested item two
- Deeply nested item
- Third item back at top level
- Fourth item to complete the list
Ordered List
- Clone the repository
- Install dependencies
- Run
npm install - Configure environment variables
- Run
- Start the development server
- Open the browser at
http://localhost:3000
Blockquotes
The best way to predict the future is to invent it. — Alan Kay
This is a multi-paragraph blockquote to test how the theme handles longer quoted passages.
The second paragraph continues the thought. Themes often struggle with spacing between paragraphs inside blockquotes, so this is an important edge case to verify.
A third paragraph rounds it out. If the vertical rhythm holds here, the theme's blockquote styling is solid.
Table
| Framework | Language | Stars | License | Use Case |
|---|---|---|---|---|
| React | JavaScript | 220k | MIT | Single-page apps |
| Vue | JavaScript | 207k | MIT | Progressive web apps |
| Django | Python | 78k | BSD | Full-stack web |
| Rails | Ruby | 55k | MIT | Rapid prototyping |
| Next.js | JavaScript | 124k | MIT | Server-side rendering |
Images
Normal Width Image
Wide Image with Caption
Full-Bleed Image
Gallery
Code Blocks
JavaScript
async function fetchData(url) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('Fetch failed:', error.message);
throw error;
}
}Python
from dataclasses import dataclass
from typing import Optional
@dataclass
class User:
name: str
email: str
role: str = 'viewer'
team: Optional[str] = None
def is_admin(self) -> bool:
return self.role == 'admin'CSS
.post-card {
display: grid;
grid-template-rows: auto 1fr auto;
background: var(--surface-1);
border: 1px solid var(--border);
border-radius: 12px;
overflow: hidden;
transition: transform 0.2s ease;
}
.post-card:hover {
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
}Callout Cards
Toggle / Accordion Cards
What is Ghost CMS?
Ghost is a powerful open-source publishing platform built on Node.js. It provides a clean, modern editor, built-in membership and subscription features, and a flexible theming system powered by Handlebars templates.
How do I customize a Ghost theme?
Ghost themes use Handlebars for templating, with CSS for styling. Edit the .hbs template files and CSS to change layout and appearance. Use npx gscan to validate your theme before deploying.
Does Ghost support memberships?
Yes. Ghost has built-in support for free and paid memberships via Stripe integration. You can gate content by tier, send newsletters to members, and manage subscriptions — all without plugins.
Bookmark Card

YouTube Embed
Button Card
Horizontal Rule
Content before the rule.
Content after the rule.
Mixed Content Flow
This section tests the spacing between different element types in sequence — a common source of visual bugs in themes.
A blockquote right after a paragraph to test the margin.
- A list immediately following a blockquote
- Second item in the list
And then a paragraph after the list, before a code block:
curl -s https://api.example.com/health | jq .statusThis paragraph follows the code block. All transitions between element types should have consistent, readable spacing.