Yogurt Culture — Health Living As a Culture

🚚 Free delivery in Metro Manila, Cebu, and Davao for orders above ₱600! Find a store

🇵🇭 100% Homegrown Yogurt Brand

Health Living As a Culture

Probiotic-rich, artisanal Greek yogurt and smooth yogurt drinks crafted locally with fresh milk from Philippine highlands. Fresh, minimalist, and delicious.

Yogurt Culture Artisanal Yogurt Bowls
🥛
100% Raw Milk Locally sourced
🦠
10 Billion+ Live Active Cultures

The Homegrown Standard

We believe in simplicity. Our yogurt contains no artificial preservatives, stabilizers, or synthetic thickeners. Just premium local dairy, live active cultures, and pure fruit toppings.

🇵🇭

Sourced Locally

We source our milk directly from local dairy farms in Benguet and Bukidnon, supporting Filipino farmers while guaranteeing ultimate freshness.

🍓

Real Ingredients

Fresh Guimaras mangoes, Baguio strawberries, and organic wild honey. We say NO to artificial syrups and food colorings.

🥄

Double Strained

Our Greek yogurt is traditional cloth-strained twice for an exceptionally thick, high-protein texture without gelatin fillers.

♻️

Sustainable Packaging

Minimalist white bottles and tubs made from recyclable, food-grade materials. Bring your tubs back for store discounts!

Homegrown & Crafted with Care

From clean minimalist packaging to retail storefronts, we bring healthy living closer to you. Take a peek at our bottles, tubs, and store displays.

YOGURT CULTURE • MAD OVER MILK •
YOGURT FRANCHISE OPPORTUNITY •
MAD OVER MILK • YOGURT CULTURE •

Yogurt Franchise Opportunity

Join the fastest growing homegrown healthy dairy brand in the Philippines. We provide a turnkey business model, simple operations, and strong marketing backing.

Low Investment

Highly competitive starting capital with quick return on investment.

Equipment Assistance

Sourcing and installation of commercial strainers, mixers, and freezers.

Low Royalty Fee

Keep more of your earnings. Flat fees to support your growth.

Marketing Support

Social media assets, brand guidelines, and local store campaign assistance.

Start Your Culture Journey

Fill in the form below and our partnerships director will reach out within 24 hours.

Eat Healthier, Get Rewarded

Earn points with every sip and scoop. Exchange points for free toppings, custom drink upgrades, or custom curated bowls.

1

1 Point = ₱10 Spent

Scan your digital club card on every purchase in-store or order online automatically.

50

Free Toppings

Add fresh local mango, crunchy granola, or organic wild honey drizzle on us.

120

Free Yogurt Drink

Claim any 500ml Plain, Banana, or Strawberry yogurt drink from our menu.

Culture Club Points Calculator

Adjust the slider to simulate your monthly yogurt purchases and see what you can earn!

Yogurt Drinks per Month (₱150 ea): 4
Greek Yogurt Tubs per Month (₱250 ea): 2
Monthly Points 110

Unlocked Rewards:

Homegrown Branches

Cravings calling? Visit our hubs or order online for prompt deliveries.

📍 Click on map pins to view branch details

Your Yogurt Bag (0)

🥄

Your bag is empty!

