1/** 2 * Niyyah Coffee â site data layer (single source of truth). 3 * 4 * This is a frontend-only project, so this module stands in for a CMS/API. 5 * Every piece of editable business content (cafes, ordering links, menu, 6 * social links, FAQs, integration config) lives here so it can be managed in 7 * one place and extended as the brand grows â new cafes, markets, menu 8 * categories â without touching markup or behavior code. 9 * 10 * ⢠Add a cafe: append to `cafes` (set `status` + `orderUrl`). 11 * ⢠Add a menu item: append to `menu.items` (set `category` + `availableLocations`). 12 * ⢠Change a link: edit the single `orderUrl` for that cafe â never duplicated. 13 */ 14(function (global) { 15 "use strict"; 16 17 var IMG = "assets/img"; 18 19 function mapsSearchUrl(address) { 20 return "https://www.google.com/maps/search/?api=1&query=" + encodeURIComponent(address); 21 } 22 23 /* Opens the verified Google Business listing (not a dropped pin). */ 24 function mapsPlaceUrl(name, placeId, lat, lng, googleId) { 25 var label = encodeURIComponent(name || "Niyyah Coffee"); 26 var gid = googleId ? "!16s%2Fg%2F" + googleId : ""; 27 return ( 28 "https://www.google.com/maps/place/" + label + "/@" + lat + "," + lng + ",17z/data=!3m1!4b1!4m6!3m5!1s" + 29 placeId + "!8m2!3d" + lat + "!4d" + lng + gid 30 ); 31 } 32 33 function cafeMapUrl(cafe) { 34 if (cafe.mapsPlace) { 35 var p = cafe.mapsPlace; 36 return mapsPlaceUrl(p.name, p.placeId, p.lat, p.lng, p.googleId); 37 } 38 return mapsSearchUrl(cafe.address); 39 } 40 41 var DATA = { 42 brand: { 43 name: "Niyyah Coffee", 44 tagline: "Where Coffee Meets Intention.", 45 intro: "Specialty coffee roasted, brewed, and served with intention. Discover signature drinks, order from a cafe near you, and bring Niyyah to your next event.", 46 logo: IMG + "/niyyah-logo.png", 47 phone: { display: "(317) 379-6038", href: "tel:3173796038" }, 48 email: "[email protected]", 49 intentionImage: IMG + "/the-name.jpg", 50 experienceImage: IMG + "/experience.jpg" 51 }, 52 53 /* Reused EXACTLY as linked on the original niyyahcoffee.com site. */ 54 social: { 55 instagram: "https://www.instagram.com/niyyahcoffee/", 56 instagramHandle: "@niyyahcoffee" 57 }, 58 59 /* 60 * Instagram feed â preview vs live (see assets/js/instagram.js). 61 * "preview" â real post permalinks below (no Meta token; static demo) 62 * "live" â server endpoint only (needs INSTAGRAM_ACCESS_TOKEN) 63 * "auto" â try live first, fall back to preview posts 64 * Swap to "live" once @niyyahcoffee authorizes the app. 65 */ 66 config: { 67 defaultCafeRegion: "us", 68 showCafeRegionToggle: true, 69 /* auto = try live feed, fall back to real @niyyahcoffee preview embeds until OAuth is done */ 70 instagramFeedMode: "auto", 71 /* Preview layout: "embed" (official Instagram widgets) or "grid" (link tiles). */ 72 instagramPreviewStyle: "embed", 73 instagramEndpoint: "/api/instagram", 74 instagramPreviewNote: 75 "Showing recent posts â live auto-updating feed unlocks after @niyyahcoffee connects once." 76 }, 77 78 /* Real @niyyahcoffee-owned post permalinks (fallback / preview). */ 79 instagramPreviewPosts: [ 80 { permalink: "https://www.instagram.com/p/DaVnybtlDdz/" }, 81 { permalink: "https://www.instagram.com/p/DaTTU2cBuDJ/" }, 82 { permalink: "https://www.instagram.com/p/DZ-7uGshK4D/" }, 83 { permalink: "https://www.instagram.com/p/DZYT7czBE5h/" }, 84 { permalink: "https://www.instagram.com/p/DWmBl3blPFu/" }, 85 { permalink: "https://www.instagram.com/p/DWXHJFVAQpv/" } 86 ], 87 88 /* 89 * Fallback only â preferred source is Netlify Blobs, filled daily by 90 * cron-refresh-instagram-feed.mjs (Reels, image posts, carousel collabs). 91 * Optional fields: mediaType ("VIDEO" | "IMAGE" | "CAROUSEL_ALBUM"), caption, timestamp. 92 */ 93 instagramCollabPosts: [ 94 { permalink: "https://www.instagram.com/reel/DaVzp2qRcz8/", mediaType: "VIDEO" }, 95 { permalink: "https://www.instagram.com/reel/DaRN6psIYCp/", mediaType: "VIDEO" }, 96 { permalink: "https://www.instagram.com/reel/DaG-GpyxQC_/", mediaType: "VIDEO" } 97 ], 98 99 /* 100 * Cafes. SkyTab ordering URLs are mapped by name (never randomly). 101 * `status`: "open" cafes can order online; "coming-soon" cafes show a 102 * disabled ordering state until a real `orderUrl` is added. 103 * 104 * Photos are the real cafe images provided by the client. 105 * `hours`/`phone` are intentionally null (no verified data yet) and render 106 * as graceful fallbacks â populate when confirmed; never faked. 107 */ 108 cafes: [ 109 { 110 id: "hub-and-spoke", 111 name: "Hub & Spoke", 112 region: "us", 113 market: "Fishers, Indiana", 114 status: "open", 115 image: IMG + "/cafe-hub-and-spoke.jpg", 116 address: "8100 E 106th St, Fishers, IN 46038", 117 hours: null, 118 phone: null, 119 description: "Inside the Hub & Spoke building on 106th St. Plenty of seating, good light, and right off I-69.", 120 orderUrl: "https://online.skytab.com/09c19d8965a9388fb2d1994ec695e295/order-settings", 121 mapsPlace: { 122 name: "Niyyah Coffee", 123 placeId: "0x8814b32ba78cd749:0x4956a64d7329618c", 124 lat: 39.9412978, 125 lng: -86.0259463, 126 googleId: "11v0jmtqgb" 127 },
128 get mapUrl() { return cafeMapUrl(this); } 129 }, 130 { 131 id: "broad-ripple", 132 name: "Broad Ripple", 133 region: "us", 134 market: "Indianapolis, Indiana", 135 status: "open", 136 image: IMG + "/cafe-broad-ripple.jpg", 137 address: "6160 N Rural St. Suite 1111, Indianapolis, IN 46220", 138 hours: null, 139 phone: null, 140 description: "Tucked inside the AYR Apartments at Glendale. Small and cozy â a solid spot for solo work or a quick catch-up.", 141 orderUrl: "https://online.skytab.com/2cfbaba9b169fece79575009acd56f50/order-settings", 142 mapsPlace: { 143 name: "Niyyah Coffee", 144 placeId: "0x886b5324746d3635:0x90f3418bc9800eb1", 145 lat: 39.867323, 146 lng: -86.1185051, 147 googleId: "11y86xt232" 148 }, 149 get mapUrl() { return cafeMapUrl(this); } 150 }, 151 { 152 id: "mccordsville", 153 name: "McCordsville", 154 region: "us", 155 market: "McCordsville, Indiana", 156 status: "open", 157 image: IMG + "/cafe-mccordsville.png", 158 address: "7441 N 600 W, McCordsville, IN 46055", 159 hours: null, 160 phone: null, 161 description: "Spacious and easy to find. Sit in, spread out, and stay a while.", 162 orderUrl: "https://online.skytab.com/168412b4cf74d6727e8c94ce13e742f1/order-settings", 163 mapsPlace: { 164 name: "Niyyah Coffee", 165 placeId: "0x886b355ccbffdb6f:0xaaba02c02bb4a8fa", 166 lat: 39.8907311, 167 lng: -85.9184082, 168 googleId: "11xv38b0fy" 169 }, 170 get mapUrl() { return cafeMapUrl(this); } 171 }, 172 { 173 id: "mass-ave", 174 name: "Mass Ave", 175 region: "us", 176 market: "Indianapolis, Indiana", 177 status: "open", 178 image: IMG + "/cafe-mass-ave.png", 179 address: "747 N College Ave, Suite B, Indianapolis, IN 46202", 180 hours: null, 181 phone: null, 182 description: "On the Mass Ave corridor near Bottleworks. Indianapolis's first deaf-owned coffee shop.", 183 orderUrl: "https://online.skytab.com/s/niyyahcoffeemassave", 184 mapsPlace: { 185 name: "Niyyah Coffee", 186 placeId: "0x886b513e8c785bf7:0xd59e53d659ee17c5", 187 lat: 39.7773467, 188 lng: -86.1449422, 189 googleId: "11zfsjzdph" 190 }, 191 get mapUrl() { return cafeMapUrl(this); } 192 }, 193 { 194 id: "fort-wayne", 195 name: "Fort Wayne", 196 region: "us", 197 market: "Fort Wayne, Indiana", 198 status: "coming-soon", 199 image: IMG + "/cafe-fort-wayne.jpg", 200 address: "202 W Berry St, Suite 110, Fort Wayne, IN 46802", 201 hours: null, 202 phone: null, 203 description: "Coming soon to downtown Fort Wayne on W Berry St. Details to follow as we get closer to opening.", 204 orderUrl: null, 205 get mapUrl() { return cafeMapUrl(this); } 206 }, 207 { 208 id: "markham", 209 name: "Markham", 210 region: "ca", 211 market: "Markham, Ontario", 212 status: "open", 213 image: IMG + "/cafe-markham.png", 214 address: "3322 Bur Oak Avenue, Unit 110, Markham, Ontario L6B 1P4", 215 hours: null, 216 phone: null, 217 description: "Our first Canadian cafe â specialty coffee with intention in Markham, Ontario.", 218 orderUrl: "https://www.ubereats.com/store-browse-uuid/06321d1b-bd00-5484-896b-a347deec8f9b?diningMode=DELIVERY", 219 mapsPlace: { 220 name: "Niyyah Coffee Canada", 221 placeId: "0x89d4d7faaf368cb7:0x7f563a529d462c9b", 222 lat: 43.9025757, 223 lng: -79.2343168, 224 googleId: "11ynfbh4jl" 225 }, 226 get mapUrl() { return cafeMapUrl(this); } 227 } 228 ], 229 230 pillars: [ 231 { 232 title: "Focus", 233 icon: "focus", 234 text: "Quiet enough to actually get something done. Good wifi, good coffee, no pressure to leave." 235 }, 236 { 237 title: "Meet", 238 icon: "meet", 239 text: "Low-key setting for a catch-up, a quick meeting, or a first date you're not sure about yet." 240 }, 241 { 242 title: "Hangout", 243 icon: "hangout", 244 text: "No agenda. Come for the drink, stay as long as you want." 245 } 246 ], 247 248 /* 249 * Menu â only REAL items documented on niyyahcoffee.com are included 250 * (the brand's signature drinks). No prices/categories are invented. 251 * `availableLocations: "all"` means every open cafe serves it; otherwise 252 * provide an array of cafe ids. The full, current menu lives on SkyTab, 253 * which the section links to for ordering. 254 */ 255 menu: { 256 categories: [ 257 { id: "signature", label: "Signature", icon: "star" }, 258 { id: "lattes", label: "Lattes", icon: "cup" }, 259 { id: "chai", label: "Chai", icon: "leaf" } 260 ], 261 items: [ 262 { 263 id: "zebra-latte", 264 name: "Zebra Latte", 265 category: "signature", 266 subcategory: "lattes", 267 description: "White and dark chocolate with a hint of vanilla. Rich, sweet, and one of our most ordered drinks.", 268 price: null, 269 image: IMG + "/menu-zebra-latte.png", 270 tags: ["Hot or Iced", "Chocolate"], 271 availableLocations: "all" 272 }, 273 { 274 id: "brown-suga-shook", 275 name: "Brown Suga Shook", 276 category: "signature", 277 subcategory: "lattes", 278 description: "Espresso, brown sugar, vanilla, and cinnamon â shaken with ice until foamy. Guests keep coming back for this one.", 279 price: null, 280 image: IMG + "/menu-brown-suga-shook.png", 281 tags: ["Iced", "Shaken"], 282 availableLocations: "all" 283 }, 284 { 285 id: "masala-chai", 286 name: "Authentic Masala Chai", 287 category: "signature", 288 subcategory: "chai", 289 description: "Homemade chai steeped with cardamom, fennel, and cinnamon. House-made, not from a powder.", 290 price: null, 291 image: IMG + "/menu-masala-chai.png", 292 tags: ["Hot or Iced", "House-made"], 293 availableLocations: "all" 294 } 295 ] 296 }, 297 298 faqs: [ 299 { 300 q: "How do I order online?", 301 a: "Pick a cafe in the Menu or Locations section, then tap âOrderâ â you'll be taken straight to that cafe's SkyTab ordering page for pickup." 302 }, 303 { 304 q: "Where can I find Niyyah Coffee?", 305 a: "We're open in Fishers (Hub & Spoke), Broad Ripple, McCordsville, and Mass Ave in Indiana, plus Markham, Ontario â switch to Canada in Our Cafes to see Markham. Fort Wayne (202 W Berry St) is coming soon." 306 }, 307 { 308 q: "Can you cater my event or pop up with the coffee cart?", 309 a: "Yes! Our coffee cart books for events of all sizes (2-hour minimum). Share your details through the âBook Our Cartâ form and we'll follow up to plan it with you." 310 }, 311 { 312 q: "What does âNiyyahâ mean?", 313 a: "Niyyah (pronounced Nee-Yah) means âintentionâ in Arabic. It's our intention to create a warm, welcoming atmosphere where people of all backgrounds can come together over a great cup of coffee." 314 }, 315 { 316 q: "What are your most popular drinks?", 317 a: "The Zebra Latte, Brown Suga Shook, and Masala Chai are always a good call. Check the Menu section to see what else we pour." 318 } 319 ] 320 }; 321 322 global.NIYYAH = DATA; 323})(window);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.