ADVERTISEMENT

Flow by Kevin Uy feels like coming home to a kitchen full of stories

Located in Makati, the new restaurant pairs Peruvian-trained technique with Filipino sensibilities in a tasting menu that feels intimate and inviting

Published May 19, 2026 10:59 pm
(Photo: Backyard Productions)
(Photo: Backyard Productions)
After a long day of work, there is something deeply comforting about walking into a restaurant that feels like a friend’s kitchen. That was exactly the feeling I had stepping into Flow by Chef Kevin Uy during a recent media preview in Makati. The lighting was soft, the space warm, and the room filled with people who clearly loved food—chefs, journalists, and industry friends gathered to see what Kevin had built after returning home to Manila.
By the end of the evening, it felt more like a dinner among friends who had simply met that night.
PLATED PRECISION Chef Kevin Uy prepares 'Amazon,' a pork dish paired with palm heart and banana as part of the tasting menu at Flow in Makati. (Photo: Fern Dy)
PLATED PRECISION Chef Kevin Uy prepares 'Amazon,' a pork dish paired with palm heart and banana as part of the tasting menu at Flow in Makati. (Photo: Fern Dy)
FLOW STATE Chef Kevin Uy poses with the Flow team inside the Makati restaurant (Photo: Backyard Productions)
FLOW STATE Chef Kevin Uy poses with the Flow team inside the Makati restaurant (Photo: Backyard Productions)
The restaurant offers a nine-course tasting menu priced at ₱5,500, with an optional cocktail pairing. Rather than presenting a single cuisine, the menu moves through what Kevin calls “culinary biomes”—landscapes where Peruvian and Filipino influences meet.
The journey begins at the shore.
The opening dish, “Coastline,” arrives as three bites inspired by the sea: seaweed in different textures that evoke sand, rocks, and water. It’s playful and surprising, immediately shifting how you approach the meal.
From there, the menu moves to “Manila,” a dish of scallops and cassava layered with uni emulsion and spirulina granita. It’s oceanic but bright—made more vivid by the first cocktail pairing, “Tropics,” a pisco-based drink with pineapple, holy basil, and vanilla that introduces the menu’s coastal theme.
One of the evening’s most memorable courses—a personal favorite—was “River,” an interactive dish served in stages. It begins with river prawn layered with tamarillo and basil before unfolding into a creamy chupe de camarón with ulang. Toasted bread arrives last, meant to soak up the remaining chowder.
Further into the menu, “Amazon” centers on pork paired with palm heart and banana, complemented by “Treetop,” a smoky banana-infused whiskey with charred banana leaf that echoes the dish’s forest depth. In contrast, “Lima” refreshes the palate with ceviche built around fresh catch and a sharp guyabano dressing, lifted by “Coral,” a hibiscus and guava cocktail with Don Papa rum.
FOREST SMOKE 'Amazon' pairs pork with palm heart and banana, complemented by the smoky “Treetop” cocktail infused with whiskey and charred banana leaf. (Photo: Fern Dy)
FOREST SMOKE 'Amazon' pairs pork with palm heart and banana, complemented by the smoky “Treetop” cocktail infused with whiskey and charred banana leaf. (Photo: Fern Dy)
RIVER RUNS One of the evening’s standout dishes, 'River,' unfolds in stages with river prawn, tamarillo, basil, and a creamy chupe de camarón with ulang served alongside toasted bread. (Photo: Fern Dy)
RIVER RUNS One of the evening’s standout dishes, 'River,' unfolds in stages with river prawn, tamarillo, basil, and a creamy chupe de camarón with ulang served alongside toasted bread. (Photo: Fern Dy)
The final savory course, “Mountain,” brings the journey inland with slow-cooked beef cheek in burnt coconut, surrounded by corn textures that add crunch. It’s paired with “Farmland,” a sugarcane-based cocktail with calamansi and sacha culantro.
Dessert arrives in two acts. “Cacao” reimagines chocolate without using chocolate itself, combining fudge, sorbet, and cacao nibs into something indulgent yet balanced. The final dish, “Yacon,” explores the root vegetable from skin to core through different techniques. Both are paired with “Island,” a coconut-forward cocktail layered with cacao and yacon.
By the end of the meal, the experience had reshaped the way I was tasting the food. Each dish moves beyond flavor—it reflects landscape, memory, and the movement between cultures.
A restaurant shaped by intersecting worlds
Flow marks Kevin’s return to the Philippines after five years in Peru, where he trained at Central under Virgilio Martínez and Pia Leon. Located inside Green Sun Hotel in Makati, the restaurant draws from that experience while grounding itself in the flavors of home.
“The whole experience was an eye-opener. Peruvian and Filipino cultures aren’t too far apart,” Kevin said. “It’s interesting to see where and how different worlds intersect.”
“In Latin-American vernacular, the word flow is synonymous with rhythm and continuity,” he explained. “It isn’t necessarily perfection. It’s realness—real worlds, real connections. What flows in must flow out.”
Kevin works alongside Executive Chef Gabriel Ong, a childhood friend from Xavier School and fellow École Ducasse Manila graduate. Ong trained at Michelin-starred restaurants including Alain Ducasse at Morpheus in Macau and Amber in Hong Kong before returning to Manila.
CITY TIDES 'Manila' pays homage to the capital as a melting pot, using an uni emulsion, scallops, cassava, and topped with granita made of citrus and local souring agents. (Photo: Fern Dy)
CITY TIDES 'Manila' pays homage to the capital as a melting pot, using an uni emulsion, scallops, cassava, and topped with granita made of citrus and local souring agents. (Photo: Fern Dy)
CITRUS CURRENT The 'Lima' course refreshes the palate with fresh catch ceviche dressed in guyabano and paired with the hibiscus-guava cocktail, 'Coral.' (Photo: Fern Dy)
CITRUS CURRENT The 'Lima' course refreshes the palate with fresh catch ceviche dressed in guyabano and paired with the hibiscus-guava cocktail, 'Coral.' (Photo: Fern Dy)
In Flow, Kevin shapes the creative direction while Ong anchors the kitchen—forming what they describe as a yin-and-yang partnership.
Designed by Nazareno Architecture + Design, the restaurant reflects the same ideas of landscape and ecosystem found in the menu. A recessed entrance, inspired by rice terraces, leads into a space lined with brick, woven lighting, bamboo chairs, and natural materials. Glass cloches filled with preserved ingredients—husks, shells, and other elements from the kitchen—line the walls.
The dinnerware carries the same attention to detail. Kevin collaborated with local potters to create pieces specific to each dish. “I deeply believe that food is a stage for collaboration between disciplines,” he said. “I want to provide a space where artists can come together.”
By the end of the evening, that sense of exchange lingered.
We arrived as guests for a preview dinner. Somewhere between courses and conversations, the room shifted. It felt like a gathering of people brought together by a shared curiosity—tasting, observing, and leaving with a deeper appreciation of what was on the plate.
And perhaps that’s the real magic of Flow. You come for a dining experience. You leave with new conversations, new connections, and a slightly different way of thinking about what it means to eat.

Related Tags

Flow Makati Kevin Uy Manila Bulletin Lifestyle
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.