ADVERTISEMENT

The hard luck life: A review of PETA's 'Endo'

Published Apr 20, 2026 10:10 am

At A Glance

  • For the staged adaptation by Liza Magtoto, as nimbly directed by Melvin Lee, high praises for the updating that has been done to make the play now reflect the world of digital sales, wanna-be social influencers, and the online economy.
It’s hard to believe that "Endo," the much lauded and awarded indie film darling, is now 19 years old. But yes, it was back in 2007, that this love story, set in the world of contractual work (Endo refers to end of contract), and it’s fragility and instability, was released. Directed by Jade Castro, the movie was praised for it’s attention to detail, and strong grip on reality.
For the staged adaptation by Liza Magtoto, as nimbly directed by Melvin Lee, high praises for the updating that has been done to make the play now reflect the world of digital sales, wanna-be social influencers, and the online economy.
Running at the PETA Theater Center on the weekends until May 10, this "Endo" stars Royce Cabrera and Esteban Mara as Leo, and we have Jasmine Curtis-Smith or Rissey Reyes-Robinson as Tanya. Then, there’s Kate Alejandrino-Juan or Iana Bernardez as Candy.
On the Saturday afternoon that I watched the drama, it was Royce and Rissey donning the roles of Leo and Tanya respectively. And what remains constant is the potent grasp of desperation, of how this hard scrabble life of looking for work is still a struggle today - that having a degree is no guarantee of finding employment, in the case of Tanya. Or that lacking qualifications, as Leo does, reduces one to even more desperate measures, that makes one feel like he is living in a vicious loop of fultility.
Kudos to Christine Crame, the choreographer; and to how this production makes full use of the PETA hydraulic stage and set design. As a result, the stage play has a strong sense of movement, of ensemble work, and of dynamic motion.
Given that the actual plot is a simple, linear one; all this hustle (and bustle) imbue the performances with a fluidity that throw into relief the passage of time, and of space.
I watched Royce in "The Foxtrot’s" revival of last year, where he was effectively paired with Jackie Lou Blanco. Here in "Endo," he’s by far the central character, and does the heavy lifting of carrying the narrative. He pulls off the physical aspect of the Leo role with ease, while knowing how to deliver the lines and display emotions - especially those of frustration, and false bravado.
Rissey as Tanya is similarly effective, holding on to her dream of working as a registered nurse in Switzerland, while falling in love and contemplating a far-fetched future that includes Leo. 
When we first meet Leo, he’s in a relationship with Candy, the social media wanna-be; and this Candy provides a lot of the comic relief. And while we in the audience can laugh at Candy’s antics, the sober truth is that the real Candy’s out there are even more ridiculous in striving to monetize their social media presence, and falling back on more time-immemorial practices to make ends meet, and achieve their dreams of material wealth. 
"Endo" is that slice of reality and social commentary that deserves to be watched. Melvin Lee has done a great job in resurrecting this story, and giving it a fresh, new lease of life. This is not just a rehash of the 2007 film, but a vibrant example of stage craft, and of dramatic relevance.   

Related Tags

Endo play PETA Royce Cabrera
ADVERTISEMENT
.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1561_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1562_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1563_widget.title }}

{{ articles_filter_1564_widget.title }}

.mb-article-details { position: relative; } .mb-article-details .article-body-preview, .mb-article-details .article-body-summary{ font-size: 17px; line-height: 30px; font-family: "Libre Caslon Text", serif; color: #000; } .mb-article-details .article-body-preview iframe , .mb-article-details .article-body-summary iframe{ width: 100%; margin: auto; } .read-more-background { background: linear-gradient(180deg, color(display-p3 1.000 1.000 1.000 / 0) 13.75%, color(display-p3 1.000 1.000 1.000 / 0.8) 30.79%, color(display-p3 1.000 1.000 1.000) 72.5%); position: absolute; height: 200px; width: 100%; bottom: 0; display: flex; justify-content: center; align-items: center; padding: 0; } .read-more-background a{ color: #000; } .read-more-btn { padding: 17px 45px; font-family: Inter; font-weight: 700; font-size: 18px; line-height: 16px; text-align: center; vertical-align: middle; border: 1px solid black; background-color: white; } .hidden { display: none; }
function initializeAllSwipers() { // Get all hidden inputs with cms_article_id document.querySelectorAll('[id^="cms_article_id_"]').forEach(function (input) { const cmsArticleId = input.value; const articleSelector = '#article-' + cmsArticleId + ' .body_images'; const swiperElement = document.querySelector(articleSelector); if (swiperElement && !swiperElement.classList.contains('swiper-initialized')) { new Swiper(articleSelector, { loop: true, pagination: false, navigation: { nextEl: '#article-' + cmsArticleId + ' .swiper-button-next', prevEl: '#article-' + cmsArticleId + ' .swiper-button-prev', }, }); } }); } setTimeout(initializeAllSwipers, 3000); const intersectionObserver = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { const newUrl = entry.target.getAttribute("data-url"); if (newUrl) { history.pushState(null, null, newUrl); let article = entry.target; // Extract metadata const author = article.querySelector('.author-section').textContent.replace('By', '').trim(); const section = article.querySelector('.section-info ').textContent.replace(' ', ' '); const title = article.querySelector('.article-title h1').textContent; // Parse URL for Chartbeat path format const parsedUrl = new URL(newUrl, window.location.origin); const cleanUrl = parsedUrl.host + parsedUrl.pathname; // Update Chartbeat configuration if (typeof window._sf_async_config !== 'undefined') { window._sf_async_config.path = cleanUrl; window._sf_async_config.sections = section; window._sf_async_config.authors = author; } // Track virtual page view with Chartbeat if (typeof pSUPERFLY !== 'undefined' && typeof pSUPERFLY.virtualPage === 'function') { try { pSUPERFLY.virtualPage({ path: cleanUrl, title: title, sections: section, authors: author }); } catch (error) { console.error('ping error', error); } } // Optional: Update document title if (title && title !== document.title) { document.title = title; } } } }); }, { threshold: 0.1 } ); function showArticleBody(button) { const article = button.closest("article"); const summary = article.querySelector(".article-body-summary"); const body = article.querySelector(".article-body-preview"); const readMoreSection = article.querySelector(".read-more-background"); // Hide summary and read-more section summary.style.display = "none"; readMoreSection.style.display = "none"; // Show the full article body body.classList.remove("hidden"); } document.addEventListener("DOMContentLoaded", () => { let loadCount = 0; // Track how many times articles are loaded const offset = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // Offset values const currentUrl = window.location.pathname.substring(1); let isLoading = false; // Prevent multiple calls if (!currentUrl) { console.log("Current URL is invalid."); return; } const sentinel = document.getElementById("load-more-sentinel"); if (!sentinel) { console.log("Sentinel element not found."); return; } function isSentinelVisible() { const rect = sentinel.getBoundingClientRect(); return ( rect.top < window.innerHeight && rect.bottom >= 0 ); } function onScroll() { if (isLoading) return; if (isSentinelVisible()) { if (loadCount >= offset.length) { console.log("Maximum load attempts reached."); window.removeEventListener("scroll", onScroll); return; } isLoading = true; const currentOffset = offset[loadCount]; window.loadMoreItems().then(() => { let article = document.querySelector('#widget_1690 > div:nth-last-of-type(2) article'); intersectionObserver.observe(article) loadCount++; }).catch(error => { console.error("Error loading more items:", error); }).finally(() => { isLoading = false; }); } } window.addEventListener("scroll", onScroll); });

Sign up by email to receive news.