PageSourceSearch

https://www.denovo.dev/_next/static/chunks/86742-904b08f25ef402ae.js?dpl=dpl_81E88jf3jRXbDrFKSMaq9tLbHw3g

js denovo.dev collected 2026-10-04 11:48:18 UTC 14,184 bytes, 1 lines download raw bytes

1!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="a988265d-9985-44d7-b969-13f1a73ce48f",e._sentryDebugIdIdentifier="sentry-dbid-a988265d-9985-44d7-b969-13f1a73ce48f")}catch(e){}}();"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[86742],{65142:(e,t,s)=>{s.d(t,{p:()=>o});var r=s(95155),a=s(12115),n=s(64269);let o=a.forwardRef((e,t)=>{let{className:s,type:a,...o}=e;return(0,r.jsx)("input",{ref:t,type:a,"data-slot":"input",className:(0,n.cn)("flex h-11 md:h-10 w-full min-w-0 rounded-lg border border-border bg-surface px-4 py-2 text-base md:text-sm text-foreground placeholder:text-muted-foreground shadow-sm transition-all duration-200","file:text-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium","disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50","focus-visible:outline-none focus-visible:border-border-strong focus-visible:ring-2 focus-visible:ring-ring","aria-invalid:ring-destructive/20 aria-invalid:border-destructive",s),...o})});o.displayName="Input"},67221:(e,t,s)=>{s.r(t),s.d(t,{LiteYouTube:()=>x,preloadYouTube:()=>m,youTubeThumbUrl:()=>u});var r=s(95155),a=s(12115),n=s(15239),o=s(47650),i=s(85921),l=s(64269);let d="https://i.ytimg.com",c="https://www.youtube.com";function u(e){return"".concat(d,"/vi/").concat(e,"/hqdefault.jpg")}function m(e){(0,o.preconnect)(d),(0,o.preconnect)(c),(0,o.preload)(u(e),{as:"image",fetchPriority:"high"})}function x(e){let{videoId:t,title:s="Video",className:m}=e,[x,h]=(0,a.useState)(!1),f=(0,a.useCallback)(()=>h(!0),[]);(0,o.preconnect)(d),(0,o.preconnect)(c);let p=u(t),b="".concat(c,"/embed/").concat(t,"?autoplay=1");return(0,r.jsx)("div",{className:(0,l.cn)("relative w-full bg-black",m),style:{paddingBottom:"56.25%"},children:x?(0,r.jsx)("iframe",{className:"absolute inset-0 w-full h-full",src:b,title:s,frameBorder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",referrerPolicy:"strict-origin-when-cross-origin",allowFullScreen:!0}):(0,r.jsxs)("button",{type:"button",onClick:f,className:"absolute inset-0 w-full h-full cursor-pointer group","aria-label":"Play ".concat(s),children:[(0,r.jsx)(n.default,{src:p,alt:s,fill:!0,priority:!0,className:"object-cover",sizes:"(max-width: 768px) 100vw, 800px"}),(0,r.jsx)("div",{className:"absolute inset-0 bg-black/20 group-hover:bg-black/30 transition-colors"}),(0,r.jsx)("div",{className:"absolute inset-0 flex items-center justify-center",children:(0,r.jsx)("div",{className:"w-16 h-16 rounded-full bg-red-600 flex items-center justify-center shadow-lg group-hover:scale-110 transition-transform",children:(0,r.jsx)(i.A,{className:"w-7 h-7 text-white ml-1",fill:"white"})})})]})})}},86742:(e,t,s)=>{s.r(t),s.d(t,{OutOfCreditsModal:()=>F});var r=s(95155),a=s(12115),n=s(1213),o=s(3998),i=s(51834),l=s(65142),d=s(68854),c=s(35299),u=s(56154),m=s(80598),x=s(20027),h=s(78519),f=s(67221),p=s(18720),b=s(1161),g=s(11647),v=s(4831),j=s(84504),N=s(99374),w=s(99259);let y=[25,50,100,200],k=Math.floor(0x5f5e0ff/N.aF),C=[25,50,100];function F(e){var t,s,F;let{isOpen:S,onClose:$,context:M,isStartupKit:E,returnToChatId:A}=e,[T,U]=(0,a.useState)(!1),[_,I]=(0,a.useState)(50),[Y,P]=(0,a.useState)(!1),[O,z]=(0,a.useState)(null),[B,L]=(0,a.useState)("25"),D=(0,n.d4)(e=>e.credits.subscriptionTier),{referral:J}=(0,v.O)(),K={priceInCents:_*N.aF,pricePerCredit:N.aF},R=_>=N.Jv&&_<=k,q=!!(null==O?void 0:O.usdPricingEnabled)&&!!(null==O?void 0:O.ondemandEnabled),G=a.useCallback(async()=>{try{let e=await fetch("/api/credits/balance",{cache:"no-store"}),t=await e.json().catch(()=>({}));if(e.ok&&(null==t?void 0:t.usage)){let e=t.usage;if(z(e),null!=e.ondemandCapUsd){let t=Math.max(e.ondemandCapUsd+25,Math.ceil(e.ondemandUsedUsd+25));L(String(e.ondemandEnabled?t:Math.round(e.ondemandCapUsd)))}else L("25")}else z(null)}catch(e){z(null)}},[]);a.useEffect(()=>{S&&G()},[S,G]);let V=E?"Your first Startup Kit was free. Additional Startup Kits cost 30 credits each.":void 0,H=async e=>{U(!0);try{let t=await (0,b.f)({credits:e,returnToChatId:A});if(!t.success||!t.url){let e=t.error||"Failed to create checkout";throw Error(e)}window.location.href=t.url}catch(e){p.toast.error(e.message||"Failed to start checkout"),U(!1)}},Q=async e=>{if(!Number.isFinite(e)||e<=0)return void p.toast.error("Enter a monthly limit greater than $0");U(!0);try{let t=await fetch("/api/credits/ondemand",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:!0,monthlyCapUsd:e,consentToCharges:!0})}),s=await t.json().catch(()=>({}));if(!t.ok)throw Error((null==s?void 0:s.error)||"Failed to update on-demand usage");p.toast.success(q?"Limit raised to $".concat(e.toFixed(2),"/mo — keep building"):"On-demand billing enabled — capped at $".concat(e.toFixed(2),"/mo")),$()}catch(e){p.toast.error(e.message||"Failed to update on-demand usage")}finally{U(!1)}},W=async()=>{U(!0);try{let e=await (0,j.q)({...J?{referral:J}:{},...A?{returnToChatId:A}:{}},{source:"out_of_credits_modal"});if(!e.success||!e.url)throw Error(e.error||"Failed to create checkout session");window.location.href=e.url}catch(e){p.toast.error(e.message||"Failed to start checkout"),U(!1)}};if(a.useEffect(()=>{S||(P(!1),I(50),z(null))},[S]),"pro"!==D&&"pro_plus"!==D){let e=null!=(t=null==O?void 0:O.topupUsd)?t:0,s=e>.01;return(0,r.jsx)(i.lG,{open:S,onOpenChange:$,children:(0,r.jsxs)(i.Cf,{className:"sm:max-w-[520px] w-[calc(100%-1.5rem)] p-0 gap-0 grid-rows-none flex flex-col max-h-[90vh] overflow-hidden",children:[(0,r.jsx)("div",{className:"shrink-0 border-b border-border bg-background px-6 pt-8 pb-5",children:(0,r.jsxs)("div",{className:"flex flex-col items-center text-center",children:[(0,r.jsx)("div",{className:"inline-flex items-center justify-center w-12 h-12 rounded-full bg-foreground mb-3",children:(0,r.jsx)(d.A,{className:"w-6 h-6 text-background"})}),(0,r.jsx)(i.L3,{className:"text-2xl md:text-3xl font-serif font-semibold text-foreground mb-1",children:E?"Start your business":s?"You’re out of included usage":"You’ve used your free credits"}),(0,r.jsx)(i.rr,{className:"text-sm md:text-base text-muted-foreground max-w-sm",children:s?"You still have $".concat(e.toFixed(2)," of top-up balance — it never expires and keeps working for chat and builds without a subscription. Subscribing adds the monthly allowance, hosting, and Auto Mode."):V||M||"Subscribe to Bu
1ild and I’ll replace every locked tile below with your real business."})]})}),(0,r.jsxs)("div",{className:"flex-1 min-h-0 overflow-y-auto px-6 py-5",children:[(0,r.jsx)("div",{className:"mb-5 rounded-xl border border-border overflow-hidden shadow-sm",children:(0,r.jsx)(f.LiteYouTube,{videoId:"xV_qi_x10hM",title:"See Denovo in action"})}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground text-center mb-4",children:"Your logo, pitch deck, business plan, live site — plus auto-posting to your socials and AI-sourced first customers."}),(0,r.jsx)("div",{className:"rounded-xl border-2 border-foreground bg-surface-2 p-4",children:(0,r.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,r.jsx)("span",{className:"text-lg font-semibold text-foreground",children:"Build Plan"}),(0,r.jsx)(g.E,{className:"bg-foreground text-background border-0 hover:bg-foreground/90",children:"Most Popular"})]}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground mt-1",children:"Build, iterate, and launch"})]}),(0,r.jsxs)("div",{className:"text-right shrink-0",children:[(0,r.jsx)("div",{className:"text-2xl font-bold text-foreground",children:"$25"}),(0,r.jsx)("div",{className:"text-xs text-muted-foreground",children:"/month"})]})]})})]}),(0,r.jsxs)("div",{className:"shrink-0 border-t border-border bg-background px-6 py-5",children:[(0,r.jsx)(o.$,{onClick:W,disabled:T,className:"w-full h-12 text-base font-semibold bg-foreground text-background hover:bg-foreground
1/90",children:T?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c.A,{className:"w-5 h-5 mr-2 animate-spin"}),"Redirecting to checkout..."]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(u.A,{className:"w-5 h-5 mr-2"}),"Subscribe to Build"]})}),(0,r.jsx)("p",{className:"text-center text-xs text-muted-foreground mt-3",children:"Secure checkout via Stripe. Cancel anytime."}),!E&&(0,r.jsxs)("div",{className:"mt-4 pt-4 border-t border-border",children:[(0,r.jsx)("p",{className:"text-xs text-muted-foreground text-center mb-2",children:"Prefer no subscription? Add a one-time top-up — it never expires and works for chat and builds."}),(0,r.jsx)("div",{className:"flex gap-2",children:y.slice(0,3).map(e=>(0,r.jsxs)(o.$,{variant:"outline",size:"sm",className:"flex-1",disabled:T,onClick:()=>void H(e),children:["$",(e*N.aF/100).toFixed(0)," top-up"]},e))})]}),(0,r.jsx)("button",{onClick:$,className:"w-full mt-2 text-center text-sm text-muted-foreground hover:text-foreground transition-colors",children:"Maybe later"})]})]})})}let X=Math.max(0,Number(B)||0),Z=(0,w.zv)({kind:"usage"}),ee=X>0,et=null!=(s=null==O?void 0:O.ondemandCapUsd)?s:0;return(0,r.jsx)(i.lG,{open:S,onOpenChange:$,children:(0,r.jsxs)(i.Cf,{className:"sm:max-w-[500px] max-h-[90vh] overflow-y-auto",children:[(0,r.jsxs)(i.c7,{children:[(0,r.jsx)("div",{className:"flex items-center justify-center mb-4",children:(0,r.jsx)("div",{className:"rounded-full bg-warning/10 p-4",children:q?(0,r.jsx)(m.A,{className:"size-8 text-warning"}):(0,r.jsx)(u.A,{className:"size-8 text-warning"})})}),(0,r.jsx)(i.L3,{className:"text-center text-2xl font-serif",children:q?"You’ve reached your monthly limit":E?"Top Up for More Kits":"You’re out of usage"}),(0,r.jsx)(i.rr,{className:"text-center text-base",children:q?"You’ve used $".concat((null!=(F=null==O?void 0:O.ondemandUsedUsd)?F:0).toFixed(2)," of your $").concat(et.toFixed(2),"/mo on-demand limit. Raise it to keep building."):V||M||("pro"===D?"".concat(Z.limit," ").concat(Z.other):"Keep building by turning on auto-charging, or add a one-time top-up. Or wait for your usage to reset next month.")})]}),"pro"===D&&(0,r.jsx)("a",{href:"/subscription",className:"block p-4 rounded-xl border-2 border-primary bg-primary/5 hover:bg-primary/10 transition-colors",children:(0,r.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsxs)("p",{className:"font-semibold text-foreground",children:["Move to Launch, $",N.on.monthlyUsd,"/mo"]}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground mt-0.5",children:Z.launch})]}),(0,r.jsx)("span",{className:"shrink-0 text-xs font-semibold text-primary",children:"Upgrade"})]})}),(0,r.jsxs)("div",{className:"p-4 rounded-xl border-2 border-foreground bg-surface-2 space-y-3",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(x.A,{className:"size-5 text-foreground"}),(0,r.jsx)("p",{className:"font-semibold text-foreground",children:q?"Raise your monthly limit":"Enable on-demand billing"})]}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"Keep going without interruptions. You\\u2019re charged only after you turn this on, in increments once usage reaches about $20, and never above the monthly cap you set."}),(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{htmlFor:"ondemand-cap",className:"text-sm text-muted-foreground block mb-1.5",children:"Monthly limit (USD)"}),(0,r.jsx)(l.p,{id:"ondemand-cap",type:"number",inputMode:"numeric",min:1,value:B,onChange:e=>L(e.target.value),disabled:T})]}),(0,r.jsx)("div",{className:"flex gap-2",children:C.map(e=>{let t=q?et+e:e;return(0,r.jsx)(o.$,{variant:X===t?"default":"outline",size:"sm",onClick:()=>L(String(t)),className:"flex-1",disabled:T,children:q?"+$".concat(e):"$".concat(e)},e)})}),(0,r.jsx)(o.$,{onClick:()=>Q(X),disabled:T||!ee,className:"w-full",children:T?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c.A,{className:"w-4 h-4 mr-2 animate-spin"}),"Saving..."]}):q?"Raise limit to $".concat(X.toFixed(2),"/mo & continue"):"Enable & continue (cap $".concat(X.toFixed(2),"/mo)")})]}),(0,r.jsxs)("div",{className:"pt-4 mt-1 border-t border-border space-y-3",children:[(0,r.jsx)("p",{className:"text-sm font-medium text-foreground",children:q?"Or add a one-time top-up":"Prefer a one-time top-up?"}),(0,r.jsxs)("div",{className:"flex items-end gap-3",children:[(0,r.jsxs)("div",{className:"flex-1",children:[(0,r.jsx)("label",{htmlFor:"topup-credits",className:"text-sm text-muted-foreground block mb-1.5",children:"Credits"}),(0,r.jsx)(l.p,{id:"topup-credits",type:"number",inputMode:"numeric",min:N.Jv,max:k,value:_,onCh
1ange:e=>{let t=Math.floor(Number(e.target.value));Number.isFinite(t)&&I(Math.max(0,Math.min(k,t)))},onBlur:()=>{_<N.Jv&&I(N.Jv)},disabled:T})]}),(0,r.jsxs)("div",{className:"text-right pb-1",children:[(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Total"}),(0,r.jsxs)("p",{className:"text-lg font-semibold text-foreground",children:["$",(K.priceInCents/100).toFixed(2)]})]})]}),(0,r.jsxs)("p",{className:"text-xs text-muted-foreground",children:["Smallest top-up: ",N.Jv," credits, ",N.NN,". Top-ups never expire."]}),(0,r.jsx)("div",{className:"flex gap-2",children:y.map(e=>(0,r.jsx)(o.$,{variant:_===e?"default":"outline",size:"sm",onClick:()=>I(e),className:"flex-1",disabled:T,children:e},e))}),(0,r.jsx)(o.$,{onClick:()=>H(_),disabled:T||!R,variant:"outline",className:"w-full",children:T?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c.A,{className:"w-4 h-4 mr-2 animate-spin"}),"Processing..."]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(h.A,{className:"w-4 h-4 mr-2"}),"Buy ",_.toLocaleString()," credits ($",(K.priceInCents/100).toFixed(2),")"]})})]}),(0,r.jsx)("button",{onClick:$,className:"w-full mt-1 text-center text-sm text-muted-foreground hover:text-foreground transition-colors",disabled:T,children:"Maybe later"})]})})}}}]);

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.