import React, { useState, useEffect, useRef } from 'react'; import { BookOpen, PenTool, Send, LayoutDashboard, User, Settings, Search, Moon, Sun, Sparkles, Bookmark, Heart, Share2, MessageSquare, Download, FileText, Award, TrendingUp, Users, BookOpenCheck, Eye, ChevronRight, ThumbsUp, CheckCircle2, AlertCircle, Plus, Tag, Hash, Database, Filter, ArrowRight, ChevronDown, Compass, FileSpreadsheet, Globe, Flame, MessageCircle, Clock, Printer, FileCheck, ShieldAlert, Info } from 'lucide-react'; // ========================================== // CONFIGURATION & INITIAL STATE (POPULAR / BLOG STYLE) // ========================================== const INITIAL_ARTICLES = [ { id: "art-1", title: "Mengapa Kita Begitu Terobsesi dengan Algoritma Media Sosial?", abstract: "Menilik kecanduan digital dari sudut pandang psikologi populer dan filsafat eksistensial sehari-hari. Mengapa 'like' terasa sangat candu?", content: "Di era modern ini, kita tidak lagi mengonsumsi media; medialah yang mengonsumsi kita. Setiap gesekan layar (scroll) yang kita lakukan diatur oleh algoritma pintar yang dirancang khusus untuk memicu dopamin.\n\nFilsuf kontemporer sering menyebut fenomena ini sebagai komodifikasi perhatian. Ketika kita memposting sesuatu dan mendapatkan ratusan reaksi suka, otak kita secara biologis meresponsnya sama seperti mendapatkan penghargaan sosial nyata.\n\nNamun, di balik kegembiraan instan itu, ada rasa hampa eksistensial yang membayangi. Kita mulai mengukur nilai diri kita dari angka di layar, bukan dari kedalaman hubungan interpersonal kita di dunia nyata.", category: "Gaya Hidup & Teknologi", tags: ["Media Sosial", "Kecanduan Digital", "Psikologi Populer", "Filsafat Hidup"], author: { name: "Fahruddin Faiz", institution: "Pemerhati Budaya Populer", avatar: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=150" }, publishedAt: "2026-07-15", readingTime: 4, views: 3450, likes: 892, bookmarks: 245, status: "Published", comments: [ { id: "c1", user: "Zulian Al-Farabi", avatar: "https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=100", text: "Esai yang sangat relate! Rasanya setiap hari kita terjebak dalam pusaran dopamin tanpa henti.", date: "2026-07-15" } ] }, { id: "art-2", title: "Seni Menikmati Kesunyian di Tengah Berisiknya Kota Jakarta", abstract: "Menemukan ketenangan batin lewat konsep filsafat Stoikisme populer untuk bertahan dari stres kehidupan perkotaan yang serba cepat.", content: "Jakarta tidak pernah tidur, dan begitu juga kecemasan warganya. Kemacetan, tuntutan pekerjaan, hingga kehidupan sosial yang padat membuat kita lupa caranya diam.\n\nStoikisme, sebuah filsafat kuno dari Yunani, menawarkan cara pandang menarik: dikotomi kendali. Hal-hal eksternal seperti macetnya jalanan atau sikap bos di kantor berada di luar kendali kita. Yang bisa kita kendalikan sepenuhnya adalah respons internal kita sendiri. Menemukan kesunyian di tengah kebisingan kota adalah seni melatih pikiran untuk tetap tenang.", category: "Filsafat Populer", tags: ["Stoikisme", "Kesehatan Mental", "Gaya Hidup", "Self Improvement"], author: { name: "Richard Perkasa", institution: "Esais Bebas", avatar: "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=150" }, publishedAt: "2026-07-14", readingTime: 5, views: 2150, likes: 642, bookmarks: 112, status: "Published", comments: [] }, { id: "art-3", title: "AI dan Masa Depan Kepenulisan Kreatif: Apakah Blogger Akan Punah?", abstract: "Penyebaran ChatGPT dan Gemini mengubah industri kreatif. Simak ulasan santai mengapa tulisan manusia yang jujur dan emosional tidak akan tergantikan.", content: "Dengan sekali ketik, AI sekarang bisa membuat artikel ribuan kata dalam hitungan detik. Pertanyaannya: apakah hobi menulis blog dan jurnalisme warga masih relevan?\n\nJawabannya ada pada keaslian emosi. AI sangat mahir menyusun data dan pola bahasa, tetapi ia tidak memiliki 'jiwa', luka batin, atau rasa humor yang spontan. Tulisan yang paling menyentuh pembaca selalu lahir dari pengalaman autentik manusia.", category: "Berita & Tren", tags: ["Kecerdasan Buatan", "Blogging", "Masa Depan", "Kreativitas"], author: { name: "Amrina Rosyada", institution: "Blogger & Content Creator", avatar: "https://images.unsplash.com/photo-1544005313-94ddf0286df2?w=150" }, publishedAt: "2026-07-12", readingTime: 5, views: 4120, likes: 1205, bookmarks: 489, status: "Published", comments: [] } ]; const CATEGORIES = [ "Filsafat Populer", "Opini", "Berita & Tren", "Gaya Hidup & Teknologi", "Kesehatan Mental", "Sosial Budaya", "Esai Santai", "Resensi Buku", "Sains Populer" ]; export default function App() { // Global State const [theme, setTheme] = useState('dark'); const [currentPage, setCurrentPage] = useState('landing'); const [articles, setArticles] = useState(INITIAL_ARTICLES); const [selectedArticle, setSelectedArticle] = useState(null); const [isLoggedIn, setIsLoggedIn] = useState(true); // Custom Toast Notification System const [toasts, setToasts] = useState([]); const showToast = (message, type = 'success') => { const id = Date.now(); setToasts(prev => [...prev, { id, message, type }]); setTimeout(() => { setToasts(prev => prev.filter(t => t.id !== id)); }, 4000); }; // State Search & Filter const [searchQuery, setSearchQuery] = useState(''); const [selectedCategory, setSelectedCategory] = useState('All'); // User Profile const [currentUser, setCurrentUser] = useState({ name: "Ahmad Mujahid", institution: "Sadra Blogger Community", bio: "Pecinta kopi hangat, buku filsafat saku, dan esai bertema humaniora populer.", avatar: "https://images.unsplash.com/photo-1535713875002-d1d0cf377fde?w=150", points: 120, badge: "Top Contributor" }); // State Bookmark & Likes const [bookmarkedIds, setBookmarkedIds] = useState(["art-1"]); const [likedIds, setLikedIds] = useState(["art-1", "art-3"]); // Submission & Auto Redirect States const [isSubmitting, setIsSubmitting] = useState(false); const [showSuccessModal, setShowSuccessModal] = useState(false); const [countdown, setCountdown] = useState(3); const [pendingWaUrl, setPendingWaUrl] = useState(""); // Set Theme Class to HTML useEffect(() => { const root = window.document.documentElement; if (theme === 'dark') { root.classList.add('dark'); } else { root.classList.remove('dark'); } }, [theme]); // Auto-redirect countdown effect useEffect(() => { let timer; if (showSuccessModal && countdown > 0) { timer = setTimeout(() => { setCountdown(prev => prev - 1); }, 1000); } else if (showSuccessModal && countdown === 0) { // Trigger auto-redirect to WA when countdown reaches 0 window.open(pendingWaUrl, '_blank'); setShowSuccessModal(false); setCountdown(3); // Reset setCurrentPage('dashboard'); } return () => clearTimeout(timer); }, [showSuccessModal, countdown, pendingWaUrl]); // AI Assistant States (Gemini Key & Loading) const [geminiApiKey, setGeminiApiKey] = useState(""); const [aiLoading, setAiLoading] = useState(false); // Editor Draft States const [editorTitle, setEditorTitle] = useState(""); const [editorAbstract, setEditorAbstract] = useState(""); const [editorContent, setEditorContent] = useState(""); const [editorCategory, setEditorCategory] = useState("Filsafat Populer"); const [editorTags, setEditorTags] = useState(""); // Discussion state for individual articles const [newCommentText, setNewCommentText] = useState(""); // Toggle Bookmark const toggleBookmark = (id) => { if (bookmarkedIds.includes(id)) { setBookmarkedIds(prev => prev.filter(item => item !== id)); showToast("Dihapus dari daftar bacaan", "info"); } else { setBookmarkedIds(prev => [...prev, id]); showToast("Disimpan ke daftar bacaan", "success"); } }; // Toggle Like const toggleLike = (id) => { if (likedIds.includes(id)) { setLikedIds(prev => prev.filter(item => item !== id)); setArticles(prev => prev.map(art => art.id === id ? { ...art, likes: art.likes - 1 } : art)); } else { setLikedIds(prev => [...prev, id]); setArticles(prev => prev.map(art => art.id === id ? { ...art, likes: art.likes + 1 } : art)); showToast("Menyukai artikel ini", "success"); } }; // Redirect to WhatsApp helper with formatted text const handleWhatsAppRedirect = (title, category, tags, abstract, content) => { const waNumber = "6285863889768"; // WA: 085863889768 const formattedMessage = `Halo Admin *SymposiumSadra*, saya ingin mengirimkan naskah tulisan baru untuk diterbitkan!%0A%0A` + `*Judul:* ${encodeURIComponent(title || "(Belum Diisi)")}%0A` + `*Kategori:* ${encodeURIComponent(category)}%0A` + `*Kata Kunci/Tag:* ${encodeURIComponent(tags || "-")}%0A` + `*Ringkasan:* ${encodeURIComponent(abstract || "-")}%0A%0A` + `*Isi Draf Artikel:*%0A${encodeURIComponent(content ? content.substring(0, 900) + (content.length > 900 ? "... [Selengkapnya terlampir]" : "") : "[Draf Masih Kosong]")}`; return `https://api.whatsapp.com/send?phone=${waNumber}&text=${formattedMessage}`; }; // Submission Handler (Locally saves AND prompts WA Send with countdown success screen) const handlePublishSubmit = (e) => { e.preventDefault(); if (!editorTitle || !editorContent || !editorAbstract) { showToast("Harap isi Judul, Ringkasan, dan Konten Artikel!", "error"); return; } // Checking minimal word count guideline (Mojok style: 500 words target) const wordCount = editorContent.trim().split(/\s+/).filter(Boolean).length; if (wordCount < 100) { showToast("Gagal Submit: Draf tulisan Anda terlalu pendek. Minimal syarat adalah 100 kata untuk pengiriman demo ini.", "error"); return; } setIsSubmitting(true); // Simulate premium database saving effect setTimeout(() => { const tagsArray = editorTags ? editorTags.split(",").map(t => t.trim()) : ["Esai"]; const newArticle = { id: `art-${Date.now()}`, title: editorTitle, abstract: editorAbstract, content: editorContent, category: editorCategory, tags: tagsArray, author: { name: currentUser.name, institution: currentUser.institution, avatar: currentUser.avatar }, publishedAt: new Date().toISOString().split('T')[0], readingTime: Math.max(1, Math.ceil(editorContent.split(/\s+/).length / 180)), views: 1, likes: 0, bookmarks: 0, status: "Pending Review", comments: [] }; setArticles(prev => [newArticle, ...prev]); // Generate WA URL and configure states for transition const waUrl = handleWhatsAppRedirect(editorTitle, editorCategory, editorTags, editorAbstract, editorContent); setPendingWaUrl(waUrl); setIsSubmitting(false); setShowSuccessModal(true); setCountdown(3); // Reset editor setEditorTitle(""); setEditorAbstract(""); setEditorContent(""); setEditorTags(""); showToast("Draf berhasil disimpan di website!", "success"); }, 1500); }; // AI Tools for Popular Polish const triggerAiSummary = async (textToSummarize) => { if (!textToSummarize) { showToast("Tulis draf konten terlebih dahulu agar AI dapat merangkum!", "error"); return; } setAiLoading(true); try { const systemPrompt = "Anda adalah asisten AI editor blog kreatif. Buat rangkuman pembuka (teaser/hook) yang menarik, santai, dan persuasif sepanjang 2-3 kalimat untuk menarik perhatian pembaca umum."; const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-09-2025:generateContent?key=${geminiApiKey}`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ contents: [{ parts: [{ text: `Buat teaser blog menarik dari tulisan ini:\n\n${textToSummarize}` }] }], systemInstruction: { parts: [{ text: systemPrompt }] } }) }); const data = await response.json(); const text = data.candidates?.[0]?.content?.parts?.[0]?.text; if (text) { setEditorAbstract(text.trim()); showToast("AI berhasil membuat teaser pembuka yang estetik!", "success"); } else { throw new Error(); } } catch (err) { setTimeout(() => { const sentences = textToSummarize.split('.'); if (sentences.length > 2) { const mockSummary = "Ulasan mendalam namun dibawakan secara kasual tentang esensi kehidupan kita hari ini. Temukan sudut pandang unik yang akan membuka mata Anda dalam artikel ini!"; setEditorAbstract(mockSummary); showToast("AI (Simulasi): Intro blog berhasil dibuat!", "success"); } else { showToast("Tulis konten draf yang lebih panjang terlebih dahulu.", "error"); } }, 1000); } finally { setAiLoading(false); } }; const triggerAiTags = async (titleText, contentText) => { if (!titleText) { showToast("Harap isi judul artikel terlebih dahulu!", "error"); return; } setAiLoading(true); try { const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-09-2025:generateContent?key=${geminiApiKey}`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ contents: [{ parts: [{ text: `Berdasarkan judul blog: "${titleText}" dan konten: "${contentText.substring(0, 300)}", berikan 4 tag tren populer dipisahkan dengan koma.` }] }] }) }); const data = await response.json(); const text = data.candidates?.[0]?.content?.parts?.[0]?.text; if (text) { setEditorTags(text.trim()); showToast("Tag populer berhasil disematkan!", "success"); } else { throw new Error(); } } catch (err) { setTimeout(() => { setEditorTags("Kisah Menarik, Opini Populer, Mindset, Tren Masa Kini"); showToast("Rekomendasi tag populer disematkan (Simulasi)!", "success"); }, 1000); } finally { setAiLoading(false); } }; // Add Comment Handler const handleAddComment = (e) => { e.preventDefault(); if (!newCommentText.trim()) return; const newComment = { id: `comm-${Date.now()}`, user: currentUser.name, avatar: currentUser.avatar, text: newCommentText, date: new Date().toISOString().split('T')[0] }; setArticles(prev => prev.map(art => { if (art.id === selectedArticle.id) { const updatedComments = [...art.comments, newComment]; setSelectedArticle(prevSel => ({ ...prevSel, comments: updatedComments })); return { ...art, comments: updatedComments }; } return art; })); setNewCommentText(""); showToast("Komentar berhasil dikirim!", "success"); }; // Filtered Articles Logic const filteredArticles = articles.filter(art => { const matchesSearch = art.title.toLowerCase().includes(searchQuery.toLowerCase()) || art.abstract.toLowerCase().includes(searchQuery.toLowerCase()) || art.author.name.toLowerCase().includes(searchQuery.toLowerCase()); const matchesCategory = selectedCategory === 'All' || art.category === selectedCategory; return matchesSearch && matchesCategory; }); return (
Draf naskah Anda telah terdaftar dalam database website kami. Sistem sekarang akan mengalihkan Anda secara otomatis ke WhatsApp Redaksi untuk verifikasi akhir.
Ruang Menulis Santai, Berbagi Berita Menarik, dan Mempublikasikan Gagasan Segar. Tulis draf naskah Anda secara digital dan serahkan langsung ke redaksi kami!
{/* CTA Buttons */}Gagasan dan tren terpopuler yang wajib Anda ikuti
{art.abstract}
Kumpulan artikel, esai bebas, kesehatan mental, hingga tips cerdas dari kontributor berpengalaman.
Tulisan tidak ditemukan
Coba cari kata kunci lain
{art.abstract}
{selectedArticle.abstract}
{paragraph}
))}Inspirasikan orang lain dengan membagikan esai populer ini ke lingkar pertemanan Anda.
Belum ada komentar untuk tulisan ini. Jadilah yang pertama berkomentar!
) : ({comm.text}
Ketik tulisan terbaik Anda di bawah, lakukan validasi syarat penulisan, lalu klik tombol submit untuk menyimpan naskah di web dan mengirimkan draf ke WhatsApp redaksi.
Panjang Tulisan: Esai populer berkisar antara 500 – 1000 kata untuk menjamin kedalaman sudut pandang yang renyah dan mudah dibaca.
Gaya & Karakter: Bersifat populer, komunikatif, segar, argumentatif, dan memicu dialektika berpikir yang santun serta terbebas dari muatan SARA.
Orisinalitas: Naskah harus asli karya pribadi, belum pernah diterbitkan di media digital manapun, dan bukan hasil plagiasi (Toleransi plagiasi maks. 10%).
Biodata Penulis: Wajib menyertakan atribusi atau biografi singkat (1-2 kalimat) di baris terbawah draf tulisan Anda.
Hak Penyuntingan: Redaksi SymposiumSadra berhak menyunting judul, tata bahasa, dan ilustrasi tanpa mengubah esensi dan maksud utama tulisan.
Alur Pengiriman: Setelah Anda menekan tombol submit, sistem web akan mendaftarkan naskah ke database lokal, kemudian mengarahkan Anda ke WhatsApp redaksi.
Kami mengapresiasi setiap esai warga yang masuk. Draf naskah yang lolos kurasi redaksi akan dipublikasikan secara resmi di website dan mendapat atribusi penulis secara luas.
Jika draf Anda sudah tersusun di dalam dokumen eksternal, Anda dapat langsung melakukan submit naskah instan melalui tautan admin WhatsApp di bawah ini.
Kelola portofolio tulisan populer Anda dan periksa performa engagement esai Anda.
Setiap tulisan populer yang Anda ajukan melalui submit web akan divalidasi oleh admin dalam waktu maksimal 1x24 jam untuk diterbitkan secara publik di platform ini.
Anda belum menulis esai populer di sini.
Kami berfokus untuk menyajikan opini santai, berita hangat, tulisan penuh makna, dan esai terbaik dari komunitas sadra.
Penyaring draf tulisan warga dan penyusun tren berita harian.
Menerima draf langsung dari WhatsApp dan mengatur rilis mingguan portal berita.