Snap Kitchen Review: This Easy Meal Delivery Service Wants to Handle Dinner


Pros

  • Meals were generally tasty
  • Most meals under 450 calories
  • Lots of weekly options

Cons

  • Portions were small for the price
  • No vegetarian or vegan options
  • Some meals were underwhelming

We expect everything to happen in a snap these days: News, entertainment and certainly food. Snap Kitchen is a prepared meal service looking to capitalize on “snap culture” with simple, freshly prepared meals sent to your door each week. Snap aims to handle lunch or dinner for you on those days you don’t want to cook dinner or spend the money on takeout. You can store your weekly shipment in the fridge or freezer and heat one quickly when the mood strikes. 

Sounds pretty good, right?

There are dozens of prepared meal services geared towards a busy person and many with some pretty delicious offerings. I’ve tried most of the meal subscriptions and so you’ve gotta be rather proficient (translation: delicious) to get my full-throated endorsement. To see how Snap Kitchen stacks up in a crowded field of meal delivery options, I tried a week’s worth of its meals. 

screen-shot-2022-03-24-at-5-17-23-pm.png

David Watsky/CNET

Snap Kitchen lived up to its moniker with meals that are ready in a jiff, and most of them were pretty decent. The portions were small, however, and, for the money, I think there are better options out there. But for someone seeking smaller portions or to cut total calories, Snap Kitchen may be the key to unlocking more time each week doing the stuff you love and less time seeking out sustenance. 

Here’s what I thought of Snap Kitchen in case you’re thinking of trying the popular subscription service.

How Snap Kitchen works

Snap Kitchen is a prepared meal subscription service that sends weekly boxes of ready-to-eat meals. You won’t be doing any chopping, dicing or cooking at all — just heating and eating. It’s a snap. Get it?

Once you sign up for your meal plan — either six or 12 meals per week — you’ll choose meals from a weekly menu of about 35 options. Recipes range from hearty pasta dishes to lighter fare like grilled chicken breast and vegetables. There are one or two breakfast options sprinkled in but most of Snap’s meals are geared toward lunch and dinner. 

screen-shot-2022-03-24-at-5-39-59-pm.png

My six meals arrived fresh and neatly packaged ready to be eaten or frozen for later. 

David Watsky/CNET

You can select your meals each week or let Snap pick them for you. You can also skip any week’s delivery of meals if you won’t be around to eat them. But it is a subscription so they’ll keep on coming if you don’t pause or cancel.

Snap Kitchen delivers to most states but not all. You can punch in your zip code here to find out if you’re in the zone. 

Snap Kitchen pricing

Snap Kitchen offers two simple plans. You can subscribe to get six meals per week $76 ($12.67 per meal) or 12 meals a week for a grand total of $126 ($10.50 per meal).

Snap Kitchen pricing

Meals per week Price per meal
6 $12.67
12 $10.50

What are Snap Kitchen meals like? 

Snap Meals are eclectic, with 35 weekly options spanning several cuisines — Japanese, Indian, Korean, French, Italian. There are also some basic recipes including herb-grilled chicken with a side of vegetables. Some meals are loaded with lean protein and healthy veggies while others would be best categorized as comfort food, with carbs a-plenty. There are virtually no plant-based options and few featuring seafood. 

jerk-chicken.png

The jerk chicken with mango salsa was super tasty but the portion was too small for this guy.

David Watsky/CNET

While the meals arrive fresh and not frozen, most can be frozen if you’re not planning to eat them in the first few days. I would recommend freezing anything you don’t plan to eat within two or three days, especially anything containing seafood. 

I wouldn’t classify Snap Kitchen as a health-focused food delivery service but it has plenty of healthy options. The portions also tend to run small so if you’re looking to cut total calories without giving up red meat, pasta and potatoes, Snap has plenty of weekly picks. Most meals are between 350 and 450 calories.

What I had and how I liked it 

I chose six of Snap Kitchen’s meals and tried them over the course of a few days. Here’s what I ate and how I liked it. 

Beef bourguignon with potato-turnip mash: I had high hopes for this meal but the meat proved tough and grisly. The turnip-potato mash was OK, but I wouldn’t want to eat this meal again.

beef-burgandy

I love beef bourguignon but Snap Kitchen’s version did not impress.

David Watsky/CNET

