WhatsApp:6902 4131
Private Parties · Grand Openings · Birthdays · Community Events
Yoichi CATERING
Catering Service

Catering Service

Whether it's a family gathering, birthday party, grand opening or community event, we can arrange Chinese and Western dishes, snacks, desserts and refreshments to suit the occasion.

Occasions

Common Catering Scenarios

We adjust menu density and service style based on occasion, budget and headcount.

Private Party

Family Gathering

Perfect with shared platters and casual arrangements, letting guests focus on socialising.

Birthday

Birthday Party

Enhanced proportion of appetisers, desserts and refreshments for a festive dining experience.

Opening Ceremony

Grand Openings

Ideal for standing canapés and easy-to-grab bites, balancing socialising and brand hospitality.

Community Event

Community Events

A reliable, easy-to-distribute dining arrangement tailored to venue and participant structure.

Already know the date and headcount? Start organising your order now

You can add desired dishes to your cart on the ordering page, then go to the cart page to fill in delivery date, time, address and notes, and send the complete order via WhatsApp.

WhatsApp: 6902 4131

/* ===== SCROLL REVEAL ANIMATIONS ===== */ (function() { const revealElements = document.querySelectorAll('.reveal, .reveal-scale'); if (!revealElements.length) return; const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('visible'); observer.unobserve(entry.target); } }); }, { threshold: 0.15, rootMargin: '0px 0px -40px 0px' }); revealElements.forEach(el => observer.observe(el)); })(); /* ===== COUNTER ANIMATION ===== */ (function() { const counters = document.querySelectorAll('.about-highlight strong, .about-stats strong, .stat-number'); if (!counters.length) return; const animateCounter = (el) => { const text = el.textContent.trim(); const match = text.match(/^(\d+)([+]?.*)$/); if (!match) return; const target = parseInt(match[1]); const suffix = match[2] || ''; const duration = 1800; const start = performance.now(); const step = (now) => { const elapsed = now - start; const progress = Math.min(elapsed / duration, 1); const eased = 1 - Math.pow(1 - progress, 3); const current = Math.round(eased * target); el.textContent = current + suffix; if (progress < 1) requestAnimationFrame(step); }; requestAnimationFrame(step); }; const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { animateCounter(entry.target); observer.unobserve(entry.target); } }); }, { threshold: 0.5 }); counters.forEach(el => observer.observe(el)); })(); >
🌐 中文