Compare commits
2 Commits
96c220825f
...
9b1090b614
| Author | SHA1 | Date | |
|---|---|---|---|
| 9b1090b614 | |||
| 87eb6a0f84 |
+511
-55
@@ -18,9 +18,24 @@
|
||||
"urlPattern": "/cms/{slug}",
|
||||
"supports": ["search", "seo"],
|
||||
"fields": [
|
||||
{ "slug": "title", "label": "Name", "type": "string", "required": true, "searchable": true },
|
||||
{ "slug": "website", "label": "Website URL", "type": "string" },
|
||||
{ "slug": "description", "label": "Description", "type": "text", "searchable": true }
|
||||
{
|
||||
"slug": "title",
|
||||
"label": "Name",
|
||||
"type": "string",
|
||||
"required": true,
|
||||
"searchable": true
|
||||
},
|
||||
{
|
||||
"slug": "website",
|
||||
"label": "Website URL",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"slug": "description",
|
||||
"label": "Description",
|
||||
"type": "text",
|
||||
"searchable": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -30,15 +45,41 @@
|
||||
"urlPattern": "/plugins/{slug}",
|
||||
"supports": ["drafts", "search", "seo"],
|
||||
"fields": [
|
||||
{ "slug": "title", "label": "Plugin name", "type": "string", "required": true, "searchable": true },
|
||||
{ "slug": "purpose", "label": "Purpose", "type": "text", "searchable": true,
|
||||
"description": "One-line description of what the plugin does." },
|
||||
{ "slug": "source_cms", "label": "Source CMS", "type": "string", "required": true, "searchable": true,
|
||||
"description": "Name of the CMS this plugin runs on today (e.g. WordPress)." },
|
||||
{ "slug": "target_cms", "label": "Target CMS", "type": "string", "searchable": true,
|
||||
"description": "Name of the CMS we're porting to, if applicable." },
|
||||
{ "slug": "category", "label": "Category", "type": "string",
|
||||
"description": "e-commerce, SEO, content, performance, etc." },
|
||||
{
|
||||
"slug": "title",
|
||||
"label": "Plugin name",
|
||||
"type": "string",
|
||||
"required": true,
|
||||
"searchable": true
|
||||
},
|
||||
{
|
||||
"slug": "purpose",
|
||||
"label": "Purpose",
|
||||
"type": "text",
|
||||
"searchable": true,
|
||||
"description": "One-line description of what the plugin does."
|
||||
},
|
||||
{
|
||||
"slug": "source_cms",
|
||||
"label": "Source CMS",
|
||||
"type": "string",
|
||||
"required": true,
|
||||
"searchable": true,
|
||||
"description": "Name of the CMS this plugin runs on today (e.g. WordPress)."
|
||||
},
|
||||
{
|
||||
"slug": "target_cms",
|
||||
"label": "Target CMS",
|
||||
"type": "string",
|
||||
"searchable": true,
|
||||
"description": "Name of the CMS we're porting to, if applicable."
|
||||
},
|
||||
{
|
||||
"slug": "category",
|
||||
"label": "Category",
|
||||
"type": "string",
|
||||
"description": "e-commerce, SEO, content, performance, etc."
|
||||
},
|
||||
{
|
||||
"slug": "status",
|
||||
"label": "Migration status",
|
||||
@@ -47,18 +88,52 @@
|
||||
"defaultValue": "proposed",
|
||||
"searchable": true,
|
||||
"options": [
|
||||
{ "value": "port", "label": "Port" },
|
||||
{ "value": "built-in", "label": "Built-in" },
|
||||
{ "value": "saas", "label": "SaaS" },
|
||||
{ "value": "drop", "label": "Drop" },
|
||||
{ "value": "gated", "label": "Gated" },
|
||||
{ "value": "done", "label": "Done" },
|
||||
{ "value": "proposed", "label": "Proposed" }
|
||||
{
|
||||
"value": "port",
|
||||
"label": "Port"
|
||||
},
|
||||
{
|
||||
"value": "built-in",
|
||||
"label": "Built-in"
|
||||
},
|
||||
{
|
||||
"value": "saas",
|
||||
"label": "SaaS"
|
||||
},
|
||||
{
|
||||
"value": "drop",
|
||||
"label": "Drop"
|
||||
},
|
||||
{
|
||||
"value": "gated",
|
||||
"label": "Gated"
|
||||
},
|
||||
{
|
||||
"value": "done",
|
||||
"label": "Done"
|
||||
},
|
||||
{
|
||||
"value": "proposed",
|
||||
"label": "Proposed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{ "slug": "source_repo_url", "label": "Source repo URL", "type": "string" },
|
||||
{ "slug": "target_repo_url", "label": "Target repo URL", "type": "string" },
|
||||
{ "slug": "notes", "label": "Migration notes", "type": "portableText", "searchable": true }
|
||||
{
|
||||
"slug": "source_repo_url",
|
||||
"label": "Source repo URL",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"slug": "target_repo_url",
|
||||
"label": "Target repo URL",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"slug": "notes",
|
||||
"label": "Migration notes",
|
||||
"type": "portableText",
|
||||
"searchable": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -68,15 +143,31 @@
|
||||
"urlPattern": "/{slug}",
|
||||
"supports": ["drafts", "revisions", "search", "seo"],
|
||||
"fields": [
|
||||
{ "slug": "title", "label": "Title", "type": "string", "required": true, "searchable": true },
|
||||
{ "slug": "content", "label": "Content", "type": "portableText", "searchable": true },
|
||||
{ "slug": "excerpt", "label": "Excerpt", "type": "text" }
|
||||
{
|
||||
"slug": "title",
|
||||
"label": "Title",
|
||||
"type": "string",
|
||||
"required": true,
|
||||
"searchable": true
|
||||
},
|
||||
{
|
||||
"slug": "content",
|
||||
"label": "Content",
|
||||
"type": "portableText",
|
||||
"searchable": true
|
||||
},
|
||||
{
|
||||
"slug": "excerpt",
|
||||
"label": "Excerpt",
|
||||
"type": "text"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"content": {
|
||||
"cmses": [
|
||||
{
|
||||
"id": "wordpress",
|
||||
"slug": "wordpress",
|
||||
"data": {
|
||||
"title": "WordPress",
|
||||
@@ -85,6 +176,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "emdash",
|
||||
"slug": "emdash",
|
||||
"data": {
|
||||
"title": "Emdash",
|
||||
@@ -95,19 +187,39 @@
|
||||
],
|
||||
"pages": [
|
||||
{
|
||||
"id": "about",
|
||||
"slug": "about",
|
||||
"data": {
|
||||
"title": "About this catalog",
|
||||
"excerpt": "What this catalog is and how it's organized.",
|
||||
"content": [
|
||||
{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "This catalog tracks plugins from one CMS and how they map to another. The seeded entries come from the kotkanagrilli.fi WordPress → Emdash migration, where ~30 third-party and custom plugins needed to be classified before the rebuild." }] },
|
||||
{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Each entry has a migration status (port, built-in, saas, drop, gated, done, proposed) and free-form notes. New entries can be added through the Emdash admin at /_emdash/admin." }] }
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "This catalog tracks plugins from one CMS and how they map to another. The seeded entries come from the kotkanagrilli.fi WordPress → Emdash migration, where ~30 third-party and custom plugins needed to be classified before the rebuild."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Each entry has a migration status (port, built-in, saas, drop, gated, done, proposed) and free-form notes. New entries can be added through the Emdash admin at /_emdash/admin."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"plugins": [
|
||||
{
|
||||
"id": "woocommerce",
|
||||
"slug": "woocommerce",
|
||||
"data": {
|
||||
"title": "WooCommerce",
|
||||
@@ -118,11 +230,21 @@
|
||||
"status": "gated",
|
||||
"source_repo_url": "https://wordpress.org/plugins/woocommerce/",
|
||||
"notes": [
|
||||
{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Fate depends on the kotkanagrilli WooCommerce decision gate: (a) keep WP on a subdomain for ordering, (b) build an Emdash orders+SumUp plugin, (c) outsource to an ordering SaaS." }] }
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Fate depends on the kotkanagrilli WooCommerce decision gate: (a) keep WP on a subdomain for ordering, (b) build an Emdash orders+SumUp plugin, (c) outsource to an ordering SaaS."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "woocommerce-payments",
|
||||
"slug": "woocommerce-payments",
|
||||
"data": {
|
||||
"title": "WooCommerce Payments",
|
||||
@@ -131,10 +253,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "e-commerce",
|
||||
"status": "gated",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Tied to the WooCommerce decision." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Tied to the WooCommerce decision."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "sumup-payment-gateway-for-woocommerce",
|
||||
"slug": "sumup-payment-gateway-for-woocommerce",
|
||||
"data": {
|
||||
"title": "SumUp Payment Gateway for WooCommerce",
|
||||
@@ -143,10 +277,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "e-commerce",
|
||||
"status": "gated",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Tied to WC decision. SumUp REST API is callable directly from a custom Emdash plugin if option (b) is chosen." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Tied to WC decision. SumUp REST API is callable directly from a custom Emdash plugin if option (b) is chosen."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fluid-checkout",
|
||||
"slug": "fluid-checkout",
|
||||
"data": {
|
||||
"title": "Fluid Checkout",
|
||||
@@ -158,6 +304,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "woo-checkout-field-editor-pro",
|
||||
"slug": "woo-checkout-field-editor-pro",
|
||||
"data": {
|
||||
"title": "Woo Checkout Field Editor Pro",
|
||||
@@ -169,6 +316,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "woocommerce-customizer",
|
||||
"slug": "woocommerce-customizer",
|
||||
"data": {
|
||||
"title": "WooCommerce Customizer",
|
||||
@@ -180,6 +328,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "woc-open-close",
|
||||
"slug": "woc-open-close",
|
||||
"data": {
|
||||
"title": "WooCommerce Open/Close",
|
||||
@@ -188,10 +337,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "e-commerce",
|
||||
"status": "port",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Reimplement as a small Emdash plugin or Astro middleware reading a business-hours config. Not actually WC-coupled despite the name." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Reimplement as a small Emdash plugin or Astro middleware reading a business-hours config. Not actually WC-coupled despite the name."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "google-listings-and-ads",
|
||||
"slug": "google-listings-and-ads",
|
||||
"data": {
|
||||
"title": "Google Listings & Ads",
|
||||
@@ -203,6 +364,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "polylang",
|
||||
"slug": "polylang",
|
||||
"data": {
|
||||
"title": "Polylang",
|
||||
@@ -211,10 +373,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "i18n",
|
||||
"status": "port",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Native Emdash collections + locale routing in Astro (src/pages/[lang]/...) replaces Polylang." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Native Emdash collections + locale routing in Astro (src/pages/[lang]/...) replaces Polylang."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "connect-polylang-elementor",
|
||||
"slug": "connect-polylang-elementor",
|
||||
"data": {
|
||||
"title": "Connect Polylang for Elementor",
|
||||
@@ -223,10 +397,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "i18n",
|
||||
"status": "drop",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Dropped together with Elementor." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Dropped together with Elementor."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "elementor",
|
||||
"slug": "elementor",
|
||||
"data": {
|
||||
"title": "Elementor",
|
||||
@@ -235,10 +421,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "page-builder",
|
||||
"status": "drop",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Rebuild pages as Astro components / Emdash portable-text blocks." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Rebuild pages as Astro components / Emdash portable-text blocks."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "cafe-eatery",
|
||||
"slug": "cafe-eatery",
|
||||
"data": {
|
||||
"title": "Cafe Eatery",
|
||||
@@ -247,10 +445,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "theme",
|
||||
"status": "drop",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Rebuild as an Astro theme (Phase 2)." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Rebuild as an Astro theme (Phase 2)."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "autoptimize",
|
||||
"slug": "autoptimize",
|
||||
"data": {
|
||||
"title": "Autoptimize",
|
||||
@@ -259,10 +469,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "performance",
|
||||
"status": "built-in",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Astro/Vite handles bundling natively." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Astro/Vite handles bundling natively."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "jetpack-boost",
|
||||
"slug": "jetpack-boost",
|
||||
"data": {
|
||||
"title": "Jetpack Boost",
|
||||
@@ -271,10 +493,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "performance",
|
||||
"status": "built-in",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Astro + Cloudflare handle this." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Astro + Cloudflare handle this."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ewww-image-optimizer",
|
||||
"slug": "ewww-image-optimizer",
|
||||
"data": {
|
||||
"title": "EWWW Image Optimizer",
|
||||
@@ -283,10 +517,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "performance",
|
||||
"status": "built-in",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Astro Image integration + responsive styles already wired in astro.config.mjs." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Astro Image integration + responsive styles already wired in astro.config.mjs."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "jetpack",
|
||||
"slug": "jetpack",
|
||||
"data": {
|
||||
"title": "Jetpack",
|
||||
@@ -295,10 +541,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "ops",
|
||||
"status": "saas",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Replaced by Cloudflare analytics + WAF." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Replaced by Cloudflare analytics + WAF."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "redis-cache",
|
||||
"slug": "redis-cache",
|
||||
"data": {
|
||||
"title": "Redis Object Cache",
|
||||
@@ -307,10 +565,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "performance",
|
||||
"status": "drop",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "No PHP, no need; Astro + Emdash memoryCache provider already wired." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "No PHP, no need; Astro + Emdash memoryCache provider already wired."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "wp-mail-smtp",
|
||||
"slug": "wp-mail-smtp",
|
||||
"data": {
|
||||
"title": "WP Mail SMTP",
|
||||
@@ -319,10 +589,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "mail",
|
||||
"status": "saas",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "External SMTP configured at the platform layer, or via an Emdash mailer plugin." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "External SMTP configured at the platform layer, or via an Emdash mailer plugin."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "cb-change-mail-sender",
|
||||
"slug": "cb-change-mail-sender",
|
||||
"data": {
|
||||
"title": "CB Change Mail Sender",
|
||||
@@ -331,10 +613,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "mail",
|
||||
"status": "port",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Handled by the same Emdash mailer plugin that replaces wp-mail-smtp." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Handled by the same Emdash mailer plugin that replaces wp-mail-smtp."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "wpforms-lite",
|
||||
"slug": "wpforms-lite",
|
||||
"data": {
|
||||
"title": "WPForms Lite",
|
||||
@@ -343,10 +637,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "forms",
|
||||
"status": "port",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Small Astro form action posting to a server endpoint, or a Cloudflare Worker on the CF target." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Small Astro form action posting to a server endpoint, or a Cloudflare Worker on the CF target."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "wp-google-maps",
|
||||
"slug": "wp-google-maps",
|
||||
"data": {
|
||||
"title": "WP Google Maps",
|
||||
@@ -355,10 +661,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "content",
|
||||
"status": "port",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Static iframe embed in the theme — trivial port." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Static iframe embed in the theme — trivial port."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "sticky-chat-widget",
|
||||
"slug": "sticky-chat-widget",
|
||||
"data": {
|
||||
"title": "Sticky Chat Widget",
|
||||
@@ -367,10 +685,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "content",
|
||||
"status": "port",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Static component in the theme — trivial port." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Static component in the theme — trivial port."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "shortcodes-ultimate",
|
||||
"slug": "shortcodes-ultimate",
|
||||
"data": {
|
||||
"title": "Shortcodes Ultimate",
|
||||
@@ -379,10 +709,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "content",
|
||||
"status": "drop",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Astro components / portable-text block types replace it." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Astro components / portable-text block types replace it."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "tinymce-advanced",
|
||||
"slug": "tinymce-advanced",
|
||||
"data": {
|
||||
"title": "TinyMCE Advanced",
|
||||
@@ -391,10 +733,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "editor",
|
||||
"status": "drop",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Emdash has its own editor." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Emdash has its own editor."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "lara-google-analytics",
|
||||
"slug": "lara-google-analytics",
|
||||
"data": {
|
||||
"title": "Lara Google Analytics",
|
||||
@@ -403,10 +757,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "analytics",
|
||||
"status": "port",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Static <script> in the theme head — trivial port." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Static <script> in the theme head — trivial port."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "social-login",
|
||||
"slug": "social-login",
|
||||
"data": {
|
||||
"title": "Social Login",
|
||||
@@ -415,10 +781,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "auth",
|
||||
"status": "drop",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Drop unless actually needed; Emdash uses passkeys by default." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Drop unless actually needed; Emdash uses passkeys by default."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "twentytwentyfive",
|
||||
"slug": "twentytwentyfive",
|
||||
"data": {
|
||||
"title": "Twenty Twenty-Five",
|
||||
@@ -430,6 +808,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "store-closed-button",
|
||||
"slug": "store-closed-button",
|
||||
"data": {
|
||||
"title": "store-closed-button (mu-plugin)",
|
||||
@@ -438,10 +817,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "ops",
|
||||
"status": "port",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Becomes an Emdash plugin: business-hours config + an admin badge. Replaces store.py CLI." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Becomes an Emdash plugin: business-hours config + an admin badge. Replaces store.py CLI."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "store-override-admin-bar",
|
||||
"slug": "store-override-admin-bar",
|
||||
"data": {
|
||||
"title": "store-override-admin-bar (mu-plugin)",
|
||||
@@ -450,10 +841,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "ops",
|
||||
"status": "port",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Folded into the same business-hours Emdash plugin." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Folded into the same business-hours Emdash plugin."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "nginx-cache-indicator",
|
||||
"slug": "nginx-cache-indicator",
|
||||
"data": {
|
||||
"title": "nginx-cache-indicator (mu-plugin)",
|
||||
@@ -462,10 +865,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "ops",
|
||||
"status": "port",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Folded into the same admin badge that store-closed-button becomes." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Folded into the same admin badge that store-closed-button becomes."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "out-of-stock-display",
|
||||
"slug": "out-of-stock-display",
|
||||
"data": {
|
||||
"title": "out-of-stock-display (mu-plugin)",
|
||||
@@ -477,6 +892,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "cart-fragment-cache-fix",
|
||||
"slug": "cart-fragment-cache-fix",
|
||||
"data": {
|
||||
"title": "cart-fragment-cache-fix (mu-plugin)",
|
||||
@@ -488,6 +904,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "checkout-button-fix",
|
||||
"slug": "checkout-button-fix",
|
||||
"data": {
|
||||
"title": "checkout-button-fix (mu-plugin)",
|
||||
@@ -499,6 +916,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "checkout-local-pickup",
|
||||
"slug": "checkout-local-pickup",
|
||||
"data": {
|
||||
"title": "checkout-local-pickup (mu-plugin)",
|
||||
@@ -510,6 +928,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "sumup-payment-verify",
|
||||
"slug": "sumup-payment-verify",
|
||||
"data": {
|
||||
"title": "sumup-payment-verify (mu-plugin)",
|
||||
@@ -521,6 +940,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "sumup-webhook-fix",
|
||||
"slug": "sumup-webhook-fix",
|
||||
"data": {
|
||||
"title": "sumup-webhook-fix (mu-plugin)",
|
||||
@@ -532,6 +952,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "load-elementor-fonts",
|
||||
"slug": "load-elementor-fonts",
|
||||
"data": {
|
||||
"title": "load-elementor-fonts (mu-plugin)",
|
||||
@@ -540,10 +961,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "theme",
|
||||
"status": "drop",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Dropped together with Elementor." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Dropped together with Elementor."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "remove-theme-ads",
|
||||
"slug": "remove-theme-ads",
|
||||
"data": {
|
||||
"title": "remove-theme-ads (mu-plugin)",
|
||||
@@ -552,10 +985,22 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "theme",
|
||||
"status": "drop",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Dropped together with the Cafe Eatery theme." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Dropped together with the Cafe Eatery theme."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "security-hardening",
|
||||
"slug": "security-hardening",
|
||||
"data": {
|
||||
"title": "security-hardening (mu-plugin)",
|
||||
@@ -564,7 +1009,18 @@
|
||||
"target_cms": "Emdash",
|
||||
"category": "security",
|
||||
"status": "port",
|
||||
"notes": [{ "_type": "block", "style": "normal", "children": [{ "_type": "span", "text": "Cloudflare WAF rules cover the WAF half; Astro middleware sets response headers for the rest." }] }]
|
||||
"notes": [
|
||||
{
|
||||
"_type": "block",
|
||||
"style": "normal",
|
||||
"children": [
|
||||
{
|
||||
"_type": "span",
|
||||
"text": "Cloudflare WAF rules cover the WAF half; Astro middleware sets response headers for the rest."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
+10
-1
@@ -15,7 +15,16 @@ mkdir -p /app/state/uploads
|
||||
# upgrades against an existing PVC and never recover a partial first-run init.)
|
||||
echo "[entrypoint] running emdash init (applies pending migrations)"
|
||||
node_modules/.bin/emdash init
|
||||
|
||||
# Seed is best-effort: unlike migrations, a content-seed failure (e.g. a bad
|
||||
# seed.json entry) must NOT crash-loop the whole site, so it is NOT under the
|
||||
# `set -e` abort. We still surface a non-zero rc loudly in the logs rather than
|
||||
# swallowing it silently.
|
||||
echo "[entrypoint] running emdash seed (applies seed/seed.json, onConflict=skip)"
|
||||
node_modules/.bin/emdash seed
|
||||
if node_modules/.bin/emdash seed; then
|
||||
echo "[entrypoint] emdash seed ok"
|
||||
else
|
||||
echo "[entrypoint] WARNING: emdash seed failed (rc=$?) — serving without full seed" >&2
|
||||
fi
|
||||
|
||||
exec "$@"
|
||||
|
||||
Reference in New Issue
Block a user