Chicken shawarma with lemon tahini sauce: This meal was big on flavor with an awesome sauce to drizzle over. The chicken itself was a bit dry and just OK.

Korean barbecue meatballs: This dish was my favorite of the bunch. The meatballs were tender and tasty with a nice umami-rich barbecue sauce. The accompanying broccoli still had some spring in it too.

korean-meatballs.png

These sweet and spicy Korean meatballs with vegetables and rice was the best in the bunch.

David Watsky/CNET

Jerk chicken with mango salsa: This was another of my favorites, with tender chicken and tangy mango salsa. Unfortunately, it was far too small, with just a few spoonfuls of rice that didn’t fill me up.

Pesto pasta with chicken sausage meatballs: The chicken meatballs were dry but still tasty. The pasta was slightly undercooked (a good thing!) so when I heated it up, it became a nice al dente. The pesto was also good, but be prepared to taste the garlic.

screen-shot-2022-03-24-at-5-17-51-pm.png

The chicken meatballs with pesto pasta didn’t blow me away but it one of the better meals I tried. 

David Watsky/CNET

Cajun salmon with braised greens and bacon: The salmon was fresh enough. The braised greens (collard, I believe) were good, if overcooked. The bacon added nice flavor, as you’d expect.

Who is Snap Kitchen good for?

Since meals are on the small side, Snap Kitchen is good for portion control and general calorie cutting. Most are under 500 total calories with many meal options under 400 cals. I prefer to eat bigger meals with healthier ingredients or fewer carbs. If you crave those heavier foods but don’t quite trust yourself with leftovers (who can blame you?), this might be a good meal delivery service to try.

screen-shot-2022-03-24-at-6-01-03-pm.png

The plastic packaging was mostly recyclable. Nutritional information for each meal was easy to find.

David Watsky/CNET

Who is Snap Kitchen not good for?

Snap Kitchen isn’t suitable for vegetarians or vegans since there are no plant-based offerings each week. It’s also not a great option for big eaters. The small portions might frustrate someone with a sizeable appetite. 

I also wouldn’t recommend this service for families since it would get expensive to feed three or four people with Snap Kitchen. For that, try Mosaic Foods: It’s one of my favorite meal delivery services and one that offers family-sized plans. EveryPlate is a budget-friendly meal kit service I also loved that’s great for families, with portions clocking in at around $5. Although you’ll have to do the cooking yourself.

screen-shot-2022-03-25-at-12-43-46-pm.png

Snap Kitchen meals were mostly pretty tasty but the portion sizes were a bit small for me.

David Watsky/CNET

The final verdict on Snap Kitchen

Snap Kitchen succeeded on a few fronts. The majority of meals were tasty, with a couple of misses out of the six I tried. The sauces were fun and the veggies and starches were cooked well and not overdone. The main beef I have with this service is there wasn’t enough beef — I’m talkin’ portion size. At over $10 a meal (for the cheapest 12-meal plan), I would expect the meals to be filling, and many just weren’t. That said, if maintaining portion control is important, this might be a good subscription to try. 

For meal delivery in this price range, I’d suggest Freshly or Fresh n’ Lean if you’re willing to spend a few more dollars per meal. For vegetarians and vegans, Mosaic Foods is my top choice, with excellent plant-based prepared meals that cost between $9 and $11.

More meal delivery picks





Source link

Leave a Reply

Subscribe to Our Newsletter

Get our latest articles delivered straight to your inbox. No spam, we promise.

Recent Reviews


Elasticsearch Aggregations – Table of Content

Characteristics

  • It can be formed together to manufacture complex sum up of information. 
  • It tends to be considered as a single unit-of-work that makes analytic data over a bunch of archives which are accessible in elasticsearch. 
  • It is fundamentally based on the building blocks. 
  • Aggregation functions are the same as GROUP BY COUNT and SQL AVERAGE functions.
  • Utilizing aggregation in elasticsearch, can perform GROUP BY aggregation on any numeric field, yet we should type keywords or there must be fielddata = valid for text fields.

Four categories of Aggregations 

Bucket aggregations

Bucketing is a group of aggregations, which is liable for building buckets. It doesn’t figure metrics over the fields like metric collection. Each pail is related with a key and a report. It is utilized to gather or make information buckets. These information buckets can be made dependent on the current fields, ranges, and altered filters, and so on.

Metric aggregations

