PageSourceSearch

https://app.tweeksocial.com/assets/Pricing-D7tfDvoi.js

js tweeksocial.com collected 2026-09-24 14:55:45 UTC 18,318 bytes, 4 lines download raw bytes

1import{q as L,s as W,E,r as M,u as D,F as v,j as t,C as w,h as V,k as B,i as X,d as O,K as A,aa as q,ab as I,B as f,x as y,L as G,I as K,t as g}from"./index-pYNqjREW.js";import{B as Y}from"./badge-BAAJ5-c7.js";import{T as R}from"./tag-BGE_bR4V.js";import{C as H}from"./circle-check-big-BOmG2Fi3.js";const Q=[{id:"free",name:"Free",subtitle:"For Trial",price:0,badge:null,features:[{text:"1 Twitter (X) account",included:!0,limit:"accounts"},{text:"50 DMs per day, max 500/month",included:!0,limit:"dms"},{text:"Welcome DM: 10/month",included:!0},{text:"Send DM To All Twitter Followers and Non Followers",included:!0},{text:"New Followers Auto DM: 10/day",included:!0,limit:"nfdm"},{text:"Auto Follow",included:!0},{text:"Auto Unfollow Non Followers",included:!0},{text:"Auto Follow New Followers",included:!0},{text:"Welcome DM if someone messages you",included:!0},{text:"Unfollow Manager",included:!0},{text:"Who Unfollowed tracking",included:!0},{text:"Follower Tracker",included:!0},{text:"Track new followers daily and follow them back",included:!0},{text:"Follow-ups",included:!1},{text:"Premium Support",included:!1}],tagline:"Best for testing & early outreach",buttonVariant:"outline"},{id:"starter",name:"Starter",subtitle:"Perfect for Solo Founders",price:29,badge:null,features:[{text:"1 Twitter (X) account",included:!0,limit:"accounts"},{text:"300 DMs per day",included:!0,limit:"dms"},{text:"Welcome DM: Unlimited",included:!0},{text:"Send DM To All Twitter Followers and Non Followers",included:!0},{text:"New Followers Auto DM",included:!0,limit:"nfdm"},{text:"Auto Follow",included:!0},{text:"Auto Unfollow Non Followers",included:!0},{text:"Auto Follow New Followers",included:!0},{text:"Welcome DM if someone messages you",included:!0},{text:"Unfollow Manager",included:!0},{text:"Who Unfollowed tracking",included:!0},{text:"Follower Tracker",included:!0},{text:"Track new followers daily and follow them back",included:!0},{text:"Follow-ups",included:!1},{text:"Premium Support",included:!0}],tagline:"Everything you need to start reaching out",buttonVariant:"default"},{id:"growth",name:"Growth",subtitle:"Scale Faster",price:69,badge:"Most Popular",features:[{text:"3 Twitter (X) accounts",included:!0,limit:"accounts"},{text:"300 DMs/day per account",included:!0,limit:"dms"},{text:"Welcome DM: Unlimited",included:!0},{text:"Send DM To All Twitter Followers and Non Followers",included:!0},{text:"New Followers Auto DM",included:!0,limit:"nfdm"},{text:"Auto Follow",included:!0},{text:"Auto Unfollow Non Followers",included:!0},{text:"Auto Follow New Followers",included:!0},{text:"Welcome DM if someone messages you",included:!0},{text:"Unfollow Manager",included:!0},{text:"Who Unfollowed tracking",included:!0},{text:"Follower Tracker",included:!0},{text:"Track new followers daily and follow them back",included:!0},{text:"Follow-ups",included:!0},{text:"Premium Support",included:!0}],tagline:"Most popular for agencies & startups",buttonVariant:"default"},{id:"pro",name:"Pro",subtitle:"Built for Power Users",price:119,badge:null,features:[{text:"6 Twitter (X) accounts",included:!0,limit:"accounts"},{text:"300 DMs/day per account",included:!0,limit:"dms"},{text:"Welcome DM: Unlimited",included:!0},{text:"Send DM To All Twitter Followers and Non Followers",included:!0},{text:"New Followers Auto DM",included:!0,limit:"nfdm"},{text:"Auto Follow",included:!0},{text:"Auto Unfollow Non Followers",included:!0},{text:"Auto Follow New Followers",included:!0},{text:"Welcome DM if someone messages you",included:!0},{text:"Unfollow Manager",included:!0},{text:"Who Unfollowed tracking",included:!0},{text:"Follower Tracker",included:!0},{text:"Track new followers daily and follow them back",included:!0},{text:"Follow-ups",included:!0},{text:"Premium Support",included:!0}],tagline:"Perfect for aggressive growth",buttonVariant:"default"},{id:"agency",name:"Agency",subtitle:"Maximum Scale",price:219,badge:null,features:[{text:"10 Twitter (X) accounts",included:!0,limit:"accounts"},{text:"300 DMs/day per account",included:!0,limit:"dms"},{text:"Welcome DM: Unlimited",included:!0},{text:"Send DM To All Twitter Followers and Non Followers",included:!0},{text:"New Followers Auto DM",included:!0,limit:"nfdm"},{text:"Auto Follow",included:!0},{text:"Auto Unfollow Non Followers",included:!0},{text:"Auto Follow New Followers",included:!0},{text:"Welcome DM if someone messages you",included:!0},{text:"Unfollow Manager",included:!0},{text:"Who Unfollowed tracking",included:!0},{text:"Follower Tracker",included:!0},{text:"Track new followers daily and follow them back",included:!0},{text:"Follow-ups",included:!0},{text:"Premium Support",included:!0}],tagline:"For agencies managing multiple clients",buttonVariant:"default"}],N={free:{pill:"bg-emerald-500/10 text-emerald-900 dark:text-emerald-100 border border-emerald-500/30",wash:"from-emerald-500/10",price:"text-emerald-600 dark:text-emerald-400",check:"text-emerald-500",seats:"border-emerald-500/30 bg-emerald-500/[0.06]",hover:"hover:border-emerald-500/50 hover:shadow-emerald-500/10"},starter:{pill:"bg-sky-500/10 text-sky-900 dark:text-sky-100 border border-sky-500/30",wash:"from-sky-500/10",price:"text-sky-600 dark:text-sky-400",check:"text-sky-500",seats:"border-sky-500/30 bg-sky-500/[0.06]",hover:"hover:border-sky-500/50 hover:shadow-sky-500/10"},growth:{pill:"bg-violet-500/10 text-violet-900 dark:text-violet-100 border border-violet-500/30",wash:"from-violet-500/10",price:"text-violet-600 dar
1k:text-violet-400",check:"text-violet-500",seats:"border-violet-500/30 bg-violet-500/[0.06]",hover:"hover:border-violet-500/50 hover:shadow-violet-500/10"},lifetime:{pill:"bg-amber-500/10 text-amber-900 dark:text-amber-100 border border-amber-500/30",wash:"from-amber-500/10",price:"text-amber-600 dark:text-amber-400",check:"text-amber-500",seats:"border-amber-500/30 bg-amber-500/[0.06]",hover:"hover:border-amber-500/50 hover:shadow-amber-500/10"},pro:{pill:"bg-fuchsia-500/10 text-fuchsia-900 dark:text-fuchsia-100 border border-fuchsia-500/30",wash:"from-fuchsia-500/10",price:"text-fuchsia-600 dark:text-fuchsia-400",check:"text-fuchsia-500",seats:"border-fuchsia-500/30 bg-fuchsia-500/[0.06]",hover:"hover:border-fuchsia-500/50 hover:shadow-fuchsia-500/10"},agency:{pill:"bg-rose-500/10 text-rose-900 dark:text-rose-100 border border-rose-500/30",wash:"from-rose-500/10",price:"text-rose-600 dark:text-rose-400",check:"text-rose-500",seats:"border-rose-500/30 bg-rose-500/[0.06]",hover:"hover:border-rose-500/50 hover:shadow-rose-500/10"}};function C(d,r,m){return r?d.map(s=>{if(!s.limit)return s;if(s.limit==="accounts"){const l=r.accountLimit;return{...s,text:`${l} Twitter (X) account${l===1?"":"s"}`}}if(s.limit==="dms"){const l=r.monthlyDmLimit?`, max ${r.monthlyDmLimit.toLocaleString()}/month`:"";return{...s,text:`${r.dailyDmLimit.toLocaleString()} DMs/day${m?" per account":""}${l}`}}const n=r.newFollowerDmDailyLimit;return{...s,text:n?`New Followers Auto DM: ${n}/day`:"New Followers Auto DM"}}):d}const p={name:"Lifetime",subtitle:"Pay Once, Keep It",price:499,features:[{text:"1 Twitter (X) account",included:!0,limit:"accounts"},{text:"300 DMs/day",included:!0,limit:"dms"},{text:"Welcome DM: Unlimited",included:!0},{text:"Send DM To All Twitter Followers and Non Followers",included:!0},{text:"New Followers Auto DM",included:!0,limit:"nfdm"},{text:"Auto Follow",included:!0},{text:"Auto Unfollow Non Followers",included:!0},{text:"Auto Follow New Followers",included:!0},{text:"Welcome DM if someone messages you",included:!0},{text:"Unfollow Manager",included:!0},{text:"Who Unfollowed tracking",included:!0},{text:"Follower Tracker",included:!0},{text:"Track new followers daily and follow them back",included:!0},{text:"Follow-ups",included:!0},{text:"Premium Support",included:!0}],tagline:"One payment, no subscription, yours for good"};function ee(){const{user:d}=L(),{toast:r}=W();E();const[m,s]=M.useState(""),[n,l]=M.useState(null),{data:j}=D({queryKey:["/api/subscription"],enabled:!!d}),{data:x}=D({queryKey:["/api/plans"],queryFn:async()=>{const e=await fetch("/api/plans");if(!e.ok)throw new Error("Failed to load plans");return e.json()}}),o=j?.planType||"free",k=["free","starter","growth","pro","agency"],F=k.indexOf(o),b=v({mutationFn:async({code:e,planType:i})=>(await g("POST","/api/coupons/validate",{code:e,planType:i})).json(),onSuccess:e=>{e.valid?(l({code:e.code,discountType:e.discountType,discountValue:e.discountValue}),r({title:"Coupon Applied",description:`${e.discountValue}${e.discountType==="percent"?"%":" cents"} discount will be applied at checkout`})):(r({title:"Invalid Coupon",description:e.error,variant:"destructive"}),l(null))},onError:e=>{r({title:"Error",description:e.message||"Failed to validate coupon",variant:"destructive"}),l(null)}}),c=v({mutationFn:async e=>(await g("POST",o!=="free"?"/api/subscription/upgrade":"/api/checkout",{planType:e,couponCode:n?.code})).json(),onSuccess:e=>{e.url?window.location.href=e.url:e.message&&(r({title:"Success",description:e.message}),window.location.reload())},onError:e=>{r({title:"Error",description:e.message||"Failed to process request",variant:"destructive"})}}),h=v({mutationFn:async()=>(await g("POST","/api/subscription/cancel")).json(),onSuccess:e=>{r({title:"Plan Changed",description:e.message||"You are now on the free plan"}),window.location.reload()},onError:e=>{r({title:"Error",description:e.message||"Failed to cancel subscription",variant:"destructive"})}}),P=e=>{if(!d){window.location.href="/";return}e==="free"?confirm("Are you sure you want to downgrade to the free plan? Your current subscription will be cancelled.")&&h.mutate():c.mutate(e)},S=e=>{const i=k.indexOf(e.id);return e.id===o?"Current Plan":e.oneTime?"Get Lifetime":o==="lifetime"?e.id==="free"?"Downgrade to Free":"Switch Plan":e.id==="free"?o==="free"?"Current Plan":"Downgrade to Free":i>F?"Upgrade":i<F?"Downgrade":"Switch Plan"},T=e=>e===o,$=e=>T(e.id)?"outline":e.id==="free"&&o!=="free"?"destructive":e.buttonVariant;return t.jsx("div",{className:"min-h-screen p-4 sm:p-6 md:p-8",children:t.jsxs("div",{className:"max-w-7xl mx-auto",children:[t.jsxs("div",{className:"text-center mb-8 sm:mb-12",children:[t.jsx("h1",{className:"text-2xl sm:text-3xl md:text-4xl font-bold font-display mb-3 sm:mb-4",children:"Choose Your Plan"}),t.jsx("p",{className:"text-muted-foreground text-sm sm:text-base md:text-lg max-w-2xl mx-auto px-4",children:"Scale your Twitter outreach with our powerful DM automation platform. Start free and upgrade as you grow."})]}),t.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5 ga
1p-4 sm:gap-6",children:Q.map((e,i)=>{const a=N[e.id]??N.free;return t.jsxs(w,{style:{animationDelay:`${i*70}ms`},className:`group relative flex flex-col animate-fade-up border transition-all duration-300
2                hover:-translate-y-1.5 hover:shadow-xl ${a.hover}
3                motion-reduce:animate-none motion-reduce:transition-none motion-reduce:hover:translate-y-0
4                ${e.badge?"border-primary/40 shadow-lg shadow-primary/10":"border-border"}`,"data-testid":`card-plan-${e.id}`,children:[e.badge&&t.jsxs(t.Fragment,{children:[t.jsx("div",{"aria-hidden":!0,className:"pointer-events-none absolute inset-0 rounded-xl ring-2 ring-primary/50 animate-glow-pulse motion-reduce:animate-none"}),t.jsx("div",{className:"absolute -top-3 left-1/2 -translate-x-1/2",children:t.jsx(Y,{className:"bg-primary text-primary-foreground shadow-md shadow-primary/30",children:e.badge})})]}),t.jsxs(V,{className:`pb-4 rounded-t-xl bg-gradient-to-b ${a.wash} to-transparent`,children:[t.jsx("div",{className:`inline-flex items-center gap-2 px-3 py-1 rounded-full text-base sm:text-lg font-bold tracking-tight mb-2 transition-transform duration-300 group-hover:scale-105 motion-reduce:transform-none ${a.pill}`,children:e.name}
4),t.jsx(B,{className:"text-sm",children:e.subtitle}),t.jsxs(X,{className:"text-2xl sm:text-3xl font-bold",children:[t.jsx("span",{className:a.price,children:e.price===0?"Free":`$${e.price}`}),e.price>0&&t.jsx("span",{className:"text-sm sm:text-base font-normal text-muted-foreground",children:e.oneTime?" one time":"/month"})]}),(()=>{const u=x?.[e.id]?.accountLimit;return u===void 0?null:t.jsxs("div",{className:`mt-3 flex items-baseline gap-2 rounded-lg border px-3 py-2 ${a.seats}`,children:[t.jsx("span",{className:`text-3xl font-bold leading-none sm:text-4xl ${a.price}`,children:u}),t.jsxs("span",{className:"text-xs font-medium leading-tight text-muted-foreground sm:text-sm",children:["Twitter (X)",t.jsx("br",{}),"account",u===1?"":"s"]})]})})()]}),t.jsx(O,{className:"flex-1 space-y-2 sm:space-y-3",children:C(e.features,x?.[e.id],e.id!=="free"&&e.id!=="starter"&&e.id!=="lifetime").map((u,U)=>t.jsxs("div",{className:"flex items-start gap-2",children:[u.included?t.jsx(A,{className:`h-4 w-4 mt-0.5 flex-shrink-0 ${a.check}`}):t.jsx(q,{className:"h-4 w-4 text-muted-foreground mt-0.5 flex-shrink-0"}),t.jsx("span",{className:`text-xs sm:text-sm ${u.included?"":"text-muted-foreground line-through decoration-muted-foreground/60"}`,children:u.text})]},U))}),t.jsxs(I,{className:"flex flex-col gap-2 sm:gap-3",children:[t.jsx("p",{className:"text-xs text-muted-foreground text-center",children:e.tagline}),d?t.jsx(f,{className:"w-full transition-transform duration-200 hover:scale-[1.03] active:scale-[0.99] motion-reduce:transform-none",variant:$(e),disabled:T(e.id)||c.isPending||h.isPending,onClick:()=>P(e.id),"data-testid":`button-select-${e.id}`,children:c.isPending&&c.variables===e.id||h.isPending&&e.id==="free"?t.jsx(y,{className:"h-4 w-4 animate-spin"}):S(e)}):t.jsx(G,{href:"/",className:"w-full",children:t.jsx(f,{className:"w-full transition-transform duration-200 hover:scale-[1.03] active:scale-[0.99] motion-reduce:transform-none",variant:e.buttonVariant,"data-testid":`button-signup-${e.id}`,children:"Get Started"})})]})]},e.id)})}),t.jsx(w,{className:`mt-6 overflow-hidden border-amber-500/40 bg-gradient-to-br from-amber-500/[0.07] to-transparent sm:mt-8 ${o==="lifetime"?"ring-2 ring-amber-500/60":""}`,"data-testid":"card-plan-lifetime",children:t.jsxs("div",{className:"grid gap-6 p-5 sm:p-7 md:grid-cols-[minmax(0,22rem)_1fr] md:gap-8",children:[t.jsxs("div",{children:[t.jsx("div",{className:"inline-flex items-center gap-2 rounded-full border border-amber-500/30 bg-amber-500/10 px-3 py-1 text-base font-bold tracking-tight text-amber-900 dark:text-amber-100 sm:text-lg",children:p.name}),t.jsx("p",{className:"mt-2 text-sm text-muted-foreground",children:p.subtitle}),t.jsxs("div",{className:"mt-3 flex items-baseline gap-2",children:[t.jsxs("span",{className:"text-4xl font-bold text-amber-600 dark:text-amber-400 sm:text-5xl",children:["$",p.price]}),t.jsx("span",{className:"text-sm font-normal text-muted-foreground",children:"one time"})]}),x?.lifetime?.accountLimit!==void 0&&t.jsxs("div",{className:`mt-3 inline-flex items-baseline gap-2 rounded-lg border px-3 py-2 ${N.lifetime.seats}`,children:[t.jsx("span",{className:"text-3xl font-bold leading-none text-amber-600 dark:text-amber-400 sm:text-4xl",children:x.lifetime.accountLimit}),t.jsxs("span",{className:"text-xs font-medium leading-tight text-muted-foreground sm:text-sm",children:["Twitter (X)",t.jsx("br",{}),"account",x.lifetime.accountLimit===1?"":"s"]})]}),t.jsx("p",{className:"mt-3 text-xs text-muted-foreground",children:"A single payment, not a subscription — nothing renews and there is nothing to cancel. Buying this cancels any monthly plan you are on."}),t.jsx(f,{className:"mt-4 w-full gap-2 font-semibold",variant:o==="lifetime"?"outline":"default",disabled:o==="lifetime"||c.isPending||h.isPending,onClick:()=>c.mutate("lifetime"),"data-testid":"button-plan-lifetime",children:c.isPending&&c.variables==="lifetime"?t.jsx(y,{className:"h-4 w-4 animate-spin"}):o==="lifetime"?"Your Plan":"Get Lifetime"}),t.jsx("p",{className:"mt-2 text-center text-xs text-muted-foreground",children:p.tagline})]}),t.jsx("div",{className:"grid gap-x-6 gap-y-2 sm:grid-cols-2",children:C(p.features,x?.lifetime,!1).map((e,i)=>t.jsxs("div",{className:"flex items-start gap-2",children:[t.jsx(A,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-amber-500"}),t.jsx("span",{className:"text-xs sm:text-sm",children:e.text})]},i))})]})}),d&&o==="free"&&t.jsx("div",{className:"mt-8 sm:mt-12 text-center px-4",children:t.jsxs(w,{className:"inline-block p-4 sm:p-6 max-w-md","data-testid":"card-coupon",children:[t.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[t.jsx(R,{className:"h-5 w-5 text-muted-foreground"}),t.jsx("h3",{className:"text-base sm:text-lg font-semibold",children:"Have a coupon code?"})]}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx(K,{placeholder:"Enter coupon code",value:m,onChange:e=>s(e.target.value.toUpperCase()),className:"flex-1",disabled:!!n,"data-testid":"input-coupon"}),n?t.jsx(f,{variant:"outline",onClick:()=>{l(null),s("")},"data-testid":"button-remove-coupon",children:"Remove"}):t.jsx(f,{onClick:()=>{m.trim()&&b.mutate({code:m,planType:"starter"})},disabled:!m.trim()||b.isPending,"data-testid":"button-apply-coupon",children:b.isPending?t.jsx(y,{className:"h-4 w-4 animate-spin"}):"Apply"})]}),n&&t.jsxs("div",{className:"mt-3 flex items-center gap-2 text-green-600 dark:text-green-400",children:[t.jsx(H,{className:"h-4 w-4"}),t.jsxs("span",{className:"text-sm",children:[n.discountValue,n.discountType==="percent"?"%":" cents"," discount applied"]})]})]})}),t.jsx("div",{className:"mt-8 sm:mt-12 text-center px-4",children:t.jsxs(w,{className:"inline-block p-4 sm:p-6 max-w-xl",children:[t.jsx("h3",{className:"text-base sm:text-lg font-semibold mb-2",children:"Need more accounts?"}),t.jsxs("p",{className:"text-sm sm:text-base text-muted-foreground",children:["Add additional Twitter accounts to any plan for ",t.jsx("strong",{children:"$30/month"})," per account."]})]})}),d&&j?.stripeCustomerId&&t.jsx("div",{className:"mt-6 text-center",children:t.jsx(f,{variant:"outline",onClick:async()=>{try{const i=await(await g("POST","/api/stripe/portal")).json();i.url&&(window.location.href=i.url)}catch{r({title:"Error",description:"Could not open billing portal",variant:"destructive"})}},"data-testid":"button-manage-billing",children:"Manage Billing"})})]})})}export{ee as default};

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.