IOL
‘There will be no extensions,’: NSFAS records more than 868,000 applications for 2027
The National Student Financial Aid Scheme (NSFAS) has recorded 868,626 applications for the 2027 funding cycle, according to its latest application dashboard dated October 19.
IOL
Google says 'multiple' Cloud services suffer network failures in Europe
Several Google Cloud services suffered network disruptions with many reporting elevated errors and network failures.
The Citizen
Recipe of the day: Portuguese-style beef fillet trinchado
Bring Portuguese-inspired flavours to your table with this beef fillet trinchado. Made with tender beef strips, garlic, chilli, olives and a creamy, peppery sauce, this hearty dish is packed with flavour. Serve it with fresh Portuguese rolls or toasted, buttered ciabatta to soak up every last bit of the rich sauce. Portuguese-style beef fillet trinchado Ingredients 500 g beef fillet, cut into strips ¼ cup Worcestershire sauce 1 Tbsp butter 1 onion, finely chopped 1 heaped tsp crushed garlic 1 fresh red chilli, chopped 2 Tbsp cake wheat flour ¼ cup red wine 1 cup beef stock 100 g tomato paste ¼ cup pitted olives 2 tsp white sugar ¾ cup cream 2 dried bay leaves salt and freshly ground black pepper to taste Method Marinate the beef strips in the Worcestershire sauce while you prepare the other ingredients. Melt the butter in a frying pan and fry the onion until translucent and lightly browned. Add the garlic and chilli and fry for another minute, then stir in the beef strips, sprinkle over the flour and cook for 1-2 minutes. Deglaze the pan with the red wine, then stir in the stock, tomato paste, olives and sugar. Simmer for 10 minutes. Lower the heat and add the cream and bay leaves. Simmer gently for 15-20 minutes, stirring occasionally, then season well. Trinchado loves lots of black pepper! *This recipe is courtesy of penguinrandomhouse. Print Portuguese-style beef fillet trinchado Author: Louise Volschenk’s The Art of Hosting Ingredients 500 g beef fillet, cut into strips ¼ cup Worcestershire sauce 1 Tbsp butter 1 onion, finely chopped 1 heaped tsp crushed garlic 1 fresh red chilli, chopped 2 Tbsp cake wheat flour ¼ cup red wine 1 cup beef stock 100 g tomato paste ¼ cup pitted olives 2 tsp white sugar ¾ cup cream 2 dried bay leaves salt and freshly ground black pepper to taste Instructions Marinate the beef strips in the Worcestershire sauce while you prepare the other ingredients. Melt the butter in a frying pan and fry the onion until translucent and lightly browned. Add the garlic and chilli and fry for another minute, then stir in the beef strips, sprinkle over the flour and cook for 1–2 minutes. Deglaze the pan with the red wine, then stir in the stock, tomato paste, olives and sugar. Simmer for 10 minutes. Lower the heat and add the cream and bay leaves. Simmer gently for 15–20 minutes, stirring occasionally, then season well. Trinchado loves lots of black pepper! Notes SERVING SUGGESTION This is best enjoyed with either fresh Portuguese rolls or toasted, buttered ciabatta bread. I would even go as far as to toast the bread in the pan in which the beef was cooked for that glorious meaty flavour. window.trCommon={"minRating":6,"ajaxurl":"https:\/\/www.citizen.co.za\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":4721524}; 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 ); });
The Citizen
‘Married at First Sight Mzansi: Uncut’ gets a 30 October air date
Married at First Sight Mzansi (MAFS) fans now have a date for when the conversation around the show they love to hate will continue. Mzansi Magic has confirmed that the six-part Married at First Sight Mzansi: Uncut premieres on 30 October at 8pm. The channel made the announcement on Tuesday via Instagram, writing, “Yoh, the tea didn’t make the cut, but it’s making its way to you!” alongside the hashtag #MarriedAtFirstSightUncutMzansi. Boitshepo Mashetla rumoured to co-host The series is rumoured to be co-hosted by Season 1 alumna Boitshepo Mashetla, which would mark her first TV gig since leaving the show. Reunion host Lerato Mvelase is also expected to be tied to the series. Mzansi Magic has not yet released a full presenter line-up. View this post on Instagram A post shared by MzansiMagic (@mzansimagic) The announcement follows a Season 3 reunion that raised more questions than it answered. Part 2 dropped several serious claims, including a sexuality rumour and a secretly recorded conversation that was never played, without unpacking them. Whether Uncut will address any of that is unconfirmed, but the format promises scenes, conversations and moments that never made it into the broadcast edit. A familiar format Companion content is well established around the franchise abroad. Australia’s version has spawned unedited-clip and behind-the-scenes spin-offs, including MAFS Unleashed from Daily Mail Australia and the Stan-streamed MAFS: After The Dinner Party. Uncut also suits a local audience that has never been quiet. Over three seasons, Married at First Sight Mzansi has built a vociferous fanbase, and an online community led by creators who review and dissect local TV shows has grown around it. A six-part series of extra footage gives that conversation another few weeks to run. Married at First Sight Mzansi: Uncut starts on 30 October at 8pm on Mzansi Magic (DStv channel 161, also available on the DStv Stream app depending on your package tier).
The South African
‘Truly speaking, I’m not proud’: Young man’s frustration with SASSA boils over
Koketso Mphaphathe, a man from Gauteng, has a blunt message for the South African Social Security Agency (SASSA). He wants the agency to step up for young people who, he says, are running out of options. Mphaphathe holds a matric certificate and has experience in admin and office work. Yet he remains unemployed and is actively looking for work. He shared his story through The South African’s SASSA grant survey. Declined application leaves job seeker struggling Mphaphathe told The South African that he has had a declined or lapsed SASSA application. His biggest financial concern, he said, is unemployment. Mphaphathe rated SASSA’s communication with recipients as very poor. When asked what one thing he would change about the agency, he pointed straight at its app and website, saying both need fixing. He also said he has never applied for additional government support because he did not know what else was available to him. Young job seeker willing to go wherever the work is His frustration comes through clearly in his message to SASSA. He urged the agency to “do its work in office and help South African youth as we are suffering”. “Truly speaking I’m not proud to be living in South Africa at this moment,” he added. His story mirrors that of many young South Africans who hold qualifications but cannot find work, leaving families to stretch limited household income as far as it will go. Win R2 000 in the South African SASSA grant survey If you receive a SASSA grant and want to share your story, we want to hear from you. Take part in our survey and stand a chance to win R2 000. Your responses help us tell the stories that matter.
The South African
Petrol is already above R30. Here’s what November’s hike could mean for your wallet
The November petrol price is set to climb again, and Gauteng commuters will feel it well beyond the pump. Inland petrol has already broken the R30 a litre mark. Now another increase is on the way. And it won’t just hit motorists. It could affect taxi fares, food prices and the cost of getting goods delivered. According to the latest daily data from the Central Energy Fund (CEF), captured on 16 October, petrol is heading for an increase of about R1.84 to R1.88 a litre in November. Diesel is projected to rise by about R1.25 a litre. The new prices will take effect on Wednesday, 4 November. WHERE THE NOVEMBER PETROL PRICE IS HEADING In Gauteng, 95 unleaded currently costs R30.25 a litre, and 93 unleaded costs R29.88, after October’s increase of more than R3 a litre. If the latest projection holds, 95 unleaded would rise to about R32.09 a litre in Gauteng, another record high. The good news is that it’s far smaller than first feared. In early October, the CEF’s data pointed to a petrol increase of more than R4 a litre. WHAT IT COULD COST YOU AT THE PUMP For a typical commuter filling a 50-litre tank with 95 unleaded in Gauteng: October: about R1,512 a tank. November (projected): about R1,604 a tank. That’s roughly R92 more every time you fill up. If you fill up four times a month, that’s about R370 extra a month, on top of October’s increase. TAXI FARES For millions of Gauteng commuters who don’t drive, the bigger question is taxi fares. After October’s fuel hike, the South African National Taxi Council (SANTACO) said it wasn’t yet announcing any fare increases. “The Council recognises that any adjustment to fares has a direct impact on commuters and therefore believes that all possible options must first be explored before a position is reached,” SANTACO spokesperson Mmatshikhidi Rebecca Phala told EWN. The council said it would engage the fuel industry and the government on ways to cushion the impact, including through the industry’s collective buying power. However, fare decisions are made by individual taxi associations. Earlier in 2026, some Gauteng associations, including in Hebron and Hammanskraal, raised fares by R3 to R5 a trip. FOOD PRICES Higher diesel prices affect almost everything on supermarket shelves. Diesel powers the trucks that move food from farms to shops, so when it goes up, transport costs rise, and those costs are often passed on to shoppers. Households are already under pressure. According to the Pietermaritzburg Economic Justice and Dignity Group (PMBEJD), transport and electricity were already swallowing 62% of a worker’s wage in July 2026. DELIVERY COSTS Online shoppers may also notice the difference. Delivery and courier services rely heavily on fuel, and some pass rising costs on to customers through higher delivery fees or fuel surcharges. E-hailing services have also introduced temporary fare adjustments during previous fuel price spikes in 2026. THE TWO NUMBERS TO WATCH Two factors decide where petrol prices go next. Brent crude oil; The international oil price is the biggest driver. Brent crude climbed above $100 (about R1,645) a barrel in October, reaching about $106 (about R1,744) on 12 October, amid tensions in the Middle East. If oil prices fall, South Africa’s petrol price could ease. If they rise, the November increase could grow. The rand-dollar exchange rate; Because oil is priced in US dollars, a weaker rand makes fuel more expensive. The rand has recently firmed slightly, to around R16.50 to the dollar. Investec chief economist Annabel Bishop said the recent rand appreciation had reduced the size of the fuel hikes building. WHEN WILL WE KNOW FOR SURE? The Central Energy Fund’s (CEF’s) daily figures are unaudited and only indicative. The final November adjustment will be confirmed by the Department of Mineral and Petroleum Resources at the end of October. HOW TO CUT YOUR FUEL COSTS Fill up before 4 November, if you can, to beat the increase. Plan your trips to combine errands and avoid unnecessary driving. Check your tyre pressure, since under-inflated tyres use more fuel. Consider lift clubs or public transport for regular commutes. HOW ARE RISING FUEL PRICES AFFECTING YOUR HOUSEHOLD BUDGET? Let us know in the comments below…
TechCentral
Why a robotaxi would struggle to make money in Sandton
TechCentral's sums suggest a driverless Tesla Cybercab would struggle to pay its way in Sandton.
TechCentral
How to choose a .co.za domain without paying more later
A guide on what to compare before choosing a .co.za registrar, from renewals to security.