// Adds dimensions UUID, Author and Topic into GA4
Tuesday, September 22, 2026
27.1 C
Singapore

Charles Yeo’s never-say-die attitude impresses online community

Singapore — Why and how has the Reform Party’s Charles Yeo been rising up the Internet hierarchy and becoming an online sensation?

At 30-years-old, the practising criminal defence lawyer has been promoted to Chairman of a party that did not produce any results in the 2020 General election.

Mr Yeo became an overnight social media sensation for his strong effort in delivering his party’s Mandarin speech during the Ang Mo Kio GRC constituency broadcast on television. He had only 15 minutes to prepare for it because a team member who was tasked with the speech could not make it for the broadcast.

Memes started circulating online mocking his Chinese to the point that AMK GRC team leader Lee Hsien Loong’s wife, Ms Ho Ching, had to step in to defend him. “Yes, it is painful to see his struggle, but that is no reason to make fun of him or his courageous effort,” she wrote in a Facebook post.

IG Live - 15 July 2020 : ToxicStateNarrativeSG
Meme of Charles Yeo that circulated online. Credits: Eh.Jacks / Facebook

What makes Mr Yeo so distinctive is that he did not shy away when people made fun of him but, instead, took pride in it and kept his head up.

He has been active on social media, notably Instagram, such as holding court online and posting content relatable to youths.

For example, he constantly posts about Dota, a video game series, and posts long commentary videos and answers questions from his followers. He also offers free 30-minute consultations to “native Singaporeans” only.

Here are some questions posed to him and his answers: 

9
Screengrab from Charles Yeo’s Instagram.
3
Screengrab from Charles Yeo Instagram.
10
Screengrab from Charles Yeo Instagram.
charlesyeoigqnadatingcollage
Screengrab from Charles Yeo Instagram.
charlesyeoigqnaspeechcollage
Screengrab from Charles Yeo’s Instagram.

Mr Yeo also gained traction recently for posting messages from  members of the public who alleged that lawyer Imran Rahim had sexually abused young debaters using alcohol and had hit on legal interns inappropriately. By July 24, Mr Yeo said 10 members of the public had come forward with claims against Mr Imran.

Mr Imran has since filed a harassment lawsuit under the Protection from Harassment Act against Mr Yeo.

Mr Yeo posted on his Instagram Story: “My whole point was that I think I have the right to condemn IR for his actions and I view such actions as very typical of pappie predators. But I will not disclose further about what was done or what I heard out of respect for the victims. All I can say is I am prepared to fight this war with Imran Rahim if he tries to silence me or issue any takedown notice.” 

Screenshot 2020 07 24 at 11.18.11 AM
Screengrab from Charles Yeo Instagram.

The date of the first court hearing has been fixed for the end of August. The Protection from Harassment Act outlines protection for victims of harassment by false statements of fact.

Until then, even though the Workers’ Party’s Jamus Lim warmed the cockles of our hearts, the RP’s Charles Yeo has emerged as the real oppa of the 2020 General Election. /TISG

Hot this week

Workers’ Party chair Sylvia Lim & husband Quah Kim Song have lunch at Serangoon with Kenneth Tiong

Ms Lim posted a photo of herself with Mr Quah and Mr Tiong on Instagram on Saturday, Sept 19

‘Our country’: Anwar calls on Malaysia to move past racial politics nearly 70 years after independence

Prime Minister Anwar Ibrahim has called on all parties to stop exploiting racial issues for political gain, saying Malaysia cannot afford to remain trapped in communal divisions nearly 70 years aft...

Popular Categories

document.addEventListener("DOMContentLoaded", () => { const trigger = document.getElementById("ads-trigger"); if ('IntersectionObserver' in window && trigger) { const observer = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { lazyLoader(); // You should define lazyLoader() elsewhere or inline here observer.unobserve(entry.target); // Run once } }); }, { rootMargin: '800px', threshold: 0.1 }); observer.observe(trigger); } else { // Fallback setTimeout(lazyLoader, 3000); } });
// //
Enable Notifications OK No thanks