June 14, 2017
Pennsylvania’s Best Wedding Tradition Is the Cookie Table
cookie_table_final[1]

A Depression-era holdover in Pittsburgh lets your dessert station double as a party-favor buffet.

It was not until I was a 17-year-old freshman in college, newly arrived in Pittsburgh, that I discovered just how idiosyncratic the city is. Only in Pittsburgh can you save a parking spot by putting a lawn chair on the road. It’s here that your palate is considered refined if your first choice french fry condiment is Heinz, with Yuengling to wash it down. It’s here that phrases like “jagoff,”, “dippy eggs,” and “nebby” sprinkle everyday conversations.

Customs in Pittsburgh are a kind of insular gigantism—unchecked, yet isolated phenomena as a result of social and environmental factors. My favorite example of this might be the wedding cookie table, a tradition in which various cookies baked by both sides of the family are the centerpiece of the wedding reception.

The cookie table came out of the 1930s, when Pittsburgh was taking an economic beating from the one-two punch of the collapse of the coal industry and the crippling Great Depression. Many immigrants found themselves living in relative poverty, raising large families in ramshackle patch houses, poorly constructed homes built for coal-mining families.  For many families of this time, the goal was to marry off their kids to cut expenses—and to do it quickly.

As this economic matchmaking became common, cultures began to cross-pollinate from one household to another. By the time the wedding came around, especially large Catholic weddings, both sides of the family would pitch in to share costs and labor.

Cakes, especially during the Depression, were luxuries that required expensive ingredients—eggs, butter, sugar, and flour. Instead, families began to modify these ingredients to use a more rationed, yet creative way. By forgoing the customary wedding cake due to financial burdens, Pittsburgh immigrant families were inadvertently starting a new tradition.

Today, a staple at any good Yinzer wedding, regardless of denomination, has one table set aside exclusively for the cookies, nowadays a complement to the wedding cake. Imagine an assortment of every kind of cookie, scattered and assorted on cake tiers and large platters.  They can range from simple chocolate chip or shortbread to more complex and decorative, such as the ladylock (also called a “clothespin cookie”) or the pesche con crema, an Italian transplant to the cookie table that resembles a sugar-coated peach and is filled with a simple buttercream. Confectioner’s sugar is smudged on the tablecloth for decoration, and the peanut butter cookies always seem to go first. It’s a nod to immigrant heritage, or rather a blending of many different heritages all on one table.

So how does one go about having a cookie table? First things first: Marry someone from Pittsburgh so you have a mother-in-law to pitch in on the cookies. Though every family is different, it often falls to the matriarchal forces in the family to spend hours rolling out dough, mixing icing, baking, and freezing a few hundred cookies weeks in advance of the big day. From there, others begin to get involved, as aunts and cousins who want to be a part of the wedding will pitch in with a batch here or a batch there. Pretty soon, you’ll have amassed dozens of confections without having to do any of the work.

The cookie table itself should have layers to it. Leave nothing in the shadows by using cake stands stacked on one another and large platters with mounds of cookies overflowing. Some families opt for a sign, which is usually a good idea if you have out-of-towners who are not familiar with this regional custom. The final touch to a good cookie table (no—a GREAT cookie table) is to have pile of cellophane gift bags sitting on the table so guests can end their night by plucking leftover goodies to home with them. It’s a DIY party favor that gives guests the freedom and luxury to indulge their sweet tooth while nursing their hangover the next day.

The cookie table is the best representation of the world Pittsburgh was and what it continues to be: a community built on immigrants whose traditions are a result of continuing to adapt to changing times, while never losing the values they hold closest. Having one at your wedding isn’t a forced tradition like the Cha-Cha Slide or a cash bar, but a nod to the city’s enduring geniality, even during tough times.

RECIPE: Pesche Con Crema
RECIPE: Lady Locks (Clothespin Cookies)

Brett Braley

Brett F. Braley is the writer, baker, and photographer behind FigandBleu.com (@figandbleu). His work centers on traditional American desserts, combined with new flavors or techniques.

