v0.1.4 개발 실행 별칭 및 샘플 콘텐츠 추가

This commit is contained in:
2026-04-13 11:43:13 +09:00
parent a9d07dcfdc
commit d3c8059d56
7 changed files with 717 additions and 1 deletions

1
.gitignore vendored
View File

@@ -1,6 +1,7 @@
.DS_Store
.cursor/
.vscode/
package-lock.json
AGENTS.md
docs/
theme-export/

View File

@@ -24,6 +24,7 @@ This repository contains a Ghost theme scaffold inspired by the `Thred` referenc
2. Open `http://localhost:2368/ghost` and complete the local Ghost setup
3. Activate the `ghost-theme-thred-clone` theme in `Settings -> Design`
4. After theme changes, run `npm run dev:ghost:restart`
5. To add local sample categories and posts, run `npm run dev:seed` and import the generated JSON file from Ghost Admin
The local Docker setup syncs only theme-related files into `.docker/theme/ghost-theme-thred-clone`, so work files such as `docs/` or `local-ghost/` do not slow down Ghost startup.

View File

@@ -1,6 +1,6 @@
{
"name": "ghost-theme-thred-clone",
"version": "0.1.3",
"version": "0.1.4",
"private": true,
"description": "A Ghost theme inspired by the Thred reference layout.",
"author": {
@@ -68,7 +68,10 @@
}
},
"scripts": {
"dev": "npm run dev:ghost:start",
"dev:sync": "sh ./scripts/sync-theme.sh",
"dev:seed": "node ./scripts/build-sample-content.js",
"dev:seed:zip": "npm run dev:seed && cd seed && zip -q -r thred-inspired-sample-content.ghost.zip thred-inspired-sample-content.ghost.json",
"dev:ghost:start": "npm run dev:sync && docker compose up -d",
"dev:ghost:restart": "npm run dev:sync && docker compose restart ghost",
"dev:ghost:stop": "docker compose down",

View File

@@ -0,0 +1,143 @@
const fs = require('fs');
const path = require('path');
const outputDir = path.join(__dirname, '..', 'seed');
const outputFile = path.join(outputDir, 'thred-inspired-sample-content.ghost.json');
const tags = [
{id: 'tag-books', name: 'Books', slug: 'books'},
{id: 'tag-business', name: 'Business', slug: 'business'},
{id: 'tag-tech', name: 'Tech', slug: 'tech'},
{id: 'tag-science', name: 'Science', slug: 'science'},
{id: 'tag-design', name: 'Design', slug: 'design'},
{id: 'tag-music', name: 'Music', slug: 'music'},
{id: 'tag-health', name: 'Health', slug: 'health'},
{id: 'tag-gaming', name: 'Gaming', slug: 'gaming'},
{id: 'tag-travel', name: 'Travel', slug: 'travel'},
{id: 'tag-diy', name: 'DIY', slug: 'diy'}
];
const postBlueprints = [
['books', 'Independent bookstores worth planning a full afternoon around', 'A short guide to cozy stores, smart curation, and how to browse without rushing the experience.'],
['books', 'How to build a reading routine when your schedule is a mess', 'Simple habits for reading more consistently without turning books into another productivity task.'],
['business', 'Pricing freelance design work without undercutting your future self', 'A practical framework for deciding rates, packaging work, and handling client expectations early.'],
['business', 'What small teams should document before they scale too fast', 'The lightweight systems that reduce chaos before hiring and handoff complexity grow.'],
['tech', 'Setting up your first home server without making it too complicated', 'A beginner-friendly overview of hardware choices, storage planning, and sensible first services.'],
['tech', 'AI tools that feel genuinely useful in a daily workflow', 'A grounded look at where automation helps, where it interrupts, and how to evaluate tradeoffs.'],
['science', 'Climate reporting habits that make difficult research easier to follow', 'How to read scientific updates with context, avoid hype, and keep track of what changed.'],
['science', 'What makes a good science explainer feel trustworthy', 'Clarity, framing, and citation habits that help complex ideas stay readable without becoming shallow.'],
['design', 'Portfolio case studies that show thinking instead of decoration', 'How to structure project stories so decisions, constraints, and outcomes are easy to understand.'],
['design', 'Why some interfaces feel calm even when they are information dense', 'Spacing, hierarchy, rhythm, and restraint working together to reduce visual stress.'],
['music', 'Starter listening setups that make home music sessions more enjoyable', 'A realistic guide to headphones, speakers, and desk setups for focused everyday listening.'],
['music', 'Beginner friendly ways to organize samples before a project gets messy', 'Folder structures, naming patterns, and curation habits that save time later.'],
['health', 'Morning routines that support energy without pretending every day is perfect', 'Flexible routines for sleep, movement, hydration, and focus that can survive real schedules.'],
['health', 'Meal prep ideas for people who get bored of repeating the same lunch', 'Modular ingredients and simple flavor changes that keep weekday meals easier to sustain.'],
['gaming', 'Games that are easy to recommend when friends like different genres', 'A list of accessible picks that still feel distinct in pacing, tone, and challenge.'],
['gaming', 'What actually matters most in a first gaming PC build', 'The parts worth prioritizing, where to save money, and how to avoid lopsided builds.'],
['travel', 'A slower approach to city travel for people who hate checklist tourism', 'How to shape a trip around neighborhoods, cafés, bookstores, and repeated visits instead of rushing.'],
['travel', 'Packing for a week with one bag without feeling underprepared', 'A calm, repeatable packing system focused on layering, daily use, and fewer just-in-case items.'],
['diy', 'Home workshop basics for makers who only have a small corner to work in', 'The compact tools and storage habits that make limited spaces feel surprisingly capable.'],
['diy', 'Simple repair projects that build confidence before bigger DIY upgrades', 'Low-risk weekend fixes that teach useful fundamentals without requiring specialist equipment.']
];
const featureImages = {
books: 'https://images.unsplash.com/photo-1521587760476-6c12a4b040da?auto=format&fit=crop&w=1200&q=80',
business: 'https://images.unsplash.com/photo-1552664730-d307ca884978?auto=format&fit=crop&w=1200&q=80',
tech: 'https://images.unsplash.com/photo-1518770660439-4636190af475?auto=format&fit=crop&w=1200&q=80',
science: 'https://images.unsplash.com/photo-1532187863486-abf9dbad1b69?auto=format&fit=crop&w=1200&q=80',
design: 'https://images.unsplash.com/photo-1498050108023-c5249f4df085?auto=format&fit=crop&w=1200&q=80',
music: 'https://images.unsplash.com/photo-1511379938547-c1f69419868d?auto=format&fit=crop&w=1200&q=80',
health: 'https://images.unsplash.com/photo-1517836357463-d25dfeac3438?auto=format&fit=crop&w=1200&q=80',
gaming: 'https://images.unsplash.com/photo-1542751371-adc38448a05e?auto=format&fit=crop&w=1200&q=80',
travel: 'https://images.unsplash.com/photo-1500530855697-b586d89ba3ee?auto=format&fit=crop&w=1200&q=80',
diy: 'https://images.unsplash.com/photo-1504148455328-c376907d081c?auto=format&fit=crop&w=1200&q=80'
};
function toMobiledoc(paragraphs) {
return JSON.stringify({
version: '0.3.1',
atoms: [],
cards: [],
markups: [],
sections: paragraphs.map((text) => [1, 'p', [[0, [], 0, text]]])
});
}
function toSlug(text) {
return text
.toLowerCase()
.replace(/[^a-z0-9\s-]/g, '')
.trim()
.replace(/\s+/g, '-');
}
function dateString(offsetDays) {
const date = new Date(Date.UTC(2026, 1, 1, 3, 0, 0));
date.setUTCDate(date.getUTCDate() - offsetDays);
return date.toISOString().slice(0, 19).replace('T', ' ');
}
const posts = [];
const postsMeta = [];
const postsTags = [];
postBlueprints.forEach(([tagSlug, title, excerpt], index) => {
const postId = `post-${index + 1}`;
const tag = tags.find((item) => item.slug === tagSlug);
const body = [
excerpt,
'This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.',
'Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.'
];
posts.push({
id: postId,
title,
slug: toSlug(title),
status: 'published',
visibility: 'public',
type: 'post',
featured: index % 5 === 0,
custom_excerpt: excerpt,
feature_image: featureImages[tagSlug],
mobiledoc: toMobiledoc(body),
created_at: dateString(index + 3),
updated_at: dateString(index + 2),
published_at: dateString(index + 3)
});
postsMeta.push({
post_id: postId,
feature_image_alt: `${tag.name} sample article cover image`,
feature_image_caption: `${tag.name} category sample content`
});
postsTags.push({
post_id: postId,
tag_id: tag.id
});
});
const payload = {
db: [
{
meta: {
exported_on: Date.now(),
version: '6.28.0'
},
data: {
posts,
posts_meta: postsMeta,
tags,
posts_tags: postsTags,
users: [],
posts_authors: []
}
}
]
};
fs.mkdirSync(outputDir, {recursive: true});
fs.writeFileSync(outputFile, JSON.stringify(payload, null, 2));
console.log(`Sample Ghost import written to ${outputFile}`);

View File

@@ -14,6 +14,7 @@ rsync -a --delete \
--exclude='.docker/' \
--exclude='docs/' \
--exclude='local-ghost/' \
--exclude='seed/' \
--exclude='theme-export/' \
--exclude='scripts/' \
--exclude='*.zip' \

15
seed/README.md Normal file
View File

@@ -0,0 +1,15 @@
# Sample Content
Run `npm run dev:seed` to regenerate the local Ghost import file.
Then import `seed/thred-inspired-sample-content.ghost.json` from Ghost Admin:
1. Open `http://localhost:2368/ghost`
2. Go to `Settings -> Advanced -> Import/Export`
3. Use the Universal import option
This sample file contains:
- 10 category-like tags
- 20 published posts
- realistic excerpts and body copy for layout testing

View File

@@ -0,0 +1,552 @@
{
"db": [
{
"meta": {
"exported_on": 1776048101286,
"version": "6.28.0"
},
"data": {
"posts": [
{
"id": "post-1",
"title": "Independent bookstores worth planning a full afternoon around",
"slug": "independent-bookstores-worth-planning-a-full-afternoon-around",
"status": "published",
"visibility": "public",
"type": "post",
"featured": true,
"custom_excerpt": "A short guide to cozy stores, smart curation, and how to browse without rushing the experience.",
"feature_image": "https://images.unsplash.com/photo-1521587760476-6c12a4b040da?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"A short guide to cozy stores, smart curation, and how to browse without rushing the experience.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-29 03:00:00",
"updated_at": "2026-01-30 03:00:00",
"published_at": "2026-01-29 03:00:00"
},
{
"id": "post-2",
"title": "How to build a reading routine when your schedule is a mess",
"slug": "how-to-build-a-reading-routine-when-your-schedule-is-a-mess",
"status": "published",
"visibility": "public",
"type": "post",
"featured": false,
"custom_excerpt": "Simple habits for reading more consistently without turning books into another productivity task.",
"feature_image": "https://images.unsplash.com/photo-1521587760476-6c12a4b040da?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"Simple habits for reading more consistently without turning books into another productivity task.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-28 03:00:00",
"updated_at": "2026-01-29 03:00:00",
"published_at": "2026-01-28 03:00:00"
},
{
"id": "post-3",
"title": "Pricing freelance design work without undercutting your future self",
"slug": "pricing-freelance-design-work-without-undercutting-your-future-self",
"status": "published",
"visibility": "public",
"type": "post",
"featured": false,
"custom_excerpt": "A practical framework for deciding rates, packaging work, and handling client expectations early.",
"feature_image": "https://images.unsplash.com/photo-1552664730-d307ca884978?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"A practical framework for deciding rates, packaging work, and handling client expectations early.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-27 03:00:00",
"updated_at": "2026-01-28 03:00:00",
"published_at": "2026-01-27 03:00:00"
},
{
"id": "post-4",
"title": "What small teams should document before they scale too fast",
"slug": "what-small-teams-should-document-before-they-scale-too-fast",
"status": "published",
"visibility": "public",
"type": "post",
"featured": false,
"custom_excerpt": "The lightweight systems that reduce chaos before hiring and handoff complexity grow.",
"feature_image": "https://images.unsplash.com/photo-1552664730-d307ca884978?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"The lightweight systems that reduce chaos before hiring and handoff complexity grow.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-26 03:00:00",
"updated_at": "2026-01-27 03:00:00",
"published_at": "2026-01-26 03:00:00"
},
{
"id": "post-5",
"title": "Setting up your first home server without making it too complicated",
"slug": "setting-up-your-first-home-server-without-making-it-too-complicated",
"status": "published",
"visibility": "public",
"type": "post",
"featured": false,
"custom_excerpt": "A beginner-friendly overview of hardware choices, storage planning, and sensible first services.",
"feature_image": "https://images.unsplash.com/photo-1518770660439-4636190af475?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"A beginner-friendly overview of hardware choices, storage planning, and sensible first services.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-25 03:00:00",
"updated_at": "2026-01-26 03:00:00",
"published_at": "2026-01-25 03:00:00"
},
{
"id": "post-6",
"title": "AI tools that feel genuinely useful in a daily workflow",
"slug": "ai-tools-that-feel-genuinely-useful-in-a-daily-workflow",
"status": "published",
"visibility": "public",
"type": "post",
"featured": true,
"custom_excerpt": "A grounded look at where automation helps, where it interrupts, and how to evaluate tradeoffs.",
"feature_image": "https://images.unsplash.com/photo-1518770660439-4636190af475?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"A grounded look at where automation helps, where it interrupts, and how to evaluate tradeoffs.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-24 03:00:00",
"updated_at": "2026-01-25 03:00:00",
"published_at": "2026-01-24 03:00:00"
},
{
"id": "post-7",
"title": "Climate reporting habits that make difficult research easier to follow",
"slug": "climate-reporting-habits-that-make-difficult-research-easier-to-follow",
"status": "published",
"visibility": "public",
"type": "post",
"featured": false,
"custom_excerpt": "How to read scientific updates with context, avoid hype, and keep track of what changed.",
"feature_image": "https://images.unsplash.com/photo-1532187863486-abf9dbad1b69?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"How to read scientific updates with context, avoid hype, and keep track of what changed.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-23 03:00:00",
"updated_at": "2026-01-24 03:00:00",
"published_at": "2026-01-23 03:00:00"
},
{
"id": "post-8",
"title": "What makes a good science explainer feel trustworthy",
"slug": "what-makes-a-good-science-explainer-feel-trustworthy",
"status": "published",
"visibility": "public",
"type": "post",
"featured": false,
"custom_excerpt": "Clarity, framing, and citation habits that help complex ideas stay readable without becoming shallow.",
"feature_image": "https://images.unsplash.com/photo-1532187863486-abf9dbad1b69?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"Clarity, framing, and citation habits that help complex ideas stay readable without becoming shallow.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-22 03:00:00",
"updated_at": "2026-01-23 03:00:00",
"published_at": "2026-01-22 03:00:00"
},
{
"id": "post-9",
"title": "Portfolio case studies that show thinking instead of decoration",
"slug": "portfolio-case-studies-that-show-thinking-instead-of-decoration",
"status": "published",
"visibility": "public",
"type": "post",
"featured": false,
"custom_excerpt": "How to structure project stories so decisions, constraints, and outcomes are easy to understand.",
"feature_image": "https://images.unsplash.com/photo-1498050108023-c5249f4df085?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"How to structure project stories so decisions, constraints, and outcomes are easy to understand.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-21 03:00:00",
"updated_at": "2026-01-22 03:00:00",
"published_at": "2026-01-21 03:00:00"
},
{
"id": "post-10",
"title": "Why some interfaces feel calm even when they are information dense",
"slug": "why-some-interfaces-feel-calm-even-when-they-are-information-dense",
"status": "published",
"visibility": "public",
"type": "post",
"featured": false,
"custom_excerpt": "Spacing, hierarchy, rhythm, and restraint working together to reduce visual stress.",
"feature_image": "https://images.unsplash.com/photo-1498050108023-c5249f4df085?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"Spacing, hierarchy, rhythm, and restraint working together to reduce visual stress.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-20 03:00:00",
"updated_at": "2026-01-21 03:00:00",
"published_at": "2026-01-20 03:00:00"
},
{
"id": "post-11",
"title": "Starter listening setups that make home music sessions more enjoyable",
"slug": "starter-listening-setups-that-make-home-music-sessions-more-enjoyable",
"status": "published",
"visibility": "public",
"type": "post",
"featured": true,
"custom_excerpt": "A realistic guide to headphones, speakers, and desk setups for focused everyday listening.",
"feature_image": "https://images.unsplash.com/photo-1511379938547-c1f69419868d?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"A realistic guide to headphones, speakers, and desk setups for focused everyday listening.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-19 03:00:00",
"updated_at": "2026-01-20 03:00:00",
"published_at": "2026-01-19 03:00:00"
},
{
"id": "post-12",
"title": "Beginner friendly ways to organize samples before a project gets messy",
"slug": "beginner-friendly-ways-to-organize-samples-before-a-project-gets-messy",
"status": "published",
"visibility": "public",
"type": "post",
"featured": false,
"custom_excerpt": "Folder structures, naming patterns, and curation habits that save time later.",
"feature_image": "https://images.unsplash.com/photo-1511379938547-c1f69419868d?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"Folder structures, naming patterns, and curation habits that save time later.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-18 03:00:00",
"updated_at": "2026-01-19 03:00:00",
"published_at": "2026-01-18 03:00:00"
},
{
"id": "post-13",
"title": "Morning routines that support energy without pretending every day is perfect",
"slug": "morning-routines-that-support-energy-without-pretending-every-day-is-perfect",
"status": "published",
"visibility": "public",
"type": "post",
"featured": false,
"custom_excerpt": "Flexible routines for sleep, movement, hydration, and focus that can survive real schedules.",
"feature_image": "https://images.unsplash.com/photo-1517836357463-d25dfeac3438?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"Flexible routines for sleep, movement, hydration, and focus that can survive real schedules.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-17 03:00:00",
"updated_at": "2026-01-18 03:00:00",
"published_at": "2026-01-17 03:00:00"
},
{
"id": "post-14",
"title": "Meal prep ideas for people who get bored of repeating the same lunch",
"slug": "meal-prep-ideas-for-people-who-get-bored-of-repeating-the-same-lunch",
"status": "published",
"visibility": "public",
"type": "post",
"featured": false,
"custom_excerpt": "Modular ingredients and simple flavor changes that keep weekday meals easier to sustain.",
"feature_image": "https://images.unsplash.com/photo-1517836357463-d25dfeac3438?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"Modular ingredients and simple flavor changes that keep weekday meals easier to sustain.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-16 03:00:00",
"updated_at": "2026-01-17 03:00:00",
"published_at": "2026-01-16 03:00:00"
},
{
"id": "post-15",
"title": "Games that are easy to recommend when friends like different genres",
"slug": "games-that-are-easy-to-recommend-when-friends-like-different-genres",
"status": "published",
"visibility": "public",
"type": "post",
"featured": false,
"custom_excerpt": "A list of accessible picks that still feel distinct in pacing, tone, and challenge.",
"feature_image": "https://images.unsplash.com/photo-1542751371-adc38448a05e?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"A list of accessible picks that still feel distinct in pacing, tone, and challenge.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-15 03:00:00",
"updated_at": "2026-01-16 03:00:00",
"published_at": "2026-01-15 03:00:00"
},
{
"id": "post-16",
"title": "What actually matters most in a first gaming PC build",
"slug": "what-actually-matters-most-in-a-first-gaming-pc-build",
"status": "published",
"visibility": "public",
"type": "post",
"featured": true,
"custom_excerpt": "The parts worth prioritizing, where to save money, and how to avoid lopsided builds.",
"feature_image": "https://images.unsplash.com/photo-1542751371-adc38448a05e?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"The parts worth prioritizing, where to save money, and how to avoid lopsided builds.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-14 03:00:00",
"updated_at": "2026-01-15 03:00:00",
"published_at": "2026-01-14 03:00:00"
},
{
"id": "post-17",
"title": "A slower approach to city travel for people who hate checklist tourism",
"slug": "a-slower-approach-to-city-travel-for-people-who-hate-checklist-tourism",
"status": "published",
"visibility": "public",
"type": "post",
"featured": false,
"custom_excerpt": "How to shape a trip around neighborhoods, cafés, bookstores, and repeated visits instead of rushing.",
"feature_image": "https://images.unsplash.com/photo-1500530855697-b586d89ba3ee?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"How to shape a trip around neighborhoods, cafés, bookstores, and repeated visits instead of rushing.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-13 03:00:00",
"updated_at": "2026-01-14 03:00:00",
"published_at": "2026-01-13 03:00:00"
},
{
"id": "post-18",
"title": "Packing for a week with one bag without feeling underprepared",
"slug": "packing-for-a-week-with-one-bag-without-feeling-underprepared",
"status": "published",
"visibility": "public",
"type": "post",
"featured": false,
"custom_excerpt": "A calm, repeatable packing system focused on layering, daily use, and fewer just-in-case items.",
"feature_image": "https://images.unsplash.com/photo-1500530855697-b586d89ba3ee?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"A calm, repeatable packing system focused on layering, daily use, and fewer just-in-case items.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-12 03:00:00",
"updated_at": "2026-01-13 03:00:00",
"published_at": "2026-01-12 03:00:00"
},
{
"id": "post-19",
"title": "Home workshop basics for makers who only have a small corner to work in",
"slug": "home-workshop-basics-for-makers-who-only-have-a-small-corner-to-work-in",
"status": "published",
"visibility": "public",
"type": "post",
"featured": false,
"custom_excerpt": "The compact tools and storage habits that make limited spaces feel surprisingly capable.",
"feature_image": "https://images.unsplash.com/photo-1504148455328-c376907d081c?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"The compact tools and storage habits that make limited spaces feel surprisingly capable.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-11 03:00:00",
"updated_at": "2026-01-12 03:00:00",
"published_at": "2026-01-11 03:00:00"
},
{
"id": "post-20",
"title": "Simple repair projects that build confidence before bigger DIY upgrades",
"slug": "simple-repair-projects-that-build-confidence-before-bigger-diy-upgrades",
"status": "published",
"visibility": "public",
"type": "post",
"featured": false,
"custom_excerpt": "Low-risk weekend fixes that teach useful fundamentals without requiring specialist equipment.",
"feature_image": "https://images.unsplash.com/photo-1504148455328-c376907d081c?auto=format&fit=crop&w=1200&q=80",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"Low-risk weekend fixes that teach useful fundamentals without requiring specialist equipment.\"]]],[1,\"p\",[[0,[],0,\"This sample post exists to help preview archive lists, tag pages, and reading layouts while the theme is being refined.\"]]],[1,\"p\",[[0,[],0,\"Once the structure and styling feel right, these placeholders can be replaced with real editorial content inside Ghost Admin.\"]]]]}",
"created_at": "2026-01-10 03:00:00",
"updated_at": "2026-01-11 03:00:00",
"published_at": "2026-01-10 03:00:00"
}
],
"posts_meta": [
{
"post_id": "post-1",
"feature_image_alt": "Books sample article cover image",
"feature_image_caption": "Books category sample content"
},
{
"post_id": "post-2",
"feature_image_alt": "Books sample article cover image",
"feature_image_caption": "Books category sample content"
},
{
"post_id": "post-3",
"feature_image_alt": "Business sample article cover image",
"feature_image_caption": "Business category sample content"
},
{
"post_id": "post-4",
"feature_image_alt": "Business sample article cover image",
"feature_image_caption": "Business category sample content"
},
{
"post_id": "post-5",
"feature_image_alt": "Tech sample article cover image",
"feature_image_caption": "Tech category sample content"
},
{
"post_id": "post-6",
"feature_image_alt": "Tech sample article cover image",
"feature_image_caption": "Tech category sample content"
},
{
"post_id": "post-7",
"feature_image_alt": "Science sample article cover image",
"feature_image_caption": "Science category sample content"
},
{
"post_id": "post-8",
"feature_image_alt": "Science sample article cover image",
"feature_image_caption": "Science category sample content"
},
{
"post_id": "post-9",
"feature_image_alt": "Design sample article cover image",
"feature_image_caption": "Design category sample content"
},
{
"post_id": "post-10",
"feature_image_alt": "Design sample article cover image",
"feature_image_caption": "Design category sample content"
},
{
"post_id": "post-11",
"feature_image_alt": "Music sample article cover image",
"feature_image_caption": "Music category sample content"
},
{
"post_id": "post-12",
"feature_image_alt": "Music sample article cover image",
"feature_image_caption": "Music category sample content"
},
{
"post_id": "post-13",
"feature_image_alt": "Health sample article cover image",
"feature_image_caption": "Health category sample content"
},
{
"post_id": "post-14",
"feature_image_alt": "Health sample article cover image",
"feature_image_caption": "Health category sample content"
},
{
"post_id": "post-15",
"feature_image_alt": "Gaming sample article cover image",
"feature_image_caption": "Gaming category sample content"
},
{
"post_id": "post-16",
"feature_image_alt": "Gaming sample article cover image",
"feature_image_caption": "Gaming category sample content"
},
{
"post_id": "post-17",
"feature_image_alt": "Travel sample article cover image",
"feature_image_caption": "Travel category sample content"
},
{
"post_id": "post-18",
"feature_image_alt": "Travel sample article cover image",
"feature_image_caption": "Travel category sample content"
},
{
"post_id": "post-19",
"feature_image_alt": "DIY sample article cover image",
"feature_image_caption": "DIY category sample content"
},
{
"post_id": "post-20",
"feature_image_alt": "DIY sample article cover image",
"feature_image_caption": "DIY category sample content"
}
],
"tags": [
{
"id": "tag-books",
"name": "Books",
"slug": "books"
},
{
"id": "tag-business",
"name": "Business",
"slug": "business"
},
{
"id": "tag-tech",
"name": "Tech",
"slug": "tech"
},
{
"id": "tag-science",
"name": "Science",
"slug": "science"
},
{
"id": "tag-design",
"name": "Design",
"slug": "design"
},
{
"id": "tag-music",
"name": "Music",
"slug": "music"
},
{
"id": "tag-health",
"name": "Health",
"slug": "health"
},
{
"id": "tag-gaming",
"name": "Gaming",
"slug": "gaming"
},
{
"id": "tag-travel",
"name": "Travel",
"slug": "travel"
},
{
"id": "tag-diy",
"name": "DIY",
"slug": "diy"
}
],
"posts_tags": [
{
"post_id": "post-1",
"tag_id": "tag-books"
},
{
"post_id": "post-2",
"tag_id": "tag-books"
},
{
"post_id": "post-3",
"tag_id": "tag-business"
},
{
"post_id": "post-4",
"tag_id": "tag-business"
},
{
"post_id": "post-5",
"tag_id": "tag-tech"
},
{
"post_id": "post-6",
"tag_id": "tag-tech"
},
{
"post_id": "post-7",
"tag_id": "tag-science"
},
{
"post_id": "post-8",
"tag_id": "tag-science"
},
{
"post_id": "post-9",
"tag_id": "tag-design"
},
{
"post_id": "post-10",
"tag_id": "tag-design"
},
{
"post_id": "post-11",
"tag_id": "tag-music"
},
{
"post_id": "post-12",
"tag_id": "tag-music"
},
{
"post_id": "post-13",
"tag_id": "tag-health"
},
{
"post_id": "post-14",
"tag_id": "tag-health"
},
{
"post_id": "post-15",
"tag_id": "tag-gaming"
},
{
"post_id": "post-16",
"tag_id": "tag-gaming"
},
{
"post_id": "post-17",
"tag_id": "tag-travel"
},
{
"post_id": "post-18",
"tag_id": "tag-travel"
},
{
"post_id": "post-19",
"tag_id": "tag-diy"
},
{
"post_id": "post-20",
"tag_id": "tag-diy"
}
],
"users": [],
"posts_authors": []
}
}
]
}