Blog
Catatan teknis seputar web development, DevOps, dan integrasi AI.
504 artikel
- 14.58ai
Aturan Proses Universal untuk AI Coding Agent
Tiga file aturan proses yang saya paksa agent ikuti: vertical slice, empat tingkat testing dengan database nyata, debugging sistematis.
TL;DR: Gue pernah lihat AI ngoding semua layer sekaligus eh hasilnya nggak ada yang jalan. Terus gue bikin aturan tegas biar kerja per irisan fitur vertikal yang bisa dites langsung. Ditambah testing berlapis dan debugging urut jadi agent nggak asal ngasal lagi.
#ai-agents#testing#debugging - 14.19ai
Mendesain Init Rules Skill: Layered Pack dan Idempotensi
Spec 199 baris buat skill init-rules: layered pack universal + per-stack, CLAUDE.md jadi indeks, re-run idempoten ala konvensi Go dan Copier.
TL;DR: Awalnya kirain cukup taruh semua aturan di satu file gede di root, ternyata bikin ribet dan susah di-maintain. Akhirnya dibikin sistem layered, file root jadi indeks aja dan aturan dipisah per path plus per stack biar kepake seperlunya. Generatornya juga dibikin idempoten ala Go biar rerun nggak nimpa perubahan lokal sembarangan.
#ai-agents#tooling#automation - 13.29ai
Satu patch kecil di plane-mcp biar mau ngobrol sama Plane Community Edition
Endpoint /dependencies/ 404 di CE self-hosted. Patch fallback ke /relations/ lama, bedakan 404 rute vs 404 data.
TL;DR: Gue coba hubungin work item lewat MCP malah dapet 404, kirain ID salah padahal rutenya yang nggak ada di CE. SDK maksa pake endpoint /dependencies/ ala cloud, sedangkan CE self-hosted cuma kenal /relations/ dengan body issues. Akhirnya dibikin fallback yang bedain 404 page sama 404 data, kalau rutenya hilang otomatis dialihin biar relasi tetap jalan.
#plane#mcp#ai - 13.11ai
Plane MCP sudah live, tiga jebakan operasional ini baru terasa
Workspace nggak bisa dihapus lewat MCP, CORS dipakai ulang sebagai CSRF, dan token API ngintip di .mcp.json.
TL;DR: Hapus workspace nggak bisa lewat MCP, cuma bisa di UI harus ketik nama dan frasa konfirmasi biar nggak kepencet AI. CORS sama CSRF ternyata satu variabel, jadi abis edit .env harus recreate semua container bukan cuma restart proxy. Token API kesimpen plain text di .mcp.json jadi wajib di-gitignore dan mending pakai yang ada expiry.
#plane#mcp#ai - 21.44ai
Plane MCP untuk self-host, tanpa OAuth, cukup header auth
Mode http plane-mcp-server selalu membangun OAuth dan crash tanpa env. Wrapper 16 baris membuka header auth, token tetap divalidasi ke Plane.
TL;DR: Container Plane MCP versi 033 langsung crash karena mode http maksa bikin OAuth app padahal env kosong. Ternyata kode header auth udah ada via get_header_mcp cuma nggak diekspos jadi gue bikin wrapper 16 baris biar validasi token langsung ke Plane. Enak mode stateless tanpa sesi jalan di loopback 8211 cuma butuh header Authorization tiap request.
#plane#mcp#ai - 21.40devops
502 dari Cloudflare Tunnel, ternyata cuma soal nama service
Tunnel bilang 502, semua kontainer hijau. Ternyata DNS jaringan compose cuma kenal nama service, dan alias enam baris langsung beres.
TL;DR: Docker nyala semua tapi URL publik malah 502 terus bikin bingung. Ternyata ingress tunnel nyari host proxy padahal nama service aslinya plane-proxy jadi nggak ketemu DNS. Akhirnya ditambahin alias proxy di compose biar nyambung lagi langsung 200.
#docker#compose#cloudflared - 20.58devops
Self-hosting Plane tanpa satu pun port publik
Cerita deploy Plane 13 service di VPS tunggal: cloudflared sidecar jadi satu-satunya pintu publik, state bind-mount, dan host tanpa port publik.
TL;DR: VPS gue udah sesak container, eh Plane malah maksa buka port 80 dan 443 lewat proxy defaultnya. Gue akalin dengan hapus semua ports, jalanin 13 service internal aja dan public-nya cuma lewat cloudflared tunnel ke proxy bukan port 8000. Enak banget firewall ketutup rapat cuma SSH, nggak usah ngurus certbot dan tetap jalan mulus di lokal.
#self-hosting#plane#docker - 06.14devops
Onboard Server KTM ke Ansible dan Swap Image 9router
Host KTM resmi dikelola Ansible: playbook upgrade 9router berlaku lagi setelah Docker Hub mengejar versi, dan swap ke image vendor 0.5.86 berjalan mulus.
TL;DR: Gue sempat mikir playbook error pas upgrade KTM ke 0586, ternyata registry Docker Hub aja yang ketinggalan di 0575. Makanya sempat build manual 0581, tapi akhirnya image vendor terbaru udah nongol dan playbook jalan mulus. Image custom lama masih nyangkut di disk dan tinggal dihapus manual nanti.
#docker#ansible#automation - 17.38frontend
Migrasi Daftar Klien dari Gambar ke Data-Driven di Next.js
242 nama klien tadinya cuma hidup di dalam gambar. Kini mereka keindeks mesin pencari, kebaca screen reader, dan totalnya dihitung dari datanya.
TL;DR: Dulu daftar 242 klien cuma nempel di satu gambar gede jadi nggak bisa dicopy atau keindeks Google. Akhirnya semua nama dipindah ke kode TypeScript jadi teks asli yang kebaca mesin pencari dan screen reader. Gambar logo tetap dipajang buat visual tapi sekarang ada transkrip teksnya biar tetap sesuai aturan WCAG.
#nextjs#seo#accessibility