Add some fresh yogurt drinks or bowls to get started.
/** * Yogurt Culture - Website Interactivity * Theme: Mad Milk by Yogurt Culture */ document.addEventListener('DOMContentLoaded', () => { initHeader(); initMobileMenu(); initScrollReveal(); initSmoothScroll(); initBackToTop(); initActiveNav(); initParallax(); }); /* ======================================== HEADER - Scroll Effect ======================================== */ function initHeader() { const header = document.getElementById('header'); let lastScroll = 0; window.addEventListener('scroll', () => { const currentScroll = window.scrollY; if (currentScroll > 60) { header.classList.add('scrolled'); } else { header.classList.remove('scrolled'); } lastScroll = currentScroll; }, { passive: true }); } /* ======================================== MOBILE MENU ======================================== */ function initMobileMenu() { const hamburger = document.getElementById('hamburger'); const mobileMenu = document.getElementById('mobile-menu'); const mobileLinks = mobileMenu.querySelectorAll('a'); hamburger.addEventListener('click', () => { hamburger.classList.toggle('active'); mobileMenu.classList.toggle('active'); document.body.style.overflow = mobileMenu.classList.contains('active') ? 'hidden' : ''; }); // Close menu when a link is clicked mobileLinks.forEach(link => { link.addEventListener('click', () => { hamburger.classList.remove('active'); mobileMenu.classList.remove('active'); document.body.style.overflow = ''; }); }); } /* ======================================== SCROLL REVEAL ANIMATION ======================================== */ function initScrollReveal() { const reveals = document.querySelectorAll('.scroll-reveal'); const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('visible'); observer.unobserve(entry.target); // Only animate once } }); }, { threshold: 0.1, rootMargin: '0px 0px -50px 0px' }); reveals.forEach(el => observer.observe(el)); } /* ======================================== SMOOTH SCROLL ======================================== */ function initSmoothScroll() { document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { const target = this.getAttribute('href'); if (target === '#') return; e.preventDefault(); const element = document.querySelector(target); if (element) { const headerOffset = 90; const elementPosition = element.getBoundingClientRect().top + window.scrollY; const offsetPosition = elementPosition - headerOffset; window.scrollTo({ top: offsetPosition, behavior: 'smooth' }); } }); }); } /* ======================================== BACK TO TOP BUTTON ======================================== */ function initBackToTop() { const backToTop = document.getElementById('back-to-top'); window.addEventListener('scroll', () => { if (window.scrollY > 500) { backToTop.classList.add('visible'); } else { backToTop.classList.remove('visible'); } }, { passive: true }); backToTop.addEventListener('click', () => { window.scrollTo({ top: 0, behavior: 'smooth' }); }); } /* ======================================== ACTIVE NAV HIGHLIGHT ======================================== */ function initActiveNav() { const sections = document.querySelectorAll('section[id]'); const navLinks = document.querySelectorAll('.nav-links a'); const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { const id = entry.target.getAttribute('id'); navLinks.forEach(link => { link.classList.remove('active'); if (link.getAttribute('href') === `#${id}`) { link.classList.add('active'); } }); } }); }, { threshold: 0.3, rootMargin: '-100px 0px -50% 0px' }); sections.forEach(section => observer.observe(section)); } /* ======================================== SUBTLE PARALLAX ON HERO ======================================== */ function initParallax() { const heroImage = document.querySelector('.hero-image'); const heroSplash1 = document.querySelector('.hero-splash--1'); const heroSplash2 = document.querySelector('.hero-splash--2'); const heroSplash3 = document.querySelector('.hero-splash--3'); window.addEventListener('scroll', () => { const scrolled = window.scrollY; if (scrolled < window.innerHeight) { const factor = scrolled * 0.3; if (heroImage) { heroImage.style.transform = `translateY(${factor * 0.15}px)`; } if (heroSplash1) heroSplash1.style.transform = `translate(${factor * 0.1}px, ${factor * 0.05}px)`; if (heroSplash2) heroSplash2.style.transform = `translate(${-factor * 0.08}px, ${-factor * 0.1}px)`; if (heroSplash3) heroSplash3.style.transform = `translate(${factor * 0.05}px, ${factor * 0.12}px)`; } }, { passive: true }); } /* ======================================== NEWSLETTER FORM HANDLER ======================================== */ function handleNewsletter() { const emailInput = document.getElementById('newsletter-email'); const email = emailInput.value; if (email) { // Create a nice toast notification showToast('Welcome to the Yogurt Culture community! 🎉'); emailInput.value = ''; } } /* ======================================== TOAST NOTIFICATION ======================================== */ function showToast(message) { // Remove existing toast const existingToast = document.querySelector('.toast-notification'); if (existingToast) existingToast.remove(); const toast = document.createElement('div'); toast.className = 'toast-notification'; toast.innerHTML = `
${message}
`; // Add animation keyframes if not exists if (!document.querySelector('#toast-styles')) { const style = document.createElement('style'); style.id = 'toast-styles'; style.textContent = ` @keyframes toastSlideIn { from { transform: translateX(-50%) translateY(100px); opacity: 0; } to { transform: translateX(-50%) translateY(0); opacity: 1; } } @keyframes toastSlideOut { from { transform: translateX(-50%) translateY(0); opacity: 1; } to { transform: translateX(-50%) translateY(100px); opacity: 0; } } `; document.head.appendChild(style); } document.body.appendChild(toast); // Auto-remove after 4 seconds setTimeout(() => { const inner = toast.querySelector('div'); if (inner) { inner.style.animation = 'toastSlideOut 0.3s ease-in forwards'; } setTimeout(() => toast.remove(), 350); }, 4000); } /* ======================================== MENU CARD HOVER INTERACTIONS ======================================== */ document.querySelectorAll('.menu-card-btn').forEach(btn => { btn.addEventListener('click', (e) => { e.stopPropagation(); showToast('Item added to your order! 🥄'); }); }); /* ======================================== COUNTER ANIMATION ======================================== */ function animateCounters() { const counters = document.querySelectorAll('.hero-stat-number'); counters.forEach(counter => { const target = counter.textContent; const hasPlus = target.includes('+'); const hasPercent = target.includes('%'); const numericValue = parseInt(target.replace(/[^0-9]/g, '')); if (isNaN(numericValue)) return; let current = 0; const duration = 2000; const increment = numericValue / (duration / 16); const timer = setInterval(() => { current += increment; if (current >= numericValue) { current = numericValue; clearInterval(timer); } let displayValue = Math.floor(current); if (numericValue >= 1000) { displayValue = Math.floor(current / 1000) + 'K'; } counter.textContent = displayValue + (hasPlus ? '+' : '') + (hasPercent ? '%' : ''); }, 16); }); } // Trigger counter animation when hero is visible const heroObserver = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { animateCounters(); heroObserver.unobserve(entry.target); } }); }, { threshold: 0.5 }); const heroSection = document.querySelector('.hero-stats'); if (heroSection) { heroObserver.observe(heroSection); }