PageSourceSearch

https://loveacrossborders.com/assets/admin.index-DdTS4bk7.js

js loveacrossborders.com collected 2026-10-08 14:16:37 UTC 5,965 bytes, 1 lines download raw bytes

1import{j as e,m as n,L as a}from"./index-hs4a0mYW.js";import{u as c}from"./useQuery-C-iGd3mh.js";import{u as l}from"./useServerFn-DgMZqDJQ.js";import{S as m}from"./SiteFooter-CpQk1rby.js";import{A as x}from"./SiteHeader-BqOOKgqK.js";import{A as u}from"./AdminGate-Db1E1sSR.js";import"./newsletter.functions-BPJ19l6O.js";import"./useMutation-CsVV5qgy.js";import"./books.functions-BjM2fbuH.js";const p=[{title:"Storefront",description:"Add, edit, and price books, ebooks, audiobooks, bundles, and access products.",to:"/admin/shop"},{title:"Orders",description:"Live feed of every sale, revenue totals, and Stripe references.",to:"/admin/orders"},{title:"Reviews",description:"Moderate reader reviews. Hide or delete anything unfair.",to:"/admin/reviews"},{title:"Support & subscribers",description:"Customer tickets inbox + newsletter subscriber list.",to:"/admin/support"},{title:"Books catalog",description:"Manage the main book catalog: covers, descriptions, status.",to:"/books/admin"},{title:"Talkable Editions",description:"Ingest a book's text into chunks the Talkable reader can answer from.",to:"/books/admin"},{title:"AI Twin",description:"Manage personas and the documents your AI Twin draws from.",to:"/twin/admin"},{title:"Harm Reduction",description:"Edit substance pages, warnings, and references.",to:"/harm-reduction/admin"},{title:"Your orders view",description:"See orders from the buyer perspective.",to:"/account/orders"}];function S(){return e.jsx(u,{active:"home",children:e.jsx(h,{})})}function h(){const t=l(n),{data:s,isLoading:o}=c({queryKey:["admin","products"],queryFn:()=>t(),retry:!1});if(o)return e.jsx("div",{className:"min-h-screen flex items-center justify-center bg-background text-foreground",children:e.jsx("p",{className:"text-muted-foreground",children:"Loading admin…"})});const d=(s??[]).filter(r=>r.is_active).length,i=(s??[]).filter(r=>!r.is_active).length;return e.jsxs("div",{className:"min-h-screen flex flex-col bg-background text-foreground",children:[e.jsx(x,{active:"home"}),e.jsxs("main",{className:"flex-1 mx-auto max-w-6xl px-8 py-12 w-full",children:[e.jsx("h1",{className:"font-serif text-4xl text-primary leading-tight",children:"Admin home"}),e.jsx("p",{className:"mt-3 max-w-2xl text-muted-foreground",children:"Everything you need to run the site. Bookmark this page so you never have to remember URLs."}),e.jsxs("div",{className:"mt-8 grid grid-cols-2 sm:grid-cols-3 gap-4",children:[e.jsxs("div",{className:"p-5 rounded-md bg-card border border-border",children:[e.jsx("div",{className:"text-xs uppercase tracking-wider text-muted-foreground",children:"Live products"}),e.jsx("div",{className:"mt-1 font-serif text-3xl text-accent",children:d})]}),e.jsxs("div",{className:"p-5 rounded-md bg-card border border-border",children:[e.jsx("div",{className:"text-xs uppercase tracking-wider text-muted-foreground",children:"Drafts"}),e.jsx("div",{className:"mt-1 font-serif text-3xl text-primary",children:i})]})]}),e.jsxs("section",{className:"mt-10 rounded-md border border-border bg-card/50 p-6",children:[e.jsx("h2",{className:"font-serif text-primary text-xl",children:"Delivery infrastructure"}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"One-time setup to keep sale notifications and receipts flowing. Paste these values into Stripe and your DNS registrar. No code changes needed."}),e.jsxs("div",{className:"mt-5",children:[e.jsx("div",{className:"text-xs uppercase tracking-wider text-muted-foreground",children:"Stripe webhook URL"}),e.jsx("code",{className:"mt-1 block break-all text-xs bg-background border border-border rounded px-3 py-2",children:"https://project--9e1a0d60-f491-4ac6-b2b3-0c58739c5e29.lovable.app/api/public/stripe-webhook"}),e.jsxs("p",{className:"mt-1 text-xs text-muted-foreground",children:["Stripe Dashboard → Developers → Webhooks. Events: ",e.jsx("code",{children:"checkout.session.completed"}),". Signing secret is stored as ",e.jsx("code",{children:"STRIPE_WEBHOOK_SECRET"}),"."]})]}),e.jsxs("div",{className:"mt-5",children:[e.jsx("div",{className:"text-xs uppercase tracking-wider text-muted-foreground",children:"Send as [email protected] (Resend + Zoho)"}),e.jsxs("p",{className:"mt-2 text-xs text-muted-foreground",children:["Add these DNS records at your domain registrar for ",e.jsx("code",{children:"loveacrossborders.com"}),". Zoho keeps receiving replies; Resend sends outbound receipts, sale alerts, and support confirmations as ",e.jsx("code",{children:"[email protected]"}),"."]}),e.jsxs("ul",{className:"mt-3 space-y-2 text-xs",children:[e.jsxs("li",{children:[e.jsxs("span",{className:"text-muted-foreground",children:["TXT (SPF) at root ",e.jsx("code",{children:"@"}),":"]})," ",e.jsx("code",{className:"block mt-1 bg-background border border-border rounded px-3 py-2 break-all",children:"v=spf1 include:_spf.zoho.com include:resend.com ~all"})]}),e.jsxs("li",{className:"text-muted-foreground",children:["CNAME (DKIM): three ",e.jsx("code",{children:"resend._domainkey"})," / ",e.jsx("code",{children:"*._resend.*"})," records shown in the Resend dashboard for this domain. Paste them exactly as displayed there."]})]}),e.jsx("a",{href:"https://resend.com/domains",target:"_blank",rel:"noopener noreferrer",className:"mt-3 inline-block text-xs text-primary underline",children:"Open Resend → Domains ↗"})]})]}),e.jsx("div",{className:"mt-10 grid gap-5 sm:grid-cols-2 lg:grid-cols-3",children:p.map(r=>e.jsxs(a,{to:r.to,className:"block p-6 rounded-md bg-card border border-border text-card-foreground transition-all hover:-translate-y-0.5 hover:border-accent/60 hover:shadow-md",children:[e.jsx("div",{className:"font-serif text-xl text-primary",children:r.title}),e.jsx("p",{className:"mt-2 text-sm text-muted-foreground",children:r.description}),e.jsx("div",{className:"mt-4 text-xs uppercase tracking-wider text-accent",children:"Open →"})]},r.to))})]}),e.jsx(m,{})]})}
1export{S as component};

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.