{
  "$schema": "https://playground.wordpress.net/blueprint-schema.json",
  "landingPage": "/",
  "preferredVersions": {
    "php": "8.3",
    "wp": "latest"
  },
  "phpExtensionBundles": [
    "kitchen-sink"
  ],
  "steps": [
    {
      "step": "setSiteOptions",
      "options": {
        "blogname": "Wuppi Blocks Preview",
        "blogdescription": "Lightweight Gutenberg blocks and service-focused patterns."
      }
    },
    {
      "step": "installTheme",
      "themeData": {
        "resource": "url",
        "url": "https://downloads.wordpress.org/theme/wuppi.1.0.7.zip",
        "caption": "Downloading the published Wuppi theme"
      }
    },
    {
      "step": "runPHP",
      "code": "<?php\nrequire '/wordpress/wp-load.php';\n\n$delete_post_by_path = static function ( $path, $post_type ) {\n    $post = get_page_by_path( $path, OBJECT, $post_type );\n    if ( $post instanceof WP_Post ) {\n        wp_delete_post( $post->ID, true );\n    }\n};\n\n$ensure_page = static function ( array $args ) {\n    $existing = get_page_by_path( $args['post_name'], OBJECT, 'page' );\n\n    if ( $existing instanceof WP_Post ) {\n        $args['ID'] = $existing->ID;\n        wp_update_post( $args );\n        return (int) $existing->ID;\n    }\n\n    return (int) wp_insert_post( $args );\n};\n\nswitch_theme( 'wuppi' );\n$delete_post_by_path( 'hello-world', 'post' );\n$delete_post_by_path( 'sample-page', 'page' );\n$delete_post_by_path( 'privacy-policy', 'page' );\n\n$home_content = implode(\n    \"\\n\\n\",\n    array(\n        '<!-- wp:group {\"align\":\"full\",\"style\":{\"spacing\":{\"padding\":{\"top\":\"var:preset|spacing|80\",\"right\":\"var:preset|spacing|50\",\"bottom\":\"var:preset|spacing|80\",\"left\":\"var:preset|spacing|50\"},\"blockGap\":\"var:preset|spacing|50\"}},\"layout\":{\"type\":\"constrained\"}} -->',\n        '<div class=\"wp-block-group alignfull\" style=\"padding-top:var(--wp--preset--spacing--80);padding-right:var(--wp--preset--spacing--50);padding-bottom:var(--wp--preset--spacing--80);padding-left:var(--wp--preset--spacing--50)\">',\n        '<!-- wp:paragraph {\"textColor\":\"primary\",\"fontSize\":\"small\"} -->',\n        '<p class=\"has-primary-color has-text-color has-small-font-size\">WUPPI BLOCKS</p>',\n        '<!-- /wp:paragraph -->',\n        '<!-- wp:heading {\"level\":1,\"fontSize\":\"xx-large\"} -->',\n        '<h1 class=\"wp-block-heading has-xx-large-font-size\">A focused block toolkit for modern service websites.</h1>',\n        '<!-- /wp:heading -->',\n        '<!-- wp:paragraph {\"textColor\":\"muted-foreground\",\"fontSize\":\"medium\"} -->',\n        '<p class=\"has-muted-foreground-color has-text-color has-medium-font-size\">This preview combines custom blocks and ready-made patterns from Wuppi Blocks on the published Wuppi theme, so reviewers can see the collection in a complete site context.</p>',\n        '<!-- /wp:paragraph -->',\n        '<!-- wp:columns {\"align\":\"wide\",\"style\":{\"spacing\":{\"blockGap\":{\"left\":\"var:preset|spacing|40\"}}}} -->',\n        '<div class=\"wp-block-columns alignwide\">',\n        '<!-- wp:column -->',\n        '<div class=\"wp-block-column\"><!-- wp:wuppi/counter {\"value\":12,\"suffix\":\"+\",\"label\":\"Custom blocks\",\"iconEnabled\":true,\"iconName\":\"star\"} /--></div>',\n        '<!-- /wp:column -->',\n        '<!-- wp:column -->',\n        '<div class=\"wp-block-column\"><!-- wp:wuppi/counter {\"value\":4,\"label\":\"Ready-made patterns\",\"iconEnabled\":true,\"iconName\":\"briefcase\"} /--></div>',\n        '<!-- /wp:column -->',\n        '<!-- wp:column -->',\n        '<div class=\"wp-block-column\"><!-- wp:wuppi/counter {\"value\":100,\"suffix\":\"%\",\"label\":\"Native WordPress UI\",\"iconEnabled\":true,\"iconName\":\"check\"} /--></div>',\n        '<!-- /wp:column -->',\n        '</div>',\n        '<!-- /wp:columns -->',\n        '<!-- wp:pattern {\"slug\":\"wuppi/services-grid\"} /-->',\n        '<!-- wp:wuppi/notice {\"type\":\"success\",\"title\":\"Built for real client work\",\"content\":\"Wuppi Blocks adds practical sections for services, pricing, testimonials, FAQs, and contact details without shipping tracking or external UI frameworks.\",\"showIcon\":true,\"align\":\"wide\"} /-->',\n        '<!-- wp:columns {\"align\":\"wide\",\"style\":{\"spacing\":{\"blockGap\":{\"left\":\"var:preset|spacing|40\"}}}} -->',\n        '<div class=\"wp-block-columns alignwide\">',\n        '<!-- wp:column -->',\n        '<div class=\"wp-block-column\"><!-- wp:wuppi/pricing-table {\"planName\":\"Studio Plan\",\"description\":\"A clean pricing card for solo practitioners and small studios.\",\"priceMonthly\":\"79\",\"priceYearly\":\"790\",\"currency\":\"EUR\",\"features\":[{\"text\":\"Service and pricing sections\",\"available\":true},{\"text\":\"FAQ block with schema\",\"available\":true},{\"text\":\"Animated counters\",\"available\":true}],\"ctaLabel\":\"Get started\",\"ctaUrl\":\"https://example.com\",\"badge\":\"Popular\",\"isFeatured\":true} /--></div>',\n        '<!-- /wp:column -->',\n        '<!-- wp:column -->',\n        '<div class=\"wp-block-column\"><!-- wp:wuppi/opening-hours {\"title\":\"Opening hours\",\"hours\":[{\"day\":\"Monday\",\"open\":\"09:00\",\"close\":\"17:00\",\"closed\":false},{\"day\":\"Tuesday\",\"open\":\"09:00\",\"close\":\"17:00\",\"closed\":false},{\"day\":\"Wednesday\",\"open\":\"09:00\",\"close\":\"17:00\",\"closed\":false},{\"day\":\"Thursday\",\"open\":\"09:00\",\"close\":\"17:00\",\"closed\":false},{\"day\":\"Friday\",\"open\":\"09:00\",\"close\":\"15:00\",\"closed\":false},{\"day\":\"Saturday\",\"open\":\"\",\"close\":\"\",\"closed\":true},{\"day\":\"Sunday\",\"open\":\"\",\"close\":\"\",\"closed\":true}],\"closedLabel\":\"Closed\"} /--></div>',\n        '<!-- /wp:column -->',\n        '</div>',\n        '<!-- /wp:columns -->',\n        '<!-- wp:wuppi/testimonial {\"quote\":\"The patterns gave us a calm, polished page structure in minutes, and the custom blocks covered the practical details we usually have to build by hand.\",\"name\":\"Emma Larsen\",\"role\":\"Studio owner\",\"rating\":5,\"align\":\"wide\"} /-->',\n        '<!-- wp:wuppi/accordion {\"items\":[{\"question\":\"Does the plugin require the Wuppi theme?\",\"answer\":\"No. The core custom blocks and the section patterns work with block themes in general. The Wuppi theme is used here to provide the visual frame for the public preview.\"},{\"question\":\"Can I use the blocks for services and pricing pages?\",\"answer\":\"Yes. The collection focuses on common needs such as service cards, pricing, testimonials, FAQs, hours, and contact sections.\"},{\"question\":\"Does the plugin load external libraries on the front end?\",\"answer\":\"No external UI frameworks are bundled for the front end. The blocks rely on WordPress core APIs and the plugin assets that ship with Wuppi Blocks.\"}],\"showSchema\":true,\"align\":\"wide\"} /-->',\n        '<!-- wp:wuppi/price-list {\"title\":\"Popular sessions\",\"currency\":\"DKK\",\"currencyPosition\":\"after\",\"items\":[{\"name\":\"Intro session\",\"description\":\"60 minute consultation\",\"price\":\"690\",\"available\":true},{\"name\":\"Follow-up session\",\"description\":\"45 minute appointment\",\"price\":\"520\",\"available\":true},{\"name\":\"Online guidance\",\"description\":\"30 minute call\",\"price\":\"350\",\"available\":true}],\"align\":\"wide\"} /-->',\n        '<!-- wp:pattern {\"slug\":\"wuppi/contact-booking\"} /-->',\n        '</div>',\n        '<!-- /wp:group -->'\n    )\n);\n\n$patterns_content = implode(\n    \"\\n\\n\",\n    array(\n        '<!-- wp:group {\"align\":\"full\",\"style\":{\"spacing\":{\"padding\":{\"top\":\"var:preset|spacing|80\",\"right\":\"var:preset|spacing|50\",\"bottom\":\"var:preset|spacing|80\",\"left\":\"var:preset|spacing|50\"},\"blockGap\":\"var:preset|spacing|50\"}},\"layout\":{\"type\":\"constrained\"}} -->',\n        '<div class=\"wp-block-group alignfull\" style=\"padding-top:var(--wp--preset--spacing--80);padding-right:var(--wp--preset--spacing--50);padding-bottom:var(--wp--preset--spacing--80);padding-left:var(--wp--preset--spacing--50)\">',\n        '<!-- wp:heading {\"level\":1,\"fontSize\":\"x-large\"} -->',\n        '<h1 class=\"wp-block-heading has-x-large-font-size\">Pattern samples</h1>',\n        '<!-- /wp:heading -->',\n        '<!-- wp:paragraph {\"textColor\":\"muted-foreground\"} -->',\n        '<p class=\"has-muted-foreground-color has-text-color\">These sections are included with Wuppi Blocks and can be inserted from the pattern inserter.</p>',\n        '<!-- /wp:paragraph -->',\n        '<!-- wp:pattern {\"slug\":\"wuppi/service-card\"} /-->',\n        '<!-- wp:pattern {\"slug\":\"wuppi/services-grid\"} /-->',\n        '<!-- wp:pattern {\"slug\":\"wuppi/contact-cards\"} /-->',\n        '</div>',\n        '<!-- /wp:group -->'\n    )\n);\n\n$home_page_id = $ensure_page(\n    array(\n        'post_title'   => 'Home',\n        'post_name'    => 'home',\n        'post_status'  => 'publish',\n        'post_type'    => 'page',\n        'menu_order'   => 0,\n        'post_content' => $home_content,\n    )\n);\n\n$patterns_page_id = $ensure_page(\n    array(\n        'post_title'   => 'Patterns',\n        'post_name'    => 'patterns',\n        'post_status'  => 'publish',\n        'post_type'    => 'page',\n        'menu_order'   => 1,\n        'post_content' => $patterns_content,\n    )\n);\n\n$existing_navs = get_posts(\n    array(\n        'numberposts' => -1,\n        'post_type'   => 'wp_navigation',\n        'post_status' => 'any',\n    )\n);\n\nforeach ( $existing_navs as $existing_nav ) {\n    wp_delete_post( $existing_nav->ID, true );\n}\n\n$nav_content = '<!-- wp:navigation-link {\"label\":\"Home\",\"type\":\"page\",\"id\":' . $home_page_id . ',\"url\":\"/\",\"kind\":\"post-type\"} /-->'\n    . '<!-- wp:navigation-link {\"label\":\"Patterns\",\"type\":\"page\",\"id\":' . $patterns_page_id . ',\"url\":\"/patterns/\",\"kind\":\"post-type\"} /-->';\n\nwp_insert_post(\n    array(\n        'post_title'   => 'Preview Navigation',\n        'post_name'    => 'preview-navigation',\n        'post_status'  => 'publish',\n        'post_type'    => 'wp_navigation',\n        'post_content' => $nav_content,\n    )\n);\n\nupdate_option( 'show_on_front', 'page' );\nupdate_option( 'page_on_front', $home_page_id );\nupdate_option( 'page_for_posts', 0 );\nupdate_option( 'permalink_structure', '/%postname%/' );\n\nflush_rewrite_rules();\n"
    }
  ]
}
