frontend
Catatan teknis seputar web development, DevOps, dan integrasi AI.
46 artikel
- 00.33frontend
Deep-Link Video di Mega Menu: URL, State, dan Preload yang Benar
Mega panel video butuh tiga lapisan URL: path identitas, query state UI, hash timestamp. State video butuh sync manual ke hash. Preload metadata + poster, bukan auto. Prefetch route matikan auto, pakai hover.
TL;DR: Gunakan path URL untuk ID video, query buat state panel, dan hash (#t=) buat timestamp video. Set video preload='metadata' plus poster biar hemat bandwidth, prefetch route pakai hover manual bukan auto. Sinkronin manual currentTime ke hash pas seek biar bookmark dan share tetap work.
#frontend#performance#nextjs - 00.42frontend
Mengapa Kartu Artikel Populer Video Tanpa Thumbnail
Kartu marquee cuma cek thumbnail eksplisit. Video item fallback ke gradient. Fix: rantai thumbnail → i.ytimg hqdefault → gradient. hqdefault selalu ada untuk video publik.
TL;DR: Halaman KotaPortal rusak. Video YouTube cuma tampil gradient biru-ungu. Sekarang sudah diperbaiki dengan rantai fallback.
#frontend#performance#nextjs - 00.34frontend
Mengapa Marquee Populer Tiga Pilar Kosong — dan Cara Mengisinya
Marquee populer 3 pilar (olahraga/kebudayaan/kepemudaan) kosong di pilar muda. Fix: parallel fetch popular + random, mergePopularWithRandom dedupe by id, popular priority, slice 9.
TL;DR: Pilar muda di KotaPortal punya marquee setengah kosong. Perbaikan dilakukan dengan parallel fetch dan merge dedupe. Marquee sekarang selalu penuh 9 item.
#frontend#performance#nextjs - 00.02frontend
Membangun Marquee 3 Kolom yang Accessible dengan CSS dan React
Marquee 3 kolom x 3 pilar pakai CSS keyframes + React: seamless loop, pause-on-hover, RTL-ready, aria-hidden/inert untuk accessibility -- tanpa library carousel.
TL;DR: Pakai CSS keyframes buat marquee. Ngga pakai library carousel karena berat. Hasilnya tiga pilar marquee vertikal.
#react#css#marquee - 10.38frontend
Gerbang Validasi Sebelum Foto Pihak Ketiga Masuk Grid
Nama dicocokkan dulu, gambar dicek setelah selesai dimuat, yang ragu dikembalikan. Begitu bentuk gerbang validasi untuk foto pihak ketiga.
TL;DR: Saya menemukan masalah dengan foto di grid budaya. Foto dari Google Maps digunakan sebagai solusi, tapi harus diverifikasi dulu. Validasi nama dan gambar diperlukan untuk menghindari informasi yang salah.
#kualitas-data#api#frontend - 23.04testing
Menulis E2E untuk Halaman yang Menunda Fetch-nya
Spesifikasi E2E 52 baris untuk halaman daftar ber-debounce 350 ms: nol waitForTimeout, assertion retry sendiri, lima hook data-testid, dan index QA bertambah.
TL;DR: Tes untuk halaman daftar dibuat dengan 52 baris kode. Tes ini menggunakan Playwright untuk menguji elemen berulang kali sampai kondisinya terpenuhi. Timeout assertion dinaikkan menjadi 10 detik untuk mengakomodasi jaringan yang lambat.
#playwright#testing#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 - 23.29backend
Dua Himpunan: Yang Boleh Dibaca, Yang Boleh Dikelola
Membuka akses baca lintas bidang tanpa melonggarkan tulis: readable set dan manageable set sebagai dua himpunan terpisah yang fail-closed.
TL;DR: Dulu API KotaPortal salah kaprah, nyetarain hak baca sama tulis jadi satu, makanya bidang lain cuma lihat daftar kosong. Sekarang dipisah jadi ModulesFor buat nulis dan ReadableModules buat baca semua, jadi ?module= cuma filter, bukan gate. Fail-closed tetap ada buat bidang tak dikenal, UI tetap satu navigasi, tombol edit aja yang disembunyiin.
#rbac#golang#http - 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