// Adds dimensions UUID, Author and Topic into GA4
Sunday, March 8, 2026
27 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.

See also  Reform Party praised for letting PSP battle PAP in West Coast GRC
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.

See also  Pen pals from SG and Canada meet in person after 43 years

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

- Advertisement -

Hot this week

The Latest: Israel hammers Beirut and Tehran as Iranian president apologizes to Gulf neighbors

Iran’s president rejected a demand by the United States for an unconditional surrender on Saturday and apologized for Iran’s attacks on regional countries, as Israel and the United States kept up t...

‘Thank you, neighbour’: Resident’s video leads to arrest of man who stole S$40,000 watch

 It was also revealed that the man had previously committed a similar crime in 2021. 

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); } });
// //