Meatless Monday just got a serious World Milk Day upgrade. This hearty veggie-filled macaroni cheese from dairy farmer Tanya Chicken is the kind of plant-forward comfort food that makes skipping meat on a Monday feel like an easy choice.
Packed with leeks, mushrooms, spinach, peppers and tomatoes, it delivers enough flavour and substance that no one at the table will be asking where the meat is.
Visit milkshake.it.com for more information.
The recipe serves six comfortably, perfect for a family dinner with leftovers to freeze and comes together with a rich, homemade cheddar béchamel that coats every piece of pasta.
Simply omit the bacon listed in the ingredients for a fully vegetarian version and you have a wholesome, satisfying Meatless Monday meal that feels indulgent without trying too hard.
Serves: 6
Ingredients
Veggie base
- 1 x 250g bacon (omit for a fully vegetarian version)
- Olive oil or coconut oil
- 1 large red onion, diced
- 3 leeks, chopped
- 3 cloves of garlic, finely chopped or minced
- 1 x 250g punnet of mushrooms, chopped (brown or portobellini recommended)
- 1 small red or yellow pepper, diced
- 2 ripe tomatoes, chopped
- 1 tsp mixed herbs
- 1 tsp marjoram
- ½ tsp smoked paprika
- Salt and pepper to taste
- 1 large handful of baby spinach, chopped
Cheese sauce
- 100g butter
- 100g all-purpose cake flour
- 1 litre milk (add more if the sauce is too thick)
- A pinch of grated nutmeg
- Salt and pepper
- 1 cup grated cheddar cheese, plus extra for topping
Pasta
Method
- Preheat oven to 180°C.
Veggie base
- Using a large, heavy-based pan, fry the bacon in a little butter until crispy. Remove from the pan, chop into bite-sized pieces, and set aside.
- In the same pan, add a splash of olive oil or coconut oil and fry the onion and leeks over medium heat until softened.
- Add the garlic and mushrooms and cook until the mushrooms’ liquid has cooked away – take care not to burn the garlic.
- Add the tomatoes, pepper, herbs, and smoked paprika and cook for a few more minutes over medium heat.
- Stir the bacon back into the pan and adjust seasoning with salt and pepper.
- Remove the pan from the heat, stir in the baby spinach, and set aside.
Cheese sauce
- Melt butter in a large saucepan over low heat.
- Stir in the flour until well combined with the melted butter.
- Gradually add the milk, whisking continuously to avoid lumps.
- Once all the milk has been added, bring the sauce slowly to the boil, stirring until it thickens.
- Add the grated cheese and stir until fully melted.
- Season with salt, pepper, and a pinch of nutmeg.
Pasta
- Cook the macaroni in a large pot of salted boiling water according to packet instructions, removing it when just tender – it will soften further in the oven.
Assembly
- In a large, deep oven dish, combine the cooked macaroni and the veggie mixture.
- Pour over the cheese sauce and mix until evenly combined.
- Top with extra grated cheddar and bake for approximately 25 minutes, until the cheese is melted and beginning to darken.
- Allow to stand for a few minutes before serving.
Print
Recipe of the day: Veggie-filled macaroni cheese
Meatless Monday just got a serious upgrade. This hearty veggie-filled macaroni cheese from dairy farmer Tanya Chicken for Rediscover Dairy is the kind of plant-forward comfort food that makes skipping meat on a Monday feel like an easy choice.
Ingredients
Ingredients
Veggie base
- 1 x 250g bacon (omit for a fully vegetarian version)
- Olive oil or coconut oil
- 1 large red onion, diced
- 3 leeks, chopped
- 3 cloves of garlic, finely chopped or minced
- 1 x 250g punnet of mushrooms, chopped (brown or portobellini recommended)
- 1 small red or yellow pepper, diced
- 2 ripe tomatoes, chopped
- 1 tsp mixed herbs
- 1 tsp marjoram
- ½ tsp smoked paprika
- Salt and pepper to taste
- 1 large handful of baby spinach, chopped
Cheese sauce
- 100g butter
- 100g all-purpose cake flour
- 1 litre milk (add more if the sauce is too thick)
- A pinch of grated nutmeg
- Salt and pepper
- 1 cup grated cheddar cheese, plus extra for topping
Pasta
Instructions
- Preheat oven to 180°C.
Veggie base
- Using a large, heavy-based pan, fry the bacon in a little butter until crispy. Remove from the pan, chop into bite-sized pieces, and set aside.
- In the same pan, add a splash of olive oil or coconut oil and fry the onion and leeks over medium heat until softened.
- Add the garlic and mushrooms and cook until the mushrooms’ liquid has cooked away — take care not to burn the garlic.
- Add the tomatoes, pepper, herbs, and smoked paprika and cook for a few more minutes over medium heat.
- Stir the bacon back into the pan and adjust seasoning with salt and pepper.
- Remove the pan from the heat, stir in the baby spinach, and set aside.
Cheese sauce
- Melt butter in a large saucepan over low heat.
- Stir in the flour until well combined with the melted butter.
- Gradually add the milk, whisking continuously to avoid lumps.
- Once all the milk has been added, bring the sauce slowly to the boil, stirring until it thickens.
- Add the grated cheese and stir until fully melted.
- Season with salt, pepper, and a pinch of nutmeg.
Pasta
- Cook the macaroni in a large pot of salted boiling water according to packet instructions, removing it when just tender — it will soften further in the oven.
Assembly
- In a large, deep oven dish, combine the cooked macaroni and the veggie mixture.
- Pour over the cheese sauce and mix until evenly combined.
- Top with extra grated cheddar and bake for approximately 25 minutes, until the cheese is melted and beginning to darken.
- Allow to stand for a few minutes before serving.
window.trCommon={"minRating":6,"ajaxurl":"https:\/\/www.citizen.co.za\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":4498885};
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.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 {
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 );
});
Recipe supplied by dairy farmer Tanya Chicken for Rediscover Dairy.
Read full story at source