react
Catatan teknis seputar web development, DevOps, dan integrasi AI.
58 artikel
- 23.38frontend
Kontrak Konten Bertipe yang Nyelamatin Refactor
Bentuk kartu perusahaan berubah tiga kali dalam seminggu, tapi kontrak konten bertipe tetap: field opsional plus guard bikin data kosong otomatis singkir.
TL;DR: Penulis bikin kartu perusahaan di Next.js pakai array TS lokal, dan datanya berubah bentuk tiga kali dalam seminggu. Untung field opsional plus guard truthiness bikin data kosong atau placeholder otomatis gak tampil. Nambah kartu ketujuh pun cuma edit file konten, komponennya aman total.
#typescript#react#nextjs - 21.16frontend
Warning Script Tag React 19 di Next.js dan Fix next-themes
React 19 men-flag setiap script tag di komponen, termasuk script anti-FOUC next-themes yang sebenarnya jalan normal. Cara saya membungkamnya di dev saja.
TL;DR: Pas naik ke Next.js 16, next-themes bikin error merah soal script tag di komponen React, padahal dark mode jalan normal. Ternyata cuma false positive, script anti-FOUC-nya tetap jalan, React 19 emang warning semua script inline tanpa mikir konteks SSR. Solusinya gampang, tinggal filter console.error khusus dev buat abaikan pesan itu, kayak trik shadcn/ui.
#react#nextjs#next-themes - 11.33frontend
Locale Switcher Next.js yang Nggak Bikin Visitor Tersesat
Bikin locale switcher Next.js App Router yang preserve current path pakai usePathname dan regex swap, plus active state accessible dengan aria-current.
TL;DR: Locale switcher yang cuma link ke homepage bikin visitor kehilangan konten pas ganti bahasa. Solusinya pakai usePathname plus regex buat swap prefix locale, jadi /en/about tetep nyampe ke /id/about. Jangan lupa aria-current buat active state, dan kalo project makin ribet, pindah aja ke next-intl.
#nextjs#i18n#accessibility - 17.30frontend
Dark Peta MapLibre ala Google Maps lewat Runtime Override
Fiord bikin peta gelap tapi datar. Saya mutasi style JSON-nya langsung di runtime: brightness ladder per layer, label terang ber-halo, plus guard anti-flash.
TL;DR: Fiord dark mode bikin jalan semua abu-abu sama, susah dibaca. Akhirnya fetch JSON Fiord, ubah paint 28 layer bikin tingkatan kecerahan jalan plus label pake halo gelap biar kelihatan kaya Google Maps. Pake cache, show peta dulu baru upgrade style, plus guard biar toggle cepat nggak bikin peta acak-acakan.
#maplibre#openfreemap#dark-mode - 16.45frontend
Peta Mendadak Penuh Watermark: Pindah ke MapLibre dan OpenFreeMap
Basemap CARTO tiba-tiba wajib API key dan peta proyek saya penuh watermark. Ini cerita migrasi tiga komponen Leaflet ke MapLibre GL dengan tile OpenFreeMap.
TL;DR: Basemap CARTO tiba-tiba wajib API key, jadi semua tile peta ketutup watermark abu-abu. Daripada ngurusin kuota, saya pindah ke OpenFreeMap yang gratis tanpa key dan migrasi semua komponen Leaflet ke MapLibre GL. Style dark bawaannya kontrasnya hampir nol, akhirnya diganti fiord biar peta kebaca lagi.
#maplibre#leaflet#openstreetmap - 22.36frontend
Aksen Nav Berpindah Sendiri, Ternyata Salah Modulo
Warna entri AI di navbar saya bergeser begitu urutan menu berubah. Pelajaran soal penugasan warna pakai modulo index dan fix berbasis identitas data.
TL;DR: Warna entri "Tanya AI" di navbar bergeser ternyata karena aksen dihitung pakai modulo index array, bukan bug tema. Perbaikannya mempin warna ke identitas href, plus menambah pill state idle supaya entri khusus beda bentuk sekaligus warna sesuai WCAG. Pelajarannya: identitas visual sebaiknya terikat data, bukan urutan render.
#tailwind#react#css - 12.42frontend
Komponen Chat Terpisah di Mobile, Logika Jawaban Tetap Satu
Chat mobile butuh struktur sendiri ala aplikasi pesan, tetapi logika jawaban tetap satu sumber lewat TurnBody yang diekspor ulang.
TL;DR: Layar sempit butuh struktur beda, bukan versi dipampatkan, jadi ChatMobileThread dibuat khusus di bawah breakpoint lg dengan pola aplikasi pesan: header sticky, gelembung dua sisi, dan composer di bawah. Desktop tiga kolom tak tersentuh. Logika jawaban tetap satu sumber karena TurnBody dipakai ulang lewat named export; 271 barisnya murni tata letak.
#react#frontend#ux - 12.37frontend
Order 1 Ganda: Saat Sidebar Riwayat Chat Menghilang di lg
Sidebar riwayat chat hilang di breakpoint lg: tie-break order CSS dan elemen details yang dipaksa jadi wadah flex, dua akar masalah satu commit.
TL;DR: Sidebar chat menghilang di breakpoint lg karena dua bug dari refactor accordion mobile. Pertama, nilai order yang sama membuat wrapper tengah menang tie-break urutan sumber sehingga sidebar terdorong keluar viewport; solusinya cukup tambah lg:order-2. Kedua, elemen details tidak cocok jadi wadah flex di Chromium, jadi accordion diganti state React biasa dengan tombol aria-expanded dan div.
#css#react#tailwind - 12.34frontend
Tombol 44px, Font 16px: Angka Standar di Panel Chat Mobile
Pass responsif panel chat AI: tombol kirim 44px sesuai WCAG, font input 16px anti zoom iOS, dan transcript 65vh dengan overscroll-contain.
TL;DR: Panel chat yang rapi di desktop ternyata berantakan di mobile: tombol susah ditekan, textarea memicu zoom iOS, dan scroll bocor ke halaman. Perbaikannya bertumpu pada tiga angka standar: tombol 44px sesuai WCAG 2.5.5, font input 16px agar Safari tak memperbesar viewport, dan transcript dibatasi 65vh dengan overscroll-contain. Hasilnya, sentuhan lebih presisi dan gulir berhenti di tempatnya.
#css#tailwind#react