Portfolio & Showcase — Situs Ini
Portfolio yang mengirimkan artefak sungguhan, bukan tangkapan layar: setiap rilis Android membawa version code, ukuran berkas, minSdk, dan checksum SHA-256. API Go di Fly.io, antarmuka SvelteKit di Vercel.

Situs ini sendiri — portofolio interaktif yang mengirimkan artefak nyata, bukan sekadar tangkapan layar. Setiap project Android di katalog ini membawa version code, ukuran file, minSdk, dan checksum SHA-256 yang bisa diverifikasi, bukan sekadar klaim dalam tulisan.
Sorotan
- Upload APK yang benar-benar streaming — backend membaca request body lewat
MultipartReader, bukanParseMultipartForm, menuliskannya ke file sementara sementaraio.TeeReadermenyuapisha256.New(). Pemakaian memori tetap rata berapa pun ukuran filenya: APK 45 MiB memuncak di 23.364 kB RSS, dan hasil unduhannya kembali byte-identical. - Upload langsung dari browser ke Go, melewati SvelteKit — Vercel membatasi request body serverless di 4,5 MB, sehingga mengalirkan APK lewat form action akan gagal di produksi walau lancar di lokal. Kedua uploader menembak langsung ke API Go dengan
XMLHttpRequest, membawa bearer token sendiri dan melaporkan progres yang sebenarnya. - Autentikasi dua mode — middleware bercabang berdasarkan
algtoken: JWKS (RS256/ES256) untuk project Supabase modern, dan HMAC untuk shared secret lama. Otorisasi dibaca dari kolomprofiles.roledi balik cache TTL, tidak pernah dari klaimapp_metadatadi dalam token. - Prompt caching AI yang disengaja — konteks DeepSeek dirender dengan urutan seksi tetap, kunci metadata terurut, dan tanpa timestamp, sehingga prefix-nya tetap byte-identical antar request. Sebuah unit test memastikan dua hasil build identik; log produksi mencatat 11.904 dari 11.995 prompt token dilayani dari cache (99,3%).
- Batas storage dipetakan ke status code yang benar — paket gratis Supabase menolak objek di atas 50 MiB dan melaporkannya sebagai 400 yang penyebab aslinya ada di body. Kondisi itu dicocokkan dan dipetakan menjadi 413, mengubah upload 93 detik yang berakhir 502 menjadi penolakan dalam 0,45 detik.
- Seluruh layanan dipaku di Tokyo — API Go di Fly.io (
nrt), SvelteKit di Vercel (hnd1), Postgres Supabase diap-northeast-1, menghapus perjalanan SSR yang sebelumnya menyeberangi Pasifik dua kali.
Fitur Utama
- Katalog project — etalase publik yang memuat arsitektur teknis, tag, dan galeri gambar tiap project, dengan relasi dimuat dalam satu round trip lewat
LEFT JOIN LATERAL+jsonb_agg, bukan lewat query susulan N+1. - Rilis APK terverifikasi — unggahan file langsung atau tautan build eksternal (Expo, GitHub Releases), lengkap dengan checksum otomatis dan ekstraksi metadata. Sebuah rilis bisa menyimpan objek Storage atau menautkan build yang di-host pihak lain, dan
/apk/latestmencatat unduhan sebelum mengalihkan ke mana pun sumbernya. - CMS admin — dasbor terpusat untuk mengelola project, tag, kategori, dan rilis, dengan validasi superforms + zod di kedua sisi jalur data.
- Asisten AI — chatbot yang menjawab pertanyaan tentang katalog berdasarkan data langsung dari basis data, dialirkan lewat Server-Sent Events, dengan penanda
<<<UI_ACTION:yang terpotong antar chunk ditahan dulu agar penanda mentah tidak pernah bocor ke transkrip. - Verifikasi Turnstile — tantangan anti-bot Cloudflare sebelum sesi chat AI bisa dibuka.
- Dwibahasa menyeluruh — Inggris dan Indonesia di seluruh katalog, CMS, dan deskripsi ini, diselesaikan di sisi klien tanpa render SSR kedua dan tanpa memecah cache CDN.
Tech Stack
- Go 1.26 + chi router (backend)
- pgx/v5 + pgxpool (akses basis data,
QueryExecModeDescribeExecuntuk session pooler) - goose (migrasi basis data, tertanam di dalam binary, dijalankan setiap boot)
- Supabase (Postgres, Storage, GoTrue Auth)
- SvelteKit 2 + Svelte 5 (runes)
- Tailwind CSS v4 (CSS-first
@theme) - bits-ui, superforms + zod4
- DeepSeek API (asisten AI, dialirkan lewat SSE)
- Cloudflare Turnstile (gerbang anti-bot)
- Fly.io (backend, region nrt) + Vercel (frontend, region hnd1)
Status & Kematangan
Tidak ada CI otomatis — validasi dijalankan manual lewat go vet, go test, svelte-check, vitest, dan build produksi pada setiap perubahan. Cakupan test sengaja difokuskan ke tempat yang paling mudah menyelipkan regresi diam-diam: pembangun konteks AI (termasuk pemastian prompt byte-identical), parsing UI action AI, pembuatan slug, validasi domain project, dan penyaring markdown di frontend. Satu putaran optimasi menyeluruh memangkas kunjungan pertama tanpa cache dari 2.072.015 B menjadi 243.588 B (−88,2%) dan JavaScript setiap halaman publik sebesar 35.583 B gzip; anggaran yang menghasilkan angka-angka itu dijaga dengan pengukuran ulang, bukan taksiran.
Metrik Terukur
| Commit | 29 |
| Rentang Tanggal | 19 Agu 2026 – 21 Agu 2026 |
| Baris kode | 14.364 (tidak termasuk lockfile dan satu binary yang tidak sengaja ter-commit) |
| Test | 38 test Go + 12 test Vitest, semua lulus |