PageSourceSearch

https://jin.imajin.ai/_next/static/chunks/app/subscribe/page-ff32432dfaf8e630.js

js imajin.ai collected 2026-10-05 14:38:13 UTC 3,412 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[79057],{17287:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>o});var r=s(32846),a=s(25118),n=s(83475);function i(){let e=(0,n.useSearchParams)().get("from")||"direct",t="subscribe-".concat(e),[s,i]=(0,a.useState)(""),[o,l]=(0,a.useState)("idle"),[c,u]=(0,a.useState)("");async function d(e){e.preventDefault(),l("loading");try{let e=await fetch("/api/subscribe",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:s,source:t})}),r=await e.json();e.ok?(l("success"),u("pending_verification"===r.status?"Check your inbox to confirm your email.":"already_subscribed"===r.status?"You're already on the list!":r.message||"You're on the list!"),i("")):(l("error"),u(r.error||"Something went wrong"))}catch(e){l("error"),u("Failed to connect. Please try again.")}}return(0,r.jsxs)("main",{className:"min-h-screen flex flex-col items-center justify-center px-6",children:[(0,r.jsx)("h1",{className:"text-3xl md:text-4xl font-light tracking-tight mb-2",children:"Stay in the loop"}),(0,r.jsx)("p",{className:"text-gray-400 text-center max-w-md mb-8",children:"We're building self-hosted community infrastructure. Sign up to get notified when new features land."}),"success"===o?(0,r.jsxs)("div",{className:"text-center",children:[(0,r.jsx)("div",{className:"w-12 h-12 rounded-full bg-green-500/20 flex items-center justify-center mx-auto mb-4",children:(0,r.jsx)("svg",{className:"w-6 h-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,r.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})})}),(0,r.jsx)("p",{className:"text-green-400 mb-2",children:c}),(0,r.jsx)("p",{className:"text-gray-500 text-sm",children:"We'll be in touch."})]}):(0,r.jsxs)("form",{onSubmit:d,className:"w-full max-w-sm",children:[(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,r.jsx)("input",{type:"email",value:s,onChange:e=>i(e.target.value),placeholder:"[email protected]",required:!0,disabled:"loading"===o,className:"w-full px-4 py-3 bg-gray-900 border border-gray-800 rounded-lg focus:outline-none focus:border-orange-500 transition-colors disabled:opacity-50"}),(0,r.jsx)("button",{type:"submit",disabled:"loading"===o,className:"w-full px-4 py-3 bg-orange-500 hover:bg-orange-600 disabled:bg-orange-500/50 text-white font-medium rounded-lg transition-colors",children:"loading"===o?"Subscribing...":"Subscribe"})]}),"error"===o&&(0,r.jsx)("p",{className:"mt-4 text-red-400 text-sm text-center",children:c})]}),(0,r.jsx)("p",{className:"mt-8 text-xs text-gray-600 text-center max-w-sm",children:"No spam. Just meaningful updates about our progress."})]})}function o(){return(0,r.jsx)(a.Suspense,{fallback:(0,r.jsx)("main",{className:"min-h-screen flex items-center justify-center",children:(0,r.jsx)("p",{className:"text-gray-500",children:"Loading…"})}),children:(0,r.jsx)(i,{})})}},71644:(e,t,s)=>{Promise.resolve().then(s.bind(s,17287))},83475:(e,t,s)=>{"use strict";var r=s(77563);s.o(r,"useParams")&&s.d(t,{useParams:function(){return r.useParams}}),s.o(r,"usePathname")&&s.d(t,{usePathname:function(){return r.usePathname}}),s.o(r,"useRouter")&&s.d(t,{useRouter:function(){return r.useRouter}}),s.o(r,"useSearchParams")&&s.d(t,{useSearchParams:function(){return r.useSearchParams}})}},e=>{e.O(0,[49027,41756,77358],()=>e(e.s=71644)),_N_E=e.O()}]);

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.