- JournalFeaturedImage renders <picture> from featured_images[].variants: a WebP source and the original format as srcset fallback, the original's width and height, alt; lazy in cards, eager with fetchpriority high on the post page; unchanged without variants - app/utils/srcset.ts (imageSrcsets) with node tests - acme fixtures and SSR expectations for both cases
561 lines
15 KiB
JSON
561 lines
15 KiB
JSON
[
|
|
{
|
|
"id": 1,
|
|
"title": "Hello Acme",
|
|
"slug": "hello-acme",
|
|
"excerpt": "Acme says hello and introduces its blog.",
|
|
"content": "## Welcome to Acme\n\nAcme builds anvils, rockets and very fast roller skates.\n",
|
|
"content_html": "<h2>Welcome to Acme</h2>\n<p>Acme builds anvils, rockets and very fast roller skates.</p>\n<figure data-embed=\"youtube\" data-id=\"dQw4w9WgXcQ\"></figure>\n<p>Read <a href=\"https://partner.test/review\" rel=\"ugc\">the review</a>, <a href=\"https://shop.ads.test/deal\">a deal</a> and <a href=\"/blog/acme-note-04\">an older note</a>.</p>\n<p><img src=\"/storage/app/uploads/public/acme/anvil.png\" alt=\"\" width=\"640\" height=\"480\"></p>\n",
|
|
"reading_time": 1,
|
|
"published": true,
|
|
"published_at": "2026-01-14T09:00:00+00:00",
|
|
"is_pinned": false,
|
|
"metadata": null,
|
|
"sources": null,
|
|
"author": {
|
|
"id": 1,
|
|
"first_name": "Jane",
|
|
"last_name": "Doe",
|
|
"login": "jdoe",
|
|
"slug": "jane-doe"
|
|
},
|
|
"categories": [
|
|
{
|
|
"id": 1,
|
|
"name": "News",
|
|
"slug": "news"
|
|
}
|
|
],
|
|
"tags": [
|
|
{
|
|
"id": 1,
|
|
"name": "Release",
|
|
"slug": "release"
|
|
}
|
|
],
|
|
"featured_images": [
|
|
{
|
|
"id": 1,
|
|
"url": "/storage/app/uploads/public/acme/hello.png",
|
|
"file_name": "hello.png",
|
|
"file_size": 1024,
|
|
"variants": [
|
|
{
|
|
"width": 480,
|
|
"height": 252,
|
|
"url": "/storage/app/uploads/public/acme/thumb_1_480_252_0_0_exact.png",
|
|
"webp_url": "/storage/app/uploads/public/acme/thumb_1_480_252_0_0_exact.webp",
|
|
"source_width": 1200,
|
|
"source_height": 630
|
|
},
|
|
{
|
|
"width": 800,
|
|
"height": 420,
|
|
"url": "/storage/app/uploads/public/acme/thumb_1_800_420_0_0_exact.png",
|
|
"webp_url": "/storage/app/uploads/public/acme/thumb_1_800_420_0_0_exact.webp",
|
|
"source_width": 1200,
|
|
"source_height": 630
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"featured_image_url": "/storage/app/uploads/public/acme/hello.png",
|
|
"translations": {},
|
|
"created_at": "2026-01-14T09:00:00+00:00",
|
|
"updated_at": "2026-02-01T10:00:00+00:00"
|
|
},
|
|
{
|
|
"id": 2,
|
|
"title": "Unsafe Sample",
|
|
"slug": "unsafe-sample",
|
|
"excerpt": "Unsafe Sample: a short summary.",
|
|
"content": "Before",
|
|
"content_html": "<p>Before</p><script>alert(1)</script><p>After</p>",
|
|
"reading_time": 1,
|
|
"published": true,
|
|
"published_at": "2026-01-13T09:00:00+00:00",
|
|
"is_pinned": false,
|
|
"metadata": null,
|
|
"sources": null,
|
|
"author": {
|
|
"id": 1,
|
|
"first_name": "Jane",
|
|
"last_name": "Doe",
|
|
"login": "jdoe",
|
|
"slug": "jane-doe"
|
|
},
|
|
"categories": [
|
|
{
|
|
"id": 1,
|
|
"name": "News",
|
|
"slug": "news"
|
|
}
|
|
],
|
|
"tags": [],
|
|
"featured_images": [],
|
|
"featured_image_url": null,
|
|
"translations": {},
|
|
"created_at": "2026-01-13T09:00:00+00:00",
|
|
"updated_at": "2026-01-13T09:00:00+00:00"
|
|
},
|
|
{
|
|
"id": 3,
|
|
"title": "Acme Note 03",
|
|
"slug": "acme-note-03",
|
|
"excerpt": "Acme Note 03: a short summary.",
|
|
"content": "Acme Note 03 is a sample post for the Acme blog.",
|
|
"content_html": "<p>Acme Note 03 is a sample post for the Acme blog.</p>",
|
|
"reading_time": 1,
|
|
"published": true,
|
|
"published_at": "2026-01-12T09:00:00+00:00",
|
|
"is_pinned": false,
|
|
"metadata": null,
|
|
"sources": null,
|
|
"author": {
|
|
"id": 1,
|
|
"first_name": "Jane",
|
|
"last_name": "Doe",
|
|
"login": "jdoe",
|
|
"slug": "jane-doe"
|
|
},
|
|
"categories": [
|
|
{
|
|
"id": 1,
|
|
"name": "News",
|
|
"slug": "news"
|
|
}
|
|
],
|
|
"tags": [],
|
|
"featured_images": [
|
|
{
|
|
"id": 3,
|
|
"url": "/storage/app/uploads/public/acme/note-03.jpg",
|
|
"file_name": "note-03.jpg",
|
|
"file_size": 2048
|
|
}
|
|
],
|
|
"featured_image_url": "/storage/app/uploads/public/acme/note-03.jpg",
|
|
"translations": {},
|
|
"created_at": "2026-01-12T09:00:00+00:00",
|
|
"updated_at": "2026-01-12T09:00:00+00:00"
|
|
},
|
|
{
|
|
"id": 4,
|
|
"title": "Acme Note 04",
|
|
"slug": "acme-note-04",
|
|
"excerpt": "Acme Note 04: a short summary.",
|
|
"content": "Acme Note 04 is a sample post for the Acme blog.",
|
|
"content_html": "<p>Acme Note 04 is a sample post for the Acme blog.</p>",
|
|
"reading_time": 1,
|
|
"published": true,
|
|
"published_at": "2026-01-11T09:00:00+00:00",
|
|
"is_pinned": false,
|
|
"metadata": null,
|
|
"sources": null,
|
|
"author": {
|
|
"id": 1,
|
|
"first_name": "Jane",
|
|
"last_name": "Doe",
|
|
"login": "jdoe",
|
|
"slug": "jane-doe"
|
|
},
|
|
"categories": [
|
|
{
|
|
"id": 1,
|
|
"name": "News",
|
|
"slug": "news"
|
|
}
|
|
],
|
|
"tags": [],
|
|
"featured_images": [],
|
|
"featured_image_url": null,
|
|
"translations": {},
|
|
"created_at": "2026-01-11T09:00:00+00:00",
|
|
"updated_at": "2026-01-11T09:00:00+00:00"
|
|
},
|
|
{
|
|
"id": 5,
|
|
"title": "Acme Note 05",
|
|
"slug": "acme-note-05",
|
|
"excerpt": "Acme Note 05: a short summary.",
|
|
"content": "Acme Note 05 is a sample post for the Acme blog.",
|
|
"content_html": "<p>Acme Note 05 is a sample post for the Acme blog.</p>",
|
|
"reading_time": 1,
|
|
"published": true,
|
|
"published_at": "2026-01-10T09:00:00+00:00",
|
|
"is_pinned": false,
|
|
"metadata": null,
|
|
"sources": null,
|
|
"author": {
|
|
"id": 1,
|
|
"first_name": "Jane",
|
|
"last_name": "Doe",
|
|
"login": "jdoe",
|
|
"slug": "jane-doe"
|
|
},
|
|
"categories": [
|
|
{
|
|
"id": 1,
|
|
"name": "News",
|
|
"slug": "news"
|
|
}
|
|
],
|
|
"tags": [],
|
|
"featured_images": [],
|
|
"featured_image_url": null,
|
|
"translations": {},
|
|
"created_at": "2026-01-10T09:00:00+00:00",
|
|
"updated_at": "2026-01-10T09:00:00+00:00"
|
|
},
|
|
{
|
|
"id": 6,
|
|
"title": "Acme Note 06",
|
|
"slug": "acme-note-06",
|
|
"excerpt": "Acme Note 06: a short summary.",
|
|
"content": "Acme Note 06 is a sample post for the Acme blog.",
|
|
"content_html": "<p>Acme Note 06 is a sample post for the Acme blog.</p>",
|
|
"reading_time": 1,
|
|
"published": true,
|
|
"published_at": "2026-01-09T09:00:00+00:00",
|
|
"is_pinned": false,
|
|
"metadata": null,
|
|
"sources": null,
|
|
"author": {
|
|
"id": 1,
|
|
"first_name": "Jane",
|
|
"last_name": "Doe",
|
|
"login": "jdoe",
|
|
"slug": "jane-doe"
|
|
},
|
|
"categories": [
|
|
{
|
|
"id": 1,
|
|
"name": "News",
|
|
"slug": "news"
|
|
}
|
|
],
|
|
"tags": [],
|
|
"featured_images": [],
|
|
"featured_image_url": null,
|
|
"translations": {},
|
|
"created_at": "2026-01-09T09:00:00+00:00",
|
|
"updated_at": "2026-01-09T09:00:00+00:00"
|
|
},
|
|
{
|
|
"id": 7,
|
|
"title": "Acme Note 07",
|
|
"slug": "acme-note-07",
|
|
"excerpt": "Acme Note 07: a short summary.",
|
|
"content": "Acme Note 07 is a sample post for the Acme blog.",
|
|
"content_html": "<p>Acme Note 07 is a sample post for the Acme blog.</p>",
|
|
"reading_time": 1,
|
|
"published": true,
|
|
"published_at": "2026-01-08T09:00:00+00:00",
|
|
"is_pinned": false,
|
|
"metadata": null,
|
|
"sources": null,
|
|
"author": {
|
|
"id": 1,
|
|
"first_name": "Jane",
|
|
"last_name": "Doe",
|
|
"login": "jdoe",
|
|
"slug": "jane-doe"
|
|
},
|
|
"categories": [
|
|
{
|
|
"id": 1,
|
|
"name": "News",
|
|
"slug": "news"
|
|
}
|
|
],
|
|
"tags": [],
|
|
"featured_images": [],
|
|
"featured_image_url": null,
|
|
"translations": {},
|
|
"created_at": "2026-01-08T09:00:00+00:00",
|
|
"updated_at": "2026-01-08T09:00:00+00:00"
|
|
},
|
|
{
|
|
"id": 8,
|
|
"title": "Acme Note 08",
|
|
"slug": "acme-note-08",
|
|
"excerpt": "Acme Note 08: a short summary.",
|
|
"content": "Acme Note 08 is a sample post for the Acme blog.",
|
|
"content_html": "<p>Acme Note 08 is a sample post for the Acme blog.</p>",
|
|
"reading_time": 1,
|
|
"published": true,
|
|
"published_at": "2026-01-07T09:00:00+00:00",
|
|
"is_pinned": false,
|
|
"metadata": null,
|
|
"sources": null,
|
|
"author": {
|
|
"id": 1,
|
|
"first_name": "Jane",
|
|
"last_name": "Doe",
|
|
"login": "jdoe",
|
|
"slug": "jane-doe"
|
|
},
|
|
"categories": [
|
|
{
|
|
"id": 1,
|
|
"name": "News",
|
|
"slug": "news"
|
|
}
|
|
],
|
|
"tags": [],
|
|
"featured_images": [],
|
|
"featured_image_url": null,
|
|
"translations": {},
|
|
"created_at": "2026-01-07T09:00:00+00:00",
|
|
"updated_at": "2026-01-07T09:00:00+00:00"
|
|
},
|
|
{
|
|
"id": 9,
|
|
"title": "Acme Note 09",
|
|
"slug": "acme-note-09",
|
|
"excerpt": "Acme Note 09: a short summary.",
|
|
"content": "Acme Note 09 is a sample post for the Acme blog.",
|
|
"content_html": "<p>Acme Note 09 is a sample post for the Acme blog.</p>",
|
|
"reading_time": 1,
|
|
"published": true,
|
|
"published_at": "2026-01-06T09:00:00+00:00",
|
|
"is_pinned": false,
|
|
"metadata": null,
|
|
"sources": null,
|
|
"author": {
|
|
"id": 1,
|
|
"first_name": "Jane",
|
|
"last_name": "Doe",
|
|
"login": "jdoe",
|
|
"slug": "jane-doe"
|
|
},
|
|
"categories": [
|
|
{
|
|
"id": 1,
|
|
"name": "News",
|
|
"slug": "news"
|
|
}
|
|
],
|
|
"tags": [],
|
|
"featured_images": [],
|
|
"featured_image_url": null,
|
|
"translations": {},
|
|
"created_at": "2026-01-06T09:00:00+00:00",
|
|
"updated_at": "2026-01-06T09:00:00+00:00"
|
|
},
|
|
{
|
|
"id": 10,
|
|
"title": "Acme Note 10",
|
|
"slug": "acme-note-10",
|
|
"excerpt": "Acme Note 10: a short summary.",
|
|
"content": "Acme Note 10 is a sample post for the Acme blog.",
|
|
"content_html": "<p>Acme Note 10 is a sample post for the Acme blog.</p>",
|
|
"reading_time": 1,
|
|
"published": true,
|
|
"published_at": "2026-01-05T09:00:00+00:00",
|
|
"is_pinned": false,
|
|
"metadata": null,
|
|
"sources": null,
|
|
"author": {
|
|
"id": 1,
|
|
"first_name": "Jane",
|
|
"last_name": "Doe",
|
|
"login": "jdoe",
|
|
"slug": "jane-doe"
|
|
},
|
|
"categories": [
|
|
{
|
|
"id": 1,
|
|
"name": "News",
|
|
"slug": "news"
|
|
}
|
|
],
|
|
"tags": [],
|
|
"featured_images": [],
|
|
"featured_image_url": null,
|
|
"translations": {},
|
|
"created_at": "2026-01-05T09:00:00+00:00",
|
|
"updated_at": "2026-01-05T09:00:00+00:00"
|
|
},
|
|
{
|
|
"id": 11,
|
|
"title": "Acme Note 11",
|
|
"slug": "acme-note-11",
|
|
"excerpt": "Acme Note 11: a short summary.",
|
|
"content": "Acme Note 11 is a sample post for the Acme blog.",
|
|
"content_html": "<p>Acme Note 11 is a sample post for the Acme blog.</p>",
|
|
"reading_time": 1,
|
|
"published": true,
|
|
"published_at": "2026-01-04T09:00:00+00:00",
|
|
"is_pinned": false,
|
|
"metadata": null,
|
|
"sources": null,
|
|
"author": {
|
|
"id": 1,
|
|
"first_name": "Jane",
|
|
"last_name": "Doe",
|
|
"login": "jdoe",
|
|
"slug": "jane-doe"
|
|
},
|
|
"categories": [
|
|
{
|
|
"id": 1,
|
|
"name": "News",
|
|
"slug": "news"
|
|
}
|
|
],
|
|
"tags": [],
|
|
"featured_images": [],
|
|
"featured_image_url": null,
|
|
"translations": {},
|
|
"created_at": "2026-01-04T09:00:00+00:00",
|
|
"updated_at": "2026-01-04T09:00:00+00:00"
|
|
},
|
|
{
|
|
"id": 12,
|
|
"title": "Acme Note 12",
|
|
"slug": "acme-note-12",
|
|
"excerpt": "Acme Note 12: a short summary.",
|
|
"content": "Acme Note 12 is a sample post for the Acme blog.",
|
|
"content_html": "<p>Acme Note 12 is a sample post for the Acme blog.</p>",
|
|
"reading_time": 1,
|
|
"published": true,
|
|
"published_at": "2026-01-03T09:00:00+00:00",
|
|
"is_pinned": false,
|
|
"metadata": null,
|
|
"sources": null,
|
|
"author": {
|
|
"id": 1,
|
|
"first_name": "Jane",
|
|
"last_name": "Doe",
|
|
"login": "jdoe",
|
|
"slug": "jane-doe"
|
|
},
|
|
"categories": [
|
|
{
|
|
"id": 1,
|
|
"name": "News",
|
|
"slug": "news"
|
|
}
|
|
],
|
|
"tags": [],
|
|
"featured_images": [],
|
|
"featured_image_url": null,
|
|
"translations": {},
|
|
"created_at": "2026-01-03T09:00:00+00:00",
|
|
"updated_at": "2026-01-03T09:00:00+00:00"
|
|
},
|
|
{
|
|
"id": 13,
|
|
"title": "Uncategorised Note",
|
|
"slug": "uncategorised-note",
|
|
"excerpt": "Uncategorised Note: a short summary.",
|
|
"content": "Uncategorised Note is a sample post for the Acme blog.",
|
|
"content_html": "<p>Uncategorised Note is a sample post for the Acme blog.</p>",
|
|
"reading_time": 1,
|
|
"published": true,
|
|
"published_at": "2026-01-02T09:00:00+00:00",
|
|
"is_pinned": false,
|
|
"metadata": null,
|
|
"sources": null,
|
|
"author": null,
|
|
"categories": [],
|
|
"tags": [],
|
|
"featured_images": [],
|
|
"featured_image_url": null,
|
|
"translations": {},
|
|
"created_at": "2026-01-02T09:00:00+00:00",
|
|
"updated_at": "2026-01-02T09:00:00+00:00"
|
|
},
|
|
{
|
|
"id": 14,
|
|
"title": "Draft Note",
|
|
"slug": "draft-note",
|
|
"excerpt": "Draft Note: a short summary.",
|
|
"content": "Draft Note is a sample post for the Acme blog.",
|
|
"content_html": "<p>Draft Note is a sample post for the Acme blog.</p>",
|
|
"reading_time": 1,
|
|
"published": false,
|
|
"published_at": "2026-01-20T09:00:00+00:00",
|
|
"is_pinned": false,
|
|
"metadata": null,
|
|
"sources": null,
|
|
"author": {
|
|
"id": 1,
|
|
"first_name": "Jane",
|
|
"last_name": "Doe",
|
|
"login": "jdoe",
|
|
"slug": "jane-doe"
|
|
},
|
|
"categories": [
|
|
{
|
|
"id": 1,
|
|
"name": "News",
|
|
"slug": "news"
|
|
}
|
|
],
|
|
"tags": [],
|
|
"featured_images": [],
|
|
"featured_image_url": null,
|
|
"translations": {},
|
|
"created_at": "2026-01-20T09:00:00+00:00",
|
|
"updated_at": "2026-01-20T09:00:00+00:00"
|
|
},
|
|
{
|
|
"id": 15,
|
|
"title": "Heading On Sample",
|
|
"slug": "heading-on",
|
|
"excerpt": "Heading On Sample shows the Journal H1 setting on.",
|
|
"content": null,
|
|
"content_html": "<h1>Body heading one</h1>\n<p>The body opens with its own top heading.</p>\n<h2>Body heading two</h2>\n<p>And continues below it.</p>\n",
|
|
"reading_time": 1,
|
|
"published": true,
|
|
"published_at": "2025-12-20T09:00:00+00:00",
|
|
"is_pinned": false,
|
|
"metadata": null,
|
|
"sources": null,
|
|
"author": null,
|
|
"categories": [],
|
|
"tags": [],
|
|
"featured_images": [],
|
|
"featured_image_url": null,
|
|
"translations": {},
|
|
"created_at": "2025-12-20T09:00:00+00:00",
|
|
"updated_at": "2025-12-20T09:00:00+00:00",
|
|
"content_h1_to_h2": true,
|
|
"previous_in_category": {
|
|
"id": 4,
|
|
"title": "Acme Note 04",
|
|
"slug": "acme-note-04"
|
|
},
|
|
"next_in_category": {
|
|
"id": 6,
|
|
"title": "Acme Note 06",
|
|
"slug": "acme-note-06"
|
|
}
|
|
},
|
|
{
|
|
"id": 16,
|
|
"title": "Heading Off Sample",
|
|
"slug": "heading-off",
|
|
"excerpt": "Heading Off Sample shows the Journal H1 setting off.",
|
|
"content": null,
|
|
"content_html": "<h1>Body heading one</h1>\n<p>The body opens with its own top heading.</p>\n<h2>Body heading two</h2>\n<p>And continues below it.</p>\n<p>See <a href=\"https://partner.test/x\" rel=\"ugc\">the partner</a> and <a href=\"https://other.test/y\">another site</a>.</p>\n",
|
|
"reading_time": 1,
|
|
"published": true,
|
|
"published_at": "2025-12-19T09:00:00+00:00",
|
|
"is_pinned": false,
|
|
"metadata": null,
|
|
"sources": null,
|
|
"author": null,
|
|
"categories": [],
|
|
"tags": [],
|
|
"featured_images": [],
|
|
"featured_image_url": null,
|
|
"translations": {},
|
|
"created_at": "2025-12-19T09:00:00+00:00",
|
|
"updated_at": "2025-12-19T09:00:00+00:00",
|
|
"content_h1_to_h2": false
|
|
}
|
|
]
|