nextjs
Catatan teknis seputar web development, DevOps, dan integrasi AI.
71 artikel
- 10.35frontend
Tautan Mati di Sidebar Admin: Menu yang Selalu 403 Harus Dibuang
Audit nav menemukan dua menu yang selalu berakhir 403 dan tujuh item yang masih berkata baca saja. Keduanya dibuang, dan ketiadaannya ikut diuji.
TL;DR: Sidebar admin error. Menu navigasi tidak berfungsi. Perbaikan dilakukan di frontend.
#rbac#ux#nextjs - 03.43frontend
Sidebar Empat Grup: Navigasi Ikut Izin, Bukan Jenis Konten
Sidebar admin KotaPortal dipecah jadi empat grup berdasarkan izin: milik sendiri untuk tulis, lintas bidang untuk baca, grup sementara untuk backend belum siap.
TL;DR: Panel admin KotaPortal kini memecah sidebar jadi empat grup yang nunjukkin izin baca atau tulis tiap bidang, tanpa ubah logika auth. Item dikelompokin otomatis dari satu peta kemampuan, plus pill bidang dan banner yang sebut pemilik konten. Navigasi cuma petunjuk, gerbangnya tetap di server, dan semua lolos uji.
#rbac#nextjs#ux - 23.44frontend
Limit 100 Diam-diam Jadi 20, Daftarnya 54
Kontrak limit lebih penting daripada angka yang dikirim klien. Ketika limit 100 diam-diam menjadi 20, daftar 54 kartu hanya menampilkan 20 di layar.
TL;DR: Ada 54 organisasi olahraga. Tapi di layar hanya muncul 20. Perbaikannya adalah mengambil data per halaman penuh.
#react#nextjs#typescript - 22.46frontend
Tiga Halaman 7 Baris, Satu Komponen 471 Baris
Modul Kelembagaan di admin CMS: tiga route server 7-14 baris, satu editor klien 471 baris, dan guard id yang melempar 404 sebelum fetch.
TL;DR: Halaman 404 muncul karena id organisasi tidak valid. Validasi id dilakukan di route sunting sebelum komponen dimuat. Komponen klien melakukan validasi tambahan untuk kenyamanan pengguna.
#nextjs#react#typescript - 20.28frontend
Server yang Menulis Judul, Klien yang Mengisi Daftar
Cangkang halaman, metadata, dan judul datang dari server; daftar, tab, dan pencarian debounce 350 ms hidup di satu island klien.
TL;DR: Halaman informasi olahraga baru dibuat. Server hanya menulis metadata dan judul, isi daftarnya diambil di browser. Judul dan metadata dihasilkan di server untuk mesin telusur.
#nextjs#react#seo - 20.43backend
Batas Upload 8 MiB: Satu Angka, Empat Lapisan
Satu batas upload bukan satu setting: FastAPI ternyata tidak menolak berkas besar. Gerbang aslinya ada di browser, nginx, dan Next.js.
TL;DR: Unggahan 8,5 MiB di KotaPortal gagal nyeleneh, tadinya dikira FastAPI yang nolak. Ternyata FastAPI nggak nolak otomatis, gerbangnya ada di empat tempat: browser, nginx (default 1 MiB), Server Actions Next.js (default 1 MB), dan kode aplikasi. Solusinya gampang: samain konstanta 8 MiB di keempat lapisan biar nggak ada celah.
#file-upload#nginx#fastapi - 21.26security
Mitigasi Kerentanan SSRF pada Next.js Image Optimizer
Konfigurasi remotePatterns wildcard menjadikan /_next/image proxy fetch terbuka. Pola penutupannya: local-only, satu host eksplisit, uji negatif.
TL;DR: Konfigurasi Next.js KotaPortal pakai wildcard hostname plus CSP img-src https global, alhasil endpoint /_next/image bisa jadi proxy terbuka rawan SSRF. Solusinya, remotePatterns dihapus total dan CSP dipersempit, host eksternal yang emang dibutuhkan ditambahin eksplisit satu-satu. Biar nggak balik lagi, ada tes otomatis yang mastiin URL asal dikasih 400, bukan 200.
#nextjs#next-image#ssrf - 13.51frontend
Tanggal yang Bergeser Sendiri: Pin Zona Waktu Saat Render
Data benar, tampilan salah: toLocaleString tanpa timeZone membuat server UTC dan browser WIB merender tanggal berbeda. Kunci di lapisan presentasi.
TL;DR: Tanggal tiket kelihatan beda karena toLocaleString dipanggil tanpa opsi timeZone, jadi hasilnya ngikutin zona server. Data UTC-nya aman, cuma lapisan tampilan yang salah render saat hydration di browser WIB. Solusinya pakai satu utilitas formatDateTime yang mengunci Asia/Jakarta, terus dibungkus test biar gak balik lagi.
#frontend#nextjs#timezone - 18.05frontend
Mockup Next.js Tanpa Login untuk Review Klien
Ganti gambar mockup statis dengan rute Next.js sungguhan yang bisa dibuka klien tanpa sesi, lewat daftar rute publik eksplisit di proxy.
TL;DR: Halaman mockup awalnya keblokir login, dan solusinya bukan lepasin semua autentikasi. Triknya pisahin konsep auth: mockup cuma dikecualikan dari otorisasi lewat file proxy Next.js dengan daftar rute publik eksplisit, sisanya tetap diarahkan ke login. Datanya wajib fixture, jangan sampe nyentuh DB produksi.
#nextjs#middleware#prototyping