wedding-platform / src /lib /vendors.ts
imeshuek's picture
Upload src/lib/vendors.ts
0ebda10 verified
// Shared vendor data — single source of truth for all pages
// In production this would come from PostgreSQL + OpenSearch
export interface Vendor {
id: string
name: string
category: string
district: string
priceMin: number
priceMax: number
rating: number
reviews: number
description: string
features: string[]
image: string
tag: string
availability: { date: string; type: 'available' | 'booked' | 'blocked' }[]
packages: { id: string; name: string; price: number; guests: string; desc: string }[]
}
export const vendorData: Vendor[] = [
{
id: 'v1', name: 'The Grand Atrium', category: 'Venues', district: 'Colombo 7',
priceMin: 350000, priceMax: 800000, rating: 4.9, reviews: 127,
description: 'An exquisite colonial-era ballroom with soaring ceilings, crystal chandeliers, and manicured gardens. Perfect for grand celebrations up to 500 guests.',
features: ['Indoor & Outdoor', 'Bridal Suite', 'Valet Parking', 'Catering Kitchen', 'AV Equipment', 'Wheelchair Access', 'Garden Ceremony', 'Rain Backup'],
image: '🏛️', tag: 'Premium',
availability: [
{ date: '2026-12-14', type: 'available' }, { date: '2026-12-21', type: 'available' },
{ date: '2027-01-04', type: 'booked' }, { date: '2027-01-11', type: 'available' },
{ date: '2027-01-18', type: 'blocked' }, { date: '2027-01-25', type: 'available' },
],
packages: [
{ id: 'p1', name: 'Ceremony Only', price: 350000, guests: 'Up to 200', desc: '4-hour ceremony with garden access' },
{ id: 'p2', name: 'Full Day', price: 550000, guests: 'Up to 350', desc: '10-hour access including rehearsal dinner' },
{ id: 'p3', name: 'Grand Celebration', price: 800000, guests: 'Up to 500', desc: 'Full venue with garden, bridal suite, and next-day brunch' },
],
},
{
id: 'v2', name: 'Lens & Light Studio', category: 'Photographers', district: 'Colombo 3',
priceMin: 85000, priceMax: 250000, rating: 4.8, reviews: 94,
description: 'Award-winning wedding photography team specializing in candid moments and cinematic storytelling. Two photographers per event, 400+ edited images delivered within 30 days.',
features: ['2 Photographers', 'Drone Coverage', 'Same-Day Previews', 'Online Gallery', 'Photo Album', 'RAW Files Available'],
image: '📸', tag: 'Top Rated',
availability: [
{ date: '2026-12-14', type: 'available' }, { date: '2026-12-21', type: 'booked' },
{ date: '2027-01-04', type: 'available' }, { date: '2027-01-11', type: 'available' },
],
packages: [
{ id: 'p4', name: 'Ceremony Coverage', price: 85000, guests: 'N/A', desc: '4-hour ceremony coverage, 200+ edited images, online gallery' },
{ id: 'p5', name: 'Full Day', price: 150000, guests: 'N/A', desc: '10-hour coverage, 400+ edited images, USB drive, photo album' },
{ id: 'p6', name: 'Premium', price: 250000, guests: 'N/A', desc: 'Full day + pre-wedding shoot, drone, premium album, RAW files' },
],
},
{
id: 'v3', name: 'Bloom & Petal', category: 'Florists', district: 'Colombo 5',
priceMin: 50000, priceMax: 200000, rating: 4.9, reviews: 68,
description: 'Luxury floral design studio creating breathtaking arrangements from locally sourced and imported blooms. Specializing in romantic, garden-inspired aesthetics.',
features: ['Bridal Bouquet', 'Bridesmaids Bouquets', 'Ceremony Arch', 'Table Centerpieces', 'Aisle Decor', 'Setup & Teardown'],
image: '💐', tag: 'Popular',
availability: [
{ date: '2026-12-14', type: 'available' }, { date: '2026-12-21', type: 'available' },
{ date: '2027-01-04', type: 'available' }, { date: '2027-01-11', type: 'available' },
],
packages: [
{ id: 'p7', name: 'Essential', price: 50000, guests: 'Up to 100', desc: 'Bridal bouquet, 5 table centerpieces, basic ceremony decor' },
{ id: 'p8', name: 'Classic', price: 120000, guests: 'Up to 200', desc: 'Bridal + bridesmaids bouquets, ceremony arch, 15 centerpieces, aisle decor' },
{ id: 'p9', name: 'Luxury', price: 200000, guests: 'Up to 400', desc: 'Full venue floral design, premium imported blooms, chandelier installation' },
],
},
{
id: 'v4', name: 'Silver Spoon Catering', category: 'Catering', district: 'Colombo 4',
priceMin: 150000, priceMax: 500000, rating: 4.7, reviews: 112,
description: 'Fine dining catering with customizable menus spanning Sri Lankan, Western, Indian, and fusion cuisines. Farm-to-table ingredients, professional waitstaff, and full bar service.',
features: ['Custom Menu', 'Live Stations', 'Full Bar Service', 'Dietary Options', 'Waitstaff Included', 'Tasting Session'],
image: '🍽️', tag: 'Best Value',
availability: [
{ date: '2026-12-14', type: 'booked' }, { date: '2026-12-21', type: 'available' },
{ date: '2027-01-04', type: 'available' }, { date: '2027-01-11', type: 'available' },
],
packages: [
{ id: 'p10', name: 'Silver', price: 150000, guests: 'Up to 100', desc: '3-course plated dinner, 2 live stations, soft bar' },
{ id: 'p11', name: 'Gold', price: 300000, guests: 'Up to 250', desc: '5-course dinner, 4 live stations, full bar, champagne toast' },
{ id: 'p12', name: 'Platinum', price: 500000, guests: 'Up to 500', desc: '7-course dinner, 6 live stations, premium bar, caviar service' },
],
},
{
id: 'v5', name: 'Melody Makers', category: 'Music & DJ', district: 'Colombo 6',
priceMin: 45000, priceMax: 150000, rating: 4.6, reviews: 45,
description: 'Professional DJ and live band services for weddings. Extensive music library spanning all genres. MC services, dance floor lighting, and premium sound system included.',
features: ['DJ + MC', 'Live Band Option', 'Dance Floor', 'Lighting Rig', 'Wireless Mics', 'Song Requests'],
image: '🎵', tag: '',
availability: [
{ date: '2026-12-14', type: 'available' }, { date: '2026-12-21', type: 'available' },
{ date: '2027-01-04', type: 'available' }, { date: '2027-01-11', type: 'available' },
],
packages: [
{ id: 'p13', name: 'DJ Package', price: 45000, guests: 'N/A', desc: '4-hour DJ set, basic sound system, MC services' },
{ id: 'p14', name: 'Band + DJ', price: 95000, guests: 'N/A', desc: '3-piece band + DJ, premium sound, dance floor lighting' },
{ id: 'p15', name: 'Full Production', price: 150000, guests: 'N/A', desc: '5-piece band + DJ + percussionist, full lighting rig, fog machine' },
],
},
{
id: 'v6', name: 'Elegance Bridal', category: 'Bridal Wear', district: 'Colombo 7',
priceMin: 80000, priceMax: 350000, rating: 4.8, reviews: 56,
description: 'Luxury bridal atelier offering bespoke wedding gowns, bridesmaid dresses, and groomswear. In-house alterations, fabric sourcing from Italy and India, and personal stylist included.',
features: ['Bespoke Design', 'In-House Tailoring', 'Fabric Sourcing', 'Groomswear', 'Bridesmaids', 'Trial Fittings'],
image: '👗', tag: '',
availability: [
{ date: '2026-12-14', type: 'available' }, { date: '2026-12-21', type: 'available' },
],
packages: [
{ id: 'p16', name: 'Bridal Gown', price: 80000, guests: 'N/A', desc: 'Custom-designed bridal gown with 3 fitting sessions' },
{ id: 'p17', name: 'Bridal Suite', price: 200000, guests: 'N/A', desc: 'Bridal gown + groomswear + 3 bridesmaid dresses' },
{ id: 'p18', name: 'Complete Collection', price: 350000, guests: 'N/A', desc: 'Full wedding party attire, rehearsal dinner dress, going-away outfit' },
],
},
{
id: 'v7', name: 'Dream Decor', category: 'Decorators', district: 'Kandy',
priceMin: 60000, priceMax: 300000, rating: 4.7, reviews: 72,
description: 'Full-service wedding decorators creating magical atmospheres. Specializing in floral arches, fabric draping, lighting design, and themed installations.',
features: ['Ceremony Arch', 'Table Styling', 'Lighting Design', 'Fabric Draping', 'Theme Design', 'Setup & Teardown'],
image: '✨', tag: '',
availability: [
{ date: '2026-12-14', type: 'available' }, { date: '2026-12-21', type: 'available' },
],
packages: [
{ id: 'p19', name: 'Essential Decor', price: 60000, guests: 'Up to 100', desc: 'Ceremony arch, basic table styling, chair covers' },
{ id: 'p20', name: 'Classic', price: 150000, guests: 'Up to 250', desc: 'Full venue decor, lighting design, fabric draping, centerpieces' },
{ id: 'p21', name: 'Grand Design', price: 300000, guests: 'Up to 500', desc: 'Themed installation, premium florals, ceiling treatment, chandeliers' },
],
},
{
id: 'v8', name: 'Sunset Gardens', category: 'Venues', district: 'Galle',
priceMin: 280000, priceMax: 650000, rating: 4.9, reviews: 88,
description: 'Beachfront wedding venue with panoramic Indian Ocean views. Open-air pavilion, manicured tropical gardens, and a sunset ceremony deck. Capacity up to 300 guests.',
features: ['Beachfront', 'Sunset Deck', 'Open Pavilion', 'Bridal Suite', 'Parking', 'Rain Backup', 'Catering Kitchen'],
image: '🌅', tag: 'Premium',
availability: [
{ date: '2026-12-14', type: 'booked' }, { date: '2026-12-21', type: 'booked' },
{ date: '2027-01-04', type: 'available' }, { date: '2027-01-11', type: 'available' },
],
packages: [
{ id: 'p22', name: 'Sunset Ceremony', price: 280000, guests: 'Up to 150', desc: '4-hour sunset ceremony on the deck, garden access' },
{ id: 'p23', name: 'Full Day', price: 450000, guests: 'Up to 300', desc: '10-hour access including pavilion, garden, and beach deck' },
{ id: 'p24', name: 'Weekend Package', price: 650000, guests: 'Up to 300', desc: 'Full day + welcome dinner night before, accommodation included' },
],
},
]
export function getVendor(id: string): Vendor | undefined {
return vendorData.find(v => v.id === id)
}
export function getVendorsByCategory(cat: string): Vendor[] {
if (cat === 'All') return vendorData
return vendorData.filter(v => v.category === cat)
}
export function getVendorsByDistrict(district: string): Vendor[] {
if (district === 'All Districts') return vendorData
return vendorData.filter(v => v.district === district)
}
export const categories = ['All', 'Venues', 'Photographers', 'Florists', 'Catering', 'Music & DJ', 'Bridal Wear', 'Decorators']
export const districts = ['All Districts', 'Colombo 1-7', 'Colombo 3', 'Colombo 4', 'Colombo 5', 'Colombo 6', 'Colombo 7', 'Kandy', 'Galle', 'Negombo', 'Battaramulla']
export function searchVendors(q: string, cat: string, dist: string): Vendor[] {
return vendorData.filter(v => {
if (cat !== 'All' && v.category !== cat) return false
if (dist !== 'All Districts' && v.district !== dist) return false
if (q && !v.name.toLowerCase().includes(q.toLowerCase())) return false
return true
})
}
export function sortVendors(vendors: Vendor[], sortBy: string): Vendor[] {
switch (sortBy) {
case 'Rating': return [...vendors].sort((a, b) => b.rating - a.rating)
case 'Price: Low–High': return [...vendors].sort((a, b) => a.priceMin - b.priceMin)
case 'Price: High–Low': return [...vendors].sort((a, b) => b.priceMax - a.priceMax)
case 'Most Reviewed': return [...vendors].sort((a, b) => b.reviews - a.reviews)
default: return vendors
}
}