diff --git a/app/layout.tsx b/app/layout.tsx index 42ce443..b9bac46 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -17,6 +17,9 @@ export const metadata: Metadata = { description: "Exploring mycoeconomics and post-capitalist alternatives to neoliberalism", type: "website", }, + icons: { + icon: "data:image/svg+xml,🔮", + }, } export default function RootLayout({ diff --git a/app/page.tsx b/app/page.tsx index 9b9908a..2c34b21 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -4,6 +4,7 @@ import { AlternativesSection } from "@/components/alternatives-section" import { CritiqueSection } from "@/components/critique-section" import { PostAppitalismSection } from "@/components/post-appitalism-section" import { ActionSection } from "@/components/action-section" +import { NewsletterSignup } from "@/components/newsletter-signup" import { Navigation } from "@/components/navigation" export default function HomePage() { @@ -16,6 +17,7 @@ export default function HomePage() { + ) } diff --git a/components/newsletter-signup.tsx b/components/newsletter-signup.tsx new file mode 100644 index 0000000..d6f9692 --- /dev/null +++ b/components/newsletter-signup.tsx @@ -0,0 +1,95 @@ +"use client" + +import { useState } from "react" + +const LISTMONK_URL = "https://newsletter.jeffemmett.com" +const LIST_UUID = "df598d1a-4bed-4a8b-8c36-a5a6346febf0" // Trippin list + +export function NewsletterSignup() { + const [email, setEmail] = useState("") + const [status, setStatus] = useState<"idle" | "loading" | "success" | "error">("idle") + const [message, setMessage] = useState("") + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault() + + if (!email) return + + setStatus("loading") + + try { + const response = await fetch(`${LISTMONK_URL}/subscription/form`, { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + }, + body: new URLSearchParams({ + email: email, + list: LIST_UUID, + name: "", + }), + }) + + if (response.ok) { + setStatus("success") + setMessage("Check your email to confirm your subscription!") + setEmail("") + } else { + throw new Error("Subscription failed") + } + } catch { + setStatus("error") + setMessage("Something went wrong. Please try again.") + } + } + + return ( + + + + + + Keep Trippin' + + + Subscribe for updates on psychedelic exploration + and consciousness expansion. + + + + {status === "success" ? ( + + {message} + + ) : ( + + setEmail(e.target.value)} + required + className="flex-1 px-4 py-2 rounded-lg border bg-background focus:outline-none focus:ring-2 focus:ring-primary/50" + /> + + {status === "loading" ? "Subscribing..." : "Subscribe"} + + + )} + + {status === "error" && ( + {message} + )} + + + No spam, unsubscribe anytime. We respect your privacy. + + + + + ) +}
+ Subscribe for updates on psychedelic exploration + and consciousness expansion. +
{message}
+ No spam, unsubscribe anytime. We respect your privacy. +