1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,310542,e=>{"use strict";let t,r;var o=e.i(271329),n=e.i(947414),a=e.i(271645);e.i(105369);var i=e.i(965566);e.i(861200);var s=e.i(930551),l=e.i(260830),u=e.i(28327);function c(e,t){let r,o=()=>{let{currentTime:o}=t,n=(null===o?0:o.value)/100;r!==n&&e(n),r=n};return u.frame.update(o,!0),()=>(0,u.cancelFrame)(o)}var d=e.i(749652);let f=new WeakMap;function p({target:e,contentRect:t,borderBoxSize:r}){var o;null==(o=f.get(e))||o.forEach(o=>{o({target:e,contentSize:t,get size(){return function(e,t){if(t){let{inlineSize:e,blockSize:r}=t[0];return{width:e,height:r}}return e instanceof SVGElement&&"getBBox"in e?e.getBBox():{width:e.offsetWidth,height:e.offsetHeight}}(e,r)}})})}function h(e){e.forEach(p)}let g=new Set;var m=e.i(783920),y=e.i(368935);let b=()=>({current:0,offset:[],progress:0,scrollLength:0,targetOffset:0,targetLength:0,containerLength:0,velocity:0}),v={x:{length:"Width",position:"Left"},y:{length:"Height",position:"Top"}};function w(e,t,r,o){let n=r[t],{length:a,position:i}=v[t],s=n.current,l=r.time;n.current=e[`scroll${i}`],n.scrollLength=e[`scroll${a}`]-e[`client${a}`],n.offset.length=0,n.offset[0]=0,n.offset[1]=n.scrollLength,n.progress=(0,m.progress)(0,n.scrollLength,n.current);let u=o-l;n.velocity=u>50?0:(0,y.velocityPerSecond)(n.current-s,u)}var k=e.i(974780),S=e.i(625711),x=e.i(630040);let E={start:0,center:.5,end:1};function M(e,t,r=0){let o=0;if(e in E&&(e=E[e]),"string"==typeof e){let t=parseFloat(e);e.endsWith("px")?o=t:e.endsWith("%")?e=t/100:e.endsWith("vw")?o=t/100*document.documentElement.clientWidth:e.endsWith("vh")?o=t/100*document.documentElement.clientHeight:e=t}return"number"==typeof e&&(o=t*e),r+o}let C=[0,0],A=[[0,0],[1,1]],O={x:0,y:0},I=new WeakMap,T=new WeakMap,L=new WeakMap,P=e=>e===document.documentElement?window:e;function _(e,{container:o=document.documentElement,...n}={}){let a=L.get(o);a||(a=new Set,L.set(o,a));let i=function(e,t,r,o={}){return{measure:()=>(function(e,t=e,r){if(r.x.targetOffset=0,r.y.targetOffset=0,t!==e){let o=t;for(;o&&o!==e;)r.x.targetOffset+=o.offsetLeft,r.y.targetOffset+=o.offsetTop,o=o.offsetParent}r.x.targetLength=t===e?t.scrollWidth:t.clientWidth,r.y.targetLength=t===e?t.scrollHeight:t.clientHeight,r.x.containerLength=e.clientWidth,r.y.containerLength=e.clientHeight})(e,o.target,r),update:t=>{w(e,"x",r,t),w(e,"y",r,t),r.time=t,(o.offset||o.target)&&function(e,t,r){let{offset:o=A}=r,{target:n=e,axis:a="y"}=r,i="y"===a?"height":"width",s=n!==e?function(e,t){let r={x:0,y:0},o=e;for(;o&&o!==t;)if(o instanceof HTMLElement)r.x+=o.offsetLeft,r.y+=o.offsetTop,o=o.offsetParent;else if("svg"===o.tagName){let e=o.getBoundingClientRect(),t=(o=o.parentElement).getBoundingClientRect();r.x+=e.left-t.left,r.y+=e.top-t.top}else if(o instanceof SVGGraphicsElement){let{x:e,y:t}=o.getBBox();r.x+=e,r.y+=t;let n=null,a=o.parentNode;for(;!n;)"svg"===a.tagName&&(n=a),a=o.parentNode;o=n}else break;return r}(n,e):O,l=n===e?{width:e.scrollWidth,height:e.scrollHeight}:"getBBox"in n&&"svg"!==n.tagName?n.getBBox():{width:n.clientWidth,height:n.clientHeight},u={width:e.clientWidth,height:e.clientHeight};t[a].offset.length=0;let c=!t[a].interpolate,d=o.length;for(let e=0;e<d;e++){let r=function(e,t,r,o){let n=Array.isArray(e)?e:C,a=0;return"number"==typeof e?n=[e,e]:"string"==typeof e&&(n=(e=e.trim()).includes(" ")?e.split(" "):[e,E[e]?e:"0"]),(a=M(n[0],r,o))-M(n[1],t)}(o[e],u[i],l[i],s[a]);c||r===t[a].interpolatorOffsets[e]||(c=!0),t[a].offset[e]=r}c&&(t[a].interpolate=(0,S.interpolate)(t[a].offset,(0,x.defaultOffset)(o),{clamp:!1}),t[a].interpolatorOffsets=[...t[a].offset]),t[a].progress=(0,k.clamp)(0,1,t[a].interpolate(t[a].current))}(e,r,o)},notify:()=>t(r)}}(o,e,{time:0,x:b(),y:b()},n);if(a.add(i),!I.has(o)){let e,n=()=>{for(let e of a)e.measure()},i=()=>{for(let e of a)e.update(u.frameData.timestamp)},s=()=>{for(let e of a)e.notify()},l=()=>{u.frame.read(n,!1,!0),u.frame.read(i,!1,!0),u.frame.update(s,!1,!0)};I.set(o,l);let c=P(o);window.addEventListener("resize",l,{passive:!0}),o!==document.documentElement&&T.set(o,"function"==typeof o?(g.add(o),r||(r=()=>{let e={width:window.innerWidth,height:window.innerHeight},t={target:window,size:e,contentSize:e};
1g.forEach(e=>e(t))},window.addEventListener("resize",r)),()=>{g.delete(o),!g.size&&r&&(r=void 0)}):(!t&&"u">typeof ResizeObserver&&(t=new ResizeObserver(h)),(e=(0,d.resolveElements)(o)).forEach(e=>{let r=f.get(e);r||(r=new Set,f.set(e,r)),r.add(l),null==t||t.observe(e)}),()=>{e.forEach(e=>{let r=f.get(e);null==r||r.delete(l),(null==r?void 0:r.size)||null==t||t.unobserve(e)})})),c.addEventListener("scroll",l,{passive:!0})}let s=I.get(o);return u.frame.read(s,!1,!0),()=>{var e;(0,u.cancelFrame)(s);let t=L.get(o);if(!t||(t.delete(i),t.size))return;let r=I.get(o);I.delete(o),r&&(P(o).removeEventListener("scroll",r),null==(e=T.get(o))||e(),window.removeEventListener("resize",r))}}let W=new Map;function j({source:e,container:t=document.documentElement,axis:r="y"}={}){e&&(t=e),W.has(t)||W.set(t,{});let o=W.get(t);return o[r]||(o[r]=(0,s.supportsScrollTimeline)()?new ScrollTimeline({source:t,axis:r}):function({source:e,container:t,axis:r="y"}){e&&(t=e);let o={value:0},n=_(e=>{o.value=100*e[r].progress},{container:t,axis:r});return{currentTime:o,cancel:n}}({source:t,axis:r})),o[r]}function z(e){return e&&(e.target||e.offset)}var B=e.i(674008);function F(e,t){(0,i.warning)(!!(!t||t.current),`You have defined a ${e} options but the provided ref is not yet hydrated, probably because it's defined higher up the tree. Try calling useScroll() in the same component as the ref, or setting its \`layoutEffect: false\` option.`)}let H=()=>({scrollX:(0,o.motionValue)(0),scrollY:(0,o.motionValue)(0),scrollXProgress:(0,o.motionValue)(0),scrollYProgress:(0,o.motionValue)(0)});e.s(["useScroll",0,function({container:e,target:t,layoutEffect:r=!0,...o}={}){let i=(0,n.useConstant)(H);return(r?B.useIsomorphicLayoutEffect:a.useEffect)(()=>(F("target",t),F("container",e),function(e,{axis:t="y",...r}={}){var o,n;let a={axis:t,...r};return"function"==typeof e?(o=e,n=a,2===o.length||z(n)?_(e=>{o(e[n.axis].progress,e)},n):c(o,j(n))):function(e,t){if(e.flatten(),z(t))return e.pause(),_(r=>{e.time=e.duration*r[t.axis].progress},t);{let r=j(t);return e.attachTimeline?e.attachTimeline(r,e=>(e.pause(),c(t=>{e.time=e.duration*t},r))):l.noop}}(e,a)}((e,{x:t,y:r})=>{i.scrollX.set(t.current),i.scrollXProgress.set(t.progress),i.scrollY.set(r.current),i.scrollYProgress.set(r.progress)},{...o,container:(null==e?void 0:e.current)||void 0,target:(null==t?void 0:t.current)||void 0})),[e,t,JSON.stringify(o.offset)]),i}],310542)},591994,887652,e=>{"use strict";var t=e.i(271645),r=e.i(193521),o=e.i(737806),n=e.i(674008),a=e.i(271329),i=e.i(947414);function s(e){let r=(0,i.useConstant)(()=>(0,a.motionValue)(e)),{isStatic:n}=(0,t.useContext)(o.MotionConfigContext);if(n){let[,o]=(0,t.useState)(e);(0,t.useEffect)(()=>r.on("change",o),[])}return r}e.s(["useMotionValue",0,s],887652);var l=e.i(298549),u=e.i(28327);function c(e){return"number"==typeof e?e:parseFloat(e)}e.s(["useSpring",0,function(e,a={}){let{isStatic:i}=(0,t.useContext)(o.MotionConfigContext),d=(0,t.useRef)(null),f=s((0,l.isMotionValue)(e)?c(e.get()):e),p=(0,t.useRef)(f.get()),h=(0,t.useRef)(()=>{}),g=()=>{let e=d.current;e&&0===e.time&&e.sample(u.frameData.delta),m(),d.current=(0,r.animateValue)({keyframes:[f.get(),p.current],velocity:f.getVelocity(),type:"spring",restDelta:.001,restSpeed:.01,...a,onUpdate:h.current})},m=()=>{d.current&&d.current.stop()};return(0,t.useInsertionEffect)(()=>f.attach((e,t)=>i?t(e):(p.current=e,h.current=t,u.frame.update(g),f.get()),m),[JSON.stringify(a)]),(0,n.useIsomorphicLayoutEffect)(()=>{if((0,l.isMotionValue)(e))return e.on("change",e=>f.set(c(e)))},[f]),f}],591994)},63727,e=>{"use strict";let t=(0,e.i(475254).default)("briefcase",[["path",{d:"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16",key:"jecpp"}],["rect",{width:"20",height:"14",x:"2",y:"6",rx:"2",key:"i6l2r4"}]]);e.s(["Briefcase",0,t],63727)},212426,e=>{"use strict";let t=(0,e.i(475254).default)("dollar-sign",[["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",key:"1b0p4s"}]]);e.s(["DollarSign",0,t],212426)},178583,e=>{"use strict";let t=(0,e.i(475254).default)("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);e.s(["FileText",0,t],178583)},73526,e=>{"use strict";let t=(0,e.i(475254).default)("map",[["path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z",key:"169xi5"}],["path",{d:"M15 5.764v15",key:"1pn4in"}],["path",{d:"M9 3.236v15",key:"1uimfh"}]]);e.s(["Map",0,t],73526)},555436,e=>{"use strict";let t=(0,e.i(475254).default)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);e.s(["Search",0,t],555436)},514764,e=>{"use strict";let t=(0,e.i(475254).default)("send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);e.s(["Send",0,t],514764)},761911,e=>{"use strict";let t=(0,e.i(475254).default)("users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]]);e.s(["Users",0,t],761911)},37727,e=>{"use strict";let t=(0,e.i(475254).default)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}
1],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);e.s(["X",0,t],37727)},39312,e=>{"use strict";let t=(0,e.i(475254).default)("zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);e.s(["Zap",0,t],39312)},808341,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var o={cancelIdleCallback:function(){return i},requestIdleCallback:function(){return a}};for(var n in o)Object.defineProperty(r,n,{enumerable:!0,get:o[n]});let a="u">typeof self&&self.requestIdleCallback&&self.requestIdleCallback.bind(window)||function(e){let t=Date.now();return self.setTimeout(function(){e({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-t))}})},1)},i="u">typeof self&&self.cancelIdleCallback&&self.cancelIdleCallback.bind(window)||function(e){return clearTimeout(e)};("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},519083,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var o={ESCAPE_REGEX:function(){return i},htmlEscapeAttributeString:function(){return c},htmlEscapeJsonString:function(){return u}};for(var n in o)Object.defineProperty(r,n,{enumerable:!0,get:o[n]});let a={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},i=/[&><\u2028\u2029]/g,s={"&":"&",'"':""","'":"'","<":"<",">":">"},l=/[&"'<>]/g;function u(e){return e.replace(i,e=>a[e])}function c(e){return e.replace(l,e=>s[e])}},479520,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var o={default:function(){return w},handleClientScriptLoad:function(){return y},initScriptLoader:function(){return b}};for(var n in o)Object.defineProperty(r,n,{enumerable:!0,get:o[n]});let a=e.r(555682),i=e.r(190809),s=e.r(843476),l=a._(e.r(174080)),u=i._(e.r(271645)),c=e.r(742732),d=e.r(922737),f=e.r(808341),p=e.r(519083),h=new Map,g=new Set,m=e=>{let{src:t,id:r,onLoad:o=()=>{},onReady:n=null,dangerouslySetInnerHTML:a,children:i="",strategy:s="afterInteractive",onError:u,stylesheets:c}=e,f=r||t;if(f&&g.has(f))return;if(h.has(t)){g.add(f),h.get(t).then(o,u);return}let p=()=>{n&&n(),g.add(f)},m=document.createElement("script"),y=new Promise((e,t)=>{m.addEventListener("load",function(t){e(),o&&o.call(this,t),p()}),m.addEventListener("error",function(e){t(e)})}).catch(function(e){u&&u(e)});a?(m.innerHTML=a.__html||"",p()):i?(m.textContent="string"==typeof i?i:Array.isArray(i)?i.join(""):"",p()):t&&(m.src=t,h.set(t,y)),(0,d.setAttributesFromProps)(m,e),"worker"===s&&m.setAttribute("type","text/partytown"),m.setAttribute("data-nscript",s),c&&(e=>{if(l.default.preinit)return e.forEach(e=>{l.default.preinit(e,{as:"style"})});if("u">typeof window){let t=document.head;e.forEach(e=>{let r=document.createElement("link");r.type="text/css",r.rel="stylesheet",r.href=e,t.appendChild(r)})}})(c),document.body.appendChild(m)};function y(e){let{strategy:t="afterInteractive"}=e;"lazyOnload"===t?window.addEventListener("load",()=>{(0,f.requestIdleCallback)(()=>m(e))}):m(e)}function b(e){e.forEach(y),[...document.querySelectorAll('[data-nscript="beforeInteractive"]'),...document.querySelectorAll('[data-nscript="beforePageRender"]')].forEach(e=>{let t=e.id||e.getAttribute("src");g.add(t)})}function v(e){let{id:t,src:r="",onLoad:o=()=>{},onReady:n=null,strategy:a="afterInteractive",onError:i,stylesheets:d,...h}=e,{updateScripts:y,scripts:b,getIsSsr:v,appDir:w,nonce:k}=(0,u.useContext)(c.HeadManagerContext);k=h.nonce||k;let S=(0,u.useRef)(!1);(0,u.useEffect)(()=>{let e=t||r;S.current||(n&&e&&g.has(e)&&n(),S.current=!0)},[n,t,r]);let x=(0,u.useRef)(!1);if((0,u.useEffect)(()=>{if(!x.current){if("afterInteractive"===a)m(e);else"lazyOnload"===a&&("complete"===document.readyState?(0,f.requestIdleCallback)(()=>m(e)):window.addEventListener("load",()=>{(0,f.requestIdleCallback)(()=>m(e))}));x.current=!0}}
1,[e,a]),("beforeInteractive"===a||"worker"===a)&&(y?(b[a]=(b[a]||[]).concat([{id:t,src:r,onLoad:o,onReady:n,onError:i,...h,nonce:k}]),y(b)):v&&v()?g.add(t||r):v&&!v()&&m({...e,nonce:k})),w){if(d&&d.forEach(e=>{l.default.preinit(e,{as:"style"})}),"beforeInteractive"===a)if(!r)return h.dangerouslySetInnerHTML&&(h.children=h.dangerouslySetInnerHTML.__html,delete h.dangerouslySetInnerHTML),(0,s.jsx)("script",{nonce:k,dangerouslySetInnerHTML:{__html:`(self.__next_s=self.__next_s||[]).push(${(0,p.htmlEscapeJsonString)(JSON.stringify([0,{...h,id:t}]))})`}});else return l.default.preload(r,h.integrity?{as:"script",integrity:h.integrity,nonce:k,crossOrigin:h.crossOrigin}:{as:"script",nonce:k,crossOrigin:h.crossOrigin}),(0,s.jsx)("script",{nonce:k,dangerouslySetInnerHTML:{__html:`(self.__next_s=self.__next_s||[]).push(${(0,p.htmlEscapeJsonString)(JSON.stringify([r,{...h,id:t}]))})`}});"afterInteractive"===a&&r&&l.default.preload(r,h.integrity?{as:"script",integrity:h.integrity,nonce:k,crossOrigin:h.crossOrigin}:{as:"script",nonce:k,crossOrigin:h.crossOrigin})}return null}Object.defineProperty(v,"__nextScript",{value:!0});let w=v;("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},618566,(e,t,r)=>{t.exports=e.r(976562)},539384,e=>{"use strict";e.s(["tpServices",0,[{slug:"full-stack-saas",chapter:"02.1",label:"Full-Stack SaaS",headline:"Website + iPhone app + admin - shipped together.",tagline:"Launch a revenue-ready product, not a pitch deck.",pitch:"We design, build, and ship full-stack products from zero: a fast website, an iPhone + Android app, an admin dashboard for your team, paid subscriptions, AI features, and live analytics. Everything talks to everything else - no bolt-ons.",features:["Website + iPhone app + Android app","Admin dashboard for your team","Paid subscriptions (Stripe) and email (Resend) wired","AI built in - chatbot for customers, AI tools for staff","Live analytics + uptime monitoring","Mobile-first, fast on every device","Submitted to App Store + Google Play by us"],priceFrom:"$5,000",priceDetail:"/month",priceMode:"subscription",primaryCta:{label:"Embed the team",href:"/book"},checkoutTierId:"tp-embedded",proofCaseStudies:["nourish-ai","shelf-life","plate-iq","ww-food-beverage"],stackTags:["Web","iOS","Android","AI","Stripe"],heroImage:"/images/portfolio/portfolio-nourish-ai.png",accent:{from:"#F97316",to:"#FB923C"}},{slug:"hospitality-booking",chapter:"02.2",label:"Hospitality & Booking",headline:"Take bookings while you're on the water.",tagline:"Adventure operators, restaurants, and lodging properties need systems that earn money while you run the business.",pitch:"We connect your real-world tools - your booking system, your point-of-sale, your property manager - into a clean, branded checkout your customers actually finish on a phone. If you already use Ventrata, Guesty, or Toast, we plug straight in. If not, we'll help you choose.",features:["Plug into your existing booking, POS, or property-manager","Branded checkout that converts on mobile","Off-season-aware CTAs (sites adapt when you're closed)","Abandoned-cart + confirmation emails","Gift cards, deposits, partial refunds - handled","Daily ops report sent to you and your team","44-pixel touch targets - every button is thumb-sized"],priceFrom:"$2,500",priceDetail:"/month",priceMode:"subscription",primaryCta:{label:"Start Growth OS",href:"/book"},checkoutTierId:"tp-sprint",proofCaseStudies:["restaurant-management","dine-castle-rock"],stackTags:["Web","Booking","Stripe","Mobile-first"],heroImage:"/images/portfolio/portfolio-dine-castle-rock.jpg",accent:{from:"#3BF5C4",to:"#10b981"}},{slug:"tourism-directories",chapter:"02.3",label:"Regional Tourism Platforms",headline:"Launch a directory platform in 10 days.",tagline:"A battle-tested platform you can customize and ship for any city or region.",pitch:"We've launched 16 regional tourism + shop + dine directory sites. Each one comes with a paid-listing flow so you collect $99/mo from every business on the platform, conversion tracking out of the box, a unique color palette per region, and a moderation admin. The one-time launch fee gets you a running platform in 10 business days.",features:["Custom directory site for your region","Paid-listing checkout - you collect $99/mo per business","Unique color palette + brand per region","Admin to approve listings + handle claim requests","Conversion tracking (Google Analytics + Google Ads)","SEO-tuned internal linking","Separate database per region - no shared data"],priceFrom:"$14,999",priceDetail:"one-time launch deposit",priceMode:"hybrid",primaryCta:{label:"Launch a region",href:"/pricing"},checkoutTierId:"tp-tourism-launch",secondaryCheckout:{tierId:"tp-tourism-listing",label:"Or list your business on an existing platform",priceLabel:"$99/mo"},proofCaseStudies:["visit-castle-rock","shop-castle-rock","dine-castle-rock"],stackTags:["Web","Stripe","Analytics"],heroImage:"/images/portfolio/portfolio-visit-castle-rock.jpg",accent:{from:"#8b5cf6",to:"#c084fc"}},{slug:"restaurant-systems",chapter:"02.4",label:"Restaurant & Food Brand Systems",headline:"Menus that update everywhere. Apps your regulars actually download.",tagline:"Everything a restaurant needs to run on autopilot - plus the iPhone + Apple Watch app that brings the regulars back.",pitch:"A proven foundation for food brands: full menu management, off-season-aware website, an iPhone app with an Apple Watch companion, push notifications, gift cards, and a staff admin. Shipped across multiple restaurant brands doing seven figures a year.",features:["Website
1+ iPhone app + Apple Watch app","Easy menu editor - categories, modifiers, photos, prices","Off-season logic - site adapts when you're closed","Daily named specials (Margarita Monday, Taco Tuesday)","Push notifications to bring regulars back","Connects to Toast POS if you have it","Branded gift cards (Apple Pay supported)"],priceFrom:"$2,500",priceDetail:"/month",priceMode:"subscription",primaryCta:{label:"Start Growth OS",href:"/book"},checkoutTierId:"tp-sprint",proofCaseStudies:["restaurant-management","nourish-ai"],stackTags:["Web","iOS","Apple Watch","Stripe"],heroImage:"/images/portfolio/portfolio-restaurant-management.png",accent:{from:"#FF6B35",to:"#FF9F4A"}},{slug:"ops-dashboards",chapter:"02.5",label:"Custom Operations Dashboards",headline:"Built for the way your team actually works.",tagline:"The internal software no off-the-shelf vendor would ever make for you - because it's yours.",pitch:"From multi-document land-development platforms to investor portfolios with live financial charts - we build custom internal tools that match exactly how your team already works. No forced templates. No per-seat license fees. You own everything.",features:["Tailored to your data and your team's workflow","Secure logins with team roles and account protection","Live charts + one-click printable PDFs","Document tracking with auto-update + drift detection","Slack / SMS alerts when something needs attention","Photo + document galleries with shareable links","Big-screen presentation mode (plug into a TV)"],priceFrom:"$5,000",priceDetail:"/month",priceMode:"subscription",primaryCta:{label:"Embed the team",href:"/book"},checkoutTierId:"tp-embedded",proofCaseStudies:["restaurant-management"],stackTags:["Web","Live Charts","PDF Export"],heroImage:"/images/portfolio/portfolio-restaurant-management.png",accent:{from:"#3b82f6",to:"#60a5fa"}},{slug:"ai-automations",chapter:"02.6",label:"AI Automations & Chatbots",headline:"Cheap AI for customers. Premium AI for your team.",tagline:"The cost-sane way to put Claude in your business - fast and nearly free for customers, top-tier quality for the work that matters.",pitch:"Two AI models working together - a fast, low-cost one answering customer questions on your site, and a premium one writing emails, summarizing reports, or drafting proposals for your team. Trained on your own business data - your menus, your hours, your FAQs - so answers are accurate, not generic.",features:["Customer chatbot trained on your business data","AI tools for your team (email drafts, summaries, outreach)","Slack or SMS handoff when a real person is needed","Conversation history (with cookie consent)","Bulk outreach engine with safety limits","Predictable monthly cost - no per-message billing surprises","Always running on Anthropic's latest Claude models"],priceFrom:"$2,500",priceDetail:"/month",priceMode:"subscription",primaryCta:{label:"Start Growth OS",href:"/book"},checkoutTierId:"tp-sprint",proofCaseStudies:["nourish-ai","calm-chat","visit-castle-rock"],stackTags:["Claude","Web","Email"],heroImage:"/images/portfolio/portfolio-eldershield360.jpg",accent:{from:"#ec4899",to:"#f472b6"}}]])},991082,e=>{"use strict";let t=/ca[nñ]on\s*city|canoncity|fremont|royal\s*gorge|royalgorge|\brgrr\b|\brgr\b|\brafting\b|\bzip\s*-?lin(e|es|ing)\b|\brgzt\b|vacation\s*rentals?|\brgvr\b|white\s*water|\bwwbg\b|rooftop|ranch\s*(&|and)?\s*resort|fireworks|\bcanonfw\b|ww\s*food|wwfoodbev|\bthe\s+edge\b|theedgezip|colorado[-\s]*built|built\s+in\s+colorado|based\s+in\s+colorado|\bour\s+own\s+restaurants?\b|yolanda|tacos-?y\b|epic\s*adventures|\brgea\b|gorge\s*(guide|tourism)/i;function r(e){return t.test(JSON.stringify(e)??"")}e.s(["namesLocal",0,r,"withoutLocal",0,function(e){return e.filter(e=>!r(e))}])}]);
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.