{
  "$schema": "https://playground.wordpress.net/blueprint-schema.json",
  "landingPage": "/ultimate-reviews",
  "preferredVersions": {
    "php": "8.3",
    "wp": "latest"
  },
  "phpExtensionBundles": ["kitchen-sink"],
  "features": {
    "networking": true
  },
  "steps": [
    {
      "step": "login",
      "username": "admin",
      "password": "password"
    },
    {
      "step": "setSiteOptions",
      "options": {
        "blogname": "Ultimate Reviews – WordPress Plugin",
        "blogdescription": "A live preview of the Ultimate Reviews – WordPress Plugin"
      }
    },
    {
      "step": "installTheme",
      "themeData": {
        "resource": "wordpress.org/themes",
        "slug": "blocksy"
      },
      "options": {
        "activate": true
      }
    },
    {
      "step": "installPlugin",
      "options": {
        "activate": true
      },
      "pluginData": {
        "resource": "wordpress.org/plugins",
        "slug": "ultimate-reviews"
      }
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/mu-plugins/custom-styles.php",
      "data": "<?php\nadd_action('wp_head', function() {\n  echo '<style>\n.view-admin-reviews{position:relative;font-size:13px;font-weight:500;color:#fff;background:#1a1a1a;text-decoration:none;border:none;border-radius:6px;padding:7px 16px;cursor:pointer;overflow:hidden;white-space:nowrap;transition:background .2s,transform .15s,box-shadow .2s;box-shadow:0 1px 2px rgba(0,0,0,.15);display:block;width:max-content;margin-top:10px}.view-admin-reviews:hover{background:#111;transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.25);color:#fff;text-decoration:none}.view-admin-reviews:active{transform:translateY(0);box-shadow:0 1px 3px rgba(0,0,0,.2)}\n/* Banner image */\n.wp-block-image.alignfull{max-height:300px;overflow:hidden}.wp-block-image.alignfull img{width:100%;height:300px;object-fit:cover;object-position:center;display:block}\n/* Review cards */\n.gr-review{background:#fff;border-radius:14px;box-shadow:0 2px 14px rgba(0,0,0,.07);border:1px solid #f0f0f0;padding:22px 26px;margin-bottom:16px}\n.gr-content{display:flex;flex-direction:column;gap:10px}\n/* Stars */\n.gr-review-rating{display:flex;gap:1px;margin-bottom:2px}\n.gr-rating-stars .dashicons-star-filled,.gr-rating-stars .dashicons-star-half{color:#f59e0b}\n.gr-rating-stars .dashicons-star-empty{color:#d1d5db}\n.screen-reader-text{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}\n/* Author block */\n.gr-author{display:flex;align-items:flex-start}\n.gr-author-text{display:flex;flex-direction:column;gap:5px}\n.gr-author-name{font-weight:700;font-size:16px;color:#111827;line-height:1.3}\n.gr-author-affiliation{display:inline-flex;align-items:center}\n.gr-author-url{color:#6366f1;text-decoration:none;font-size:13px;font-weight:500}.gr-author-url:hover{text-decoration:underline;color:#4f46e5}\n.gr-review-date{font-size:12px;color:#9ca3af;letter-spacing:.3px}\n.gr-author-icon,.gr-organization-icon,.gr-review-date-icon{display:none}\n.grfwp-clear{display:none}\n/* Body */\n.gr-review-body{font-size:15px;line-height:1.7;color:#374151}.gr-review-body p{margin:0}\n.gr-custom-fields:empty{display:none}\n/* ── URP reviews ── */\n.ewd-urp-reviews-container{display:flex;flex-direction:column;gap:16px}\n.ewd-urp-review-div{background:#fff;border-radius:12px;box-shadow:0 2px 12px rgba(0,0,0,.07);border:1px solid #f0f0f0;padding:20px 24px}\n.ewd-urp-review-product-name{font-size:11px;font-weight:700;color:#6366f1;text-transform:uppercase;letter-spacing:.7px;margin-bottom:10px}\n.ewd-urp-review-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:8px}\n.ewd-urp-review-score{display:flex;align-items:center;gap:8px;flex-shrink:0}\n.ewd-urp-review-graphic.ewd-urp-review-skin-basic{display:flex;gap:3px;align-items:center}\n.ewd-urp-graphic-full,.ewd-urp-graphic-empty{width:14px;height:14px;border-radius:50%;display:inline-block}\n.ewd-urp-graphic-full{background:#f59e0b}\n.ewd-urp-graphic-empty{background:#e5e7eb}\n.ewd-urp-review-score-number{font-size:12px;font-weight:700;color:#6b7280;white-space:nowrap}\n.ewd-urp-review-title{font-size:16px;font-weight:700;color:#111827;flex:1;line-height:1.3}\n.ewd-urp-flag-inappropriate{opacity:.35;cursor:pointer;transition:opacity .2s;flex-shrink:0}\n.ewd-urp-flag-inappropriate:hover{opacity:.75}\n.ewd-urp-clear{display:none!important}\n.ewd-urp-review-content{margin-top:2px}\n.ewd-urp-author-date-categories{font-size:12px;color:#9ca3af;margin-bottom:10px;display:flex;flex-wrap:wrap;align-items:center;gap:3px 5px}\n.ewd-urp-categories{display:inline-flex;align-items:center;gap:3px;font-size:12px;color:#9ca3af}\n.ewd-urp-date{color:#6b7280;font-weight:500}\n.ewd-urp-review-body{font-size:15px;line-height:1.7;color:#374151;margin-bottom:14px}\n.ewd-urp-review-margin.ewd-urp-review-post{margin:0}\n.ewd-urp-category-field{display:inline-flex;margin:4px 8px 4px 0}\n.ewd-urp-category-score{display:flex;align-items:center;gap:6px;background:#f9fafb;border:1px solid #e5e7eb;border-radius:8px;padding:4px 10px}\n.ewd-urp-category-score-label{font-size:10px;font-weight:700;color:#9ca3af;text-transform:uppercase;letter-spacing:.5px}\n.ewd-urp-category-score-number{font-size:13px;font-weight:700;color:#111827}\n/* ── URP submit toggle button ── */\n.ewd-urp-submit-review-toggle{margin:20px 0}\n.ewd-urp-toggle-button{display:inline-flex;align-items:center;gap:8px;font-size:14px;font-weight:600;color:#fff;background:#6366f1;padding:10px 20px;border-radius:8px;cursor:pointer;transition:background .2s,transform .15s,box-shadow .2s;box-shadow:0 1px 3px rgba(99,102,241,.35);user-select:none}\n.ewd-urp-toggle-button:hover{background:#4f46e5;transform:translateY(-1px);box-shadow:0 4px 12px rgba(99,102,241,.4)}\n.ewd-urp-toggle-button:active{transform:translateY(0);box-shadow:0 1px 3px rgba(99,102,241,.3)}\n/* ── URP submit review form ── */\n.ewd-urp-review-form label{display:block;width:100% !important;text-align:left !important}\n#review .form-field,#review .ewd-urp-meta-field{display:flex;flex-direction:column;gap:5px;margin-bottom:16px}\n#review .ewd-urp-review-label,#review .ewd-urp-meta-field>label,#review .ewd-urp-submit-review-label{font-size:12px;font-weight:700;color:#6b7280;text-transform:uppercase;letter-spacing:.5px;margin:0}\n#review input[type=text],#review select,#review .ewd-urp-review-textarea{width:100%;box-sizing:border-box;font-size:14px;color:#111827;background:#f9fafb;border:1px solid #e5e7eb;border-radius:8px;padding:9px 12px;transition:border-color .15s,box-shadow .15s;outline:none;resize:vertical}\n#review input[type=text]:focus,#review select:focus,#review .ewd-urp-review-textarea:focus{border-color:#6366f1;box-shadow:0 0 0 3px rgba(99,102,241,.15);background:#fff}\n#review .ewd-urp-review-explanation,#review .ewd-urp-category-explanation{font-size:12px;color:#9ca3af;margin-top:2px}\n#review .ewd-urp-review-explanation span,#review .ewd-urp-category-explanation span{display:block}\n#review .ewd-urp-review-explanation label,#review .ewd-urp-category-explanation label{display:none}\n#review .ewd-urp-hidden{display:none!important}\n/* submit button */\n.ewd-urp-submit{margin-top:4px}\n.ewd-urp-submit label{display:none}\n#ewd-urp-review-submit{font-size:14px;font-weight:600;color:#fff;background:#6366f1;border:none;border-radius:8px;padding:10px 24px;cursor:pointer;transition:background .2s,transform .15s,box-shadow .2s;box-shadow:0 1px 3px rgba(99,102,241,.35)}\n#ewd-urp-review-submit:hover{background:#4f46e5;transform:translateY(-1px);box-shadow:0 4px 12px rgba(99,102,241,.4)}\n#ewd-urp-review-submit:active{transform:translateY(0)}\n</style>';\n});\n"
    },
    {
      "step": "runPHP",
      "code": "<?php\nrequire_once '/wordpress/wp-load.php';\n$e='[{\"name\":\"Product Name (if applicable)\",\"required\":\"0\",\"explanation\":\"1\",\"type\":\"default\",\"options\":\"\"},{\"name\":\"Review Author\",\"required\":\"0\",\"explanation\":\"1\",\"type\":\"default\",\"options\":\"\"},{\"name\":\"Reviewer Email (if applicable)\",\"required\":\"0\",\"explanation\":\"1\",\"type\":\"default\",\"options\":\"\"},{\"name\":\"Review Title\",\"required\":\"0\",\"explanation\":\"1\",\"type\":\"default\",\"options\":\"\"},{\"name\":\"Review Image (if applicable)\",\"required\":\"0\",\"explanation\":\"1\",\"type\":\"default\",\"options\":\"\"},{\"name\":\"Review Video (if applicable)\",\"required\":\"0\",\"explanation\":\"1\",\"type\":\"default\",\"options\":\"\"},{\"name\":\"Review\",\"required\":\"0\",\"explanation\":\"1\",\"type\":\"default\",\"options\":\"\"},{\"name\":\"Overall Score\",\"required\":\"0\",\"explanation\":\"1\",\"type\":\"default\",\"options\":\"\"},{\"name\":\"Review Category (if applicable)\",\"required\":\"0\",\"explanation\":\"1\",\"type\":\"default\",\"options\":\"\"},{\"name\":\"Price\",\"required\":\"0\",\"explanation\":\"0\",\"type\":\"reviewitem\",\"options\":\"\"},{\"name\":\"Quality\",\"required\":\"0\",\"explanation\":\"0\",\"type\":\"reviewitem\",\"options\":\"\"},{\"name\":\"Value\",\"required\":\"0\",\"explanation\":\"0\",\"type\":\"reviewitem\",\"options\":\"\"}]';\n$s=array('group-by-product'=>'','group-by-product-order'=>'asc','ordering-type'=>'date','order-direction'=>'asc','indepth-reviews'=>'1','review-elements'=>$e,'custom-css'=>'','maximum-score'=>'5','review-style'=>'points','review-score-input'=>'stars','review-image'=>'','review-video'=>'','review-category'=>'1','review-filtering'=>array('score'),'show-tinymce'=>'','submit-review-toggle'=>'1','autocomplete-product-names'=>'','link-to-post'=>'','flag-inappropriate'=>'1','author-click-filter'=>'','review-comments'=>'','review-character-limit'=>'','email-on-submission'=>'','restrict-product-names'=>'','product-name-input-type'=>'text','upcp-integration'=>'','product-names-array'=>'[]','display-author'=>'','display-date'=>'1','display-time'=>'','display-categories'=>'1','reviews-per-page'=>'','pagination-location'=>'top');\nupdate_option('ewd-urp-settings',$s,false);\n?>"
    },
    {
      "step": "runPHP",
      "code": "<?php\nrequire_once '/wordpress/wp-load.php';\n$cats=array(array('Electronics','electronics'),array('Clothing','clothing'),array('Books','books'),array('Home & Garden','home-garden'),array('Toys','toys'));\nforeach($cats as $c){wp_insert_term($c[0],'urp-review-category',array('slug'=>$c[1]));}\n?>"
    },
    {
      "step": "runPHP",
      "code": "<?php\nrequire_once '/wordpress/wp-load.php';\n$sets=array('electronics'=>array(array('product'=>'Samsung TV','author'=>'Alice','score'=>5,'title'=>'Amazing picture quality','content'=>'Absolutely love this TV!'),array('product'=>'Sony Headphones','author'=>'Bob','score'=>4,'title'=>'Great sound','content'=>'Clear and crisp audio.'),array('product'=>'Apple Watch','author'=>'Carol','score'=>5,'title'=>'Best smartwatch','content'=>'So many useful features.')),'clothing'=>array(array('product'=>'Nike Sneakers','author'=>'Dave','score'=>4,'title'=>'Very comfortable','content'=>'Perfect fit for daily use.'),array('product'=>'Levi Jeans','author'=>'Eve','score'=>3,'title'=>'Decent quality','content'=>'Good but a bit pricey.'),array('product'=>'Adidas Jacket','author'=>'Frank','score'=>5,'title'=>'Super warm','content'=>'Great for cold weather.')),'books'=>array(array('product'=>'The Great Gatsby','author'=>'Grace','score'=>5,'title'=>'Classic masterpiece','content'=>'A timeless novel.'),array('product'=>'1984','author'=>'Henry','score'=>5,'title'=>'Thought-provoking','content'=>'A must-read for everyone.'),array('product'=>'To Kill a Mockingbird','author'=>'Iris','score'=>4,'title'=>'Powerful story','content'=>'Deeply moving and insightful.')),'home-garden'=>array(array('product'=>'Dyson Vacuum','author'=>'Jack','score'=>5,'title'=>'Outstanding suction','content'=>'Best vacuum I have owned.'),array('product'=>'KitchenAid Mixer','author'=>'Karen','score'=>4,'title'=>'Great for baking','content'=>'Makes baking so much easier.'),array('product'=>'Weber Grill','author'=>'Liam','score'=>5,'title'=>'Perfect BBQ','content'=>'Even heat distribution.')),'toys'=>array(array('product'=>'Toy Car','author'=>'Sam','score'=>5,'title'=>'Kids love it','content'=>'Great build quality.'),array('product'=>'LEGO Set','author'=>'Noah','score'=>5,'title'=>'Fun for all ages','content'=>'Hours of creative fun.'),array('product'=>'Puzzle','author'=>'Olivia','score'=>4,'title'=>'Challenging and fun','content'=>'Great family activity.')));\nforeach($sets as $slug=>$reviews){foreach($reviews as $r){$id=wp_insert_post(array('post_title'=>$r['title'],'post_content'=>$r['content'],'post_status'=>'publish','post_type'=>'urp_review','post_date'=>'2026-04-20 15:08:53','post_date_gmt'=>'2026-04-20 15:08:53'));if($id&&!is_wp_error($id)){add_post_meta($id,'EWD_URP_Product_Name',$r['product']);add_post_meta($id,'EWD_URP_Post_Author',$r['author']);add_post_meta($id,'EWD_URP_Overall_Score',$r['score']);add_post_meta($id,'EWD_URP_Price',5);add_post_meta($id,'EWD_URP_Quality',5);add_post_meta($id,'EWD_URP_Value',5);wp_set_object_terms($id,$slug,'urp-review-category');}}}\n?>"
    },
    {
      "step": "runPHP",
      "code": "<?php\nrequire_once '/wordpress/wp-load.php';\n$image_url = 'https://images.unsplash.com/photo-1702468292651-fd16394e4ddd';\n$image_block = '<!-- wp:image {\"sizeSlug\":\"full\",\"linkDestination\":\"none\",\"align\":\"full\"} -->\n<figure class=\"wp-block-image alignfull size-full\"><img src=\"' . $image_url . '\" alt=\"Ultimate Reviews – WordPress Plugin Banner\"/></figure>\n<!-- /wp:image -->';\n$text_content = '<!-- wp:group {\"style\":{\"spacing\":{\"padding\":{\"top\":\"2rem\",\"bottom\":\"2rem\",\"left\":\"2rem\",\"right\":\"2rem\"}}},\"layout\":{\"type\":\"constrained\"}} -->\n<div class=\"wp-block-group\" style=\"padding-top:2rem;padding-bottom:2rem;padding-left:2rem;padding-right:2rem\">\n<!-- wp:paragraph -->\n<p>Thank you for checking out our Ultimate Reviews – WordPress Plugin!</p>\n<!-- /wp:paragraph -->\n<!-- wp:paragraph -->\n<p>The [[ultimate-reviews]] shortcode is all you need to display your restaurant reviews on your page — your customers can use it to view ratings for your Ultimate.</p>\n<!-- /wp:paragraph -->\n<!-- wp:paragraph -->\n<p>You can control exactly what gets displayed to your customers from within the plugin settings and review edit screen.</p>\n<!-- /wp:paragraph -->\n<!-- wp:paragraph -->\n<p><a href=\"wp-admin/edit.php?post_type=urp_review\" class=\"view-admin-reviews\">📋 View Admin Reviews Screen</a></p>\n<!-- /wp:paragraph -->\n<!-- wp:shortcode -->[submit-review]<!-- /wp:shortcode --><!-- wp:shortcode -->[ultimate-reviews]<!-- /wp:shortcode -->\n</div>\n<!-- /wp:group -->';\nwp_insert_post(array('post_title' => 'Ultimate Reviews','post_content' => $image_block . \"\\n\" . $text_content,'post_status' => 'publish','post_type' => 'page'));\n?>"
    }
  ],
  "login": true
}