[email_signup id="3"]
<div class="email-subscribe exp-subscribe subscribe"> <div class="alert alert-success exp-success ga-etembed-success" style="display:none;"> Great! You've signed up successfully! </div> <div class="alert alert-danger exp-error" style="display:none;"> We are experiencing an error, please try again. </div> <form name="subscribe" id="email-signup" class="email-signup-form" action="https://www.tastecooking.com/wp-admin/admin-ajax.php" method="POST" target="_top" data-event-assigned="false"> <fieldset class="form-group form-inline email-submit-group"> <label for="email-address" class="sr-only">Email Address</label> <input id="email-newsletter" type="email" placeholder="your@email.com" class="email-newsletter text email form-control" name="email" value=""> <button type="submit" value="Subscribe" name="subscribe" class="btn btn-primary email-submit-btn ga-etembed-success"> <i class="fa fa-envelope"></i> Subscribe </button> </fieldset> <small class="exp-small terms" style=""> By clicking Subscribe, I acknowledge that I have read and agree to the Penguin Random House <a href="http://www.penguinrandomhouse.com/privacy/" target="_blank">Privacy Policy</a> and <a href="http://www.penguinrandomhouse.com/terms/" target="_blank">Terms of Use</a> and agree to receive news and updates from TASTE and Penguin Random House. </small> <fieldset class="field-group checkboxes" style="display:none"> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50501,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook General</strong></span> </label> </div> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50502,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook Promo</strong></span> </label> </div> </fieldset><!-- /.checkboxes --> <input type="hidden" name="data_acq_code" value="TASTE_POPUP_STATIC_ONGOING" /> <input type="hidden" name="data_programs" value="50501|505,50502|505" /> <input type="hidden" name="form_id" value="3" /> <input type="hidden" name="partner" value="" /> <input type="hidden" name="action" value="crown_email_signup_submit" /> <input type="hidden" name="ref_url" value="" /> </form> </div> <script> jQuery(document).ready(function () { var unassigned_forms; setInterval( function() { //Check for unassigned forms var forms = jQuery( '.email-signup-form' ); unassigned_forms = false; forms.each( function( index ) { if ( jQuery( this ).attr( 'data-event-assigned' ) === 'false' ) { unassigned_forms = true; } }); if ( unassigned_forms ) { forms.off( 'submit' ).on( 'submit', function ( e ) { forms.attr( 'data-event-assigned', 'true' ); e.preventDefault(); // Basic email validation var email = jQuery(e.target).find('.email-newsletter').val(), valid_email = false, groupEl = jQuery(e.target).closest('.email-subscribe'); if ( !!email && typeof(email) === "string" ) { var email_array = email.split('@'); if ( email_array.length === 2 ) { if ( email_array[1].split('.').length > 1 ) { valid_email = true; } } } if ( valid_email ) { jQuery('.alert-danger').hide(); // Show loading gif groupEl.find('.email-signup-form').hide(); groupEl.find('.email-submit-loading').show(); // Populate ref_url jQuery(this).find('input[name="ref_url"]').val(window.location.href); // Generate Payload var payload = jQuery(this).serializeArray(); jQuery.ajax({ url: jQuery(this).attr('action'), type: 'POST', data: payload, success: function (data) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display success msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-success').show(); jQuery(e.target).parent().find('#downloadbtn').show(); }, fail: function (err) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display failure msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-danger').show(); } }); } else { groupEl.find('.alert-danger').html('Please enter a valid email address.').show(); } }); forms.off( 'keypress' ).on( 'keypress', function ( e ) { if ( e.which === 13 ) { e.preventDefault(); jQuery( this ).submit(); } }); } }, 100); }); </script>
[email_signup id="3"]
<div class="email-subscribe exp-subscribe subscribe"> <div class="alert alert-success exp-success ga-etembed-success" style="display:none;"> Great! You've signed up successfully! </div> <div class="alert alert-danger exp-error" style="display:none;"> We are experiencing an error, please try again. </div> <form name="subscribe" id="email-signup" class="email-signup-form" action="https://www.tastecooking.com/wp-admin/admin-ajax.php" method="POST" target="_top" data-event-assigned="false"> <fieldset class="form-group form-inline email-submit-group"> <label for="email-address" class="sr-only">Email Address</label> <input id="email-newsletter" type="email" placeholder="your@email.com" class="email-newsletter text email form-control" name="email" value=""> <button type="submit" value="Subscribe" name="subscribe" class="btn btn-primary email-submit-btn ga-etembed-success"> <i class="fa fa-envelope"></i> Subscribe </button> </fieldset> <small class="exp-small terms" style=""> By clicking Subscribe, I acknowledge that I have read and agree to the Penguin Random House <a href="http://www.penguinrandomhouse.com/privacy/" target="_blank">Privacy Policy</a> and <a href="http://www.penguinrandomhouse.com/terms/" target="_blank">Terms of Use</a> and agree to receive news and updates from TASTE and Penguin Random House. </small> <fieldset class="field-group checkboxes" style="display:none"> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50501,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook General</strong></span> </label> </div> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50502,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook Promo</strong></span> </label> </div> </fieldset><!-- /.checkboxes --> <input type="hidden" name="data_acq_code" value="TASTE_POPUP_STATIC_ONGOING" /> <input type="hidden" name="data_programs" value="50501|505,50502|505" /> <input type="hidden" name="form_id" value="3" /> <input type="hidden" name="partner" value="" /> <input type="hidden" name="action" value="crown_email_signup_submit" /> <input type="hidden" name="ref_url" value="" /> </form> </div> <script> jQuery(document).ready(function () { var unassigned_forms; setInterval( function() { //Check for unassigned forms var forms = jQuery( '.email-signup-form' ); unassigned_forms = false; forms.each( function( index ) { if ( jQuery( this ).attr( 'data-event-assigned' ) === 'false' ) { unassigned_forms = true; } }); if ( unassigned_forms ) { forms.off( 'submit' ).on( 'submit', function ( e ) { forms.attr( 'data-event-assigned', 'true' ); e.preventDefault(); // Basic email validation var email = jQuery(e.target).find('.email-newsletter').val(), valid_email = false, groupEl = jQuery(e.target).closest('.email-subscribe'); if ( !!email && typeof(email) === "string" ) { var email_array = email.split('@'); if ( email_array.length === 2 ) { if ( email_array[1].split('.').length > 1 ) { valid_email = true; } } } if ( valid_email ) { jQuery('.alert-danger').hide(); // Show loading gif groupEl.find('.email-signup-form').hide(); groupEl.find('.email-submit-loading').show(); // Populate ref_url jQuery(this).find('input[name="ref_url"]').val(window.location.href); // Generate Payload var payload = jQuery(this).serializeArray(); jQuery.ajax({ url: jQuery(this).attr('action'), type: 'POST', data: payload, success: function (data) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display success msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-success').show(); jQuery(e.target).parent().find('#downloadbtn').show(); }, fail: function (err) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display failure msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-danger').show(); } }); } else { groupEl.find('.alert-danger').html('Please enter a valid email address.').show(); } }); forms.off( 'keypress' ).on( 'keypress', function ( e ) { if ( e.which === 13 ) { e.preventDefault(); jQuery( this ).submit(); } }); } }, 100); }); </script>