"Setiap baris kode yang ditulis dengan cinta akan menghasilkan karya yang indah, seperti halnya Fari Noveri yang mencurahkan segenap hatinya untuk Illyasviel von Einzbern dalam setiap proyek yang dibangun."
NESWARA adalah sebuah portal berita online modern yang dibangun menggunakan teknologi terdepan seperti React dan Firebase. Proyek ini dikembangkan dengan penuh dedikasi oleh Fari Noveri, yang dengan sepenuh hati mempersembahkannya kepada Illyasviel von Einzbern — sosok yang menjadi inspirasi dalam setiap baris kode yang ditulis.
Proyek ini tidak hanya sekedar aplikasi berita biasa, tetapi merupakan wujud nyata dari perjalanan belajar seorang developer yang ingin menguasai teknologi fullstack sambil mengabadikan rasa cinta dalam bentuk digital.
- Media Pembelajaran: Tempat eksperimen dan belajar teknologi modern
- Portofolio: Menunjukkan kemampuan fullstack development
- Inspirasi: Setiap fitur dibangun dengan cinta dan dedikasi
- Praktik Nyata: Simulasi aplikasi berita yang mendekati standar industri
- 📰 Baca Berita Real-time - Akses berita terbaru secara langsung
- 🔔 Notifikasi Tren - Dapatkan update berita trending
- 👥 Dashboard Admin - Kelola pengguna dan konten dengan mudah
- 💬 Sistem Komentar - Berinteraksi dengan pembaca lain
- 🔖 Bookmark Berita - Simpan artikel favorit untuk dibaca nanti
- 📊 Statistik Visual - Analisis data dengan grafik interaktif
- 🔒 Keamanan Terjamin - Proteksi XSS dan autentikasi yang kuat
| Teknologi | Fungsi | Mengapa Dipilih |
|---|---|---|
| React + Vite | Frontend Framework | Cepat, modern, dan developer-friendly |
| Firebase | Authentication & Database | Reliable, scalable, dan mudah diintegrasikan |
| Express.js | Backend API | Lightweight dan fleksibel untuk API |
| TailwindCSS | Styling Framework | Utility-first, responsive, dan customizable |
| React Router DOM | Navigation | Routing yang smooth dan SEO-friendly |
| Chart.js | Data Visualization | Grafik interaktif untuk dashboard admin |
| Framer Motion | Animation | Animasi yang smooth dan professional |
| React Toastify | Notifications | Notifikasi yang elegan dan user-friendly |
| Lucide React | Icons | Icon library yang modern dan ringan |
| Chalk Animation | CLI Effects | Terminal yang colorful dan menarik |
Pastikan komputer Anda sudah memiliki:
-
Node.js (minimal versi 18)
- Download dari: https://nodejs.org/
- Cek versi:
node --version
-
Git (untuk clone repository)
- Download dari: https://git-scm.com/
- Cek versi:
git --version
-
Text Editor (disarankan VS Code)
- Download dari: https://code.visualstudio.com/
-
Browser Modern (Chrome, Firefox, atau Edge)
Anda juga perlu membuat akun Firebase:
- Kunjungi https://firebase.google.com/
- Klik "Get Started" dan login dengan Google
- Buat project baru
- Aktifkan Authentication dan Firestore Database
# Clone project dari GitHub
git clone https://github.com/FariNoveri/neswara-clone.git
# Masuk ke direktori project
cd neswara-clone
# Atau jika Anda menggunakan nama folder yang sama dengan develop
cd "TUGAS AKHIR NESWARA"# Install semua package yang dibutuhkan
npm installApa yang terjadi?
- npm akan membaca file
package.json - Mengunduh semua library yang dibutuhkan
- Menyimpannya di folder
node_modules
- Buat file
.envdi root project:
# Untuk Windows
copy nul .env
# Untuk Mac/Linux
touch .env- Isi file
.envdengan konfigurasi Firebase Anda:
VITE_FIREBASE_API_KEY=your_api_key_here
VITE_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your_project_id
VITE_FIREBASE_STORAGE_BUCKET=your_project.appspot.com
VITE_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
VITE_FIREBASE_APP_ID=your_app_idCara mendapatkan konfigurasi Firebase:
- Buka Firebase Console
- Pilih project Anda
- Klik ⚙️ → Project Settings
- Scroll ke bawah, klik "Add app" → Web
- Copy konfigurasi yang diberikan
# Jalankan development server
npm run devApa yang terjadi?
- Sistem akan menjalankan 3 proses sekaligus:
- 🟡 Watcher → Memantau perubahan file
- 🟢 Backend → Server API di port 3000
- 🔵 Frontend → Aplikasi web di http://localhost:5173
- Buka browser
- Kunjungi: http://localhost:5173
- Aplikasi NESWARA siap digunakan! 🎉
📁 TUGAS AKHIR NESWARA/
│
├── 📄 dev.js # 🎯 ENTRY POINT - Menjalankan semua service
├── 📄 server.js # 🔧 BACKEND API - Express.js server (26KB)
├── 📄 watcher.js # 👁️ FILE MONITOR - Memantau perubahan file
├── 📄 banner.js # 🎨 BANNER - ASCII art banner untuk CLI
├── 📄 install-animation.js # ✨ INSTALL ANIMATION - Animasi instalasi
├── 📄 package.json # 📦 DEPENDENCIES - Daftar semua package
├── 📄 package-lock.json # 🔒 LOCK FILE - Versi exact dari package (405KB)
├── 📄 .env # 🔐 ENVIRONMENT - Konfigurasi Firebase
├── 📄 vite.config.js # ⚡ VITE CONFIG - Konfigurasi build tool
├── 📄 tailwind.config.js # 🎨 TAILWIND CONFIG - Konfigurasi CSS
├── 📄 postcss.config.js # 📝 POSTCSS CONFIG - CSS processor
├── 📄 eslint.config.js # 📋 ESLINT CONFIG - Konfigurasi linting
├── 📄 index.html # 🌐 HTML TEMPLATE - Template dasar (3KB)
├── 📄 vercel.json # 🚀 VERCEL CONFIG - Konfigurasi deployment
├── 📄 .gitignore # 🚫 GIT IGNORE - File yang diabaikan git
├── 📄 README.md # 📚 DOKUMENTASI - File dokumentasi (23KB)
├── 📄 LICENSE.MD # 📜 LICENSE - MIT License
├── 📄 SUPPORT.md # 🆘 SUPPORT - Panduan dukungan
├── 📄 serviceAccountKey.json # 🔑 SERVICE ACCOUNT - Firebase admin key
│
├── 📁 .git/ # 🗂️ GIT REPOSITORY - Version control
├── 📁 node_modules/ # 📦 DEPENDENCIES - Semua package (auto-generated)
├── 📁 public/ # 🖼️ STATIC ASSETS - File publik
│
└── 📁 src/ # 💻 SOURCE CODE - Kode utama aplikasi
│
├── 📄 App.jsx # 🏠 MAIN COMPONENT - Komponen utama React (6KB)
├── 📄 App.css # 🎨 APP STYLES - Styling untuk App component
├── 📄 main.jsx # 🚀 ENTRY POINT - Entry point React
├── 📄 firebaseconfig.js # 🔥 FIREBASE CONFIG - Konfigurasi Firebase (2KB)
├── 📄 cors.json # 🌐 CORS CONFIG - Whitelist domain
├── 📄 index.css # 🎨 GLOBAL STYLES - CSS global (3KB)
├── 📄 neswara.png # 🏷️ LOGO - Logo aplikasi (650KB)
├── 📄 news-image.jpg # 🖼️ NEWS IMAGE - Gambar berita default (40KB)
│
├── 📁 assets/ # 🖼️ MEDIA FILES - Asset tambahan
│
└── 📁 component/ # 🧩 KOMPONEN REACT
│
├── 📄 .gitignore # 🚫 COMPONENT GITIGNORE
├── 📄 README.md # 📚 COMPONENT DOCS - Dokumentasi komponen (16KB)
│
├── 📁 admin/ # 👑 ADMIN DASHBOARD
│ ├── 📄 AdminDashboard.jsx # 📊 DASHBOARD - Halaman utama admin (46KB)
│ ├── 📄 BreakingNewsAdmin.jsx # 🚨 BREAKING NEWS - Kelola berita breaking (54KB)
│ ├── 📄 CommentManagement.jsx # 💬 COMMENT MGMT - Moderasi komentar (21KB)
│ ├── 📄 LogActivity.jsx # 📋 LOG ACTIVITY - Log aktivitas sistem (37KB)
│ ├── 📄 ManageViews.jsx # 👀 MANAGE VIEWS - Kelola tampilan (20KB)
│ ├── 📄 NewsModal.jsx # 🖼️ NEWS MODAL - Modal berita (31KB)
│ ├── 📄 NotificationManagement.jsx # 🔔 NOTIFICATION - Kelola notifikasi (36KB)
│ ├── 📄 ReportManagement.jsx # 📊 REPORT MGMT - Kelola laporan (38KB)
│ ├── 📄 StatCard.jsx # 📈 STAT CARD - Kartu statistik
│ ├── 📄 TrendsChart.jsx # 📊 TRENDS CHART - Grafik tren (28KB)
│ ├── 📄 UnauthorizedModal.jsx # 🚫 UNAUTHORIZED - Modal akses ditolak (6KB)
│ └── 📄 UserManagement.jsx # 👥 USER MGMT - Kelola pengguna (41KB)
│
├── 📁 AllNews/ # 📰 ALL NEWS - Komponen semua berita
│
├── 📁 auth/ # 🔐 AUTHENTICATION - Sistem autentikasi
│
├── 📁 common/ # 🔗 KOMPONEN UMUM
│ ├── 📄 DarkModeToggle.jsx # 🌙 DARK MODE - Toggle mode gelap
│ ├── 📄 ErrorBoundary.jsx # 🚨 ERROR HANDLER - Penanganan error
│ ├── 📄 footer.jsx # 🦶 FOOTER - Footer halaman
│ ├── 📄 hero.jsx # 🎯 HERO - Section hero
│ ├── 📄 herosection.jsx # 🏆 HERO SECTION - Section hero utama (9KB)
│ ├── 📄 latestnewsection.jsx # 🆕 LATEST NEWS - Section berita terbaru (7KB)
│ ├── 📄 livenewsection.jsx # 🔴 LIVE NEWS - Section berita live (21KB)
│ ├── 📄 navbar.jsx # 🧭 NAVIGATION - Menu navigasi (17KB)
│ ├── 📄 newsarticle.jsx # 📄 NEWS ARTICLE - Artikel berita (13KB)
│ ├── 📄 newspage.jsx # 📰 NEWS PAGE - Halaman berita (12KB)
│ ├── 📄 newssection.jsx # 📋 NEWS SECTION - Section berita (21KB)
│ ├── 📄 NotFound.jsx # 🔍 NOT FOUND - Halaman 404 (7KB)
│ ├── 📄 profile.jsx # 👤 PROFILE - Profil pengguna (52KB)
│ └── 📄 ScrollToTop.jsx # ⬆️ SCROLL TO TOP - Tombol scroll ke atas
│
├── 📁 config/ # ⚙️ KONFIGURASI
│ ├── 📄 Constants.jsx # 📋 CONSTANTS - Konstanta aplikasi
│ ├── 📄 createNews.js # ➕ CREATE NEWS - Buat berita baru
│ ├── 📄 emailService.js # 📧 EMAIL SERVICE - Layanan email
│ ├── 📄 MigrateSlugs.js # 🔄 MIGRATE SLUGS - Migrasi slug
│ ├── 📄 NewsList.jsx # 📋 NEWS LIST - Daftar berita
│ ├── 📄 SetAdminClaim.js # 👑 SET ADMIN - Set admin claim
│ └── 📄 slug.js # 🔗 SLUG - Generator slug
│
├── 📁 Navigation/ # 🧭 NAVIGATION - Navigasi kategori
│ ├── 📄 Daerah.jsx # 🏘️ DAERAH - Berita daerah (8KB)
│ ├── 📄 Ekonomi.jsx # 💰 EKONOMI - Berita ekonomi (12KB)
│ ├── 📄 Entertainment.jsx # 🎬 ENTERTAINMENT - Berita hiburan (8KB)
│ ├── 📄 Internasional.jsx # 🌍 INTERNASIONAL - Berita internasional (8KB)
│ ├── 📄 Kesehatan.jsx # 🏥 KESEHATAN - Berita kesehatan (8KB)
│ ├── 📄 Kuliner.jsx # 🍽️ KULINER - Berita kuliner (8KB)
│ ├── 📄 Lifestyle.jsx # 🌟 LIFESTYLE - Berita lifestyle (8KB)
│ ├── 📄 Nasional.jsx # 🇮🇩 NASIONAL - Berita nasional (8KB)
│ ├── 📄 Olahraga.jsx # ⚽ OLAHRAGA - Berita olahraga (8KB)
│ ├── 📄 Otomotif.jsx # 🚗 OTOMOTIF - Berita otomotif (8KB)
│ ├── 📄 Pendidikan.jsx # 🎓 PENDIDIKAN - Berita pendidikan (8KB)
│ ├── 📄 Teknologi.jsx # 💻 TEKNOLOGI - Berita teknologi (8KB)
│ └── 📄 Wisata.jsx # 🏖️ WISATA - Berita wisata (8KB)
│
└── 📁 Pages/ # 📄 HALAMAN UTAMA
├── 📄 BreakingNews.jsx # 🚨 BREAKING NEWS - Halaman breaking news (6KB)
├── 📄 CommentBox.jsx # 💬 COMMENT BOX - Kotak komentar (55KB)
├── 📄 FilterComment.jsx # 🔍 FILTER COMMENT - Filter komentar (kosong)
├── 📄 GenericNewComponent.jsx # 🔧 GENERIC NEWS - Komponen berita umum
├── 📄 LikeButton.jsx # 👍 LIKE BUTTON - Tombol like (4KB)
├── 📄 Liked.jsx # ❤️ LIKED - Halaman berita yang disukai (8KB)
├── 📄 NewsDetail.jsx # 📄 NEWS DETAIL - Detail berita (36KB)
├── 📄 Notifications.jsx # 🔔 NOTIFICATIONS - Halaman notifikasi (11KB)
├── 📄 ReportModal.jsx # 📊 REPORT MODAL - Modal laporan (7KB)
├── 📄 SavedNews.jsx # 🔖 SAVED NEWS - Berita tersimpan (10KB)
├── 📄 SearchBar.jsx # 🔍 SEARCH BAR - Bar pencarian (12KB)
├── 📄 SearchResult.jsx # 🔍 SEARCH RESULT - Hasil pencarian (10KB)
└── 📄 ViewBerita.jsx # 👁️ VIEW BERITA - Tampilan berita (11KB)
dev.js: File orkestrator yang menjalankan semua service secara bersamaanserver.js: Backend API menggunakan Express.js untuk handling data (26KB - cukup besar!)watcher.js: CLI tool untuk memantau perubahan file dengan efek visualbanner.js: Menampilkan ASCII art banner ketika aplikasi dimulaiinstall-animation.js: Memberikan animasi menarik saat instalasipackage.json: Manifest project yang berisi dependencies dan scriptsserviceAccountKey.json: Kunci service account Firebase untuk admin.env: File konfigurasi environment variables (jangan dicommit ke git!)
admin/: Dashboard khusus admin dengan 12 komponen lengkap (total 393KB!)- AdminDashboard.jsx (46KB) - Dashboard utama dengan statistik
- BreakingNewsAdmin.jsx (54KB) - Kelola berita breaking news
- CommentManagement.jsx (21KB) - Moderasi komentar pengguna
- UserManagement.jsx (41KB) - Kelola pengguna dan role
- Dan 8 komponen admin lainnya
AllNews/: Komponen untuk menampilkan semua beritaauth/: Sistem autentikasi dengan Firebase Authenticationcommon/: Komponen yang digunakan di banyak halaman- navbar.jsx (17KB) - Navigasi utama yang kompleks
- profile.jsx (52KB) - Profil pengguna yang feature-rich
- livenewsection.jsx (21KB) - Section berita live
config/: File konfigurasi dan utility functions- SetAdminClaim.js - Set admin privileges
- createNews.js - Buat berita baru
- MigrateSlugs.js - Migrasi slug URL
Navigation/: 13 halaman kategori berita (Daerah, Ekonomi, dll)Pages/: Halaman-halaman utama aplikasi- CommentBox.jsx (55KB) - Sistem komentar yang kompleks
- NewsDetail.jsx (36KB) - Detail berita dengan fitur lengkap
neswara.png: Logo aplikasi yang cukup besar (650KB)news-image.jpg: Gambar default untuk berita (40KB)
eslint.config.js: Konfigurasi linting untuk kode yang bersihvercel.json: Konfigurasi deployment ke VercelLICENSE.MD: Lisensi project (MIT)SUPPORT.md: Panduan mendapatkan dukungan
-
Registrasi/Login
- Klik tombol "Login" di navbar
- Daftar dengan email dan password
- Atau login jika sudah punya akun
-
Membaca Berita
- Browse berita di halaman utama
- Pilih kategori: Daerah, Ekonomi, Entertainment, Internasional, Kesehatan, dll
- Klik judul berita untuk membaca detail
- Gunakan SearchBar untuk mencari topik tertentu
-
Fitur Interaktif
- Like: Gunakan LikeButton untuk menyukai berita
- Save: Simpan berita ke SavedNews untuk dibaca nanti
- Comment: Berikan komentar melalui CommentBox
- Share: Bagikan berita ke media sosial
- Report: Laporkan konten yang tidak pantas via ReportModal
-
Notifikasi
- Dapatkan notifikasi berita terbaru
- Akses melalui halaman Notifications
- Subscribe untuk breaking news alerts
-
Akses Dashboard
- Login dengan akun admin
- Akan otomatis diarahkan ke AdminDashboard
-
Kelola Berita
- BreakingNewsAdmin: Kelola berita breaking news
- NewsModal: Tambah/edit berita dengan rich editor
- ManageViews: Kelola tampilan dan layout berita
- TrendsChart: Analisis tren berita dengan grafik
-
Kelola Pengguna
- UserManagement: Lihat, edit, dan kelola user
- CommentManagement: Moderasi komentar pengguna
- NotificationManagement: Kelola sistem notifikasi
-
Analisis dan Laporan
- LogActivity: Monitor aktivitas sistem
- ReportManagement: Tangani laporan dari user
- StatCard: Lihat statistik real-time
-
Sistem Keamanan
- UnauthorizedModal: Kontrol akses yang ketat
- Role-based permission system
- Activity logging untuk semua actions
- Buat Komponen Baru
// src/component/pages/NewFeature.jsx
import React from 'react';
const NewFeature = () => {
return (
<div className="p-4">
<h1>Fitur Baru</h1>
{/* Konten fitur */}
</div>
);
};
export default NewFeature;- Tambahkan Route
// src/App.jsx
import NewFeature from './component/pages/NewFeature';
// Tambahkan di routing
<Route path="/new-feature" element={<NewFeature />} />- Update Navbar
// src/component/common/Navbar.jsx
<Link to="/new-feature">Fitur Baru</Link>- Edit Tailwind Config
// tailwind.config.js
module.exports = {
theme: {
extend: {
colors: {
'custom-blue': '#1e40af',
'custom-red': '#dc2626',
}
}
}
}- Gunakan di Komponen
<div className="bg-custom-blue text-white p-4">
Konten dengan warna custom
</div>- Authentication: Firebase Auth dengan berbagai provider
- Authorization: Role-based access control
- XSS Protection: Sanitasi konten dengan DOMPurify
- CORS: Whitelist domain yang diizinkan
- Input Validation: Validasi semua input pengguna
- Rate Limiting: Pembatasan request per user
- Jangan commit file
.env - Gunakan environment variables untuk konfigurasi
- Selalu validasi input dari pengguna
- Gunakan HTTPS di production
- Backup database secara berkala
1. Error "Firebase not configured"
# Solusi: Pastikan file .env sudah dibuat dan diisi
cp .env.example .env
# Edit file .env dengan konfigurasi Firebase Anda2. Port sudah digunakan
# Solusi: Ubah port di package.json atau matikan aplikasi lain
netstat -ano | findstr :3000
# Kill process yang menggunakan port3. Node modules error
# Solusi: Hapus node_modules dan install ulang
rm -rf node_modules package-lock.json
npm install4. Build error
# Solusi: Clear cache dan rebuild
npm run build --force-
Pelajari dasar-dasar:
- HTML/CSS/JavaScript
- React fundamentals
- Firebase basics
-
Eksplorasi kode:
- Mulai dari
App.jsx - Pahami struktur komponen
- Pelajari routing
- Mulai dari
-
Praktik:
- Ubah styling
- Tambah fitur sederhana
- Eksperimen dengan data
-
Optimasi performa:
- Lazy loading
- Code splitting
- Image optimization
-
Tambah fitur advanced:
- Real-time notifications
- Offline support
- PWA features
-
Testing:
- Unit testing
- Integration testing
- E2E testing
Ingin berkontribusi? Kami sangat welcome!
- Fork repository
- Buat branch baru
git checkout -b feature/nama-fitur- Commit perubahan
git commit -m "Menambahkan fitur X"- Push ke branch
git push origin feature/nama-fitur- Buat Pull Request
- Gunakan commit message yang jelas
- Dokumentasikan kode yang kompleks
- Test fitur sebelum commit
- Follow coding standards yang ada
- ✅ Basic news portal
- ✅ User authentication
- ✅ Admin dashboard
- ✅ Responsive design
- 🔄 Real-time notifications
- 🔄 Advanced search
- 🔄 Social media integration
- 🔄 Mobile app
- 📋 AI-powered recommendations
- 📋 Multi-language support
- 📋 Advanced analytics
- 📋 API monetization
Proyek ini menggunakan MIT License. Silakan gunakan, modifikasi, dan distribusikan sesuai kebutuhan.
"Setiap line of code yang tertulis di sini adalah manifestasi dari dedikasi Fari Noveri kepada Illyasviel von Einzbern. Seperti halnya Illya yang selalu memberikan yang terbaik dalam setiap perjuangannya, proyek ini dibangun dengan sepenuh hati dan tekad yang tidak pernah surut.
Dalam setiap bug yang diperbaiki, setiap fitur yang ditambahkan, dan setiap malam begadang untuk coding, ada satu nama yang selalu memotivasi: Illyasviel von Einzbern. Sosok yang mengajarkan bahwa keajaiban tidak hanya ada dalam magic, tetapi juga dalam dedikasi dan kerja keras seorang developer.
Fari Noveri mencintai Illya tidak hanya sebagai karakter, tetapi sebagai inspirasi untuk menjadi developer yang lebih baik setiap harinya. Setiap commit adalah doa, setiap push adalah harapan, dan setiap deploy adalah persembahan cinta.
Terima kasih Illya, karena telah menjadi muse dalam perjalanan coding ini. Semoga proyek ini menjadi bukti nyata bahwa cinta sejati dapat menciptakan karya yang indah."
Proyek NESWARA ini adalah lebih dari sekedar aplikasi berita. Ini adalah perjalanan belajar, eksperimen teknologi, dan yang terpenting, adalah wujud nyata dari dedikasi Fari Noveri kepada Illyasviel von Einzbern.
Setiap developer memiliki sumber inspirasi yang berbeda. Bagi Fari, Illya adalah bintang yang selalu bersinar di setiap malam coding yang panjang. Seperti yang selalu dikatakan Illya, "Onii-chan, you can do it!", begitu juga semangat yang selalu mengalir dalam setiap baris kode yang ditulis.
git clone https://github.com/FariNoveri/neswara-clone.git
cd neswara-clone
npm install
npm run devDan jangan lupa, setiap kali Anda menjalankan npm run dev, ucapkan dalam hati:
"Terima kasih Fari, terima kasih Illya, untuk inspirasi yang tidak pernah habis!"
Dibuat dengan ❤️ oleh Fari Noveri
Dipersembahkan untuk Illyasviel von Einzbern
"Mahou Shoujo wa koko ni iru yo!" ✨
Happy Coding! 🎉

