Eko Blog Post Page Copy
Purpose: Section-by-section copy and layout spec for individual blog post pages at eko.day/blog/:slug. Post content is generated by the Blog Generator in the admin app and rendered as markdown on the public site. This document defines the surrounding chrome — header, author bio, related posts, and CTAs.
Source: Features Document
Section 1: Post Header
Component:
PostHeader— category badge, title, meta line, and hero image
Layout
| Element | Description |
|---|---|
| Category badge | Pill badge — Product, Engineering, or Stories. Links to /blog/category/:category |
| Title | Post title from the blog generator, rendered as h1 |
| Meta line | Author name · Publication date · Reading time (e.g., "5 min read") |
| Hero image | Full-width image from the blog generator's hero image field |
Design note: The meta line uses the reading time calculated from word count (approximately 200 words/minute). The publication date uses relative formatting for recent posts ("2 days ago") and absolute formatting for older posts ("January 15, 2026").
Section 2: Post Body
Component:
PostBody— rendered markdown content area
Content
The post body is rendered from the markdown content produced by the Blog Generator. Supported elements:
- Headings (h2–h4)
- Paragraphs with bold, italic, and inline code
- Ordered and unordered lists
- Code blocks with syntax highlighting
- Block quotes
- Images with alt text and captions
- Horizontal rules as section dividers
Design note: The body uses Tailwind's
prosetypography for consistent rendering. Maximum content width is constrained for readability (approximately 720px).
Section 3: Author Bio
Component:
AuthorCard— compact author bio card below the post body
Layout
| Element | Description |
|---|---|
| Avatar | Author profile image, circular crop |
| Name | Author display name |
| Role | Author's role at Eko (e.g., "Founder", "Engineer") |
| Bio | 1-2 sentence author bio |
Default Author
| Field | Value |
|---|---|
| Name | Jonathan Steele |
| Role | Founder |
| Bio | Building Eko — a smarter way to monitor the web pages that matter to you. |
Design note: The author card is a reusable component. When multiple authors contribute to the blog, each gets their own bio entry. For the initial launch, a single default author is sufficient.
Section 4: Related Posts
Component:
RelatedPostsGrid— 3-card grid of related posts below the author bio
Heading
Keep reading
Selection Logic
Related posts are selected by:
- Same category as the current post (primary signal)
- Most recent first
- Excludes the current post
Card Structure
Same structure as the post cards on the blog home page:
- Thumbnail, category badge, title, excerpt, meta line
Empty State
If fewer than 3 related posts exist, show available posts. If the current post is the only post in its category, show the most recent posts from other categories.
Section 5: Newsletter CTA
Component:
InlineNewsletterCTA— inline signup prompt after the post content
Heading
Enjoyed this post?
Body
Get new posts delivered to your inbox. We write about web monitoring, product updates, and the stories behind how people use Eko.
Primary CTA
Create an account → /signup
Section 6: Product CTA
Component:
ProductCTA— contextual Eko signup callout
Heading
See Eko in action
Body
Eko monitors web pages and tells you when something meaningful changes — in plain English, with a confidence score. Try it free.
Primary CTA
Start monitoring free → /signup
SEO Notes
Design note: Each blog post generates its own SEO metadata from the Blog Generator fields. These are set per-post, not hardcoded.
| Field | Source | Convention |
|---|---|---|
| Meta title | Blog Generator meta_title field | Max 60 characters. Format: "Post Title | Eko Blog" |
| Meta description | Blog Generator meta_description field | Max 160 characters. Summarizes the post's value to the reader. |
| OG image | Blog Generator hero_image field | 1200x630px recommended. Falls back to a default Eko blog OG image. |
| Canonical URL | Generated from slug | https://eko.day/blog/:slug |
| Structured data | JSON-LD BlogPosting | Includes author, datePublished, dateModified, headline, image |