"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import Link from "next/link"; import { Mic, MicOff, Sparkles, BookOpen, Printer, ArrowLeft } from "lucide-react"; const STYLES = [ { value: "punk-zine", label: "Punk Zine", description: "Xerox texture, high contrast, DIY collage" }, { value: "mycelial", label: "Mycelial", description: "Organic networks, spore patterns, earth tones" }, { value: "minimal", label: "Minimal", description: "Clean lines, white space, modern" }, { value: "collage", label: "Collage", description: "Layered imagery, mixed media" }, { value: "retro", label: "Retro", description: "1970s aesthetic, earth tones" }, ]; const TONES = [ { value: "rebellious", label: "Rebellious", description: "Defiant, punk attitude" }, { value: "regenerative", label: "Regenerative", description: "Hopeful, nature-inspired, healing" }, { value: "playful", label: "Playful", description: "Whimsical, fun, light-hearted" }, { value: "informative", label: "Informative", description: "Educational, factual" }, { value: "poetic", label: "Poetic", description: "Lyrical, metaphorical" }, ]; export default function ZinePage() { const router = useRouter(); const [topic, setTopic] = useState(""); const [style, setStyle] = useState("mycelial"); const [tone, setTone] = useState("regenerative"); const [isListening, setIsListening] = useState(false); const [isLoading, setIsLoading] = useState(false); const handleVoiceInput = () => { if (!("webkitSpeechRecognition" in window) && !("SpeechRecognition" in window)) { alert("Voice input is not supported in this browser. Try Chrome or Edge."); return; } const SpeechRecognition = (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition; const recognition = new SpeechRecognition(); recognition.continuous = false; recognition.interimResults = false; recognition.lang = "en-US"; recognition.onstart = () => setIsListening(true); recognition.onend = () => setIsListening(false); recognition.onerror = () => setIsListening(false); recognition.onresult = (event: any) => { const transcript = event.results[0][0].transcript; setTopic((prev) => (prev ? prev + " " + transcript : transcript)); }; if (isListening) { recognition.stop(); } else { recognition.start(); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!topic.trim()) return; setIsLoading(true); // Store the input in sessionStorage and navigate to create page sessionStorage.setItem("zineInput", JSON.stringify({ topic, style, tone })); router.push("/zine/create"); }; return (
Transform your ideas into printable 8-page mini-zines with AI