import React, { useState, useEffect } from 'react';
// --- DESIGN TOKENS & GLOBALS ---
const COLORS = {
primary: '#351C42', // Deep Velvet Purple
secondary: '#581D32', // Royal Burgundy
accent: '#123F35', // Emerald Velvet
gold: '#C5A46D', // Luxury Gold
ivory: '#F5F0E8', // Warm Ivory
plum: '#1B1420' // Midnight Plum
};
const PHONE_NUMBER = "60193226196";
// --- DATA LISTS ---
const HEAD_SPA_PACKAGES = [
{ id: 'hs1', name: 'Basic Head Spa', price: 'RM69', desc: 'A refreshing introductory head spa treatment for scalp health.' },
{ id: 'hs2', name: 'Sakura Head Spa', price: 'RM169', originalPrice: 'RM199', desc: 'Premium treatment with deep cleansing and relaxing massage.' },
{ id: 'hs3', name: 'Fuji Head Spa', price: 'RM249', desc: 'Luxurious extended treatment focusing on scalp rejuvenation and stress relief.' },
{ id: 'hs4', name: 'Imperial Head Spa', price: 'RM329', desc: 'The ultimate royal velvet experience. Complete scalp, neck, and shoulder therapy.' }
];
const MASSAGES = [
{ name: 'Urutan Full Body', price: 'RM100' },
{ name: 'Hot Stone Massage', price: 'RM160' },
{ name: 'Urutan Postnatal', price: 'RM130' },
{ name: 'Urutan Moden GenQi', price: 'RM150 / RM190' },
{ name: 'Sport Massage', price: 'RM160' },
{ name: 'Urutan Regangan', price: 'RM160' },
{ name: 'Urutan Remedi', price: 'RM160' },
{ name: 'Half Body Massage', price: 'RM65' }
];
const FACIALS = [
{ name: 'Facial Basic', price: 'RM50' },
{ name: 'Facial Deep Cleansing / Acne', price: 'RM100' },
{ name: 'Facial Dermabrasion', price: 'RM100' },
{ name: 'Facial Picolaser', price: 'RM150' },
{ name: 'Facial Dermapen', price: 'RM150' }
];
const AESTHETICS = [
{ name: 'Skin Booster', price: 'RM200' },
{ name: 'PRP', price: 'RM150' },
{ name: 'Mati Akar Jeragat', price: 'RM200' },
{ name: 'PRP + Mati Akar Jeragat', price: 'RM330' }
];
const SPA_POSTERS = [
"https://platform-bcl.bsb-cdn.com/media/2026/10/ls8CdrWlZ2nPLyiBX0Bsd2upiD8OfSIOOt6flhpx.jpg",
"https://platform-bcl.bsb-cdn.com/media/2026/10/IkNjQjRNLguN7Qwk2Ovn1x0ikFuiByc7vxdzKjUn.jpg",
"https://platform-bcl.bsb-cdn.com/media/2026/10/SQMcL4Ju4uyfoqQjrVKxBlTFBS7bhYHYkOnsjzut.jpg",
"https://platform-bcl.bsb-cdn.com/media/2026/10/p4dfA3tZErZDXxprGpGYExJCYQjJgt2lhcMtGV5B.jpg",
"https://platform-bcl.bsb-cdn.com/media/2026/10/C1Nn6LNrD0wXqurL629TPYctysLTClYpFGYmvQqQ.jpg"
];
const UNIFORM_CATEGORIES = [
"DSA Wanita — Pembantu Pembedahan Pergigian",
"Sister (SR/KUP)",
"Juruteknik Pergigian / Nurse / Sister / Matron",
"PPEM Wanita — Pembantu Penyediaan Makanan",
"Pembantu Pegawai Perubatan (PPP/MA)",
"Jururawat (SN/JM)",
"Inspektor Kesihatan Wanita (IK)",
"Pregnant / Maternity Uniform",
"Pembantu Perawatan Kesihatan (PPK)"
];
const UNIFORM_IMAGES = [
"https://platform-bcl.bsb-cdn.com/media/2026/10/gPHpD0ajEzqB7d1ejyL1eRA1CtXEy6VbBxVQRFnk.jpg",
"https://platform-bcl.bsb-cdn.com/media/2026/10/keGXJc60S5S8FoCbuXCWAIq3OWEZRHHVNwWU1Gua.jpg",
"https://platform-bcl.bsb-cdn.com/media/2026/10/uL0f5zXsU1koBT9weXDEiUKL3l8WCsdmHIpTbKJG.jpg",
"https://platform-bcl.bsb-cdn.com/media/2026/10/EOqNghyN6e1Cqjts5zUkrKwTXXanHjhaxwGNhVMi.jpg",
"https://platform-bcl.bsb-cdn.com/media/2026/10/7uSo1MQtdLbf8PyfBhW1srfNs7S9Gv6F6d5iLxje.jpg",
"https://platform-bcl.bsb-cdn.com/media/2026/10/MfLmlLpBDTBViICxq0tO2QMo3lXZYB3w7C3aYiKa.jpg",
"https://platform-bcl.bsb-cdn.com/media/2026/10/9sWQi5c7d9UHz14mwOYENEleQqZmTkn1WQdC2DVQ.jpg",
"https://platform-bcl.bsb-cdn.com/media/2026/10/S8bUNxuD4cc8BpUEFI4uVsxogPf3awYI6Yb9Wj7w.jpg",
"https://platform-bcl.bsb-cdn.com/media/2026/10/5mJ58bKLLD1WkiJ9h7zzVIjNqSPfOERIcCnlAgxk.jpg"
];
const MOCK_UNIFORMS = UNIFORM_CATEGORIES.map((cat, index) => ({
id: `u${index + 1}`,
name: `Uniform ${cat.split('—')[0].trim()}`,
category: cat,
price: 'TANYA HARGA',
colors: ['Putih', 'Biru', 'Hitam'],
sizes: ['XS', 'S', 'M', 'L', 'XL', 'XXL'],
image: UNIFORM_IMAGES[index]
}));
// --- COMPONENTS ---
// 1. Icons (Inline SVG to guarantee availability)
const IconChevronDown = () => ;
const IconMenu = () => ;
const IconX = () => ;
const IconWhatsApp = () => ;
// 2. Shared UI Components
const Button = ({ children, variant = 'primary', onClick, className = '' }) => {
const base = "px-6 py-3 rounded-md transition-all duration-300 font-medium tracking-wide";
const variants = {
primary: "bg-[#C5A46D] text-[#1B1420] hover:bg-yellow-600 shadow-lg",
secondary: "bg-transparent border-2 border-[#C5A46D] text-[#C5A46D] hover:bg-[#C5A46D] hover:text-[#1B1420]",
dark: "bg-[#351C42] text-[#F5F0E8] hover:bg-[#1B1420] shadow-md"
};
return (
);
};
const SectionHeading = ({ title, subtitle, dark = false }) => (
{title}
{subtitle &&
{subtitle}
}
);
// 3. Modals & Widgets
const FloatingWhatsApp = () => {
const [isOpen, setIsOpen] = useState(false);
const openWA = (type) => {
let msg = type === 'spa'
? "Hi Addinmedics Beauty Lounge, saya nak tanya tentang servis spa."
: "Hi Addinmedics Boutique, saya nak tanya tentang uniform.";
window.open(`https://wa.me/${PHONE_NUMBER}?text=${encodeURIComponent(msg)}`, '_blank');
setIsOpen(false);
};
return (
{isOpen && (
How can we help you?
)}
);
};
// 4. Main Views
export default function App() {
const [currentRoute, setCurrentRoute] = useState('home'); // home, beauty, uniform, admin
const [subRoute, setSubRoute] = useState('home'); // for specific pages within sections
const [selectedProduct, setSelectedProduct] = useState(null);
// Global styles injection for fonts
useEffect(() => {
const style = document.createElement('style');
style.innerHTML = `
@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@400;600;700&family=Inter:wght@300;400;500;600&display=swap');
body { font-family: 'Inter', sans-serif; background-color: ${COLORS.ivory}; color: #333; }
h1, h2, h3, h4, h5, h6, .font-serif { font-family: 'Cormorant Garamond', serif; }
.bg-velvet { background: linear-gradient(135deg, ${COLORS.primary} 0%, ${COLORS.plum} 100%); }
.text-gold { color: ${COLORS.gold}; }
.animate-fade-in { animation: fadeIn 0.8s ease-out forwards; }
@keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
.hide-scrollbar::-webkit-scrollbar { display: none; }
`;
document.head.appendChild(style);
return () => document.head.removeChild(style);
}, []);
const navigate = (main, sub = 'home', product = null) => {
window.scrollTo(0, 0);
setCurrentRoute(main);
setSubRoute(sub);
setSelectedProduct(product);
};
return (
{currentRoute !== 'home' && (
)}
{currentRoute === 'home' && }
{currentRoute === 'beauty' && (
)}
{currentRoute === 'uniform' && (
)}
{currentRoute === 'admin' && }
{currentRoute !== 'home' &&
}
);
}
// --- NAVIGATION & FOOTER ---
const Navbar = ({ currentRoute, navigate }) => {
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
const isBeauty = currentRoute === 'beauty';
const navLinks = isBeauty ? [
{ label: 'Home', route: 'home' },
{ label: 'Head Spa', route: 'head-spa' },
{ label: 'Massage', route: 'massage' },
{ label: 'Facials', route: 'facial' },
{ label: 'Packages', route: 'packages' },
{ label: 'All Treatments', route: 'all' },
] : [
{ label: 'Home', route: 'home' },
{ label: 'Catalogue', route: 'catalog' }
];
return (
);
};
const Footer = () => (
);
// --- 1. MAIN HOMEPAGE ---
const MainHome = ({ navigate }) => {
return (
{/* Background aesthetic overlay */}
WELCOME TO ADDINMEDICS
Two Distinct Experiences. One Trusted Brand.
Discover premium beauty and wellness experiences alongside professional healthcare uniforms, thoughtfully brought together under ADDINMEDICS.
{/* Card 1: Beauty */}
BEAUTY LOUNGE
Beauty • Confidence • Care
Experience luxurious head spa treatments, therapeutic massages, professional facial care and complete wellness services.
{/* Card 2: Uniform */}
BOUTIQUE
Your Nursing Medical Outfit
Discover professional healthcare uniforms designed for comfort, confidence and everyday performance.
{/* Hidden Admin Entry */}
);
};
// --- 2. BEAUTY LOUNGE SECTION ---
const BeautyLounge = ({ subRoute, navigate }) => {
useEffect(() => {
window.scrollTo(0, 0);
}, [subRoute]);
const renderContent = () => {
switch (subRoute) {
case 'home': return ;
case 'head-spa': return ;
case 'massage': return ;
case 'facial': return ;
case 'packages': return ;
case 'all': return ;
default: return ;
}
};
return (
{renderContent()}
);
};
const BeautyHome = ({ navigate }) => (
{/* Hero Section */}
ESCAPE INTO LUXURY.
REDISCOVER YOURSELF.
Premium Head Spa, Therapeutic Massage & Facial Experiences in Kuala Terengganu.
Nikmati pengalaman spa eksklusif yang direka untuk membantu anda berehat, menyegarkan diri dan memanjakan tubuh serta wajah.
{/* Featured Services Quick Links */}
{[
{ title: 'Japanese Head Spa', route: 'head-spa', img: 'https://images.unsplash.com/photo-1519823551278-64ac92734fb1?q=80&w=600&auto=format&fit=crop' },
{ title: 'Therapeutic Massage', route: 'massage', img: 'https://images.unsplash.com/photo-1544161515-4ab6ce6db874?q=80&w=600&auto=format&fit=crop' },
{ title: 'Facial & Aesthetics', route: 'facial', img: 'https://images.unsplash.com/photo-1570172619644-dfd03ed5d881?q=80&w=600&auto=format&fit=crop' }
].map((s, i) => (
navigate('beauty', s.route)} className="group cursor-pointer bg-white rounded-xl overflow-hidden shadow-lg hover:shadow-2xl transition-all">
))}
);
const BeautyHeadSpa = () => (
{/* Featured Promo (Editable via mock admin) */}
SPECIAL PROMOTION
Sakura Head Spa — Limited Time Offer
RM99 RM169
{HEAD_SPA_PACKAGES.map((pkg, idx) => (
{pkg.name}
{pkg.price}
{pkg.originalPrice &&
{pkg.originalPrice}
}
{pkg.desc}
))}
);
const BeautyMassage = () => (
{MASSAGES.map((m, i) => (
{m.name}
{m.price}
))}
);
const BeautyFacial = () => (
✨ SPECIAL: FREE LED TREATMENT WITH FACIAL SERVICES ✨
{/* Facials */}
Facial Services
{FACIALS.map((f, i) => (
{f.name}
{f.price}
))}
{/* Aesthetics */}
Aesthetic Services
* Consultations available to ensure the best care for your skin.
{AESTHETICS.map((a, i) => (
{a.name}
{a.price}
))}
);
const BeautyPackages = () => (
{SPA_POSTERS.map((poster, idx) => (
))}
);
const BeautyAllTreatments = () => {
const CATEGORIES = [
{
title: "Hair Spa & Saloon",
items: [
{ name: "Cuci Rambut Biasa (Add-On)", price: "RM15" },
{ name: "Mandian Kulit Kepala", price: "RM35" },
{ name: "Normal Treatment", price: "RM50" },
{ name: "Treatment Kelemumur", price: "RM70" },
{ name: "Treatment Keratin", price: "From RM80" },
{ name: "Treatment Keratin Brazilian", price: "From RM150" },
{ name: "Rebonding / Relaxing", price: "From RM50" },
{ name: "Warna / Highlight", price: "From RM50" },
{ name: "Warna + Bleaching", price: "From RM100" }
]
},
{
title: "Beauty & Wellness",
items: [
{ name: "Sauna", price: "RM50" },
{ name: "Back Body Acne Treatment", price: "RM100" },
{ name: "Medi (Tangan)", price: "RM35" },
{ name: "Pedic (Kaki)", price: "RM50" },
{ name: "Combo Medi + Pedic", price: "RM79" },
{ name: "Foot Spa & Relaxing", price: "RM100" },
{ name: "Totok Wajah", price: "RM80" },
{ name: "Body Scrub / Body Bleach", price: "RM100" }
]
},
{
title: "Lash & Brow Studio",
items: [
{ name: "Korean Eyelash Perm", price: "RM55" },
{ name: "Brow Laminating", price: "RM59" },
{ name: "Hybrid Dye / Henna + Mapping", price: "RM55" },
{ name: "Brow Bleach + Mapping", price: "RM55" },
{ name: "Brow Sculpture", price: "RM89" }
]
}
];
return (
{CATEGORIES.map((cat, idx) => (
{cat.title}
{cat.items.map((item, i) => (
-
{item.name}
{item.price}
))}
))}
* All prices are subject to change. Please contact us for the latest information and bookings.
);
};
// --- 3. UNIFORM BOUTIQUE SECTION ---
const UniformBoutique = ({ subRoute, navigate, product }) => {
useEffect(() => {
window.scrollTo(0, 0);
}, [subRoute, product]);
const renderContent = () => {
switch (subRoute) {
case 'home': return ;
case 'catalog': return ;
case 'product': return ;
default: return ;
}
};
return (
{renderContent()}
);
};
const UniformHome = ({ navigate }) => (
PROFESSIONAL UNIFORMS.
EXCEPTIONAL CONFIDENCE.
Premium Nursing & Medical Uniforms for Healthcare Professionals. Designed for everyday comfort and practicality.
Premium Fabric
Breathable, durable materials that withstand frequent washing.
Perfect Fit
Tailored designs offering professional appearance without restricting movement.
Ministry Standard
Compliant with healthcare standards across various departments.
);
const UniformCatalog = ({ navigate }) => (
{MOCK_UNIFORMS.map((u) => (
navigate('uniform', 'product', u)}>
{u.price}
{u.category.split('—')[0]}
{u.category}
))}
);
const UniformProductDetail = ({ product, navigate }) => {
const [selectedColor, setSelectedColor] = useState(product?.colors[0]);
const [selectedSize, setSelectedSize] = useState(product?.sizes[2]); // Default M
const [quantity, setQuantity] = useState(1);
if (!product) return Product not found.
;
const handleOrder = () => {
const msg = `Hi Addinmedics Boutique, saya berminat untuk order:\n\nProduk: ${product.category}\nWarna: ${selectedColor}\nSaiz: ${selectedSize}\nKuantiti: ${quantity} set\n\nBoleh saya dapatkan harga dan maklumat stok?`;
window.open(`https://wa.me/${PHONE_NUMBER}?text=${encodeURIComponent(msg)}`, '_blank');
};
return (
{/* Images */}
{/* Details */}
ADDINMEDICS BOUTIQUE
{product.category}
{product.price}
Color: {selectedColor}
{product.colors.map(c => (
))}
Size: {selectedSize}
{product.sizes.map(s => (
))}
* Final price and stock availability will be confirmed via WhatsApp by our team.
);
};
// --- 4. ADMIN MOCKUP SECTION ---
const AdminMockup = ({ navigate }) => {
const [activeTab, setActiveTab] = useState('beauty');
return (
Addinmedics Admin Dashboard
{activeTab === 'beauty' && (
Manage Beauty Treatments
Edit prices, update descriptions, and add new services.
)}
{activeTab === 'uniform' && (
)}
{activeTab === 'promos' && (
Active Promotions
Sakura Head Spa RM99
Active until Dec 31, 2026. Displaying on Head Spa page.
FREE LED Treatment with Facial
Currently active on Facial page.
)}
);
};