﻿{
    "$schema":  "https://playground.wordpress.net/blueprint-schema.json",
    "landingPage":  "/sheetfusion-demo/",
    "preferredVersions":  {
                              "php":  "8.2",
                              "wp":  "latest"
                          },
    "phpExtensionBundles":  [
                                "kitchen-sink"
                            ],
    "features":  {
                     "networking":  true
                 },
    "steps":  [
                  {
                      "step":  "login",
                      "username":  "admin",
                      "password":  "password"
                  },
                  {
                      "step":  "installPlugin",
                      "pluginData":  {
                                         "resource":  "wordpress.org/plugins",
                                         "slug":  "sheetfusion"
                                     },
                      "options":  {
                                      "activate":  true
                                  }
                  },
                  {
                      "step":  "setSiteOptions",
                      "options":  {
                                      "blogname":  "SheetFusion Playground Demo",
                                      "blogdescription":  "Google Sheets to WordPress tables without API keys",
                                      "permalink_structure":  "/%postname%/"
                                  }
                  },
                  {
                      "step":  "mkdir",
                      "path":  "/wordpress/wp-content/mu-plugins"
                  },
                  {
                      "step":  "writeFile",
                      "path":  "/wordpress/wp-content/mu-plugins/sheetfusion-playground-demo.php",
                      "data":  "\u003c?php\n/**\n * SheetFusion Playground demo helper.\n *\n * This mu-plugin supplies a deterministic demo CSV for Playground only, so the\n * demo does not rely on a real Google account or a public spreadsheet that could\n * be deleted later.\n */\n\nadd_filter( \u0027pre_http_request\u0027, function ( $preempt, $parsed_args, $url ) {\n    $demo_sheet_id = \u00271SheetFusionPlaygroundDemoPublicSheet000000000\u0027;\n\n    if ( false === strpos( $url, \u0027docs.google.com/spreadsheets\u0027 ) || false === strpos( $url, $demo_sheet_id ) ) {\n        return $preempt;\n    }\n\n    $csv = implode( \"\\n\", array(\n        \u0027Team,League,Wins,Losses,Win %,Home City,Stadium,Avg Attendance,Last Result,Status\u0027,\n        \u0027Toronto Falcons,Premier League,18,6,.750,Toronto,Maple Field,42150,Won 3-1,Contender\u0027,\n        \u0027Montreal Rapids,Premier League,16,8,.667,Montreal,River Park,38900,Won 2-0,Playoff Hunt\u0027,\n        \u0027Vancouver Peaks,Premier League,14,10,.583,Vancouver,Harbour Stadium,36500,Lost 1-2,Playoff Hunt\u0027,\n        \u0027Calgary Mustangs,Premier League,13,11,.542,Calgary,Prairie Dome,33200,Won 1-0,Mid-table\u0027,\n        \u0027Ottawa Capitals,Premier League,12,12,.500,Ottawa,Capital Grounds,31800,Drew 2-2,Mid-table\u0027,\n        \u0027Halifax Mariners,Premier League,11,13,.458,Halifax,Atlantic Arena,27600,Lost 0-1,Rebuilding\u0027,\n        \u0027Winnipeg Wolves,Premier League,10,14,.417,Winnipeg,North Field,29400,Won 4-2,Rebuilding\u0027,\n        \u0027Quebec City Royals,Premier League,9,15,.375,Quebec City,Royal Park,25100,Drew 1-1,Rebuilding\u0027,\n        \u0027Hamilton Steel,Premier League,8,16,.333,Hamilton,Foundry Stadium,23850,Lost 1-3,Developing\u0027,\n        \u0027Edmonton North Stars,Premier League,7,17,.292,Edmonton,Aurora Field,22100,Lost 0-2,Developing\u0027,\n        \u0027Saskatoon Blades,Premier League,15,9,.625,Saskatoon,Bridge Arena,30200,Won 2-1,Playoff Hunt\u0027,\n        \u0027Victoria Islanders,Premier League,17,7,.708,Victoria,Island Grounds,34400,Won 3-0,Contender\u0027\n    ) );\n\n    return array(\n        \u0027headers\u0027  =\u003e array( \u0027content-type\u0027 =\u003e \u0027text/csv; charset=utf-8\u0027 ),\n        \u0027body\u0027     =\u003e $csv,\n        \u0027response\u0027 =\u003e array(\n            \u0027code\u0027    =\u003e 200,\n            \u0027message\u0027 =\u003e \u0027OK\u0027,\n        ),\n        \u0027cookies\u0027  =\u003e array(),\n        \u0027filename\u0027 =\u003e null,\n    );\n}, 10, 3 );\n\nadd_action( \u0027wp_enqueue_scripts\u0027, function () {\n    $css = \u0027\n        .sf-demo-hero{border:1px solid #e7e7e7;border-radius:18px;padding:28px;margin:24px 0;background:linear-gradient(135deg,#fff,#f7f7f7)}\n        .sf-demo-hero h1{margin-top:0;font-size:clamp(2rem,4vw,3.5rem);line-height:1.05}\n        .sf-demo-hero p{font-size:1.1rem;max-width:760px}\n        .sf-demo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin:24px 0}\n        .sf-demo-card{border:1px solid #e7e7e7;border-radius:14px;padding:18px;background:#fff}\n        .sf-demo-card strong{display:block;margin-bottom:6px}\n        .sf-demo-shortcode{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;background:#111;color:#fff;border-radius:10px;padding:14px;overflow:auto}\n    \u0027;\n    wp_register_style( \u0027sheetfusion-playground-demo\u0027, false, array(), \u00271.0.0\u0027 );\n    wp_enqueue_style( \u0027sheetfusion-playground-demo\u0027 );\n    wp_add_inline_style( \u0027sheetfusion-playground-demo\u0027, $css );\n} );\n"
                  },
                  {
                      "step":  "runPHP",
                      "code":  "\u003c?php\nrequire_once \u0027/wordpress/wp-load.php\u0027;\n\n$demo_sheet_id = \u00271SheetFusionPlaygroundDemoPublicSheet000000000\u0027;\n\n$page_content = \u0027\u003c!-- wp:group {\"layout\":{\"type\":\"constrained\"}} --\u003e\n\u003cdiv class=\"wp-block-group\"\u003e\n\u003c!-- wp:html --\u003e\n\u003csection class=\"sf-demo-hero\"\u003e\n  \u003ch1\u003eSheetFusion Demo\u003c/h1\u003e\n  \u003cp\u003eSheetFusion turns published Google Sheets into clean, responsive WordPress tables without API keys, OAuth, or a Google Cloud project. This Playground uses a built-in CSV response so you can see the front-end output immediately without connecting a real spreadsheet.\u003c/p\u003e\n\u003c/section\u003e\n\u003c!-- /wp:html --\u003e\n\n\u003c!-- wp:html --\u003e\n\u003cdiv class=\"sf-demo-grid\"\u003e\n  \u003cdiv class=\"sf-demo-card\"\u003e\u003cstrong\u003eNo API keys\u003c/strong\u003ePublic CSV publishing keeps setup simple.\u003c/div\u003e\n  \u003cdiv class=\"sf-demo-card\"\u003e\u003cstrong\u003eSpreadsheet powered\u003c/strong\u003eRows and columns render from SheetFusion data, not hand-coded HTML.\u003c/div\u003e\n  \u003cdiv class=\"sf-demo-card\"\u003e\u003cstrong\u003eResponsive output\u003c/strong\u003eResize the preview to see how the table adapts.\u003c/div\u003e\n  \u003cdiv class=\"sf-demo-card\"\u003e\u003cstrong\u003eShortcode ready\u003c/strong\u003eEmbed a table in posts, pages, or templates.\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- /wp:html --\u003e\n\n\u003c!-- wp:heading --\u003e\n\u003ch2 class=\"wp-block-heading\"\u003eLive Table\u003c/h2\u003e\n\u003c!-- /wp:heading --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003eThis demo table is rendered by SheetFusion from a shortcode and a mock Google Sheets CSV feed. It shows how spreadsheet rows become a styled WordPress table with no manual table editing.\u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n\n\u003c!-- wp:shortcode --\u003e\n[sheetfusion id=\"\u0027 . esc_attr( $demo_sheet_id ) . \u0027\" sheet=\"Demo\" theme=\"editorial\" density=\"comfortable\" responsive=\"cards\" page_length=\"6\" search=\"true\" pagination=\"true\" info=\"true\" length_menu=\"true\" export=\"csv,excel,print\" sticky_header=\"true\"]\n\u003c!-- /wp:shortcode --\u003e\n\n\u003c!-- wp:heading --\u003e\n\u003ch2 class=\"wp-block-heading\"\u003eShortcode Used\u003c/h2\u003e\n\u003c!-- /wp:heading --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003eThe same shortcode format works with any public Google Sheet that has been published to the web. Replace the demo Sheet ID and tab name with your own values.\u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n\n\u003c!-- wp:html --\u003e\n\u003cpre class=\"sf-demo-shortcode\"\u003e[sheetfusion id=\"\u0027 . esc_html( $demo_sheet_id ) . \u0027\" sheet=\"Demo\" theme=\"editorial\" density=\"comfortable\" responsive=\"cards\" page_length=\"6\" search=\"true\" pagination=\"true\" info=\"true\" length_menu=\"true\" export=\"csv,excel,print\" sticky_header=\"true\"]\u003c/pre\u003e\n\u003c!-- /wp:html --\u003e\n\n\u003c!-- wp:heading --\u003e\n\u003ch2 class=\"wp-block-heading\"\u003eAdmin Walkthrough\u003c/h2\u003e\n\u003c!-- /wp:heading --\u003e\n\n\u003c!-- wp:list --\u003e\n\u003cul\u003e\n\u003cli\u003eOpen \u003cstrong\u003eSheetFusion \u003e Table Setup\u003c/strong\u003e to create a saved table.\u003c/li\u003e\n\u003cli\u003eUse the same demo Sheet ID: \u003ccode\u003e\u0027 . esc_html( $demo_sheet_id ) . \u0027\u003c/code\u003e and tab name \u003ccode\u003eDemo\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdjust the theme, density, responsive mode, sticky header, and display settings.\u003c/li\u003e\n\u003cli\u003eInsert the SheetFusion block on a new page and choose a saved table from the dropdown.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- /wp:list --\u003e\n\u003c/div\u003e\n\u003c!-- /wp:group --\u003e\u0027;\n\n$page_id = wp_insert_post( array(\n    \u0027post_title\u0027   =\u003e \u0027SheetFusion Demo\u0027,\n    \u0027post_name\u0027    =\u003e \u0027sheetfusion-demo\u0027,\n    \u0027post_status\u0027  =\u003e \u0027publish\u0027,\n    \u0027post_type\u0027    =\u003e \u0027page\u0027,\n    \u0027post_content\u0027 =\u003e $page_content,\n) );\n\nif ( $page_id \u0026\u0026 ! is_wp_error( $page_id ) ) {\n    update_option( \u0027show_on_front\u0027, \u0027page\u0027 );\n    update_option( \u0027page_on_front\u0027, $page_id );\n}\n\nflush_rewrite_rules();\n?\u003e"
                  }
              ]
}