These aggregations help in processing matrices from the field’s estimations of the collected reports and at some point a few values can be produced from contents. Numeric matrices can either be single-valued like average aggregation or multi-valued like stats.

Pipeline aggregations

It takes contributions from the yield of different aggregations. Pipeline aggregations are liable for assembling the yield of different aggregations.

Matrix aggregations

Matrix collection is an aggregation that works on different fields. It deals with more than one field and creates a matrix result out of the values, that is extricated from the solicitation record fields. It doesn’t uphold scripting. 

      Want to get  ElasticSearch Training From Experts? Enroll Now to get free demo on Elasticsearch Training.

Types of Aggregations

1. Filter Aggregation

The filter aggregation assists with separating the archives in a solitary bucket. Its fundamental reason for existing is to give the best outcomes to its clients by sifting the archive. We should take a guide to channel the reports dependent on “fees” and “Admission year”. It will restore archives that coordinate with the conditions determined in the query. You can filter the report utilizing any field you need.

POST student/ _search/  

{  

       "query": {    

            "bool": {  

                "filter": [  

                     { "term": { "fees": "22900" } },  

                     { "term": { "Admission year": "2019" } },  

                 ]  

           }  

    }  

}  

Response

{   

"took": 5,  

"timed_out": false,  

"_shards": {  

"total": 1,  

"successful": 1,  

"skipped": 0,  

"failed": 0  

},  

"hits": {  

                   "total": {  

  "value": 1,  

  "relation": "eq"  

           },  

"max_score": 0,  

"hits": [ ]  

{  

         "index": "student",  

          "type": "_doc",  

         "id": "02",  

         "score": 1,  

         "_source": {  

  "name ": "Jose Fernandez",  

 "dob": "07/Aug/1996",  

 "course": "Bcom (H)",  

 "Admission year": "2019",  

  "email": "jassf@gmail.com",  

 "street": "4225 Ersel Street",   

  "state": "Texas",   

 "country": "United States",   

  "zip": "76011",  

  "fees": "22900"  

                   }  

             }  

         ]  

      }  

}  

2. Terms Aggregation

The terms aggregation is liable for producing buckets by the field esteems. By choosing a field (like name, admission year, and so forth), it creates the buckets. Determine the aggregation name in query while making an inquiry. Execute the accompanying code to look through the values assembled by admission year field:

POST student/ _search/  

{  

   "size": 0,    

    "aggs": {    

       "group_by_Admission year": {  

               "terms" : {   

                    "field": "Admission year.keyword"  

                }  

          }  

    }  

}  

By executing the above code, it  will be returned as a group by admission year. The output is as follows.

Output

{   

"took": 179,  

"timed_out": false,  

"_shards": {  

"total": 1,  

"successful": 1,  

"skipped": 0,  

"failed": 0  

},  

"hits": {  

                   "total": {  

 "value": 3,  

 "relation": "eq"  

          },  

"max_score": null,  

"hits": [ ]  

},  

  "aggregations":  {  

         "group_by_Addmission year": {  

             "student1",  

             "doc_count_error_upper_bound": 0,  

             "sum_other_doc_count": 0,  

              "buckets": [  

              {  

      "key ": "2019",  

      "doc_count": 2   

 },  

 {  

      "key": "2018",  

      "doc_count": 1  

}  

                  ]  

          }  

     }  

} 

ElasticSearch Training

  • Master Your Craft
  • Lifetime LMS & Faculty Access
  • 24/7 online expert support
  • Real-world & Project Based Learning

3. Nested Aggregation

A nested aggregation permits you to assemble a field with nested reports, a field that has numerous sub-fields.A unique single bucket aggregation that empowers accumulating nested archives. For instance, let’s state we have a list of products, and every item holds the list of resellers, each having its own cost for the item.  Resellers is an array that holds nested documents. The mapping could resemble:

PUT /products

{

  "mappings": {

    "properties": {

      "resellers": { 

        "type": "nested",

        "properties": {

          "reseller": { "type": "text" },

          "price": { "type": "double" }

        }

      }

    }

  }

}

The following request adds a product with two resellers:

PUT /products/_doc/0

{

  "name": "LED TV", 

  "resellers": [

    {

      "reseller": "companyA",

      "price": 350

    },

    {

      "reseller": "companyB",

      "price": 500

    }

  ]

}

The following request returns the minimum price a product can be purchased for:

