/** * ============================================================================= * SITE ASSETS — Single source of truth for all website media * ============================================================================= * * Change any image or video path HERE and the whole site updates. * Physical files live under /public — this file maps logical names → URLs. * * Folder layout (public/): * /images/logo/ — brand logo, hero banner videos * /images/dishes/ — menu dish photos & video posters * /images/animation/ — chef expressions, illustrations * /images/real/ — restaurant interior photos * /images/booking/ — table QR codes (askim + backaplan) * /videos/ — dish & promo videos */ /** Base folders served from /public */ export const MEDIA_FOLDERS = { images: '/images', dishes: '/images/dishes', logo: '/images/logo', animation: '/images/animation', real: '/images/real', booking: { askim: '/images/booking/askim', backaplan: '/images/booking/backaplan', }, videos: '/videos', } as const; /** Join a folder with a filename → public URL */ export function mediaUrl(folder: string, filename: string): string { return `${folder}/${filename}`; } /** * All named static assets used across the website. * Prefer these constants over hardcoded strings in components. */ export const SITE_ASSETS = { logo: { primary: mediaUrl(MEDIA_FOLDERS.logo, 'logo1.png'), alt: mediaUrl(MEDIA_FOLDERS.logo, 'logo.jpg'), chef: mediaUrl(MEDIA_FOLDERS.images, 'logo-shahi-chef.jpg'), chefIcon: mediaUrl(MEDIA_FOLDERS.images, 'logo-shahi-chef-icon.jpg'), }, hero: { restaurantInterior: mediaUrl(MEDIA_FOLDERS.images, 'hero-restaurant-interior.jpg'), restaurantInterior2: mediaUrl(MEDIA_FOLDERS.images, 'hero-restaurant-interior-2.jpg'), restaurantBg: mediaUrl(MEDIA_FOLDERS.images, 'hero-restaurant-bg.jpg'), }, banner: { mobileWebm: mediaUrl(MEDIA_FOLDERS.logo, 'banner_mobile-optimized.webm'), mobileMp4: mediaUrl(MEDIA_FOLDERS.logo, 'banner_mobile-optimized.mp4'), desktopMp4: mediaUrl(MEDIA_FOLDERS.logo, 'banner1.mp4'), originalMp4: mediaUrl(MEDIA_FOLDERS.logo, 'banner.mp4'), mobileOriginalMp4: mediaUrl(MEDIA_FOLDERS.logo, 'banner_mobile.mp4'), }, animation: { chefWink: mediaUrl(MEDIA_FOLDERS.animation, 'chef-wink.jpg'), chefSmile: mediaUrl(MEDIA_FOLDERS.animation, 'chef-smile.jpg'), chefNormal: mediaUrl(MEDIA_FOLDERS.animation, 'chef-normal.jpg'), biryaniIllust: mediaUrl(MEDIA_FOLDERS.animation, 'biryani-illust.jpg'), butterChickenIllust: mediaUrl(MEDIA_FOLDERS.animation, 'butter-chicken-illust.jpg'), jalebiIllust: mediaUrl(MEDIA_FOLDERS.animation, 'jalebi-illust.jpg'), kulfiIllust: mediaUrl(MEDIA_FOLDERS.animation, 'kulfi-illust.jpg'), naanIllust: mediaUrl(MEDIA_FOLDERS.animation, 'naan-illust.jpg'), spicesIllust: mediaUrl(MEDIA_FOLDERS.animation, 'spices-illust.jpg'), chefSequence: mediaUrl(MEDIA_FOLDERS.animation, 'chef_sequence.mp4'), creamBg: mediaUrl(MEDIA_FOLDERS.animation, 'cream_bg.mp4'), bannerOriginal: mediaUrl(MEDIA_FOLDERS.animation, 'banner_original.mp4'), }, dishes: { /** Default poster when a dish has no image/video */ defaultPoster: mediaUrl(MEDIA_FOLDERS.dishes, 'palak-paneer.jpg'), }, /** Global fallbacks used in onError handlers */ fallbacks: { logo: mediaUrl(MEDIA_FOLDERS.logo, 'logo1.png'), dishPoster: mediaUrl(MEDIA_FOLDERS.dishes, 'palak-paneer.jpg'), }, } as const; /** Restaurant interior gallery (real photos) — add/remove filenames here */ export const RESTAURANT_GALLERY = [ 'real1.jpg', 'real2.jpg', 'real3.jpg', 'real4.jpg', 'real5.jpg', 'real6.jpg', 'real7.jpg', 'real9.jpg', 'real11.jpg', 'real12.jpg', 'real13.jpg', 'real15.jpg', 'real16.jpg', 'real17.jpg', 'real18.jpg', 'real19.jpg', ] as const; export function restaurantPhoto(filename: string): string { return mediaUrl(MEDIA_FOLDERS.real, filename); } export function tableQrCode(branch: 'askim' | 'backaplan', tableNumber: string): string { const folder = MEDIA_FOLDERS.booking[branch]; const prefix = branch === 'askim' ? 'qr-askim' : 'qr-backaplan'; return mediaUrl(folder, `${prefix}-${tableNumber}.svg`); }