ADVERTISEMENT

Manila's top restaurants' secret seafood supplier

Published May 23, 2025 12:05 am  |  Updated May 22, 2025 06:22 pm
If you asked what Shalom “Twinkle” Floro does, the simple answer would be “seafood wholesaler.” After all, Seafood by Twinkle has become the go-to for supermarkets, chefs, and restaurateurs wanting to purchase sustainably caught reef fish from Basilan, Sulu, and Tawi Tawi. Floro specializes in wild-caught seafood, which is “seafood that's caught every day by specific kinds of fishermen from specific areas.”
“I make sure that from when they're caught, it arrives in less than 24 hours to the customers,” she said.
I mentioned Floro in my Oct. 31, 2024 column where I wrote about the ice plants whose construction she spearheaded in some far-flung fishing communities.
After catering to a mainly Mindanaoan clientele, Floro recently expanded her reach to Manila. Her clients are mainly chefs and restaurateurs who run high-end restaurants and who put a premium on ingredient quality, freshness, and sustainability.
This isn’t a simple buy-and-sell situation. A huge chunk of Floro’s success stems from her ability to navigate Mindanao fishing communities and the world of fine dining. This is because Floro’s family has been in the seafood business for 45 years. Her grandmother, who started ICA Trading Corporation, was one of a group of women who started and organized the fish brokerage system that exists in Mindanao to this day.
The system may seem complex to outsiders, but is as natural as breathing to Mindanaoans. There are only 11 seafood brokers in the region, all of them members of the Monte Carlo Fish Brokers Association, each broker specializing in one seafood category. This is a simplified version of what goes on the ground because everything is so informal.
Among other things, the brokerage acts as a price negotiator between the fishing communities and the market. Floro explained that the fishing associations are usually clan-run, specializing in a very specific type of fishing. “There are many varieties of fish in the ocean, and for you to… catch them, you need to understand their habitat.., diet.., seasonality.., [and] migration..,“ Floro said. “So many things you need to know before you can catch it consistently. It’s actually inherited knowledge.”
No system is perfect, and this one is no different. ”As deeply as we appreciate the values it was built on from the production and trade standpoint, the industry has been left behind,” Floro admits. ”There are things that the retail market has caught up on that we cannot keep up with. I think that’s one of our greater challenges.”
Floro’s expansion to the Manila market hinged on the idea of giving Manileños direct access to freshly caught Mindanaoan reef fin fish. While they were always wholesalers, a dwindling market, partly brought on by a changing retail landscape, made them reconsider their business model. ”There were less and less fishmongers, so it was a challenge,” Floro said. ”What happens is because the retailers, the fishmongers, disappear, the people’s awareness of what varieties are available disappears with them.”
Part of the challenge of moving fresh seafood is that it is highly perishable. This is a big reason behind the rise of the (necessary and important) consumption of frozen seafood. Unfortunately, this also meant the slow disappearance of some traditionally eaten varieties because of a lack of demand.
Nowadays, people look to chefs to inform them of what to eat and how to eat it, which is why Floro set her sights on the restaurant industry. “I feel like if a woman would see this [fish] in a restaurant being served by [a celebrity chef], she would go home and think, ‘we can make that at home if I only had the ingredients’. So thinking backwards.., maybe this is the only way it could work now, or else we'll all be eating nothing but tilapia, which is what's been happening to Manila.”
Her biggest challenge isn’t acquiring the fish, but beating Manila traffic, not to mention expensive rider fees. “When I ship from Sulu to Cagayan again to Manila, it is cheaper than the cost to go from Terminal Two to Makati.”
What she’s doing is reverse engineering the food industry by appealing to tastemakers in the hopes that consuming locally and sustainably sourced fish will move from influencers to regular folks. That said, she emphasized that, “We mostly distribute exclusively to Mindanao. Just a few go to Manila.”
As someone who grew up in Mindanao, she is all too aware of the influence Manila holds, and has decided to use it to help the fishing communities she works with. “The suppliers are usually families [that] filter it through the Fishing Association… It’s super community-based. We talk directly to the communities.”
For now, she and the communities she works with are doing what they can to encourage the consumption of different varieties of local fish. Judging from the many satisfied chefs as eaters, it seems to be working.
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.