GET /products/_search

{

  "query": {

    "match": { "name": "led tv" }

  },

  "aggs": {

    "resellers": {

      "nested": {

        "path": "resellers"

      },

      "aggs": {

        "min_price": { "min": { "field": "resellers.price" } }

      }

    }

  }

}

Output

{

  ...

  "aggregations": {

    "resellers": {

      "doc_count": 2,

      "min_price": {

        "value": 350

      }

    }

  }

 }

4. Cardinality Aggregation

This aggregation gives the tally of distinct values in a specific field. It helps to find a unique value for a field. 

POST /schools/_search?size=0

{

   "aggs":{

      "distinct_name_count":{"cardinality":{"field":"fees"}}

   }

}

On running the above code, we get the following result,

Output

{

   "took" : 2,

   "timed_out" : false,

   "_shards" : {

      "total" : 1,

      "successful" : 1,

      "skipped" : 0,

      "failed" : 0

   },

   "hits" : {

      "total" : {

         "value" : 2,

         "relation" : "eq"

      },

      "max_score" : null,

      "hits" : [ ]

   },

   "aggregations" : {

      "distinct_name_count" : {

         "value" : 2

      }

   }

}

The value of cardinality is 2 because there are two distinct values in fees.

Big Data Analytics, elasticsearch-aggregations-description-0, Big Data Analytics, elasticsearch-aggregations-description-1

Subscribe to our YouTube channel to get new updates..!

5. Extended Stats Aggregation

This aggregation produces all the statistics about a particular mathematical field in collected documents. 

POST /schools/_search?size=0

{

   "aggs" : {

      "fees_stats" : { "extended_stats" : { "field" : "fees" } }

   }

}

On running the above code, we get the following result,

Output

{

   "took" : 8,

   "timed_out" : false,

   "_shards" : {

      "total" : 1,

      "successful" : 1,

      "skipped" : 0,

      "failed" : 0

   },

   "hits" : {

      "total" : {

         "value" : 2,

         "relation" : "eq"

      },

      "max_score" : null,

      "hits" : [ ]

   },

   "aggregations" : {

      "fees_stats" : {

         "count" : 2,

         "min" : 2200.0,

         "max" : 3500.0,

         "avg" : 2850.0,

         "sum" : 5700.0,

         "sum_of_squares" : 1.709E7,

         "variance" : 422500.0,

         "std_deviation" : 650.0,

         "std_deviation_bounds" : {

            "upper" : 4150.0,

            "lower" : 1550.0

         }

      }

   }

}

6. Stats Aggregation

A multi-value metrics aggregation that figures statistics over numeric values removed from the aggregated reports. It is a multi-value numeric matrix aggregation that helps to create sum, avg, max, min, and count in a single shot. The query structure is the same as the other aggregation

POST /schools/_search?size=0

{

   "aggs" : {

      "grades_stats" : { "stats" : { "field" : "fees" } }

   }

}

On running the above code, we get the following result,

Output

{

   "took" : 2,

   "timed_out" : false,

   "_shards" : {

      "total" : 1,

      "successful" : 1,

      "skipped" : 0,

      "failed" : 0

   },

   "hits" : {

      "total" : {

         "value" : 2,

         "relation" : "eq"

      },

      "max_score" : null,

      "hits" : [ ]

   },

   "aggregations" : {

      "grades_stats" : {

         "count" : 2,

         "min" : 2200.0,

         "max" : 3500.0,

         "avg" : 2850.0,

         "sum" : 5700.0

      }

   }

}

Avg Aggregation

This collection is utilized to get the avg of any numeric field present in the collected records. 

POST /schools/_search

{

   "aggs":{

      "avg_fees":{"avg":{"field":"fees"}}

   }

}

On running the above code, we get the following result −

Output

