Marie Bostwick's Blog, page 2
July 14, 2025
Grilled Apricot and Burrata Salad

Lucious grilled apricots, creamy burrata, and crunchy almonds served over tender lettuce and arugula. My Grilled Apricots and Burrata Salad is a great summertime lunch or light dinner. So good!
Celebrate Summer with Grilled Apricot and Burrata SaladFor food lovers, a summer stroll through the produce section or local farmer’s market is pure joy. Displays of fresh, colorful, peak-of-season fruits and veggies are a feast for the eye and the imagination.
Still, summertime bounties present something of a problem, albeit a good one. With so much mouth-watering deliciousness on display, where do you even start? How do you choose?
For me, the answer usually involves stone fruits. Though you can buy peaches, nectarines, and apricots practically year-round these days, why would you?
Out-of-season stone fruits are incredibly expensive and invariably disappointing. In-season,summertime stone fruits are pure poetry. And it seems to me that this year’s crop is even better than usual – juicy, sweet, and succulent.
But the peak season for stone fruits is short. So, I’m incorporating them into as many recipes as I can these days, including this phenomenal Grilled Apricot and Burrata Salad.
This light, delicious mealtime salad is summer on a plate. And so easy to make.
You don’t need many ingredients to make this marvelous salad. But it’s important that you use the best ingredients. That means getting the freshest, ripest, most flavorful produce you can find.
Apricots – Use the squeeze test to make sure your apricots are ripe, but not too ripe. If a gentle but firm press of your fingers makes a slight indentation in the fruit, it’s perfect.Olive oil – For grilling the apricots. Though I used olive oil, you could sub just about any oil here. Almond, sesame, or peanut oil might add an extra hint of subtle flavor.Burrata – This fresh, mild-tasting Italian cheese must be refrigerated, so look for it in a deli cool case or dairy section. Burrata has a firm outer skin like mozzarella, but the inside is soft, creamy, and simply divine.Arugula and Green Leaf Lettuce – Though you can sub other greens, I love a mixture of arugula and green leaf lettuce for this salad. The slightly spicy arugula is wonderful with the sweet grilled apricots and creamy Burrata.Marcona Almonds – A sprinkle of skinless Marcona almonds adds crunch and a touch of nutty flavor to the dish. However, you could substitute other nuts. Roasted pistachios would be a wonderful choice, too.Maple Vinaigrette – My simple maple vinaigrette is slightly sweet and slightly tart, making it absolutely perfect for this dish. It enhances the other ingredients without overpowering them. Find my recipe here.Honey – A very light drizzle of warm honey just before serving is optional. But it can be a nice finishing touch.Grilling the ApricotsOne of the advantages of serving salad for a summertime lunch or dinner is that there’s not much actual cooking involved. You simply place the ingredients in a bowl, make the dressing, pour it on, toss the salad, and voila – dinner is served!
This Grilled Apricot and Burrata follows that formula, with one exception. Though it might seem a little intimidating if you’ve never done it before, grilling apricots is pretty easy.
Begin by cutting the apricots in half and brushing the cut side with oil. You’ll also want to rub some oil on the grill rack or pan to help keep the apricots from sticking.
(Unfortunately, I forgot that step this time, so I didn’t get as many grill marks as I would have liked. But they still looked and tasted great!)
Preheat the grill, making sure it’s nice and hot. Then place the apricots cut side down and grill until they soften slightly – about three to four minutes.
Either an outdoor grill or a grill pan will work here. In a pinch, you could just pop the apricots into the oven under the broiler for a couple of minutes. But grilling them is almost as easy, and I think the grill marks look extra nice.
No matter how you prepare the apricots, Grilled Apricot and Burrata Salad tastes terrific! Give it a try soon!
Print



Share a photo and tag us — we can't wait to see what you've made!
June 30, 2025
No Cook Tabouli: A Mediterranean Diet Recipe

Beat the heat with this healthy and absolutely delicious No Cook Tabouli! Enjoy the bright, fresh flavors of this Mediterranean classic without turning on the stove! A summertime winner!
Too Hot to Cook? Make This Healthy, Delish No Cook Tabouli!Though temperatures are moderate in most of the Pacific Northwest, a huge swath of the country is sweltering beneath a dreaded summertime heat dome.So, this seemed like a perfect time for me to share a recipe that doesn’t require turning on the oven or stove. Because sometimes it’s just too hot to cook.
Still, no matter how high the mercury goes, we still have to eat, right? And while the temptation to subsist on ice cream may be strong right now, it’s probably not a good idea for more than a day. Two at the most.
That’s where this yummy No Cook Tabouli comes in.
It’s loaded with heart-healthy, good-for-you ingredients that also taste terrific. Those bright, fresh flavors will have you and your family going back for seconds, even on the hottest days.
Best of all, the kitchen tools you’ll need to make this classic Mediterranean dish are a cutting board, a good knife, and a couple of bowls.
No heat. No flames. And NO cooking!
Making No Cook Tabouli – Technique, Subs, and Seasoning
The most important ingredient for tabouli is bulgar. Bulgar is cracked wheat that’s partially boiled and then dried. It’s frequently used in Middle Eastern cooking.
Since I started trying to eat more in line with the Mediterranean diet, I’ve been using a lot more bulgar. It’s got a nice, chewy texture and a slightly nutty flavor. Normally, I boil it. However, bulgar can be “cooked” without even turning on the stove.
Pour two parts warm tap water over one part bulgar, and leave it to soak. Two to three hours later, the water will be absorbed and the bulgar will be ready to eat.
All you’ll need to turn bulgar into delicious tabouli is lots of yummy herbs, veggies, and a light, tasty dressing.
This recipe for No Cook Bulgar calls for generous additions of tomatoes, cucumbers, and shallots.
The amounts I suggest are just guidelines. If you like more tomatoes in your tabouli, go for it! Same with the cucumbers. There’s really no such thing as too many veggies, right?
If you can get your hands on homegrown or locally grown tomatoes, I highly recommend them. There’s nothing like the taste of a real, vine-ripened tomato! Otherwise, I’d use Roma tomatoes. They have a better flavor than most other grocery store options.
Likewise, fresh, homegrown cukes are the gold standard. However, cucumber season is still a way off, so I used English cucumbers. They’ve got a good flavor and a delicate skin, so you don’t have to peel them.
Shallots bring a nice bite to this dish, and the flavor isn’t quite as sharp as regular onions. That’s why I used them here. You could also use green onions or red onions. Whatever type you use, make sure they are chopped small. Onions add a nice zing, but biting into a big chunk of raw onion can be too much of a good thing!
Classic tabouli includes generous helpings of fresh parsley and mint. Unless you really dislike them, I’d stick with that. These fresh, cooling herbs bring a lot to the party, especially on a hot day.
The basic version of the dressing for this No Cook Tabouli couldn’t be simpler. It’s just olive oil, fresh-squeezed lemon juice, salt, and pepper.
However, you might want to jazz it up a little.
For a little extra spice, add one-half to a whole teaspoon of red pepper flakes. If you like more lemon flavor, add finely grated zest from the lemons. My go-to is a teaspoon of dried sumac, a classic Mediterranean spice with a citrusy flavor.
No Cook Tabouli – Almost A Meal in Itself
With whole grains, lots of veggies, and a heart-healthy olive oil dressing, No Cook Tabouli is a terrific side dish or starter salad. In fact, it’s almost a meal in itself. The only thing that’s missing is protein.
But that’s an easy fix.
Add protein to your tabouli by stirring in a can of drained, rinsed chickpeas. You can also crumble in a few ounces of tangy Feta cheese. My favorite way to make tabouli into a meal is to enjoy it with a generous helping of hummus.
No matter how you serve it, No Cook Tabouli is a terrific summertime dish. Give it a try this week!
Print


For the tabouli:
1 cup bulgar (I used Bob’s Red Mill brand)2 cups warm tap water2-3 Roma tomatoes, seeded and diced1 large English cucumber, diced1 large shallot, peeled and chopped fine (Can sub green or red onions)1 bunch parsley, chopped (About one cup chopped)½ bunch mint, chopped (About one half cup)For the dressing:
¼ cup olive oil¼ cup fresh-squeezed lemon juice (from 2 medium-sized lemons)1 tsp Kosher salt¼ tsp fresh ground pepperOptional add ins – ½ to 1 tsp red pepper flakes, or zest from the lemon rind, or 1 tsp ground sumac
Cook Mode Prevent your screen from going dark Instructions Place the bulgar in a bowl. Pour in the warm water. Cover and allow bowl to sit on the counter for 2-3 hours, or leave in the refrigerator overnight, until the liquid is absorbed into the bulgar.Fluff the bulgar with a fork. Stir in diced tomatoes, cucumbers, shallots, chopped parsley and mint. Set aside.Whisk the olive oil, lemon juice, salt, pepper, and any optional seasonings together in a bowl or measuring cup. Pour dressing over the tabouli and stir. Can be served immediately or cover and place in the refrigerator to serve later. Tabouli will keep stored in the fridge for 3 to 5 days.
Share a photo and tag us — we can't wait to see what you've made!
June 23, 2025
The Best Maple Vinaigrette Dressing

This simple, 5-ingredient recipe makes the Best Maple Vinaigrette Dressing you’ve ever tasted. Transforms your favorite salad into a restaurant-worthy delight! So good! And so easy!
5 Ingredients + 5 Minutes = The Best Maple Vinaigrette DressingThings will have calmed down by the time you read this. However, as I write this, there’s lot is going on around my house.
My eldest son, his wife, and two adorable children flew in from Oklahoma City last night. Tomorrow, our middle son will drop off his four kiddos. An hour later, The Chairman and I will be loading all six granddarlings into our cars and heading down the road for three days of “Grammy and Grampy Camp.”
I know it’s going to be a lot of fun for all of us.
Still, packing and prepping all the food, gear, games, clothes, and craft projects to keep six campers happy for three days takes time. A lot of time. Which means I’ve had less time for cooking this week.
Fortunately, just a few ingredients and a few minutes are all I need to whip up a dressing that will transform any salad into a gourmet delight that rivals anything you’d find in your favorite restaurant.
Rich, sweet maple syrup paired with fresh-squeezed lemon juice is the foundation of this delicious vinaigrette. Add in a few extra ingredients and you’ve got a bright tasting, surprisingly sweet-tart dressing that’s terrific on all kinds of green salads or fruit salads.
And did I mention that this Maple Vinaigrette Dressing only takes five ingredients?
Oh, I did? Well, it’s a point worth repeating in my book, and a big plus when you’re pressed for time. And since I am, let’s cut to the chase and talk ingredients.
Here’s All You Need to Make the Best Maple Vinaigrette DressingAs I’ve mentioned in other recipe posts, I don’t count salt and pepper with totaling up ingredients, as they’re needed in basically every dish. So, you will need to add Kosher salt and fresh ground pepper to taste for this recipe.
Apart from that, the only five ingredients you need are…
Maple Syrup – When you’re only using a few ingredients for a recipe, they need to be the best you can get. So, real maple syrup is a must for this recipe. That factory-produced, maple-flavored syrup won’t taste nearly as good as the real deal.Lemon Juice – Again, you want great ingredients that are as fresh as can be. In this case, that means just-squeezed juice for real lemons. No bottled lemon juice!Neutral Oil – Normally, olive oil is my go-to. But the flavor would be too strong from this dressing. Use a neutral, unflavored oil such as grapeseed, sunflower, canola, corn, vegetable, avocado, or safflower oils. These oils have little to no flavor, so they will let the maple and lemon taste shine through.Dijon Mustard – Either regular or stone-ground Dijon mustard. Champagne mustard could work too, but I’d avoid yellow mustard.Green onions – I had them on hand, so that’s what I used. Chives, thyme, dill, or other fresh herbs could work well here, too.
When I said that you’d only need five ingredients plus five minutes to make this maple vinaigrette, I was probably stretching the truth.
Once you’ve assembled the ingredients, it’ll only take a minute or two. You just whisk everything together in a bowl, or put them into a jar with a lid and give it a good shake. That’s all there is to it.
My Maple Vinaigrette Dressing can be kept covered in the refrigerator for up to two weeks. (Though I doubt it will last that long.) The oil and juice will separate if they’re left to sit, so be sure to stir or shake again just before pouring on your salad.
If you’ve never made homemade dressing before, this is a terrific one to start with. Homemade salad dressings are so much cheaper and taste so much better than store-bought. This one is so easy to make, and so tasty that it might just become your new favorite salad dressing.
Give it a try soon!
Print

