Blog

Catatan dari membangunnya

Tulisan singkat soal keputusan yang benar-benar kami ambil, bersama pengukuran yang memaksanya.

2026-10-14

Kami menghapus library chart demi donut 130 piksel

Satu dependency hampir separuh bundle dashboard, dan hanya membeli dua bentuk.

Di ponsel dengan jaringan dibatasi, dashboard butuh 4,1 detik untuk menggambar chart-nya. Waterfall-nya tidak ambigu: 388 kB JavaScript, dan sekitar 130 kB di antaranya adalah library chart yang dipakai untuk satu donut dan satu bar chart. Recharts juga merepotkan soal target sentuh — empat belas kolom di dalam kartu 300 piksel berarti sekitar 21 piksel per tap, yang bukan ukuran kontrol untuk jempol.

Kedua chart kini digambar tangan sebagai SVG. Karena library-nya kami ganti sendiri, interaksinya juga bisa diubah: menyeret melewati chart menggeser seleksi tanpa perlu tap presisi, dan skala sumbunya mengikuti data alih-alih selalu mentok di sepuluh. Chunk terbesar di /dashboard turun dari 314 kB ke 170 kB. Pelajaran yang kami pegang: ukur bundle-nya sebelum membelanya.

2026-10-13

Model yang menghabiskan seluruh budget untuk berpikir

502 dengan pesan error yang tampak masuk akal, penyebabnya token yang tidak pernah kami hitung.

Brief dokumen mulai gagal di produksi dengan jawaban kosong. Request-nya benar, retrieval-nya benar, dan model habis memakai seluruh max_tokens untuk reasoning tersembunyi tanpa mengembalikan konten sama sekali. Logika retry kami tidak menolong: lima panggilan @ 42 detik sudah melewatkan timeout client.

Dua perubahan memperbaikinya. Pembuatan brief berjalan dengan thinking dimatikan, dan respons yang datang terpotong kini diselamatkan — field yang sudah terbentuk kita pertahankan dan jawabannya ditandai terpotong, bukan dibuang. Pelajaran yang lebih dalam soal testing: test suite yang men-stub generator jawaban tidak pernah menyentuh token budget, jadi jalur berbayar harus diukur live, dan mengukur berarti menghitung karakter terhadap teks sumber, bukan menunggu status 200.

2026-10-11

Paywall yang sepakat dengan server

Gerbang UI dan gerbang API membaca satu tabel, atau banner itu bohong.

Banner upgrade sudah ada sebelum batas mana pun ada. Menyambungkan billing berarti memilih lima angka yang benar-benar penting — dokumen, penyimpanan, key, request API per hari, pesan chat per hari — dan membuat API menjawab setiap mutasi dengan kode over-limit spesifik yang bisa dirender front end sebagai modal.

Urutan itulah yang layak dinyatakan: tentukan batas di satu tempat, tegakkan di layanan, dan biarkan antarmuka hanya melaporkan apa yang dikatakan server. Paywall yang menyala sebelum server menolak adalah bug yang dirasakan pengguna sebagai kebohongan.