{

   "took" : 41,

   "timed_out" : false,

   "_shards" : {

      "total" : 1,

      "successful" : 1,

      "skipped" : 0,

      "failed" : 0

   },

   "hits" : {

      "total" : {

         "value" : 2,

         "relation" : "eq"

      },

      "max_score" : 1.0,

      "hits" : [

         {

            "_index" : "schools",

            "_type" : "school",

            "_id" : "5",

            "_score" : 1.0,

            "_source" : {

               "name" : "Central School",

               "description" : "CBSE Affiliation",

               "street" : "Nagan",

               "city" : "paprola",

               "state" : "HP",

               "zip" : "176115",

               "location" : [

                  31.8955385,

                  76.8380405

               ],

            "fees" : 2200,

            "tags" : [

               "Senior Secondary",

               "beautiful campus"

            ],

            "rating" : "3.3"

         }

      },

      {

         "_index" : "schools",

         "_type" : "school",

         "_id" : "4",

         "_score" : 1.0,

         "_source" : {

            "name" : "City Best School",

            "description" : "ICSE",

            "street" : "West End",

            "city" : "Meerut",

            "state" : "UP",

            "zip" : "250002",

            "location" : [

               28.9926174,

               77.692485

            ],

            "fees" : 3500,

            "tags" : [

               "fully computerized"

            ],

            "rating" : "4.5"

         }

      }

   ]

 },

   "aggregations" : {

      "avg_fees" : {

         "value" : 2850.0

      }

   }

}

Max Aggregation

This aggregation finds the maximum value of a particular numeric field in collected archives. 

POST /schools/_search?size=0

{

   "aggs" : {

   "max_fees" : { "max" : { "field" : "fees" } }

   }

}

On running the above code, we get the following result −

Output

{

   "took" : 16,

   "timed_out" : false,

   "_shards" : {

      "total" : 1,

      "successful" : 1,

      "skipped" : 0,

      "failed" : 0

   },

  "hits" : {

      "total" : {

         "value" : 2,

         "relation" : "eq"

      },

      "max_score" : null,

      "hits" : [ ]

   },

   "aggregations" : {

      "max_fees" : {

         "value" : 3500.0

      }

   }

}

Min Aggregation

This aggregation finds the maximum value of a particular numeric field in collected archives. 

POST /schools/_search?size=0

{

   "aggs" : {

      "min_fees" : { "min" : { "field" : "fees" } }

   }

}

On running the above code, we get the following result −

Output

{

   "took" : 2,

   "timed_out" : false,

   "_shards" : {

      "total" : 1,

      "successful" : 1,

      "skipped" : 0,

      "failed" : 0

   },

   "hits" : {

      "total" : {

         "value" : 2,

         "relation" : "eq"

      },

      "max_score" : null,

      "hits" : [ ]

   },

  "aggregations" : {

      "min_fees" : {

         "value" : 2200.0

      }

   }

}

ElasticSearch Training

Weekday / Weekend Batches

Sum Aggregation

This aggregation finds the maximum value of a particular numeric field in collected archives.

POST /schools/_search?size=0

{

   "aggs" : {

      "total_fees" : { "sum" : { "field" : "fees" } }

   }

}

On running the above code, we get the following result −

Output

{

   "took" : 8,

   "timed_out" : false,

   "_shards" : {

      "total" : 1,

      "successful" : 1,

      "skipped" : 0,

      "failed" : 0

   },

   "hits" : {

      "total" : {

         "value" : 2,

         "relation" : "eq"

      },

      "max_score" : null,

      "hits" : [ ]

   },

   "aggregations" : {

      "total_fees" : {

         "value" : 5700.0

      }

   }

}

7. Aggregation Metadata

You can add some information about the aggregation at the hour of solicitation by utilizing meta tag and can get that accordingly.

POST /schools/_search?size=0

{

   "aggs" : {

      "min_fees" : { "avg" : { "field" : "fees" } ,

         "meta" :{

            "dsc" :"Lowest Fees This Year"

         }

      }

   }

}

On running the above code, we get the following result −

Output

{

   "took" : 0,

   "timed_out" : false,

   "_shards" : {

      "total" : 1,

      "successful" : 1,

      "skipped" : 0,

      "failed" : 0

   },

   "hits" : {

      "total" : {

         "value" : 2,

         "relation" : "eq"

      },

      "max_score" : null,

      "hits" : [ ]

   },

   "aggregations" : {

      "min_fees" : {

         "meta" : {

            "dsc" : "Lowest Fees This Year"

         },

         "value" : 2850.0

      }

   }

}

Conclusion

The different types of aggregations have their own purpose and functions. We have discussed it in detail about it using the coding examples. There exists metrics aggregations that are used in particular cases such as geo bounds aggregation and geo centroid aggregation to get the understanding of geo location. You could understand the concept of aggregation through the examples provided.

Related Articles:



Source link