Tag @mariebostwick on Instagram and hashtag it #fiercelymarie
window.trCommon={"minRating":6,"ajaxurl":"https:\/\/mariebostwick.com\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":19552};window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.smoothScroll = {init() {document.addEventListener( 'click', ( e ) => {let anchor = e.target;if ( anchor.tagName !== 'A' ) {anchor = anchor.closest( 'a.tasty-recipes-scrollto' );}if ( ! anchor || ! anchor.classList.contains( 'tasty-recipes-scrollto' ) ) {return;}const elementHref = anchor.getAttribute( 'href' );if ( ! elementHref ) {return;}e.preventDefault();this.goToSelector( elementHref );});},goToSelector( selector ) {const element = document.querySelector( selector );if ( ! element ) {return;}element.scrollIntoView( { behavior: 'smooth' } );}};document.addEventListener('DOMContentLoaded',() => window.TastyRecipes.smoothScroll.init());window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.cookMode = {wakeLockApi: false,wakeLock: false,cookModeSelector: '.tasty-recipes-cook-mode',init() {if ("wakeLock" in navigator && "request" in navigator.wakeLock) {this.wakeLockApi = navigator.wakeLock;}const cookModes = document.querySelectorAll(this.cookModeSelector);if (cookModes.length > 0) {for (const cookMode of cookModes) {if (this.wakeLockApi) {cookMode.querySelector('input[type="checkbox"]').addEventListener("change", event => {this.checkboxChange(event.target);}, false);} else {cookMode.style.display = "none";}}}},checkboxChange(checkbox) {if (checkbox.checked) {this.lock();} else {this.unlock();}},setCheckboxesState(state) {const checkboxes = document.querySelectorAll(this.cookModeSelector + ' input[type="checkbox"]');for (const checkbox of checkboxes) {checkbox.checked = state;}},async lock() {try {this.wakeLock = await this.wakeLockApi.request("screen");this.wakeLock.addEventListener("release", () => {this.wakeLock = false;this.setCheckboxesState(false);});this.setCheckboxesState(true);} catch (error) {this.setCheckboxesState(false);}},unlock() {if (this.wakeLock) {this.wakeLock.release();this.wakeLock = false;}this.setCheckboxesState(false);}};(function(callback) {if (document.readyState !== "loading") {callback();} else {document.addEventListener("DOMContentLoaded", callback);}})(() => {window.TastyRecipes.cookMode.init();});window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.staticTooltip = {element: null,tooltipElement: null,deleting: false,init( element ) {if ( this.deleting ) {return;}this.element = element;this.buildElements();},destroy() {if ( ! this.tooltipElement || this.deleting ) {return;}this.deleting = true;this.tooltipElement.classList.remove( 'opened' );setTimeout( () => {this.tooltipElement.remove();this.deleting = false;}, 500 );},buildElements() {const tooltipElement = document.createElement( 'div' );tooltipElement.classList.add( 'tasty-recipes-static-tooltip');tooltipElement.setAttribute( 'id', 'tasty-recipes-tooltip' );const currentTooltipElement = document.getElementById( 'tasty-recipes-tooltip' );if ( currentTooltipElement ) {document.body.replaceChild( tooltipElement, currentTooltipElement );} else {document.body.appendChild( tooltipElement );}this.tooltipElement = document.getElementById( 'tasty-recipes-tooltip' );},show() {if ( ! this.tooltipElement ) {return;}const tooltipTop = this.element.getBoundingClientRect().top+ window.scrollY- 10 // 10px offset.- this.tooltipElement.getBoundingClientRect().height;const tooltipLeft = this.element.getBoundingClientRect().left- ( this.tooltipElement.getBoundingClientRect().width / 2 )+ ( this.element.getBoundingClientRect().width / 2 ) - 1;const posLeft = Math.max( 10, tooltipLeft );this.maybeRemoveTail( posLeft !== tooltipLeft );this.tooltipElement.setAttribute( 'style', 'top:' + tooltipTop + 'px;left:' + posLeft + 'px;' );this.tooltipElement.classList.add( 'opened' );},maybeRemoveTail( removeTail ) {if ( removeTail ) {this.tooltipElement.classList.add( 'tr-hide-tail' );} else {this.tooltipElement.classList.remove( 'tr-hide-tail' );}},changeMessage( message ) {if ( ! this.tooltipElement ) {return;}this.tooltipElement.innerHTML = message;}};window.TastyRecipes.ajax = {sendPostRequest( url, data, success, failure ) {const xhr = new XMLHttpRequest();xhr.open( 'POST', url, true );xhr.send( this.preparePostData( data ) );xhr.onreadystatechange = () => {if ( 4 !== xhr.readyState ) {return;}if ( xhr.status === 200 ) {success( JSON.parse( xhr.responseText ) );return;}failure( xhr );};xhr.onerror = () => {failure( xhr );};},preparePostData( data ) {const formData = new FormData();for ( const key in data ) {formData.append( key, data[key] );}return formData;},};window.TastyRecipes.ratings = {defaultRating: 0,currentRatingPercentage: 100,savingRating: false,init( minRating ) {this.minRating = minRating;this.formWatchRating();this.closeTooltipWhenClickOutside();this.addBodyClassBasedOnSelectedRating();this.backwardCompFormRatingPosition();},formWatchRating() {const ratings = document.querySelectorAll('.tasty-recipes-no-ratings-buttons [data-rating]');if ( ratings.length <= 0 ) {return;}for ( const rating of ratings ) {rating.addEventListener( 'click', event => {event.preventDefault();this.defaultRating = event.target.closest( '.checked' ).dataset.rating;this.setCheckedStar( event.target );this.maybeSendRating( this.defaultRating, event.target );this.setRatingInForm( this.defaultRating );} );}},closeTooltipWhenClickOutside() {window.addEventListener( 'click', e => {// Bailout (don't remove the tooltip) when the clicked element is a rating star, or it's the tooltip itself.if ( e.target.closest( '.tasty-recipes-rating' ) || e.target.classList.contains( 'tasty-recipes-static-tooltip' ) ) {return;}window.TastyRecipes.staticTooltip.destroy();} );}, setRatingInForm( rating ) {const ratingInput = document.querySelector( '#respond .tasty-recipes-rating[value="' + rating + '"]' );if ( ! ratingInput ) {return;}ratingInput.click();},addBodyClassBasedOnSelectedRating() {const ratingInputs = document.querySelectorAll( 'input.tasty-recipes-rating' );if ( ! ratingInputs ) {return;}for ( const ratingInput of ratingInputs ) {ratingInput.addEventListener( 'click', currentEvent => {const selectedRating = currentEvent.target.getAttribute( 'value' );this.handleBodyClassByRating( selectedRating );this.toggleCommentTextareaRequired( selectedRating );} );}},handleBodyClassByRating( rating ) {if ( rating < this.minRating ) {document.body.classList.remove( 'tasty-recipes-selected-minimum-rating' );return;}document.body.classList.add( 'tasty-recipes-selected-minimum-rating' );},toggleCommentTextareaRequired( rating ) {const commentTextarea = document.getElementById( 'comment' );if ( ! commentTextarea ) {return;}if ( rating < this.minRating ) {commentTextarea.setAttribute( 'required', '' );return;}commentTextarea.removeAttribute( 'required' );},maybeSendRating( rating, element ) {if ( this.savingRating === rating ) {return;}this.savingRating = rating;window.TastyRecipes.staticTooltip.init( element );const recipeCardElement = element.closest( '.tasty-recipes' );if ( ! recipeCardElement ) {window.TastyRecipes.staticTooltip.destroy();return;}window.TastyRecipes.ajax.sendPostRequest(window.trCommon.ajaxurl,{action: 'tasty_recipes_save_rating',rating,nonce: window.trCommon.ratingNonce,post_id: window.trCommon.postId,recipe_id: recipeCardElement.dataset.trId,},( response ) => {window.TastyRecipes.staticTooltip.changeMessage( response.data.message );window.TastyRecipes.staticTooltip.show();this.updateAverageText( response.data, recipeCardElement );this.maybeFillCommentForm( response.data );// Hide the tooltip after 5 seconds.setTimeout( () => {this.maybeResetTooltip( recipeCardElement, response.data, rating );}, 5000 );},() => {this.resetTooltip( recipeCardElement );});},updateAverageText( data, recipeCardElement ) {if ( ! data.average ) {return;}this.setRatingPercent( data );if ( ! data.count ) {return;}const quickLink = document.querySelector( '.tasty-recipes-rating-link' );if ( quickLink ) {this.setTextInContainer( quickLink, data );this.setPartialStar( quickLink );}const cardStars = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' );cardStars.dataset.trDefaultRating = data.average;this.setTextInContainer( recipeCardElement.querySelector( '.tasty-recipes-rating' ), data );},setTextInContainer( container, data ) {if ( ! container ) {return;}if ( data.label ) {const ratingLabelElement = container.querySelector( '.rating-label' );if ( ratingLabelElement ) {ratingLabelElement.innerHTML = data.label;}return;}const averageElement = container.querySelector( '.average' );if ( averageElement ) {averageElement.textContent = data.average;}const countElement = container.querySelector( '.count' );if ( countElement ) {countElement.textContent = data.count;}},setPartialStar( container ) {const highestStar = container.querySelector( '[data-rating="' + Math.ceil( this.defaultRating ) + '"]' );if ( highestStar ) {highestStar.dataset.trClip = this.currentRatingPercentage;}},setRatingPercent( data ) {this.defaultRating = data.average.toFixed( 1 );const parts = data.average.toFixed( 2 ).toString().split( '.' );this.currentRatingPercentage = parts[1] ? parts[1] : 100;if ( this.currentRatingPercentage === '00' ) {this.currentRatingPercentage = 100;}},setCheckedStar( target ) {const cardRatingContainer = target.closest( '.tasty-recipes-ratings-buttons' );const selectedRatingElement = cardRatingContainer.querySelector( '[data-tr-checked]' );if ( selectedRatingElement ) {delete selectedRatingElement.dataset.trChecked;}const thisStar = target.closest( '.tasty-recipes-rating' );thisStar.dataset.trChecked = 1;thisStar.querySelector( '[data-tr-clip]' ).dataset.trClip = 100;},maybeFillCommentForm( data ) {if ( ! data.comment || ! data.comment.content ) {return;}const commentForm = document.querySelector( '#commentform' );if ( ! commentForm ) {return;}const commentBox = commentForm.querySelector( '[name=comment]' );if ( ! commentBox || commentBox.value ) {return;}// Add comment details for editing.commentBox.innerHTML = data.comment.content;if ( data.comment.name ) {commentForm.querySelector( '[name=author]' ).value = data.comment.name;commentForm.querySelector( '[name=email]' ).value = data.comment.email;}},maybeResetTooltip( recipeCardElement, data, rating ) {if ( this.savingRating === rating ) {this.resetTooltip( recipeCardElement, data );}},resetTooltip( recipeCardElement, data ) {window.TastyRecipes.staticTooltip.destroy();this.savingRating = false;// Reset the default rating.const cardRatingContainer = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' );if ( cardRatingContainer ) {this.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;cardRatingContainer.dataset.trDefaultRating = this.defaultRating;this.resetSelectedStar( cardRatingContainer, data );}},resetSelectedStar( cardRatingContainer ) {const selectedRatingElement = cardRatingContainer.querySelector( '[data-rating="' + Math.ceil( this.defaultRating ) + '"]' );if ( selectedRatingElement ) {selectedRatingElement.querySelector( '[data-tr-clip]' ).dataset.trClip = this.currentRatingPercentage;selectedRatingElement.parentNode.dataset.trChecked = 1;}const previousSelectedElement= cardRatingContainer.querySelector( '[data-tr-checked]' );if ( previousSelectedElement ) {const currentSelectedRating = previousSelectedElement.querySelector('[data-rating]');if ( currentSelectedRating !== selectedRatingElement ) {delete previousSelectedElement.dataset.trChecked;}}},backwardCompFormRatingPosition() {const ratingsButtons = document.querySelector( '#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons' );if ( ! ratingsButtons ) {return;}const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);if ( ! ratingsButtonsStyles.display.includes( 'flex' ) ) {ratingsButtons.style.direction = 'rtl';}if ( typeof tastyRecipesRating !== 'undefined' ) {// Select the rating that was previously selected in admin.ratingsButtons.querySelector( '.tasty-recipes-rating[value="' + tastyRecipesRating + '"]' ).checked = true;}const ratingSpans = ratingsButtons.querySelectorAll( '.tasty-recipes-rating' );for (const ratingSpan of ratingSpans) {ratingSpan.addEventListener( 'click', event => {if ( ratingSpan === event.target ) {return;}ratingSpan.previousElementSibling.click();} );}}};(function(callback) {if (document.readyState !== "loading") {callback();} else {window.addEventListener( 'load', callback );}})(() => {window.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );});June 16, 2025
Antipasto Pasta Salad: A Taste of Italy

Antipasto Pasta Salad puts the flavor of Italy in a bowl. Pasta with spicy salmi, briny olives, creamy mozzarella, fresh tomatoes, sweet peppers, in a gorgeous homemade vinaigrette. Delizioso!
A Taste of Italy in a Gorgeous Summer SaladSometimes taking inventory of leftovers is the perfect inspiration for a really terrific new recipe. That’s exactly with my Antipasto Pasta Salad.
Opening the fridge last week, I spotted a package of low-sodium dried salami. I’d used it to make charcuterie cups that I’d served at my book launch party, but there was a quite a bit left. A little more digging unearthed some wonderful marinated olives, a pint of grape tomatoes, and a sweet red pepper.
I had just about everything I’d need to make a nice antipasto tray. Certainly, I could have gone that direction. But I wanted to make something a little more substantial – something I could use for a quick lunch or side dish during the week.
Though pasta salad seemed like an obvious choice, I hesitated initially. Because my experience, pasta salad often turns out to be bland, blah, and more than a little disappointing.
But maybe…if I leaned into those bold antipasto flavors, and paired them with a really robust homemade Italian dressing…?
Challenge accepted.
I pulled ingredients out of the refrigerator and pantry, and started boiling water for pasta. An hour later, The Chairman and I picked up our forks for a taste test.
The verdict?
Every bite contained a combination of spicy, briny, creamy, fresh, and slightly sweet flavors, all enhanced by a light but robust vinaigrette.
In short, this Antipasto Pasta Salad is the farthest thing from bland! It’s the taste of Italy in a bowl, and a perfect summertime salad – easy to love, and even easier to make.
What Do You Need to Make Antipasto Pasta Salad?
As the name implies, this yummy salad is a nod to traditional Italian Antipasto, with ingredients that include…
Salami – My preference here is for a dry cured, low sodium salami. You could use a regular salami if that’s what you’ve got on hand, but I think the low sodium type has better flavor. It’s also better for you.
Marinated Olives – Just about any type of marinated green or black olive will work here, but stay away from canned black olives. They don’t have nearly as much flavor.
Fresh Mozzerella – You’ll use those small, bite-sized balls of fresh mozzarella, sometimes known as pearls. You can find them in the cheese or deli section of most grocery stores.
Roasted Red Peppers – Jarred roasted red peppers can usually be found near the pickles, or can often be purchased from olive bars in the deli section. But making your own roasted peppers is cheaper and very easy. Just remove the seeds and slice the peppers into strips. Then rub them with olive oil, sprinkle with a little salt and pepper, and roast on a baking sheet at 425 degrees for about 10 minutes, until the peppers are soft and slightly charred on the edges.
Tomatoes – use the grape or cherry tomatoes of our choice, sliced into halves.
Pasta – I really think Farfalle, sometimes known as bowtie pasta, is the way to go here. But Gemelli, Fusilli, Orecchiette, Rotini, or Penne could work too.
As you’ll see in the instructions, all the ingredients except the pasta will be cut into small pieces, so you’ll get a variety of flavors in every bite of the antipasto pasta salad. The combinations of spicy, briny, sweet, and creamy make each bite a joyous little adventure.
However, it’s the homemade Italian dressing that really brings it all together.
Antipasto Pasta Salad: Making the Dressing
Though my version increases the amounts of a few ingredients and subbed fresh thyme for dried, my Italian dressing is based on a recipe from Love and Lemons.
This wonderful vinaigrette uses olive oil, fresh lemon juice, white vinegar, garlic, a combination of fresh and dried herbs, plus a touch of mustard and honey. It has an incredible, bright, bold flavor.
I know you might be tempted to just grab that bottled Italian dressing for this recipe, but don’t.
This vinaigrette is SO easy to make, and more than worth the effort. Honestly, it makes the salad.
Once you taste it, especially on this wonderful Antipasto Pasta Salad, you might just throw the bottled stuff away for good.
Give it, and this terrific Italian inspired pasta salad, a try this week!


For the Salad:
8 oz Farfalle (Bow tie pasta)10 slices low sodium dry salami, quartered15 fresh mozzarella pearls, halved20 grape tomatoes, halved20 marinated green or black olives, halved1 medium red sweet pepper, roasted and chopped (see blog for instructions on oven roasting peppers. If using jarred or prepared roasted peppers, use about 1/3 cup)For the Dressing:
6 T olive oil3 T fresh lemon juice3 T white wine vinegar1 large clove garlic, put through a garlic press or grated1.5 tsp honey1 tsp Dijon mustard2 T fresh chopped parsley1.5 tsp fresh thyme leaves (can sub ¾ tsp dried)1 tsp drive oregano¼ tsp Kosher saltFresh ground pepper to taste Cook Mode Prevent your screen from going dark Instructions Boil the pasta in well- salted water according to package instructions, until al dente. Drain the cooked pasta and run under cool water. Set aside.While the pasta is cooking, prepare the other salad ingredients – slicing the salami, mozzarella pearls, tomatoes, olives, and roasted peppers into the suggested sizes listed. (See blog instructions for oven roasting peppers at home.) If using jarred or prepared roasted peppers, use about 1/3 cup).Prepare the dressing by placing all the ingredients in a small bowl and whisking vigorously to combine.Place the pasta in a medium to large sized serving bowl. Add sliced salami, tomatoes, mozzarella, olives, and chopped roasted red peppers. Pour dressing over the salad and stir to combine and coat the ingredients with the dressing.
Tag @mariebostwick on Instagram and hashtag it #fiercelymarie
window.trCommon={"minRating":6,"ajaxurl":"https:\/\/mariebostwick.com\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":19538};window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.smoothScroll = {init() {document.addEventListener( 'click', ( e ) => {let anchor = e.target;if ( anchor.tagName !== 'A' ) {anchor = anchor.closest( 'a.tasty-recipes-scrollto' );}if ( ! anchor || ! anchor.classList.contains( 'tasty-recipes-scrollto' ) ) {return;}const elementHref = anchor.getAttribute( 'href' );if ( ! elementHref ) {return;}e.preventDefault();this.goToSelector( elementHref );});},goToSelector( selector ) {const element = document.querySelector( selector );if ( ! element ) {return;}element.scrollIntoView( { behavior: 'smooth' } );}};document.addEventListener('DOMContentLoaded',() => window.TastyRecipes.smoothScroll.init());window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.cookMode = {wakeLockApi: false,wakeLock: false,cookModeSelector: '.tasty-recipes-cook-mode',init() {if ("wakeLock" in navigator && "request" in navigator.wakeLock) {this.wakeLockApi = navigator.wakeLock;}const cookModes = document.querySelectorAll(this.cookModeSelector);if (cookModes.length > 0) {for (const cookMode of cookModes) {if (this.wakeLockApi) {cookMode.querySelector('input[type="checkbox"]').addEventListener("change", event => {this.checkboxChange(event.target);}, false);} else {cookMode.style.display = "none";}}}},checkboxChange(checkbox) {if (checkbox.checked) {this.lock();} else {this.unlock();}},setCheckboxesState(state) {const checkboxes = document.querySelectorAll(this.cookModeSelector + ' input[type="checkbox"]');for (const checkbox of checkboxes) {checkbox.checked = state;}},async lock() {try {this.wakeLock = await this.wakeLockApi.request("screen");this.wakeLock.addEventListener("release", () => {this.wakeLock = false;this.setCheckboxesState(false);});this.setCheckboxesState(true);} catch (error) {this.setCheckboxesState(false);}},unlock() {if (this.wakeLock) {this.wakeLock.release();this.wakeLock = false;}this.setCheckboxesState(false);}};(function(callback) {if (document.readyState !== "loading") {callback();} else {document.addEventListener("DOMContentLoaded", callback);}})(() => {window.TastyRecipes.cookMode.init();});window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.staticTooltip = {element: null,tooltipElement: null,deleting: false,init( element ) {if ( this.deleting ) {return;}this.element = element;this.buildElements();},destroy() {if ( ! this.tooltipElement || this.deleting ) {return;}this.deleting = true;this.tooltipElement.classList.remove( 'opened' );setTimeout( () => {this.tooltipElement.remove();this.deleting = false;}, 500 );},buildElements() {const tooltipElement = document.createElement( 'div' );tooltipElement.classList.add( 'tasty-recipes-static-tooltip');tooltipElement.setAttribute( 'id', 'tasty-recipes-tooltip' );const currentTooltipElement = document.getElementById( 'tasty-recipes-tooltip' );if ( currentTooltipElement ) {document.body.replaceChild( tooltipElement, currentTooltipElement );} else {document.body.appendChild( tooltipElement );}this.tooltipElement = document.getElementById( 'tasty-recipes-tooltip' );},show() {if ( ! this.tooltipElement ) {return;}const tooltipTop = this.element.getBoundingClientRect().top+ window.scrollY- 10 // 10px offset.- this.tooltipElement.getBoundingClientRect().height;const tooltipLeft = this.element.getBoundingClientRect().left- ( this.tooltipElement.getBoundingClientRect().width / 2 )+ ( this.element.getBoundingClientRect().width / 2 ) - 1;const posLeft = Math.max( 10, tooltipLeft );this.maybeRemoveTail( posLeft !== tooltipLeft );this.tooltipElement.setAttribute( 'style', 'top:' + tooltipTop + 'px;left:' + posLeft + 'px;' );this.tooltipElement.classList.add( 'opened' );},maybeRemoveTail( removeTail ) {if ( removeTail ) {this.tooltipElement.classList.add( 'tr-hide-tail' );} else {this.tooltipElement.classList.remove( 'tr-hide-tail' );}},changeMessage( message ) {if ( ! this.tooltipElement ) {return;}this.tooltipElement.innerHTML = message;}};window.TastyRecipes.ajax = {sendPostRequest( url, data, success, failure ) {const xhr = new XMLHttpRequest();xhr.open( 'POST', url, true );xhr.send( this.preparePostData( data ) );xhr.onreadystatechange = () => {if ( 4 !== xhr.readyState ) {return;}if ( xhr.status === 200 ) {success( JSON.parse( xhr.responseText ) );return;}failure( xhr );};xhr.onerror = () => {failure( xhr );};},preparePostData( data ) {const formData = new FormData();for ( const key in data ) {formData.append( key, data[key] );}return formData;},};window.TastyRecipes.ratings = {defaultRating: 0,currentRatingPercentage: 100,savingRating: false,init( minRating ) {this.minRating = minRating;this.formWatchRating();this.closeTooltipWhenClickOutside();this.addBodyClassBasedOnSelectedRating();this.backwardCompFormRatingPosition();},formWatchRating() {const ratings = document.querySelectorAll('.tasty-recipes-no-ratings-buttons [data-rating]');if ( ratings.length <= 0 ) {return;}for ( const rating of ratings ) {rating.addEventListener( 'click', event => {event.preventDefault();this.defaultRating = event.target.closest( '.checked' ).dataset.rating;this.setCheckedStar( event.target );this.maybeSendRating( this.defaultRating, event.target );this.setRatingInForm( this.defaultRating );} );}},closeTooltipWhenClickOutside() {window.addEventListener( 'click', e => {// Bailout (don't remove the tooltip) when the clicked element is a rating star, or it's the tooltip itself.if ( e.target.closest( '.tasty-recipes-rating' ) || e.target.classList.contains( 'tasty-recipes-static-tooltip' ) ) {return;}window.TastyRecipes.staticTooltip.destroy();} );}, setRatingInForm( rating ) {const ratingInput = document.querySelector( '#respond .tasty-recipes-rating[value="' + rating + '"]' );if ( ! ratingInput ) {return;}ratingInput.click();},addBodyClassBasedOnSelectedRating() {const ratingInputs = document.querySelectorAll( 'input.tasty-recipes-rating' );if ( ! ratingInputs ) {return;}for ( const ratingInput of ratingInputs ) {ratingInput.addEventListener( 'click', currentEvent => {const selectedRating = currentEvent.target.getAttribute( 'value' );this.handleBodyClassByRating( selectedRating );this.toggleCommentTextareaRequired( selectedRating );} );}},handleBodyClassByRating( rating ) {if ( rating < this.minRating ) {document.body.classList.remove( 'tasty-recipes-selected-minimum-rating' );return;}document.body.classList.add( 'tasty-recipes-selected-minimum-rating' );},toggleCommentTextareaRequired( rating ) {const commentTextarea = document.getElementById( 'comment' );if ( ! commentTextarea ) {return;}if ( rating < this.minRating ) {commentTextarea.setAttribute( 'required', '' );return;}commentTextarea.removeAttribute( 'required' );},maybeSendRating( rating, element ) {if ( this.savingRating === rating ) {return;}this.savingRating = rating;window.TastyRecipes.staticTooltip.init( element );const recipeCardElement = element.closest( '.tasty-recipes' );if ( ! recipeCardElement ) {window.TastyRecipes.staticTooltip.destroy();return;}window.TastyRecipes.ajax.sendPostRequest(window.trCommon.ajaxurl,{action: 'tasty_recipes_save_rating',rating,nonce: window.trCommon.ratingNonce,post_id: window.trCommon.postId,recipe_id: recipeCardElement.dataset.trId,},( response ) => {window.TastyRecipes.staticTooltip.changeMessage( response.data.message );window.TastyRecipes.staticTooltip.show();this.updateAverageText( response.data, recipeCardElement );this.maybeFillCommentForm( response.data );// Hide the tooltip after 5 seconds.setTimeout( () => {this.maybeResetTooltip( recipeCardElement, response.data, rating );}, 5000 );},() => {this.resetTooltip( recipeCardElement );});},updateAverageText( data, recipeCardElement ) {if ( ! data.average ) {return;}this.setRatingPercent( data );if ( ! data.count ) {return;}const quickLink = document.querySelector( '.tasty-recipes-rating-link' );if ( quickLink ) {this.setTextInContainer( quickLink, data );this.setPartialStar( quickLink );}const cardStars = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' );cardStars.dataset.trDefaultRating = data.average;this.setTextInContainer( recipeCardElement.querySelector( '.tasty-recipes-rating' ), data );},setTextInContainer( container, data ) {if ( ! container ) {return;}if ( data.label ) {const ratingLabelElement = container.querySelector( '.rating-label' );if ( ratingLabelElement ) {ratingLabelElement.innerHTML = data.label;}return;}const averageElement = container.querySelector( '.average' );if ( averageElement ) {averageElement.textContent = data.average;}const countElement = container.querySelector( '.count' );if ( countElement ) {countElement.textContent = data.count;}},setPartialStar( container ) {const highestStar = container.querySelector( '[data-rating="' + Math.ceil( this.defaultRating ) + '"]' );if ( highestStar ) {highestStar.dataset.trClip = this.currentRatingPercentage;}},setRatingPercent( data ) {this.defaultRating = data.average.toFixed( 1 );const parts = data.average.toFixed( 2 ).toString().split( '.' );this.currentRatingPercentage = parts[1] ? parts[1] : 100;if ( this.currentRatingPercentage === '00' ) {this.currentRatingPercentage = 100;}},setCheckedStar( target ) {const cardRatingContainer = target.closest( '.tasty-recipes-ratings-buttons' );const selectedRatingElement = cardRatingContainer.querySelector( '[data-tr-checked]' );if ( selectedRatingElement ) {delete selectedRatingElement.dataset.trChecked;}const thisStar = target.closest( '.tasty-recipes-rating' );thisStar.dataset.trChecked = 1;thisStar.querySelector( '[data-tr-clip]' ).dataset.trClip = 100;},maybeFillCommentForm( data ) {if ( ! data.comment || ! data.comment.content ) {return;}const commentForm = document.querySelector( '#commentform' );if ( ! commentForm ) {return;}const commentBox = commentForm.querySelector( '[name=comment]' );if ( ! commentBox || commentBox.value ) {return;}// Add comment details for editing.commentBox.innerHTML = data.comment.content;if ( data.comment.name ) {commentForm.querySelector( '[name=author]' ).value = data.comment.name;commentForm.querySelector( '[name=email]' ).value = data.comment.email;}},maybeResetTooltip( recipeCardElement, data, rating ) {if ( this.savingRating === rating ) {this.resetTooltip( recipeCardElement, data );}},resetTooltip( recipeCardElement, data ) {window.TastyRecipes.staticTooltip.destroy();this.savingRating = false;// Reset the default rating.const cardRatingContainer = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' );if ( cardRatingContainer ) {this.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;cardRatingContainer.dataset.trDefaultRating = this.defaultRating;this.resetSelectedStar( cardRatingContainer, data );}},resetSelectedStar( cardRatingContainer ) {const selectedRatingElement = cardRatingContainer.querySelector( '[data-rating="' + Math.ceil( this.defaultRating ) + '"]' );if ( selectedRatingElement ) {selectedRatingElement.querySelector( '[data-tr-clip]' ).dataset.trClip = this.currentRatingPercentage;selectedRatingElement.parentNode.dataset.trChecked = 1;}const previousSelectedElement= cardRatingContainer.querySelector( '[data-tr-checked]' );if ( previousSelectedElement ) {const currentSelectedRating = previousSelectedElement.querySelector('[data-rating]');if ( currentSelectedRating !== selectedRatingElement ) {delete previousSelectedElement.dataset.trChecked;}}},backwardCompFormRatingPosition() {const ratingsButtons = document.querySelector( '#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons' );if ( ! ratingsButtons ) {return;}const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);if ( ! ratingsButtonsStyles.display.includes( 'flex' ) ) {ratingsButtons.style.direction = 'rtl';}if ( typeof tastyRecipesRating !== 'undefined' ) {// Select the rating that was previously selected in admin.ratingsButtons.querySelector( '.tasty-recipes-rating[value="' + tastyRecipesRating + '"]' ).checked = true;}const ratingSpans = ratingsButtons.querySelectorAll( '.tasty-recipes-rating' );for (const ratingSpan of ratingSpans) {ratingSpan.addEventListener( 'click', event => {if ( ratingSpan === event.target ) {return;}ratingSpan.previousElementSibling.click();} );}}};(function(callback) {if (document.readyState !== "loading") {callback();} else {window.addEventListener( 'load', callback );}})(() => {window.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );});June 9, 2025
Show Your Library Some Love: Friends of the Library

You might be wondering – what do I mean by “friends of the library?” Well, my recent travels around the country took me to many public libraries, and taught me two important things.
First, public libraries are hugely beneficial to their local communities, providing access to a wide variety of informational and educational services.
Second, in many communities, Friends of the Library groups play a crucial role in supporting libraries and librarians, helping to fill funding gaps, sponsoring enrichment programs, and providing volunteer support.
If you care about libraries, read on to find out what Friends of the Library groups do, why they matter, and how you can get involved. It’s a fun, easy, and meaningful way to show your local library some love!
A Brief History of Public Libraries in America and Why They MatterLending libraries have been part of the fabric of American life since colonial times. Back then, libraries were financed via subscription, with members paying for the ability to borrow books.
It wasn’t until 1833 that the first tax-supported American library was opened in Peterborough, New Hampshire, making it possible for every member of the public, regardless of their financial status, to have access to books.
The number and popularity of public libraries increased after the Civil War. Between 1883 and 1929, steel magnate and philanthropist Andrew Carnegie donated money to build 2,509 public libraries, more than 1,600 of them in the United States. Many of the original Carnegie libraries are still in operation. Carnegie considered libraries, “universities of the people,” and said that, “a library outranks any other one thing a community can do to benefit its people.”
Just as in Carnegie’s time, today’s public libraries continue to enrich lives and communities, providing free access to books, computers, special programming, and more.
But they can’t do it alone!
One way to help is to join your local Friends of the Library organization. These groups play a vital role in helping public libraries fulfill their mission.
What Friends Organizations Do to Support the Mission of Public LibrariesFriends of the Library groups are independent nonprofits that exist to support the mission of public libraries.
Activities of the Friends of the Library groups are as unique as the communities they serve. However, their focus usually falls within the following areas.
FundraisingNo matter the size of the community, library budgets are limited. Fundraising by Friends groups can help provide additional money for books, equipment, enrichment programming, and more.
Friends of the Library groups put on all kinds of different fundraising events –used book sales, galas, author luncheons, silent or live auctions, bake sales, fun runs, duck races, you name it! When it comes to fundraising, Friends groups can get really creative.
Helping with these fundraisers can be a lot of fun, and can make a huge difference for a local library and its patrons, providing money for all kinds of resources and programming.
Volunteer SupportSome libraries, especially those in smaller communities with limited numbers of paid staff, rely on Friends groups to provide volunteers for daily activities or special programming.
Volunteer opportunities and needs will vary depending on the library, but could involve everything from hospitality, decorations, and AV support for special events, to daily activities such as welcoming patrons, reading to children, or sorting donated books.
Many of the events on my tour schedule were hosted by public libraries, which brought me in to speak to their patrons. It’s always a lot of fun! For many of those attending, it might be the first time they’ve ever met a published author in person.
However, while the program is usually free for the library’s patrons, there are costs associated with putting on these kinds of special programs. And that’s where the Friends of the Library come in.
Friend groups often help raise funds and put in volunteer hours to help sponsor and support all kinds of special events, including author visits and other types of cultural and educational programming.
Awareness and AdvocacyFriends of the Library groups also help raise awareness about the importance of the library with the general public as well as government officials. This can be crucial to ensuring that the library receives the funding it needs to continue operating.
Some librarians rely on members of their Friends group to serve as liaisons, providing input about the kinds of programming, equipment, and books that are needed or desired by the library community.
Most librarians consider their work a labor of love. But that doesn’t mean it’s always easy. Some Friends groups make sure their local librarians feel the love by organizing appreciation events or writing notes of support.
Why Should You Become a Friend of the Library?As you can see from the list above, Friends of the Library organizations make a big difference in their local libraries and the community as a whole.
But beyond that, there are plenty of reasons to consider becoming a Friend of the Library. And there’s never been a better – or more important – time to join.
Many Friends groups are aging. New volunteers needed!As I said above, I did lots of events at libraries during my book tour. Nearly all of them were sponsored and/or supported by the local Friends of the Library.
Over and over again, the Friends told me that as their members age, their numbers are dwindling. If the Friends are to continue their important mission, they desperately need new members to fill their ranks.
Members of any age will be warmly welcomed to Friends groups. The main qualifications are energy, enthusiasm, and a little spare time.
However, younger members, particularly those who might have computer or other technical skills, are especially needed.
Meet new people and make new friends.
Making connections and friends can be difficult these days. But as I saw during my many recent library events, Friends of the library are usually friends with one another as well.
People who join the local library friends often go on to develop relationships that last through thick and thin, drawn together by their shared love of books, libraries, and the local community.
If you want to make friends, there’s no better way than to become a friend!
It’s something you can feel good about!In a world rife with so many seemingly insurmountable problems, it can sometimes feel impossible to make any kind of positive impact.
But libraries bring lasting, tangible benefits to their local communities. Supporting their mission by joining the Friends of the Library is a good investment of your time and something you can feel good about.
You may not be able to save the world, but you can help make your corner of it a little better by helping your library make books, information, technology, education, and cultural enrichment available to every member of the community.
How Can You Join the Friends of the Library?Joining the Friends of the Library is easy.
Start with an online search for “Friends of the Library” in your city, town, or county. Information about local chapters, meeting times, and membership opportunities may be available there.
You can also make a field trip to the nearest branch of your local library and ask one of the librarians about how you can join the Friends.
I’m sure they’ll be glad to tell you, and that your newfound “Friends” will welcome you with open arms!
June 2, 2025
Southern Style Cheese Wafers with Pecans

Crisp and buttery, with plenty of cheese flavor and just a hint of heat. These delicious, savory Southern Style Cheese Wafers with Pecans are a perfect snack or cocktail party nibble. So good!
Southern Style Cheese Wafers with Pecans – A Cocktail Party ClassicThirty years have passed, but I still remember my first encounter with Southern Style Cheese Wafers.
We had recently moved to Georgia and had been invited to a party at the home of a family we’d met at church. In addition to cocktails, our hostesses served a variety of nibbles. Most were things I’d seen before – bacon-wrapped dates, meatballs, spiced nuts, etc.
However, I was intrigued by the sight of a plate filled with homemade, golden-orange crackers, each topped with half a pecan. I picked one up, took a bite, and fell in love.
Those wonderful little cheese wafers were crispy, and buttery, and utterly divine. The hint of spicy cayenne was a perfect foil to the rich, cheesy taste of the wafer. The toasted pecan on top added crunch and even more savory flavor.
I consumed quite a few of those delectable little morsels that evening, and countless others during our time in Georgia. As I soon discovered, cheese wafers with pecans are a staple of southern cocktail fare, so I had many opportunities to indulge.
Back then, I wasn’t the cook I am now. So, I never tried to make cheese wafers on my own. Consequently, I didn’t get to enjoy many after we left Georgia, and kind of forgot about them.
All that changed during my recent book tour.
During a book party in South Carolina, I spotted a tray of beautiful, perfectly delectable Southern Style Cheese Wafers with Pecans. I’d be embarrassed to admit how many I ate, so let’s just say it was a lot.
After returning from my travels, I decided to try making my own cheese wafers.
The results were delicious! And a lot easier to make than you might suppose.
A Few Ingredients and A Little Time Equals A Delicious Cheese Wafer.
Believe it or not, eight ingredients are all you need to make a batch of your own Southern Style Cheese Wafters with Pecans. And one of those ingredients is water!
They are….
Sharp or Extra Sharp Cheddar Cheese (My preference would be for extra sharp, but either will do nicely.)Unsalted Butter (If you’re out of unsalted butter and decided to substitute salted, I’d either cut the added salt by half, or even leave it out entirely. Cheese has a fair amount of sodium on its own, so you don’t need a lot more.)Cayenne (if you really don’t like spice, you can cut the amount in half, but I don’t recommend it. The cayenne adds a lovely bit of heat, but it’s not at all overpowering.)Kosher saltPepper (fresh ground if possible)FlourCold water (this is just to help the dough come together)Pecan halves (if yours have been in the pantry a while, taste to make sure they’re fresh.)Making the DoughMaking the dough is really easy, so I’m not going into a lot of detail about that here. Just read the directions carefully, and make sure to let the butter soften a little before you start.
Once you’ve made and shaped the dough, you’ll need to wrap it in either waxed or parchment paper or plastic wrap, then let it chill in the refrigerator for at least an hour. Don’t skip that part!
The dough needs to be well-chilled and firm before you try to slice it. Otherwise, it will be hard to cut it into thin, even slices.
The number of wafers you’ll get from this recipe will vary, depending on how thin you slice the dough. For my money, the thinner the better. Thin slices of dough are the key to getting crisp, delicate, melt-in-your-mouth delicious cheese wafer.
So be sure to chill the dough!
Also, the unbaked dough can be wrapped in a double layer of plastic wrap and frozen for up to 4 months. You’d just let it thaw in the fridge for a couple of hours before slicing and baking.
Being able to make the dough ahead of time and bake as needed is one more thing to love about Southern Style Cheese Wafers with Pecans!
Baking, Serving, and Storing Southern Style Cheese WafersWhen you’re ready to bake, place the sliced dough onto a baking sheet that’s been lined with baking parchment. Using parchment saves time in clean up and ensures that the baked wafers don’t stick to the pan.
Next, you’ll top each wafer with a pecan half. Some folks like to add chopped pecans to the dough, but I really prefer this method.
Using chopped pecans can make it harder for the dough to hold together. Also, I really love the texture and crunch you get when biting into the larger pecan. Speaking of crunch, there’s no need to toast the pecans beforehand. That will happen naturally during the baking process.
The cheese wafers will be very hot when you remove them from the oven after baking, so be sure to allow them to cool before you serve them.
In my experience, these yummy cheese wafers get gobbled up pretty quickly. But in the event that you do have any leftovers, extra wafers can be stored in an airtight container for up to five days.
Print


Tag @mariebostwick on Instagram and hashtag it #fiercelymarie
window.trCommon={"minRating":6,"ajaxurl":"https:\/\/mariebostwick.com\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":19508};window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.smoothScroll = {init() {document.addEventListener( 'click', ( e ) => {let anchor = e.target;if ( anchor.tagName !== 'A' ) {anchor = anchor.closest( 'a.tasty-recipes-scrollto' );}if ( ! anchor || ! anchor.classList.contains( 'tasty-recipes-scrollto' ) ) {return;}const elementHref = anchor.getAttribute( 'href' );if ( ! elementHref ) {return;}e.preventDefault();this.goToSelector( elementHref );});},goToSelector( selector ) {const element = document.querySelector( selector );if ( ! element ) {return;}element.scrollIntoView( { behavior: 'smooth' } );}};document.addEventListener('DOMContentLoaded',() => window.TastyRecipes.smoothScroll.init());window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.cookMode = {wakeLockApi: false,wakeLock: false,cookModeSelector: '.tasty-recipes-cook-mode',init() {if ("wakeLock" in navigator && "request" in navigator.wakeLock) {this.wakeLockApi = navigator.wakeLock;}const cookModes = document.querySelectorAll(this.cookModeSelector);if (cookModes.length > 0) {for (const cookMode of cookModes) {if (this.wakeLockApi) {cookMode.querySelector('input[type="checkbox"]').addEventListener("change", event => {this.checkboxChange(event.target);}, false);} else {cookMode.style.display = "none";}}}},checkboxChange(checkbox) {if (checkbox.checked) {this.lock();} else {this.unlock();}},setCheckboxesState(state) {const checkboxes = document.querySelectorAll(this.cookModeSelector + ' input[type="checkbox"]');for (const checkbox of checkboxes) {checkbox.checked = state;}},async lock() {try {this.wakeLock = await this.wakeLockApi.request("screen");this.wakeLock.addEventListener("release", () => {this.wakeLock = false;this.setCheckboxesState(false);});this.setCheckboxesState(true);} catch (error) {this.setCheckboxesState(false);}},unlock() {if (this.wakeLock) {this.wakeLock.release();this.wakeLock = false;}this.setCheckboxesState(false);}};(function(callback) {if (document.readyState !== "loading") {callback();} else {document.addEventListener("DOMContentLoaded", callback);}})(() => {window.TastyRecipes.cookMode.init();});window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.staticTooltip = {element: null,tooltipElement: null,deleting: false,init( element ) {if ( this.deleting ) {return;}this.element = element;this.buildElements();},destroy() {if ( ! this.tooltipElement || this.deleting ) {return;}this.deleting = true;this.tooltipElement.classList.remove( 'opened' );setTimeout( () => {this.tooltipElement.remove();this.deleting = false;}, 500 );},buildElements() {const tooltipElement = document.createElement( 'div' );tooltipElement.classList.add( 'tasty-recipes-static-tooltip');tooltipElement.setAttribute( 'id', 'tasty-recipes-tooltip' );const currentTooltipElement = document.getElementById( 'tasty-recipes-tooltip' );if ( currentTooltipElement ) {document.body.replaceChild( tooltipElement, currentTooltipElement );} else {document.body.appendChild( tooltipElement );}this.tooltipElement = document.getElementById( 'tasty-recipes-tooltip' );},show() {if ( ! this.tooltipElement ) {return;}const tooltipTop = this.element.getBoundingClientRect().top+ window.scrollY- 10 // 10px offset.- this.tooltipElement.getBoundingClientRect().height;const tooltipLeft = this.element.getBoundingClientRect().left- ( this.tooltipElement.getBoundingClientRect().width / 2 )+ ( this.element.getBoundingClientRect().width / 2 ) - 1;const posLeft = Math.max( 10, tooltipLeft );this.maybeRemoveTail( posLeft !== tooltipLeft );this.tooltipElement.setAttribute( 'style', 'top:' + tooltipTop + 'px;left:' + posLeft + 'px;' );this.tooltipElement.classList.add( 'opened' );},maybeRemoveTail( removeTail ) {if ( removeTail ) {this.tooltipElement.classList.add( 'tr-hide-tail' );} else {this.tooltipElement.classList.remove( 'tr-hide-tail' );}},changeMessage( message ) {if ( ! this.tooltipElement ) {return;}this.tooltipElement.innerHTML = message;}};window.TastyRecipes.ajax = {sendPostRequest( url, data, success, failure ) {const xhr = new XMLHttpRequest();xhr.open( 'POST', url, true );xhr.send( this.preparePostData( data ) );xhr.onreadystatechange = () => {if ( 4 !== xhr.readyState ) {return;}if ( xhr.status === 200 ) {success( JSON.parse( xhr.responseText ) );return;}failure( xhr );};xhr.onerror = () => {failure( xhr );};},preparePostData( data ) {const formData = new FormData();for ( const key in data ) {formData.append( key, data[key] );}return formData;},};window.TastyRecipes.ratings = {defaultRating: 0,currentRatingPercentage: 100,savingRating: false,init( minRating ) {this.minRating = minRating;this.formWatchRating();this.closeTooltipWhenClickOutside();this.addBodyClassBasedOnSelectedRating();this.backwardCompFormRatingPosition();},formWatchRating() {const ratings = document.querySelectorAll('.tasty-recipes-no-ratings-buttons [data-rating]');if ( ratings.length <= 0 ) {return;}for ( const rating of ratings ) {rating.addEventListener( 'click', event => {event.preventDefault();this.defaultRating = event.target.closest( '.checked' ).dataset.rating;this.setCheckedStar( event.target );this.maybeSendRating( this.defaultRating, event.target );this.setRatingInForm( this.defaultRating );} );}},closeTooltipWhenClickOutside() {window.addEventListener( 'click', e => {// Bailout (don't remove the tooltip) when the clicked element is a rating star, or it's the tooltip itself.if ( e.target.closest( '.tasty-recipes-rating' ) || e.target.classList.contains( 'tasty-recipes-static-tooltip' ) ) {return;}window.TastyRecipes.staticTooltip.destroy();} );}, setRatingInForm( rating ) {const ratingInput = document.querySelector( '#respond .tasty-recipes-rating[value="' + rating + '"]' );if ( ! ratingInput ) {return;}ratingInput.click();},addBodyClassBasedOnSelectedRating() {const ratingInputs = document.querySelectorAll( 'input.tasty-recipes-rating' );if ( ! ratingInputs ) {return;}for ( const ratingInput of ratingInputs ) {ratingInput.addEventListener( 'click', currentEvent => {const selectedRating = currentEvent.target.getAttribute( 'value' );this.handleBodyClassByRating( selectedRating );this.toggleCommentTextareaRequired( selectedRating );} );}},handleBodyClassByRating( rating ) {if ( rating < this.minRating ) {document.body.classList.remove( 'tasty-recipes-selected-minimum-rating' );return;}document.body.classList.add( 'tasty-recipes-selected-minimum-rating' );},toggleCommentTextareaRequired( rating ) {const commentTextarea = document.getElementById( 'comment' );if ( ! commentTextarea ) {return;}if ( rating < this.minRating ) {commentTextarea.setAttribute( 'required', '' );return;}commentTextarea.removeAttribute( 'required' );},maybeSendRating( rating, element ) {if ( this.savingRating === rating ) {return;}this.savingRating = rating;window.TastyRecipes.staticTooltip.init( element );const recipeCardElement = element.closest( '.tasty-recipes' );if ( ! recipeCardElement ) {window.TastyRecipes.staticTooltip.destroy();return;}window.TastyRecipes.ajax.sendPostRequest(window.trCommon.ajaxurl,{action: 'tasty_recipes_save_rating',rating,nonce: window.trCommon.ratingNonce,post_id: window.trCommon.postId,recipe_id: recipeCardElement.dataset.trId,},( response ) => {window.TastyRecipes.staticTooltip.changeMessage( response.data.message );window.TastyRecipes.staticTooltip.show();this.updateAverageText( response.data, recipeCardElement );this.maybeFillCommentForm( response.data );// Hide the tooltip after 5 seconds.setTimeout( () => {this.maybeResetTooltip( recipeCardElement, response.data, rating );}, 5000 );},() => {this.resetTooltip( recipeCardElement );});},updateAverageText( data, recipeCardElement ) {if ( ! data.average ) {return;}this.setRatingPercent( data );if ( ! data.count ) {return;}const quickLink = document.querySelector( '.tasty-recipes-rating-link' );if ( quickLink ) {this.setTextInContainer( quickLink, data );this.setPartialStar( quickLink );}const cardStars = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' );cardStars.dataset.trDefaultRating = data.average;this.setTextInContainer( recipeCardElement.querySelector( '.tasty-recipes-rating' ), data );},setTextInContainer( container, data ) {if ( ! container ) {return;}if ( data.label ) {const ratingLabelElement = container.querySelector( '.rating-label' );if ( ratingLabelElement ) {ratingLabelElement.innerHTML = data.label;}return;}const averageElement = container.querySelector( '.average' );if ( averageElement ) {averageElement.textContent = data.average;}const countElement = container.querySelector( '.count' );if ( countElement ) {countElement.textContent = data.count;}},setPartialStar( container ) {const highestStar = container.querySelector( '[data-rating="' + Math.ceil( this.defaultRating ) + '"]' );if ( highestStar ) {highestStar.dataset.trClip = this.currentRatingPercentage;}},setRatingPercent( data ) {this.defaultRating = data.average.toFixed( 1 );const parts = data.average.toFixed( 2 ).toString().split( '.' );this.currentRatingPercentage = parts[1] ? parts[1] : 100;if ( this.currentRatingPercentage === '00' ) {this.currentRatingPercentage = 100;}},setCheckedStar( target ) {const cardRatingContainer = target.closest( '.tasty-recipes-ratings-buttons' );const selectedRatingElement = cardRatingContainer.querySelector( '[data-tr-checked]' );if ( selectedRatingElement ) {delete selectedRatingElement.dataset.trChecked;}const thisStar = target.closest( '.tasty-recipes-rating' );thisStar.dataset.trChecked = 1;thisStar.querySelector( '[data-tr-clip]' ).dataset.trClip = 100;},maybeFillCommentForm( data ) {if ( ! data.comment || ! data.comment.content ) {return;}const commentForm = document.querySelector( '#commentform' );if ( ! commentForm ) {return;}const commentBox = commentForm.querySelector( '[name=comment]' );if ( ! commentBox || commentBox.value ) {return;}// Add comment details for editing.commentBox.innerHTML = data.comment.content;if ( data.comment.name ) {commentForm.querySelector( '[name=author]' ).value = data.comment.name;commentForm.querySelector( '[name=email]' ).value = data.comment.email;}},maybeResetTooltip( recipeCardElement, data, rating ) {if ( this.savingRating === rating ) {this.resetTooltip( recipeCardElement, data );}},resetTooltip( recipeCardElement, data ) {window.TastyRecipes.staticTooltip.destroy();this.savingRating = false;// Reset the default rating.const cardRatingContainer = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' );if ( cardRatingContainer ) {this.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;cardRatingContainer.dataset.trDefaultRating = this.defaultRating;this.resetSelectedStar( cardRatingContainer, data );}},resetSelectedStar( cardRatingContainer ) {const selectedRatingElement = cardRatingContainer.querySelector( '[data-rating="' + Math.ceil( this.defaultRating ) + '"]' );if ( selectedRatingElement ) {selectedRatingElement.querySelector( '[data-tr-clip]' ).dataset.trClip = this.currentRatingPercentage;selectedRatingElement.parentNode.dataset.trChecked = 1;}const previousSelectedElement= cardRatingContainer.querySelector( '[data-tr-checked]' );if ( previousSelectedElement ) {const currentSelectedRating = previousSelectedElement.querySelector('[data-rating]');if ( currentSelectedRating !== selectedRatingElement ) {delete previousSelectedElement.dataset.trChecked;}}},backwardCompFormRatingPosition() {const ratingsButtons = document.querySelector( '#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons' );if ( ! ratingsButtons ) {return;}const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);if ( ! ratingsButtonsStyles.display.includes( 'flex' ) ) {ratingsButtons.style.direction = 'rtl';}if ( typeof tastyRecipesRating !== 'undefined' ) {// Select the rating that was previously selected in admin.ratingsButtons.querySelector( '.tasty-recipes-rating[value="' + tastyRecipesRating + '"]' ).checked = true;}const ratingSpans = ratingsButtons.querySelectorAll( '.tasty-recipes-rating' );for (const ratingSpan of ratingSpans) {ratingSpan.addEventListener( 'click', event => {if ( ratingSpan === event.target ) {return;}ratingSpan.previousElementSibling.click();} );}}};(function(callback) {if (document.readyState !== "loading") {callback();} else {window.addEventListener( 'load', callback );}})(() => {window.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );});
May 19, 2025
Seven Historical Fiction Book Club Reads

One of the greatest pleasures of reading a thought-provoking book is discussing it with others. My seven Historical Fiction Book Club Reads list of novels covers a variety of topics, time periods, and viewpoints. Each one is a worthwhile read that will spark lively conversations!
Not Sure What to Read Next? Check Out These Seven Historical Fiction Book Club ReadsI’ve been a book club member for most of my adult life. So, I know firsthand how book club discussions can challenge you to think, consider different points of view, enhance the pleasure of reading, foster community, and keep you from falling into a reading rut.
Even if a given month’s pick wasn’t my particular cup of tea, engaging in a really lively discussion makes it worthwhile. In fact, some of the best, most interesting book club meetings I’ve ever taken part in were about books I didn’t especially enjoy!
Still, there can be a lot of anxiety when it’s your turn to pick the book because we want to find a title that most (and hopefully all) of the members will enjoy reading as well as discussing. It can feel like a big responsibility. And with so many books out there, how do you choose?
Though there’s no way to guarantee that any one book will be a perfect fit for every member on your roster, my list of Historical Fiction Book Club Reads picks is a good place to start.
Every book on this list is a well-written, worthwhile, thought-provoking read. And with so many topics, time periods, and points of view among these books, you’re sure to find one that will appeal to your book club.
So, let’s look at the list!
The Book Club for Troublesome Women by Marie BostwickYep, I went there. Not only am I recommending my own book, but I put it right on the top of the list. How sassy!
In my defense, what book club isn’t going to love a book about book clubs? Especially one centered around four quietly unhappy, 1960’s 1960s-era housewives who kick off their first meeting by reading Betty Freidan’s groundbreaking 1963 book, The Feminine Mystique?
Nicknaming themselves the Bettys, after Betty Friedan, these four unlikely friends have no idea their impromptu club and the books they read together will become the glue that helps them hold fast through tears, triumphs, angst, and arguments—and what will prove to be the most consequential and freeing year of their lives.
I wrote this book with book clubs in mind, and hearing from scores of clubs who’ve already tapped it for a monthly pick has been very gratifying. I’m sure your members will enjoy reading and discussing the adventures and transformations of my troublesome women. So, I hope you’ll consider picking it for your book club.
If you do, be sure to check out my free Book Club Party Kit! It’s got discussion questions, recipes, and a playlist inspired by the book, and a list of even more books for those who want to dig deeper.
The Women by Kristan HannahThis powerful, epic novel was at the top of all the bestseller lists in 2024, so it’s highly possible that you’ve already read it. But if you haven’t, you really should.
It’s the story of Frances “Frankie” McGrath, a young, somewhat naïve recent nursing school graduate who volunteers to serve in Vietnam for a variety of reasons. It doesn’t take long for Frankie to have her eyes opened to the true and brutal nature of war, particularly the war in Vietnam. But as difficult as life on the front lines proved to be, coming home to a society and family that refuses to acknowledge even the presence of women in Vietnam, let alone their service, might be even harder.
The Women offers so much in the way of discussion, almost too much! My club went past our usual adjournment point when we talked about it, and just about everybody had something interesting to add to the conversation. It’s a great pick for any book club.
The Briar Club by Kate QuinIf your book club membership leans toward a love of mystery, The Briar Club might be a great fit for your group. Set in a boarding house in Washington, DC, in the 1950s, at the height of the so-called “Red Scare”, the story opens with a murder and a bang.
Solving the mystery requires the reader to go back and forth in time as they explore the backstories and secrets of the many residents of the house, and even of the house itself. Though the writing is vivid and rich with detail, it never weighs down the story. The twists and turns will keep you guessing, and the surprising way in which the strange bedfellows who live in the boarding house become a community is a satisfying and surprising denouement.
By Any Other Name by Jodi PicoultSet in Elizabethan England, this novel presents an intriguing premise. What if William Shakespeare had a ghost writer? What if the true author of his famous plays was a woman?
This dual timeline novel shifts viewpoints between fictional Melina Green, an aspiring playwright who is desperate to get her work staged, and Melina’s ancestor Emilia Bassano. Based on a real historical figure, Emilia was forced to become the mistress of Lord Chamberlin, who oversaw and regulated England’s theatrical productions. She was also the first woman writing in English to publish a volume of poetry. Going back and forth between two talented women who resort to desperate measures to bring their work to life, the story explores intriguing questions of how the world has and hasn’t changed for female artists in the last five hundred years.
This brilliantly researched and written novel brings a little-known historical figure to life and thrusts readers into fascinating but likely unfamiliar worlds. There is a lot of food for thought and discussion in these pages. Picoult’s arguments and the research backing them up are so compelling that it may even convince readers to reconsider facts they’d long taken for granted.
The Many Daughters of Afong Moy by Jamie FordEveryone knows that physical traits like blue eyes or big feet pass down through families. But what if the impacts of trauma can likewise inherit, etched into the DNA of future generations?
Beginning with the modern story of poet Dorothy Moy, who is searching for a means to prevent the mental health struggles she has suffered from being passed to her own daughter, the novel traces the stories of the female ancestors of Afong Moy, the first Chinese woman to set foot in America. Each character in Ford’s epic novel is vivid and uniquely wrought, grappling with issues that may look dissimilar at first glance, but which are rooted in the generational trauma experienced by their forgotten ancestor.
The issues of racism, generational trauma, family dynamics, and the female experience in this intriguing novel will give book clubs plenty to talk about.
When We Had Wings by Ariel Lawhon, Kristina McMorris, and Susan MeissnerInspired by the true stories of military nurses who were trapped in the Philippines and survived the brutality of the ensuing Japanese occupation, this novel brings an important but little-known piece of American history vividly to life in the stories of three fictional nurses, two Americans and one Filipina.
The rich historical detail and distinct characters in this inspiring and uplifting novel will provide book clubs with plenty of food for thought and discussion. Examining the three nurses’ unique personalities, backgrounds, and choices, as well as themes of community, feminine strength, and governmental treatment of women who serve, will guarantee a lively conversation for any book club.
Yellowface by R.F. KuangOkay, this one really doesn’t qualify as historical fiction. But Yellow Face offers such a unique perspective that I had to include it here. Two young writers considered literary “rising stars” in college, but only one of whose star rose, is a dark satire with a fascinating hook. When the struggling author, June, witnesses the accidental death of her former classmate, Athena, a wildly successful author of Asian descent, June takes and edits Athena’s just-completed manuscript, passing the book off as her own work.
The story that unspools from that point is at turns witty, sad, and sometimes even a little over the top. But it’s a fascinating and often unexpected look at racism and cultural appropriation from multiple viewpoints. If your book club is looking for a novel that provides plenty of fodder for discussion while avoiding easy answers, Yellow Face is a good candidate.
May 12, 2025
Coconut Cake with Pineapple Filling: The Book Club for Troublesome Women – Recipe Three

Book club meetings are even more fun when they include a book-based menu. My second recipe, inspired by my novel The Book Club for Troublesome Women, is Coconut Cake with Pineapple Filling. It’s oh-so retro, oh-so-tasty, and oh-so-perfect for your book club meeting!
The Inspiration Behind Margaret’s Book Club Cake“Perfect” is a word that pops up frequently in the mind of Margaret Ryan, one of the central characters in The Book Club for Troublesome Women.
Margaret is convinced that if she could somehow do enough and be enough, she can somehow manage to make everything perfect – for everyone. It’s a mindset that sets her up to be disappointed again and again. Determined to make the first meeting of her new book club a memorable occasion, she decides to make four different appetizers.
Which seems like enough, right? For most people, it would be, but not Margaret.
At the last minute, she decides to bake a “coconut ambrosia cake” decorated with “coconut, canned pineapple rings, and maraschino cherries,” that she found in a magazine.
I bought real copies of vintage women’s magazines while researching The Book Club for Troublesome Women. I wanted to experience reading them the way my characters would have. It’s impossible to overstate the influence of magazines on our mothers’ and grandmothers’ generation. They were the TikTok and Pinterest of the day, the place women went to keep up with and latch onto the latest trends.
Recipes for these kinds of cakes –really thinly veiled advertisements from companies that sold canned pineapple, shredded coconut, or other products – appeared regularly in 60’s era women’s magazines, so this cake is about as mid-century as it gets.
If your book club has decided to read and discuss The Book Club for Troublesome Women, Margaret’s Coconut Cake with Pineapple Filling would be the “perfect” thing to serve at your meeting.
Not only does it have an authentic, early 60’s vibe that will add a festive touch to your meeting, but it tastes terrific!
Depending on the amount of time and/or baking experience you’ve got, Margaret’s Coconut Cake with Pineapple Filling can be made one of two ways…
Margaret’s Book Club Cake – The Easy WayBaking from scratch isn’t everybody’s thing. I totally get it.
Even if that describes you, you can still make a Troublesome Women-inspired cake for your book club meeting. And I guarantee that they’re going to love it.
How are you going to pull it off? By taking a couple of simple shortcuts that nobody will ever need to know about, starting with the cake.
Back in Margaret’s day, boxed cake mixes were pretty awful. But they’ve improved a lot over the years. So, it’s fine to use a mix for your book club cake.
You could use regular vanilla cake mix, then add 1.5 teaspoons of coconut extract to the batter. Or you could buy a coconut-flavored cake mix. Duncan Hines has a new line of “Dolly Parton” cake mixes, and one of the flavors is coconut.
I haven’t tried this one personally, but Duncan Hines mixes are usually pretty good. And, you know…Dolly. Would Dolly ever steer you wrong? I don’t think so.
Once you’ve got the cake part dealt with, you can go one of two ways.
Option one: make your own frosting and filling according to the recipe below. If you’ve got time, I recommend doing so. Homemade frosting and filling will taste better.
Option two: buy canned pineapple filling and vanilla frosting from the store (add a little coconut extract to the frosting), and decorate the cake according to the instructions below. It will still taste very good.
The most important thing here is the decoration. That’s the thing that’ll give your cake that fun, retro, ripped from the pages of a 60’s women’s magazine look.
Margaret’s Book Club Cake – The (Somewhat) Hard WayIn spite of the above heading, recreating Margaret’s Coconut Cake with Pineapple Filling really isn’t that difficult.
If you’ve baked cakes before, the process will be familiar. So, if you’re up for baking a dessert from scratch, don’t hesitate to give it a try.
The recipe instructions are very thorough, so I’m not going to go into much detail here. Just read them through once or twice before you begin, and you should have no problem.
But I will give you a couple of tips…
Make sure you leave enough time to allow everything to cool completely before you decorate the cake. If the cake is even a little warm, the frosting and filling will melt.
Likewise, it’s very important to let the pineapple filling cool completely in the refrigerator after you make it. The filling will thicken considerably as it cools. If you put it while it’s even partly warm, it’s just going to slide off or squeeze out the sides when you put on the top layer of cake.
When you add the cornstarch to the pineapple filling recipe, make sure it doesn’t have any lumps. If you can, it’s best to sift it into the filling.
A final tip – dab the cherries with a paper towel before you put them on the cake. That will prevent the cherry juice from leaving red splashes on the white coconut or frosting.
Make Coconut Cake with Pineapple Filling For Your Troublesome Women!Creating recipes for book clubs to enjoy during their discussions of The Book Club for Troublesome Women has been a lot of fun for me. I hope they’ll be fun for all of you as well.
Whether you make your cake the “easy” or the (somewhat) “hard” way, you and the Troublesome Women in your book club are in for a treat!
Print

FOR THE CAKE
2.5 cup cake flour1 T baking powder½ tsp salt½ cup unsalted butter, slightly softened1.5 cups sugar5 T vegetable oil1 ¼ cup whole milk1.5 tsp coconut extract1 tsp vanilla extract3 eggsFOR THE PINEAPPLE FILLING
20 oz can crushed pineapple½ cup sugar3 T cornstarchFOR THE COCONUT CREAM CHEESE FROSTING
1 cup unsalted butter, slightly softened4.5 cup powdered sugar12 oz cream cheese, softened (remove from refrigerator about 30 minutes before using)1.5 tsp coconut extract1 tsp vanilla extractFOR THE DECORATIONS:
1 cup shredded sweetened coconut1 15 oz can pineapple rings, drainedMaraschino cherries, drained Cook Mode Prevent your screen from going dark InstructionsFOR THE CAKE
Preheat oven to 350. Oil and flour two 8-inch, round baking pans.Whisk flour, baking powder, and salt together in a bowl. Set aside.Cream butter and sugar together, using a hand or stand mixer. Add vegetable oil, milk, and extracts, blending until smooth, scraping down sides of bowl as needed. Add eggs, adding one at a time, mixing until batter is light and fluffy.Divide cake batter evenly to the two prepared pans. Bake for 45 minutes, or until cake it baked through and a toothpick inserted into the center comes out clean.Remove pans from oven. Allow cakes to cool completely before removing from pans.FOR THE PINEAPPLE FILLING
Stirring sugar and pineapple together in a cooking pot on the stove. Sprinkle or sift cornstarch onto mixture, stirring to combine.Turn the burner onto medium high and bring the filling to a boil, stirring frequently. Lower heat. Simmer filling for 5-7 minutes, stirring constantly, until filling thickens.Place cooked filling in the refrigerator, allowing it to cool completely before using. Filling will become thicker as it cools.FOR THE COCONUT CREAM CHEESE FROSTING
Using a hand mixer or stand mixer, blend together softened butter and one cup of the powdered sugar. Blend in the rest of the sugar in batches, adding about a cup at a time.Add softened cream cheese and extracts to the sugar/butter mixture, blending until smooth and fluffy. Store frosting in the refrigerator until ready to use.FOR THE DECORATIONS:
Place first layer of cooled cake on a platter. Spread completely cooled pineapple filling on top of the cake. Place second layer of cake on top of the first layer.Spread frosting on top of and around the sides of the cake, covering it completely with a thick, even layer of frosting.Using clean hands, gently press handfuls of shredded coconut into the frosting around the sides of the cake. Decorate the top of the cake with pineapple rings, placing cherries in the center of each ring and in open areas, as shown in the photograph.
Tag @mariebostwick on Instagram and hashtag it #fiercelymarie
window.trCommon={"minRating":6,"ajaxurl":"https:\/\/mariebostwick.com\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":19450};window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.smoothScroll = {init() {document.addEventListener( 'click', ( e ) => {let anchor = e.target;if ( anchor.tagName !== 'A' ) {anchor = anchor.closest( 'a.tasty-recipes-scrollto' );}if ( ! anchor || ! anchor.classList.contains( 'tasty-recipes-scrollto' ) ) {return;}const elementHref = anchor.getAttribute( 'href' );if ( ! elementHref ) {return;}e.preventDefault();this.goToSelector( elementHref );});},goToSelector( selector ) {const element = document.querySelector( selector );if ( ! element ) {return;}element.scrollIntoView( { behavior: 'smooth' } );}};document.addEventListener('DOMContentLoaded',() => window.TastyRecipes.smoothScroll.init());window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.cookMode = {wakeLockApi: false,wakeLock: false,cookModeSelector: '.tasty-recipes-cook-mode',init() {if ("wakeLock" in navigator && "request" in navigator.wakeLock) {this.wakeLockApi = navigator.wakeLock;}const cookModes = document.querySelectorAll(this.cookModeSelector);if (cookModes.length > 0) {for (const cookMode of cookModes) {if (this.wakeLockApi) {cookMode.querySelector('input[type="checkbox"]').addEventListener("change", event => {this.checkboxChange(event.target);}, false);} else {cookMode.style.display = "none";}}}},checkboxChange(checkbox) {if (checkbox.checked) {this.lock();} else {this.unlock();}},setCheckboxesState(state) {const checkboxes = document.querySelectorAll(this.cookModeSelector + ' input[type="checkbox"]');for (const checkbox of checkboxes) {checkbox.checked = state;}},async lock() {try {this.wakeLock = await this.wakeLockApi.request("screen");this.wakeLock.addEventListener("release", () => {this.wakeLock = false;this.setCheckboxesState(false);});this.setCheckboxesState(true);} catch (error) {this.setCheckboxesState(false);}},unlock() {if (this.wakeLock) {this.wakeLock.release();this.wakeLock = false;}this.setCheckboxesState(false);}};(function(callback) {if (document.readyState !== "loading") {callback();} else {document.addEventListener("DOMContentLoaded", callback);}})(() => {window.TastyRecipes.cookMode.init();});window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.staticTooltip = {element: null,tooltipElement: null,deleting: false,init( element ) {if ( this.deleting ) {return;}this.element = element;this.buildElements();},destroy() {if ( ! this.tooltipElement || this.deleting ) {return;}this.deleting = true;this.tooltipElement.classList.remove( 'opened' );setTimeout( () => {this.tooltipElement.remove();this.deleting = false;}, 500 );},buildElements() {const tooltipElement = document.createElement( 'div' );tooltipElement.classList.add( 'tasty-recipes-static-tooltip');tooltipElement.setAttribute( 'id', 'tasty-recipes-tooltip' );const currentTooltipElement = document.getElementById( 'tasty-recipes-tooltip' );if ( currentTooltipElement ) {document.body.replaceChild( tooltipElement, currentTooltipElement );} else {document.body.appendChild( tooltipElement );}this.tooltipElement = document.getElementById( 'tasty-recipes-tooltip' );},show() {if ( ! this.tooltipElement ) {return;}const tooltipTop = this.element.getBoundingClientRect().top+ window.scrollY- 10 // 10px offset.- this.tooltipElement.getBoundingClientRect().height;const tooltipLeft = this.element.getBoundingClientRect().left- ( this.tooltipElement.getBoundingClientRect().width / 2 )+ ( this.element.getBoundingClientRect().width / 2 ) - 1;const posLeft = Math.max( 10, tooltipLeft );this.maybeRemoveTail( posLeft !== tooltipLeft );this.tooltipElement.setAttribute( 'style', 'top:' + tooltipTop + 'px;left:' + posLeft + 'px;' );this.tooltipElement.classList.add( 'opened' );},maybeRemoveTail( removeTail ) {if ( removeTail ) {this.tooltipElement.classList.add( 'tr-hide-tail' );} else {this.tooltipElement.classList.remove( 'tr-hide-tail' );}},changeMessage( message ) {if ( ! this.tooltipElement ) {return;}this.tooltipElement.innerHTML = message;}};window.TastyRecipes.ajax = {sendPostRequest( url, data, success, failure ) {const xhr = new XMLHttpRequest();xhr.open( 'POST', url, true );xhr.send( this.preparePostData( data ) );xhr.onreadystatechange = () => {if ( 4 !== xhr.readyState ) {return;}if ( xhr.status === 200 ) {success( JSON.parse( xhr.responseText ) );return;}failure( xhr );};xhr.onerror = () => {failure( xhr );};},preparePostData( data ) {const formData = new FormData();for ( const key in data ) {formData.append( key, data[key] );}return formData;},};window.TastyRecipes.ratings = {defaultRating: 0,currentRatingPercentage: 100,savingRating: false,init( minRating ) {this.minRating = minRating;this.formWatchRating();this.closeTooltipWhenClickOutside();this.addBodyClassBasedOnSelectedRating();this.backwardCompFormRatingPosition();},formWatchRating() {const ratings = document.querySelectorAll('.tasty-recipes-no-ratings-buttons [data-rating]');if ( ratings.length <= 0 ) {return;}for ( const rating of ratings ) {rating.addEventListener( 'click', event => {event.preventDefault();this.defaultRating = event.target.closest( '.checked' ).dataset.rating;this.setCheckedStar( event.target );this.maybeSendRating( this.defaultRating, event.target );this.setRatingInForm( this.defaultRating );} );}},closeTooltipWhenClickOutside() {window.addEventListener( 'click', e => {// Bailout (don't remove the tooltip) when the clicked element is a rating star, or it's the tooltip itself.if ( e.target.closest( '.tasty-recipes-rating' ) || e.target.classList.contains( 'tasty-recipes-static-tooltip' ) ) {return;}window.TastyRecipes.staticTooltip.destroy();} );}, setRatingInForm( rating ) {const ratingInput = document.querySelector( '#respond .tasty-recipes-rating[value="' + rating + '"]' );if ( ! ratingInput ) {return;}ratingInput.click();},addBodyClassBasedOnSelectedRating() {const ratingInputs = document.querySelectorAll( 'input.tasty-recipes-rating' );if ( ! ratingInputs ) {return;}for ( const ratingInput of ratingInputs ) {ratingInput.addEventListener( 'click', currentEvent => {const selectedRating = currentEvent.target.getAttribute( 'value' );this.handleBodyClassByRating( selectedRating );this.toggleCommentTextareaRequired( selectedRating );} );}},handleBodyClassByRating( rating ) {if ( rating < this.minRating ) {document.body.classList.remove( 'tasty-recipes-selected-minimum-rating' );return;}document.body.classList.add( 'tasty-recipes-selected-minimum-rating' );},toggleCommentTextareaRequired( rating ) {const commentTextarea = document.getElementById( 'comment' );if ( ! commentTextarea ) {return;}if ( rating < this.minRating ) {commentTextarea.setAttribute( 'required', '' );return;}commentTextarea.removeAttribute( 'required' );},maybeSendRating( rating, element ) {if ( this.savingRating === rating ) {return;}this.savingRating = rating;window.TastyRecipes.staticTooltip.init( element );const recipeCardElement = element.closest( '.tasty-recipes' );if ( ! recipeCardElement ) {window.TastyRecipes.staticTooltip.destroy();return;}window.TastyRecipes.ajax.sendPostRequest(window.trCommon.ajaxurl,{action: 'tasty_recipes_save_rating',rating,nonce: window.trCommon.ratingNonce,post_id: window.trCommon.postId,recipe_id: recipeCardElement.dataset.trId,},( response ) => {window.TastyRecipes.staticTooltip.changeMessage( response.data.message );window.TastyRecipes.staticTooltip.show();this.updateAverageText( response.data, recipeCardElement );this.maybeFillCommentForm( response.data );// Hide the tooltip after 5 seconds.setTimeout( () => {this.maybeResetTooltip( recipeCardElement, response.data, rating );}, 5000 );},() => {this.resetTooltip( recipeCardElement );});},updateAverageText( data, recipeCardElement ) {if ( ! data.average ) {return;}this.setRatingPercent( data );if ( ! data.count ) {return;}const quickLink = document.querySelector( '.tasty-recipes-rating-link' );if ( quickLink ) {this.setTextInContainer( quickLink, data );this.setPartialStar( quickLink );}const cardStars = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' );cardStars.dataset.trDefaultRating = data.average;this.setTextInContainer( recipeCardElement.querySelector( '.tasty-recipes-rating' ), data );},setTextInContainer( container, data ) {if ( ! container ) {return;}if ( data.label ) {const ratingLabelElement = container.querySelector( '.rating-label' );if ( ratingLabelElement ) {ratingLabelElement.innerHTML = data.label;}return;}const averageElement = container.querySelector( '.average' );if ( averageElement ) {averageElement.textContent = data.average;}const countElement = container.querySelector( '.count' );if ( countElement ) {countElement.textContent = data.count;}},setPartialStar( container ) {const highestStar = container.querySelector( '[data-rating="' + Math.ceil( this.defaultRating ) + '"]' );if ( highestStar ) {highestStar.dataset.trClip = this.currentRatingPercentage;}},setRatingPercent( data ) {this.defaultRating = data.average.toFixed( 1 );const parts = data.average.toFixed( 2 ).toString().split( '.' );this.currentRatingPercentage = parts[1] ? parts[1] : 100;if ( this.currentRatingPercentage === '00' ) {this.currentRatingPercentage = 100;}},setCheckedStar( target ) {const cardRatingContainer = target.closest( '.tasty-recipes-ratings-buttons' );const selectedRatingElement = cardRatingContainer.querySelector( '[data-tr-checked]' );if ( selectedRatingElement ) {delete selectedRatingElement.dataset.trChecked;}const thisStar = target.closest( '.tasty-recipes-rating' );thisStar.dataset.trChecked = 1;thisStar.querySelector( '[data-tr-clip]' ).dataset.trClip = 100;},maybeFillCommentForm( data ) {if ( ! data.comment || ! data.comment.content ) {return;}const commentForm = document.querySelector( '#commentform' );if ( ! commentForm ) {return;}const commentBox = commentForm.querySelector( '[name=comment]' );if ( ! commentBox || commentBox.value ) {return;}// Add comment details for editing.commentBox.innerHTML = data.comment.content;if ( data.comment.name ) {commentForm.querySelector( '[name=author]' ).value = data.comment.name;commentForm.querySelector( '[name=email]' ).value = data.comment.email;}},maybeResetTooltip( recipeCardElement, data, rating ) {if ( this.savingRating === rating ) {this.resetTooltip( recipeCardElement, data );}},resetTooltip( recipeCardElement, data ) {window.TastyRecipes.staticTooltip.destroy();this.savingRating = false;// Reset the default rating.const cardRatingContainer = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' );if ( cardRatingContainer ) {this.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;cardRatingContainer.dataset.trDefaultRating = this.defaultRating;this.resetSelectedStar( cardRatingContainer, data );}},resetSelectedStar( cardRatingContainer ) {const selectedRatingElement = cardRatingContainer.querySelector( '[data-rating="' + Math.ceil( this.defaultRating ) + '"]' );if ( selectedRatingElement ) {selectedRatingElement.querySelector( '[data-tr-clip]' ).dataset.trClip = this.currentRatingPercentage;selectedRatingElement.parentNode.dataset.trChecked = 1;}const previousSelectedElement= cardRatingContainer.querySelector( '[data-tr-checked]' );if ( previousSelectedElement ) {const currentSelectedRating = previousSelectedElement.querySelector('[data-rating]');if ( currentSelectedRating !== selectedRatingElement ) {delete previousSelectedElement.dataset.trChecked;}}},backwardCompFormRatingPosition() {const ratingsButtons = document.querySelector( '#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons' );if ( ! ratingsButtons ) {return;}const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);if ( ! ratingsButtonsStyles.display.includes( 'flex' ) ) {ratingsButtons.style.direction = 'rtl';}if ( typeof tastyRecipesRating !== 'undefined' ) {// Select the rating that was previously selected in admin.ratingsButtons.querySelector( '.tasty-recipes-rating[value="' + tastyRecipesRating + '"]' ).checked = true;}const ratingSpans = ratingsButtons.querySelectorAll( '.tasty-recipes-rating' );for (const ratingSpan of ratingSpans) {ratingSpan.addEventListener( 'click', event => {if ( ratingSpan === event.target ) {return;}ratingSpan.previousElementSibling.click();} );}}};(function(callback) {if (document.readyState !== "loading") {callback();} else {window.addEventListener( 'load', callback );}})(() => {window.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );});
May 5, 2025
Smoky Salmon Cream Cheese Spread: Book Club for Troublesome Women – Recipe Three

Serve Smokey Salmon Cream Cheese Spread when your book club meets to discuss The Book Club for Troublesome Women, and add very 60’s vibe to the menu! This third and final recipe, inspired by the novel, is a little campy, a lot of fun, and as easy to make as it is delicious.
60’s Magazine Recipes – Life Before Food StylistsIn my book, Margaret gets her recipe for Smoky Salmon Cream Cheese Spread from one of the many women’s magazines she subscribes to. Back in the 60s, magazines exerted a huge influence over housewives like Margaret and the other character in the novel.
Though I created this recipe to have an authentic 60’s look, I also created it to appeal to modern palates. Your book club, family, and friends will love it. I’ve served it to all of the above on multiple occasions. People always gobble it up and often ask for the recipe.
However, there were a lot of truly strange, unattractive, downright ugly magazine recipes in Margaret’s era. Researching them was a lot of fun!
Trying to come up with a number one most hideous looking magazine recipe became something of a game for me. I never did decide which should take the top (dis)honor, but here are photos of a few contenders…
Home cooks in the ’60s added gelatin to EVERYTHING! Even hot dogs, hard-boiled eggs, and peas. (Umm…yech.)
From a cookbook titled Knox Dainty Desserts for Dainty People. Not quite sure how tuna salad qualifies as a dessert?
Hard to imagine hot dog as main ingredient for a diet dish. But it’s certainly an…interesting presentation.
My inspiration for this particular recipe came from a recipe I found for “Tuna Mold” that featured things like tuna, cream cheese, tomato soup, A-1 steak sauce, copious amounts of mayo, and, of course, gelatin.
It looked hilarious, but sounded awful. Nobody today would dream of serving tuna mold at their book club meetings.
So, I set out to create a recipe that looked the part but actually tasted good. When I spotted a teeny, nine-dollar container of smoked salmon spread at my local fancy-schmancy grocer, I knew I was onto something.
Subbing canned salmon for the tuna, and using more cream cheese and way less mayo, plus horseradish sauce, smoked paprika, and few other ingredients resulted in a yummy smokey salmon cream spread that appeals to modern palates.
It really is good! And it didn’t cost a dollar an ounce.
Next, I had to was figure out how to make it look like something my 60s hostess, Margaret, would serve to her book club. As her new friend, Charlotte points out at the first book club meeting, Margaret is, “all about garnishes.”
To modern eyes, molding Smoky Salmon Cream Cheese Spread into the shape of a fish and decorating it with sliced olives to represent fish scales seems a little over the top. But back in the 60s, hostesses like Margaret were indeed all about garnishes.
And you know, I kind of get it. Recreating Margaret’s fictional recipe in real life was a lot of fun. And easier than you might think.
Making the spread itself is very easy. The recipe directions explain all that, so I won’t go into it here. But I do have some suggestions for creating the fun, retro presentation.
Back in the day, the spread would have been much more liquid, more like a mousse. The gelatin would have bound it together, and it would have been poured into a metal, fish-shaped gelatin mold.
My spread is much thicker, so you can easily shape it yourself. No mold required! No gelatin either.
To make mine, I drew a basic fish shape onto a piece of baking parchment and cut it out to serve as a guide. Then I placed the parchment onto the serving platter. Next, I spooned the spread onto the paper, mounding it in the middle and spreading to the edge of the parchment before smoothing out the top.
The last step was to slice my green olives and then arrange them on the body of the fish to simulate scales. I also used pieces of olives to give my fish eyes and a smile.
When I served it to my own book club, everybody smiled. Some laughed out loud. But more importantly, they ate and enjoyed it.
If you’re serving this to your book club when you gather to discuss The Book Club for Troublesome Women, feel free to go full-Margaret, olive-scales-and-all when making this nostalgic appetizer. It will definitely make them smile!
But you could also just put it in a pretty bowl, sprinkle with chopped parsley or dill on top, and serve it with crackers or crudites.
It’s delish either way, and an appetizer your book club members, friends, or family are sure to enjoy.
Print


Tag @mariebostwick on Instagram and hashtag it #fiercelymarie
window.trCommon={"minRating":6,"ajaxurl":"https:\/\/mariebostwick.com\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":19458};window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.smoothScroll = {init() {document.addEventListener( 'click', ( e ) => {let anchor = e.target;if ( anchor.tagName !== 'A' ) {anchor = anchor.closest( 'a.tasty-recipes-scrollto' );}if ( ! anchor || ! anchor.classList.contains( 'tasty-recipes-scrollto' ) ) {return;}const elementHref = anchor.getAttribute( 'href' );if ( ! elementHref ) {return;}e.preventDefault();this.goToSelector( elementHref );});},goToSelector( selector ) {const element = document.querySelector( selector );if ( ! element ) {return;}element.scrollIntoView( { behavior: 'smooth' } );}};document.addEventListener('DOMContentLoaded',() => window.TastyRecipes.smoothScroll.init());window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.cookMode = {wakeLockApi: false,wakeLock: false,cookModeSelector: '.tasty-recipes-cook-mode',init() {if ("wakeLock" in navigator && "request" in navigator.wakeLock) {this.wakeLockApi = navigator.wakeLock;}const cookModes = document.querySelectorAll(this.cookModeSelector);if (cookModes.length > 0) {for (const cookMode of cookModes) {if (this.wakeLockApi) {cookMode.querySelector('input[type="checkbox"]').addEventListener("change", event => {this.checkboxChange(event.target);}, false);} else {cookMode.style.display = "none";}}}},checkboxChange(checkbox) {if (checkbox.checked) {this.lock();} else {this.unlock();}},setCheckboxesState(state) {const checkboxes = document.querySelectorAll(this.cookModeSelector + ' input[type="checkbox"]');for (const checkbox of checkboxes) {checkbox.checked = state;}},async lock() {try {this.wakeLock = await this.wakeLockApi.request("screen");this.wakeLock.addEventListener("release", () => {this.wakeLock = false;this.setCheckboxesState(false);});this.setCheckboxesState(true);} catch (error) {this.setCheckboxesState(false);}},unlock() {if (this.wakeLock) {this.wakeLock.release();this.wakeLock = false;}this.setCheckboxesState(false);}};(function(callback) {if (document.readyState !== "loading") {callback();} else {document.addEventListener("DOMContentLoaded", callback);}})(() => {window.TastyRecipes.cookMode.init();});window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.staticTooltip = {element: null,tooltipElement: null,deleting: false,init( element ) {if ( this.deleting ) {return;}this.element = element;this.buildElements();},destroy() {if ( ! this.tooltipElement || this.deleting ) {return;}this.deleting = true;this.tooltipElement.classList.remove( 'opened' );setTimeout( () => {this.tooltipElement.remove();this.deleting = false;}, 500 );},buildElements() {const tooltipElement = document.createElement( 'div' );tooltipElement.classList.add( 'tasty-recipes-static-tooltip');tooltipElement.setAttribute( 'id', 'tasty-recipes-tooltip' );const currentTooltipElement = document.getElementById( 'tasty-recipes-tooltip' );if ( currentTooltipElement ) {document.body.replaceChild( tooltipElement, currentTooltipElement );} else {document.body.appendChild( tooltipElement );}this.tooltipElement = document.getElementById( 'tasty-recipes-tooltip' );},show() {if ( ! this.tooltipElement ) {return;}const tooltipTop = this.element.getBoundingClientRect().top+ window.scrollY- 10 // 10px offset.- this.tooltipElement.getBoundingClientRect().height;const tooltipLeft = this.element.getBoundingClientRect().left- ( this.tooltipElement.getBoundingClientRect().width / 2 )+ ( this.element.getBoundingClientRect().width / 2 ) - 1;const posLeft = Math.max( 10, tooltipLeft );this.maybeRemoveTail( posLeft !== tooltipLeft );this.tooltipElement.setAttribute( 'style', 'top:' + tooltipTop + 'px;left:' + posLeft + 'px;' );this.tooltipElement.classList.add( 'opened' );},maybeRemoveTail( removeTail ) {if ( removeTail ) {this.tooltipElement.classList.add( 'tr-hide-tail' );} else {this.tooltipElement.classList.remove( 'tr-hide-tail' );}},changeMessage( message ) {if ( ! this.tooltipElement ) {return;}this.tooltipElement.innerHTML = message;}};window.TastyRecipes.ajax = {sendPostRequest( url, data, success, failure ) {const xhr = new XMLHttpRequest();xhr.open( 'POST', url, true );xhr.send( this.preparePostData( data ) );xhr.onreadystatechange = () => {if ( 4 !== xhr.readyState ) {return;}if ( xhr.status === 200 ) {success( JSON.parse( xhr.responseText ) );return;}failure( xhr );};xhr.onerror = () => {failure( xhr );};},preparePostData( data ) {const formData = new FormData();for ( const key in data ) {formData.append( key, data[key] );}return formData;},};window.TastyRecipes.ratings = {defaultRating: 0,currentRatingPercentage: 100,savingRating: false,init( minRating ) {this.minRating = minRating;this.formWatchRating();this.closeTooltipWhenClickOutside();this.addBodyClassBasedOnSelectedRating();this.backwardCompFormRatingPosition();},formWatchRating() {const ratings = document.querySelectorAll('.tasty-recipes-no-ratings-buttons [data-rating]');if ( ratings.length <= 0 ) {return;}for ( const rating of ratings ) {rating.addEventListener( 'click', event => {event.preventDefault();this.defaultRating = event.target.closest( '.checked' ).dataset.rating;this.setCheckedStar( event.target );this.maybeSendRating( this.defaultRating, event.target );this.setRatingInForm( this.defaultRating );} );}},closeTooltipWhenClickOutside() {window.addEventListener( 'click', e => {// Bailout (don't remove the tooltip) when the clicked element is a rating star, or it's the tooltip itself.if ( e.target.closest( '.tasty-recipes-rating' ) || e.target.classList.contains( 'tasty-recipes-static-tooltip' ) ) {return;}window.TastyRecipes.staticTooltip.destroy();} );}, setRatingInForm( rating ) {const ratingInput = document.querySelector( '#respond .tasty-recipes-rating[value="' + rating + '"]' );if ( ! ratingInput ) {return;}ratingInput.click();},addBodyClassBasedOnSelectedRating() {const ratingInputs = document.querySelectorAll( 'input.tasty-recipes-rating' );if ( ! ratingInputs ) {return;}for ( const ratingInput of ratingInputs ) {ratingInput.addEventListener( 'click', currentEvent => {const selectedRating = currentEvent.target.getAttribute( 'value' );this.handleBodyClassByRating( selectedRating );this.toggleCommentTextareaRequired( selectedRating );} );}},handleBodyClassByRating( rating ) {if ( rating < this.minRating ) {document.body.classList.remove( 'tasty-recipes-selected-minimum-rating' );return;}document.body.classList.add( 'tasty-recipes-selected-minimum-rating' );},toggleCommentTextareaRequired( rating ) {const commentTextarea = document.getElementById( 'comment' );if ( ! commentTextarea ) {return;}if ( rating < this.minRating ) {commentTextarea.setAttribute( 'required', '' );return;}commentTextarea.removeAttribute( 'required' );},maybeSendRating( rating, element ) {if ( this.savingRating === rating ) {return;}this.savingRating = rating;window.TastyRecipes.staticTooltip.init( element );const recipeCardElement = element.closest( '.tasty-recipes' );if ( ! recipeCardElement ) {window.TastyRecipes.staticTooltip.destroy();return;}window.TastyRecipes.ajax.sendPostRequest(window.trCommon.ajaxurl,{action: 'tasty_recipes_save_rating',rating,nonce: window.trCommon.ratingNonce,post_id: window.trCommon.postId,recipe_id: recipeCardElement.dataset.trId,},( response ) => {window.TastyRecipes.staticTooltip.changeMessage( response.data.message );window.TastyRecipes.staticTooltip.show();this.updateAverageText( response.data, recipeCardElement );this.maybeFillCommentForm( response.data );// Hide the tooltip after 5 seconds.setTimeout( () => {this.maybeResetTooltip( recipeCardElement, response.data, rating );}, 5000 );},() => {this.resetTooltip( recipeCardElement );});},updateAverageText( data, recipeCardElement ) {if ( ! data.average ) {return;}this.setRatingPercent( data );if ( ! data.count ) {return;}const quickLink = document.querySelector( '.tasty-recipes-rating-link' );if ( quickLink ) {this.setTextInContainer( quickLink, data );this.setPartialStar( quickLink );}const cardStars = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' );cardStars.dataset.trDefaultRating = data.average;this.setTextInContainer( recipeCardElement.querySelector( '.tasty-recipes-rating' ), data );},setTextInContainer( container, data ) {if ( ! container ) {return;}if ( data.label ) {const ratingLabelElement = container.querySelector( '.rating-label' );if ( ratingLabelElement ) {ratingLabelElement.innerHTML = data.label;}return;}const averageElement = container.querySelector( '.average' );if ( averageElement ) {averageElement.textContent = data.average;}const countElement = container.querySelector( '.count' );if ( countElement ) {countElement.textContent = data.count;}},setPartialStar( container ) {const highestStar = container.querySelector( '[data-rating="' + Math.ceil( this.defaultRating ) + '"]' );if ( highestStar ) {highestStar.dataset.trClip = this.currentRatingPercentage;}},setRatingPercent( data ) {this.defaultRating = data.average.toFixed( 1 );const parts = data.average.toFixed( 2 ).toString().split( '.' );this.currentRatingPercentage = parts[1] ? parts[1] : 100;if ( this.currentRatingPercentage === '00' ) {this.currentRatingPercentage = 100;}},setCheckedStar( target ) {const cardRatingContainer = target.closest( '.tasty-recipes-ratings-buttons' );const selectedRatingElement = cardRatingContainer.querySelector( '[data-tr-checked]' );if ( selectedRatingElement ) {delete selectedRatingElement.dataset.trChecked;}const thisStar = target.closest( '.tasty-recipes-rating' );thisStar.dataset.trChecked = 1;thisStar.querySelector( '[data-tr-clip]' ).dataset.trClip = 100;},maybeFillCommentForm( data ) {if ( ! data.comment || ! data.comment.content ) {return;}const commentForm = document.querySelector( '#commentform' );if ( ! commentForm ) {return;}const commentBox = commentForm.querySelector( '[name=comment]' );if ( ! commentBox || commentBox.value ) {return;}// Add comment details for editing.commentBox.innerHTML = data.comment.content;if ( data.comment.name ) {commentForm.querySelector( '[name=author]' ).value = data.comment.name;commentForm.querySelector( '[name=email]' ).value = data.comment.email;}},maybeResetTooltip( recipeCardElement, data, rating ) {if ( this.savingRating === rating ) {this.resetTooltip( recipeCardElement, data );}},resetTooltip( recipeCardElement, data ) {window.TastyRecipes.staticTooltip.destroy();this.savingRating = false;// Reset the default rating.const cardRatingContainer = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' );if ( cardRatingContainer ) {this.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;cardRatingContainer.dataset.trDefaultRating = this.defaultRating;this.resetSelectedStar( cardRatingContainer, data );}},resetSelectedStar( cardRatingContainer ) {const selectedRatingElement = cardRatingContainer.querySelector( '[data-rating="' + Math.ceil( this.defaultRating ) + '"]' );if ( selectedRatingElement ) {selectedRatingElement.querySelector( '[data-tr-clip]' ).dataset.trClip = this.currentRatingPercentage;selectedRatingElement.parentNode.dataset.trChecked = 1;}const previousSelectedElement= cardRatingContainer.querySelector( '[data-tr-checked]' );if ( previousSelectedElement ) {const currentSelectedRating = previousSelectedElement.querySelector('[data-rating]');if ( currentSelectedRating !== selectedRatingElement ) {delete previousSelectedElement.dataset.trChecked;}}},backwardCompFormRatingPosition() {const ratingsButtons = document.querySelector( '#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons' );if ( ! ratingsButtons ) {return;}const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);if ( ! ratingsButtonsStyles.display.includes( 'flex' ) ) {ratingsButtons.style.direction = 'rtl';}if ( typeof tastyRecipesRating !== 'undefined' ) {// Select the rating that was previously selected in admin.ratingsButtons.querySelector( '.tasty-recipes-rating[value="' + tastyRecipesRating + '"]' ).checked = true;}const ratingSpans = ratingsButtons.querySelectorAll( '.tasty-recipes-rating' );for (const ratingSpan of ratingSpans) {ratingSpan.addEventListener( 'click', event => {if ( ratingSpan === event.target ) {return;}ratingSpan.previousElementSibling.click();} );}}};(function(callback) {if (document.readyState !== "loading") {callback();} else {window.addEventListener( 'load', callback );}})(() => {window.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );});
April 28, 2025
60s Cocktails: Vodka Stingers (Cocktail or Mocktail) The Book Club for Troublesome Women – Recipe One

Minty and potent, Vodka Stingers were all the rage in the 1960s. This classic 60s cocktail or yummy mocktail is the perfect sipper for a “Troublesome Women” discussion with your book club!
Vodka Stingers – The Official Beverage of Troublesome Women?
As a book club member myself, I know how food and drinks inspired by the book can add a special, festive touch to club meetings. That’s why I’ve created a few recipes based on them that readers will find in my new novel, The Book Club for Troublesome Women.
My first recipe in the series is inspired by beverages that my characters try during their first book club meeting. You might be interested in where I got the idea for using this particular drink.
As a kid, I was crazy for musical theater. I bought soundtracks for every Broadway show I could get my hands on. So even though I couldn’t drink, I’d heard of vodka stingers. It’s the cocktail that the late great Elaine Stritch sang of when she played Joanne in the hit musical Company, during the showstopping number, “The Ladies Who Lunch.”
Another chance to disapprove;
another brilliant zinger.
Another reason not to move;
another Vodka Stinger!
I’ll drink to that.
Though I never had a chance to see Stritch in the role, I’ve never forgotten how her gritty, witty, sharp-edged delivery of that song brought the character to life. I could feel the anger and despair beneath her sarcastic snarl and gravelly disdain, the frustration of a brilliant woman who knows her brilliance has been wasted.
To my mind, Elaine Stritch was the original Troublesome Woman.
Vodka Stingers – Aka Truth Serum
So, it’s not surprising that while considering cocktails for my characters to sip in the book, vodka stingers came immediately to mind.
During the first meeting of the book club, the women are hesitant to open up so the conversation drags initially. All that changes once Charlotte marches into Margaret’s kitchen. There, she finds the liquor and mixes up a batch of tongue-loosening cocktails she calls “Truth Serum.”
The bright green beverages Charlotte serves are actually vodka stingers, but they do have the desired effect. After a few sips, Margaret, Charlotte, Viv, and Bitsy start sharing stories and secrets, and building a bond.
I’m sharing two delicious beverage recipes that are perfect for every member of your book club. The first is for a classic vodka stinger, a very popular drink during the 60s.
Classic 60s Cocktails – Plus a Delish Mocktail
Fair warning – these bright green, minty-flavored cocktails are potent! If you decide to give one a try during your book club meeting (two would be a mistake, trust me on this), make sure you’ve got a designated driver.
If you’re the DD or you just don’t care for the hard stuff, I’ve got you covered. My second Book Club for Troublesome Women beverage – Stingless Stingers – is alcohol free and so tasty!
The combination of juice, flavored tonic, and mint simple syrup is refreshingly delicious and not overly sweet. I recommend cucumber tonic (Fever Tree is my favorite), but elderflower tonic would be good substitute. In a pinch, you could also use plain tonic.
Whether you prefer your beverage with or without the sting, these retro 60s cocktails will add a festive touch to your book club gathering.
Mix some up for your meeting, and raise a glass to Troublesome Women!
Print

For the Classic Vodka Stingers:
2 oz vodka1 oz crème de mentheFor the Stingless Stinger Mocktail:
2 oz mint simple syrup (recipe below)2 oz white grape juice3 oz cucumber flavored tonic water (can sub elderflower or plain tonic)Optional – 2 drops green food coloring in syrup Cook Mode Prevent your screen from going dark InstructionsFor the Classic Vodka Stingers:
Pour vodka and crème de menthe into an ice-filled cocktail shaker.Shake vigorously, then pour into chilled cocktail glasses, straining out ice. Serve immediately.For the Stingless Stinger Mocktail:
To make the mint simple syrup, combine ½ cup sugar, ½ cup water, and ½ a bunch of fresh mint into a heavy-bottomed saucepan or pot. Heat on stove over medium heat, stirring, until syrup begins to bubble. Lower heat, simmer for 1-2 minutes. Strain out mint. Stirring in green food coloring, if desired. Cool syrup completely in the refrigerator before using.
Pour mint simple syrup and white grape juice together in an ice-filled highball glass.Top with cucumber-flavored tonic water. Serve immediately.
Tag @mariebostwick on Instagram and hashtag it #fiercelymarie
window.trCommon={"minRating":6,"ajaxurl":"https:\/\/mariebostwick.com\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":19392};window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.smoothScroll = {init() {document.addEventListener( 'click', ( e ) => {let anchor = e.target;if ( anchor.tagName !== 'A' ) {anchor = anchor.closest( 'a.tasty-recipes-scrollto' );}if ( ! anchor || ! anchor.classList.contains( 'tasty-recipes-scrollto' ) ) {return;}const elementHref = anchor.getAttribute( 'href' );if ( ! elementHref ) {return;}e.preventDefault();this.goToSelector( elementHref );});},goToSelector( selector ) {const element = document.querySelector( selector );if ( ! element ) {return;}element.scrollIntoView( { behavior: 'smooth' } );}};document.addEventListener('DOMContentLoaded',() => window.TastyRecipes.smoothScroll.init());window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.cookMode = {wakeLockApi: false,wakeLock: false,cookModeSelector: '.tasty-recipes-cook-mode',init() {if ("wakeLock" in navigator && "request" in navigator.wakeLock) {this.wakeLockApi = navigator.wakeLock;}const cookModes = document.querySelectorAll(this.cookModeSelector);if (cookModes.length > 0) {for (const cookMode of cookModes) {if (this.wakeLockApi) {cookMode.querySelector('input[type="checkbox"]').addEventListener("change", event => {this.checkboxChange(event.target);}, false);} else {cookMode.style.display = "none";}}}},checkboxChange(checkbox) {if (checkbox.checked) {this.lock();} else {this.unlock();}},setCheckboxesState(state) {const checkboxes = document.querySelectorAll(this.cookModeSelector + ' input[type="checkbox"]');for (const checkbox of checkboxes) {checkbox.checked = state;}},async lock() {try {this.wakeLock = await this.wakeLockApi.request("screen");this.wakeLock.addEventListener("release", () => {this.wakeLock = false;this.setCheckboxesState(false);});this.setCheckboxesState(true);} catch (error) {this.setCheckboxesState(false);}},unlock() {if (this.wakeLock) {this.wakeLock.release();this.wakeLock = false;}this.setCheckboxesState(false);}};(function(callback) {if (document.readyState !== "loading") {callback();} else {document.addEventListener("DOMContentLoaded", callback);}})(() => {window.TastyRecipes.cookMode.init();});window.TastyRecipes = window.TastyRecipes || {};window.TastyRecipes.staticTooltip = {element: null,tooltipElement: null,deleting: false,init( element ) {if ( this.deleting ) {return;}this.element = element;this.buildElements();},destroy() {if ( ! this.tooltipElement || this.deleting ) {return;}this.deleting = true;this.tooltipElement.classList.remove( 'opened' );setTimeout( () => {this.tooltipElement.remove();this.deleting = false;}, 500 );},buildElements() {const tooltipElement = document.createElement( 'div' );tooltipElement.classList.add( 'tasty-recipes-static-tooltip');tooltipElement.setAttribute( 'id', 'tasty-recipes-tooltip' );const currentTooltipElement = document.getElementById( 'tasty-recipes-tooltip' );if ( currentTooltipElement ) {document.body.replaceChild( tooltipElement, currentTooltipElement );} else {document.body.appendChild( tooltipElement );}this.tooltipElement = document.getElementById( 'tasty-recipes-tooltip' );},show() {if ( ! this.tooltipElement ) {return;}const tooltipTop = this.element.getBoundingClientRect().top+ window.scrollY- 10 // 10px offset.- this.tooltipElement.getBoundingClientRect().height;const tooltipLeft = this.element.getBoundingClientRect().left- ( this.tooltipElement.getBoundingClientRect().width / 2 )+ ( this.element.getBoundingClientRect().width / 2 ) - 1;const posLeft = Math.max( 10, tooltipLeft );this.maybeRemoveTail( posLeft !== tooltipLeft );this.tooltipElement.setAttribute( 'style', 'top:' + tooltipTop + 'px;left:' + posLeft + 'px;' );this.tooltipElement.classList.add( 'opened' );},maybeRemoveTail( removeTail ) {if ( removeTail ) {this.tooltipElement.classList.add( 'tr-hide-tail' );} else {this.tooltipElement.classList.remove( 'tr-hide-tail' );}},changeMessage( message ) {if ( ! this.tooltipElement ) {return;}this.tooltipElement.innerHTML = message;}};window.TastyRecipes.ajax = {sendPostRequest( url, data, success, failure ) {const xhr = new XMLHttpRequest();xhr.open( 'POST', url, true );xhr.send( this.preparePostData( data ) );xhr.onreadystatechange = () => {if ( 4 !== xhr.readyState ) {return;}if ( xhr.status === 200 ) {success( JSON.parse( xhr.responseText ) );return;}failure( xhr );};xhr.onerror = () => {failure( xhr );};},preparePostData( data ) {const formData = new FormData();for ( const key in data ) {formData.append( key, data[key] );}return formData;},};window.TastyRecipes.ratings = {defaultRating: 0,currentRatingPercentage: 100,savingRating: false,init( minRating ) {this.minRating = minRating;this.formWatchRating();this.closeTooltipWhenClickOutside();this.addBodyClassBasedOnSelectedRating();this.backwardCompFormRatingPosition();},formWatchRating() {const ratings = document.querySelectorAll('.tasty-recipes-no-ratings-buttons [data-rating]');if ( ratings.length <= 0 ) {return;}for ( const rating of ratings ) {rating.addEventListener( 'click', event => {event.preventDefault();this.defaultRating = event.target.closest( '.checked' ).dataset.rating;this.setCheckedStar( event.target );this.maybeSendRating( this.defaultRating, event.target );this.setRatingInForm( this.defaultRating );} );}},closeTooltipWhenClickOutside() {window.addEventListener( 'click', e => {// Bailout (don't remove the tooltip) when the clicked element is a rating star, or it's the tooltip itself.if ( e.target.closest( '.tasty-recipes-rating' ) || e.target.classList.contains( 'tasty-recipes-static-tooltip' ) ) {return;}window.TastyRecipes.staticTooltip.destroy();} );}, setRatingInForm( rating ) {const ratingInput = document.querySelector( '#respond .tasty-recipes-rating[value="' + rating + '"]' );if ( ! ratingInput ) {return;}ratingInput.click();},addBodyClassBasedOnSelectedRating() {const ratingInputs = document.querySelectorAll( 'input.tasty-recipes-rating' );if ( ! ratingInputs ) {return;}for ( const ratingInput of ratingInputs ) {ratingInput.addEventListener( 'click', currentEvent => {const selectedRating = currentEvent.target.getAttribute( 'value' );this.handleBodyClassByRating( selectedRating );this.toggleCommentTextareaRequired( selectedRating );} );}},handleBodyClassByRating( rating ) {if ( rating < this.minRating ) {document.body.classList.remove( 'tasty-recipes-selected-minimum-rating' );return;}document.body.classList.add( 'tasty-recipes-selected-minimum-rating' );},toggleCommentTextareaRequired( rating ) {const commentTextarea = document.getElementById( 'comment' );if ( ! commentTextarea ) {return;}if ( rating < this.minRating ) {commentTextarea.setAttribute( 'required', '' );return;}commentTextarea.removeAttribute( 'required' );},maybeSendRating( rating, element ) {if ( this.savingRating === rating ) {return;}this.savingRating = rating;window.TastyRecipes.staticTooltip.init( element );const recipeCardElement = element.closest( '.tasty-recipes' );if ( ! recipeCardElement ) {window.TastyRecipes.staticTooltip.destroy();return;}window.TastyRecipes.ajax.sendPostRequest(window.trCommon.ajaxurl,{action: 'tasty_recipes_save_rating',rating,nonce: window.trCommon.ratingNonce,post_id: window.trCommon.postId,recipe_id: recipeCardElement.dataset.trId,},( response ) => {window.TastyRecipes.staticTooltip.changeMessage( response.data.message );window.TastyRecipes.staticTooltip.show();this.updateAverageText( response.data, recipeCardElement );this.maybeFillCommentForm( response.data );// Hide the tooltip after 5 seconds.setTimeout( () => {this.maybeResetTooltip( recipeCardElement, response.data, rating );}, 5000 );},() => {this.resetTooltip( recipeCardElement );});},updateAverageText( data, recipeCardElement ) {if ( ! data.average ) {return;}this.setRatingPercent( data );if ( ! data.count ) {return;}const quickLink = document.querySelector( '.tasty-recipes-rating-link' );if ( quickLink ) {this.setTextInContainer( quickLink, data );this.setPartialStar( quickLink );}const cardStars = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' );cardStars.dataset.trDefaultRating = data.average;this.setTextInContainer( recipeCardElement.querySelector( '.tasty-recipes-rating' ), data );},setTextInContainer( container, data ) {if ( ! container ) {return;}if ( data.label ) {const ratingLabelElement = container.querySelector( '.rating-label' );if ( ratingLabelElement ) {ratingLabelElement.innerHTML = data.label;}return;}const averageElement = container.querySelector( '.average' );if ( averageElement ) {averageElement.textContent = data.average;}const countElement = container.querySelector( '.count' );if ( countElement ) {countElement.textContent = data.count;}},setPartialStar( container ) {const highestStar = container.querySelector( '[data-rating="' + Math.ceil( this.defaultRating ) + '"]' );if ( highestStar ) {highestStar.dataset.trClip = this.currentRatingPercentage;}},setRatingPercent( data ) {this.defaultRating = data.average.toFixed( 1 );const parts = data.average.toFixed( 2 ).toString().split( '.' );this.currentRatingPercentage = parts[1] ? parts[1] : 100;if ( this.currentRatingPercentage === '00' ) {this.currentRatingPercentage = 100;}},setCheckedStar( target ) {const cardRatingContainer = target.closest( '.tasty-recipes-ratings-buttons' );const selectedRatingElement = cardRatingContainer.querySelector( '[data-tr-checked]' );if ( selectedRatingElement ) {delete selectedRatingElement.dataset.trChecked;}const thisStar = target.closest( '.tasty-recipes-rating' );thisStar.dataset.trChecked = 1;thisStar.querySelector( '[data-tr-clip]' ).dataset.trClip = 100;},maybeFillCommentForm( data ) {if ( ! data.comment || ! data.comment.content ) {return;}const commentForm = document.querySelector( '#commentform' );if ( ! commentForm ) {return;}const commentBox = commentForm.querySelector( '[name=comment]' );if ( ! commentBox || commentBox.value ) {return;}// Add comment details for editing.commentBox.innerHTML = data.comment.content;if ( data.comment.name ) {commentForm.querySelector( '[name=author]' ).value = data.comment.name;commentForm.querySelector( '[name=email]' ).value = data.comment.email;}},maybeResetTooltip( recipeCardElement, data, rating ) {if ( this.savingRating === rating ) {this.resetTooltip( recipeCardElement, data );}},resetTooltip( recipeCardElement, data ) {window.TastyRecipes.staticTooltip.destroy();this.savingRating = false;// Reset the default rating.const cardRatingContainer = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' );if ( cardRatingContainer ) {this.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;cardRatingContainer.dataset.trDefaultRating = this.defaultRating;this.resetSelectedStar( cardRatingContainer, data );}},resetSelectedStar( cardRatingContainer ) {const selectedRatingElement = cardRatingContainer.querySelector( '[data-rating="' + Math.ceil( this.defaultRating ) + '"]' );if ( selectedRatingElement ) {selectedRatingElement.querySelector( '[data-tr-clip]' ).dataset.trClip = this.currentRatingPercentage;selectedRatingElement.parentNode.dataset.trChecked = 1;}const previousSelectedElement= cardRatingContainer.querySelector( '[data-tr-checked]' );if ( previousSelectedElement ) {const currentSelectedRating = previousSelectedElement.querySelector('[data-rating]');if ( currentSelectedRating !== selectedRatingElement ) {delete previousSelectedElement.dataset.trChecked;}}},backwardCompFormRatingPosition() {const ratingsButtons = document.querySelector( '#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons' );if ( ! ratingsButtons ) {return;}const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);if ( ! ratingsButtonsStyles.display.includes( 'flex' ) ) {ratingsButtons.style.direction = 'rtl';}if ( typeof tastyRecipesRating !== 'undefined' ) {// Select the rating that was previously selected in admin.ratingsButtons.querySelector( '.tasty-recipes-rating[value="' + tastyRecipesRating + '"]' ).checked = true;}const ratingSpans = ratingsButtons.querySelectorAll( '.tasty-recipes-rating' );for (const ratingSpan of ratingSpans) {ratingSpan.addEventListener( 'click', event => {if ( ratingSpan === event.target ) {return;}ratingSpan.previousElementSibling.click();} );}}};(function(callback) {if (document.readyState !== "loading") {callback();} else {window.addEventListener( 'load', callback );}})(() => {window.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );});