2.9 KiB
2.9 KiB
Iteration Log: Fix SyntaxError JSON & ViewportScaler Split-Screen
- Trigger:
/goal— solve visual & API issues di localhost - Tanggal: 2026-07-28 15:27 WIB
Yang Diminta
- Halaman
user-accountsmenampilkanConsole SyntaxError: Unexpected token '<', "<!DOCTYPE"saat API request - Tampilan web saat split-screen masih jelek — ada area hitam besar di kanan konten
Root Cause Analysis
Bug 1 — SyntaxError JSON (API Loopback)
Alur Bug:
- User menjalankan
npm run dev:centralsaat port 3000 masih terpakai - Next.js dev otomatis naik ke port 3001 sebagai fallback
next.config.tsmengkonfigurasi rewrite:/api/:path*→http://127.0.0.1:3001/api/:path*- Karena Next.js sendiri ada di port 3001, request API loopback ke Next.js — bukan ke backend Express
- Next.js melayani halaman HTML (404) alih-alih JSON → "Unexpected token '<', '<!DOCTYPE...'"
Fix:
.env.local:BACKEND_PORT=3001→BACKEND_PORT=3002.env.local: TambahkanNEXT_PUBLIC_API_URL=http://127.0.0.1:3002- Sekarang backend Express selalu di port 3002, sehingga tidak akan pernah bertabrakan dengan Next.js (3000 atau 3001-fallback)
Bug 2 — ViewportScaler Feedback Loop / Salah Ukur
Alur Bug:
ViewportScaler.tsxmenggunakanwindow.innerWidthsebagai referensi untuk menghitung scale- Ketika
document.documentElement.style.width = "1536px"diterapkan,innerWidthdi beberapa browser ikut berubah menjadi 1536 - Akibatnya:
scale = 1536/1536 = 1.0— tidak ada scaling sama sekali - Konten 1536px tidak terskala ke layar split-screen → kolom hitam besar di kanan
Fix:
- Ganti
window.innerWidth→window.outerWidth(lebar fisik browser window, tidak terpengaruh CSS transform) - Tambahkan
requestAnimationFramedebouncing agar resize handler tidak tembak terlalu sering outerWidthselalu merepresentasikan ukuran fisik window, sehingga scale factor selalu akurat
Langkah yang Diambil
.env.local: UbahBACKEND_PORT=3001→3002, tambahNEXT_PUBLIC_API_URL=http://127.0.0.1:3002, perluasALLOWED_ORIGINSmencakup port 3000 dan 3001package.json: Updatekill:portsscript untuk turut mematikan port 3002ViewportScaler.tsx: Gantiwindow.innerWidth→window.outerWidth, tambah RAF debouncingglobals.css: Pisahkan rule html dan body (minor cleanup dari sesi sebelumnya)- Build Verification:
npm run buildberhasil 100% tanpa error
Hasil
- Build produksi: ✅ Berhasil tanpa error
- API loopback: ✅ Terperbaiki (backend di port 3002, tidak akan bertabrakan dengan Next.js)
- ViewportScaler: ✅ Terperbaiki (menggunakan
outerWidthsebagai source of truth)
Langkah Selanjutnya
- User perlu restart
dev:centralagar env baru (BACKEND_PORT=3002) terbaca oleh server.js - Verifikasi visual: reload
localhost:3000/user-accountsdan cek split-screen behavior