ADVERTISEMENT

Her most complete album yet: A review of Moira Dela Torre's 'I'm Okay' (Deluxe Edition)

Published Jul 10, 2026 04:27 pm

Breakup albums are one of pop music's oldest traditions. Every generation gets one. Some are grand declarations of heartbreak, others feel like public therapy, and occasionally they're both. The challenge is that the genre has become so crowded that making one stand out is harder than ever.

Fortunately, Moira Dela Torre largely succeeds.

The expanded deluxe edition of her 2025 album "I'm Okay" marks a new chapter in both her personal and professional life, and it's easily her most cohesive project yet. Unlike her previous releases, which often felt like collections of standout singles, this album unfolds as a complete emotional journey through heartbreak, acceptance, and healing.

It's hard not to read the record as deeply personal. Whether the songs are autobiographical matters less than the emotional honesty they convey. Instead of relying on melodrama, Moira embraces emotional specificity, exploring how pain lingers through memories, conversations, and self-doubt.

Opening track "Where It All Started" sets the tone with quiet reflection rather than resentment. Looking back at the beginning of a relationship, it establishes the album as more than a breakup record—it's about how love continues to shape people long after it ends.

The standout is "Gaslighter," arguably Moira's strongest song in years. Its sharp songwriting captures emotional manipulation with painful precision, while the restrained production gradually builds tension without overpowering the lyrics.

By the time the album closes with the upbeat "Dinggin," there's a welcome sense of release. Its message—that so much heartbreak could have been avoided if someone had simply listened—offers hope without pretending every wound has healed.

The expanded edition also benefits from collaborations with Parokya ni Edgar, Ben&Ben, Adie, and Johnoy Danao, all of whom complement rather than overshadow Moira's songwriting.

"San Ka Na," featuring Parokya ni Edgar, stands out as one of the album's emotional centerpieces, pairing naturally with its accompanying music video.

If there's one criticism, it's that the album occasionally plays things too safely. Its mellow, confessional indie-pop sound can feel familiar, echoing artists like Clairo, among others. There are moments too when Moira seems content to stay within her comfort zone instead of pushing her sound further.

Still, originality isn't always about reinventing the wheel. Sometimes it's about expressing familiar emotions with enough honesty to make them feel new. That's what "I'm Okay" does best. Its consistency, thoughtful sequencing, and emotional maturity elevate it beyond just another breakup album.

It may not redefine OPM or the singer-songwriter genre, but it doesn't have to. Instead, it delivers Moira Dela Torre's most focused, emotionally resonant, and consistently rewarding album to date—a promising beginning to her next chapter.

Rating: 7/10

Related Tags

Moira Dela Torre I\'m Okay I\'m Okay Deluxe Edition Gaslighter Dinggin San Ka Na Parokya ni Edgar Ben&Ben Adie Johnoy Danao OPM
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; } }

{{ static_articles_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.