Halo, saya Tangkas Risdianto, Full Stack Developer. Di sini saya menceritakan perjalanan ngoding saya: apa yang saya buat, kenapa saya membuatnya, dan apa yang saya pelajari di tengah jalan. Bahasa apa pun, bikin apa pun, suka-suka.

Aplikasi manajemen keuangan pribadi dan tabungan kolaboratif dengan pelacakan arus kas, anggaran, portofolio investasi, serta autentikasi biometrik Passkey.
MyPocket memisahkan pencatatan uang ke dalam berbagai kantong tabungan (Pribadi, Pertumbuhan, Bersama) yang bisa dikelola sendiri maupun bersama anggota lain lewat sistem undangan. Setiap kantong merangkum transaksi pemasukan dan pengeluaran, mengawasi batas anggaran bulanan, menghitung harga rata-rata tertimbang (HPP) portofolio investasi, hingga menjalankan transaksi berulang otomatis lewat penjadwal harian. Di balik layar, aplikasi ini dibangun di atas Next.js 16, MySQL connection pool tanpa ORM, autentikasi berlapis JWT + OTP email + WebAuthn Passkey, serta Service Worker mandiri berbasis Workbox.

Ringkasan modul teknis dan fitur utama yang dibangun untuk memastikan performa tinggi, keamanan berlapis, dan kemudahan pengguna.
Pengguna bisa langsung masuk ke aplikasi hanya dengan menempelkan sidik jari atau pindai wajah di ponsel dan laptop, tanpa perlu repot mengetik email maupun mengingat kata sandi.
Lapisan keamanan ekstra yang mengirimkan kode rahasia 6 digit ke email setiap kali ada yang mencoba masuk, memastikan hanya pemilik akun asli yang bisa mengakses data keuangan.
Memisahkan uang ke berbagai pos tabungan seperti dana darurat, liburan, atau tabungan bersama pasangan dan keluarga yang bisa dipantau bersama lewat undangan email.
Mencatat berbagai aset investasi (saham, reksa dana, emas, kripto) dan menghitung otomatis harga modal rata-rata serta estimasi keuntungan atau kerugian saat aset dijual.
Membantu menetapkan batas pengeluaran bulanan dan memberi peringatan otomatis saat belanja sudah mendekati atau melewati batas yang direncanakan.
Mencatat tagihan rutin bulanan seperti listrik atau langganan secara otomatis sesuai jadwal, disertai pengingat lewat email agar tidak ada pembayaran yang terlewat.
Menampilkan catatan jelas siapa yang mengubah data, kapan diubah, serta perbandingan nilai lama dan nilai baru agar pencatatan keuangan tetap transparan.
Bisa dipasang langsung di layar utama ponsel seperti aplikasi biasa tanpa lewat Play Store, serta mempermudah mengunduh laporan keuangan rapi dalam format PDF atau Excel.
Bab 1
Apa itu. Lapisan penjaga di tingkat jaringan (Next.js Proxy) yang memvalidasi sesi JWT, mengatur hak akses halaman, dan menyamarkan struktur folder internal lewat URL rewrites.
Cara saya memakainya. Semua request melewati lapisan proxy untuk memeriksa cookie sesi dan menyuntikkan security headers, sementara next.config.ts memetakan URL bersih seperti /dashboard ke struktur layout internal.
Yang bikin penasaran: Pengguna yang baru lolos password tapi belum memasukkan OTP diberi status sesi 'pending' di dalam token agar tetap tertahan di gerbang proxy dan tidak bisa melompat langsung ke dashboard.
Baca bab ini
Bab 2
Apa itu. Mekanisme login dua tahap yang menggabungkan verifikasi password, pembatas percobaan login (rate limiter), pengiriman kode OTP ke email, dan penerbitan token bertahap.
Cara saya memakainya. Endpoint login memvalidasi password dengan bcrypt, membatasi laju percobaan login, mengirim OTP via Nodemailer, lalu menaruh token sementara berstatus 'pending' hingga kode OTP terverifikasi.
Yang bikin penasaran: Menyimpan status tahap verifikasi di dalam payload JWT yang ditandatangani membuat alur OTP tetap stateless tanpa perlu tabel sesi sementara di database.
Baca bab ini
Bab 3
Apa itu. Implementasi autentikasi kriptografi kunci publik berbasis standar FIDO2/WebAuthn yang memungkinkan pengguna masuk hanya dengan sidik jari atau wajah tanpa mengetik email maupun password.
Cara saya memakainya. Menggunakan @simplewebauthn dengan mode Discoverable Credentials (residentKey: required) sehingga browser langsung menampilkan daftar passkey perangkat dan server mengenali pengguna dari ID kredensial.
Yang bikin penasaran: Setiap kali login biometrik berhasil, nilai counter di database wajib diperbarui dari authenticator untuk menangkal serangan kloning kredensial (replay attack).
Baca bab ini
Bab 4
Apa itu. Lapisan eksekusi query database langsung menggunakan connection pool mysql2/promise tanpa ORM, dilengkapi fungsi normalisasi tipe parameter otomatis.
Cara saya memakainya. Seluruh endpoint API memanggil helper query() dan queryOne() yang membungkus pool.execute() serta menormalisasi parameter angka dari URL sebelum dikirim ke prepared statement MySQL.
Yang bikin penasaran: Tanpa normalisasi tipe parameter, prepared statement MySQL kerap gagal saat menerima nilai paginasi (LIMIT dan OFFSET) yang terbaca sebagai string dari URL query params.
Baca bab ini
Bab 5
Apa itu. Arsitektur multi-kantong tabungan (multi-tenant) yang memisahkan saldo, anggaran, dan transaksi per kantong serta mendukung kolaborasi antar-pengguna lewat undangan.
Cara saya memakainya. Relasi antara pengguna dan kantong dijembatani oleh tabel akses berbasis peran ('owner' atau 'member') dan tabel undangan, lengkap dengan agregasi subquery untuk menghitung ringkasan saldo bulanan dan total.
Yang bikin penasaran: Aksi sensitif seperti mengubah target, menghapus tabungan, atau mengeluarkan anggota dikunci ketat di level query hanya untuk pemilik ('owner') dengan proteksi agar tidak bisa menghapus dirinya sendiri.
Baca bab ini
Bab 6
Apa itu. Integrasi langsung antara rencana anggaran (planning) dan transaksi riil (cashflow) yang menghitung pemakaian anggaran secara real-time di SQL sekaligus mempercepat input form di sisi klien.
Cara saya memakainya. Query perencanaan menyertakan correlated subquery untuk menghitung kolom pemakaian (spent) dan realisasi (realized) sesuai filter periode, sementara hook SWR di klien mengubah data rencana menjadi peta harga otomatis.
Yang bikin penasaran: Begitu pengguna memilih kategori saat mencatat pengeluaran, harga satuan langsung terisi otomatis dari rencana anggaran tanpa perlu mengetik ulang nominal rutin.
Baca bab ini
Bab 7
Apa itu. Modul manajemen aset investasi yang menghitung harga pokok pembelian rata-rata tertimbang (Moving Average), laba/rugi penjualan, dan menyinkronkan setiap transaksi beli/jual ke arus kas.
Cara saya memakainya. Pembelian dan top-up aset otomatis memotong saldo melalui tabel pengeluaran serta memperbarui avg_price, sedangkan penjualan aset menghitung selisih terhadap HPP dan mencatat uang masuk ke tabel pendapatan.
Yang bikin penasaran: Transaksi investasi dijaga oleh guardrail: sistem menolak pembelian (HTTP 422) jika kantong belum memiliki anggaran kategori 'Investasi' dan menolak penjualan jika belum ada sumber pendapatan 'Investasi'.
Baca bab ini
Bab 8
Apa itu. Worker terjadwal yang mengeksekusi transaksi harian/bulanan otomatis dan mengirimkan email pengingat harian kepada pengguna aktif.
Cara saya memakainya. Mengecek seluruh jadwal berulang, membandingkan tanggal eksekusi terakhir (lastgenerated), menyisipkan transaksi baru ke arus kas, lalu mengecek aktivitas hari ini untuk mengirim email pengingat via Nodemailer.
Yang bikin penasaran: Menggunakan Intl.DateTimeFormat dengan locale 'en-CA' dan timezone 'Asia/Jakarta' untuk menghasilkan format YYYY-MM-DD yang kebal terhadap jebakan pergeseran tanggal UTC (bug H-1).
Baca bab ini
Bab 9
Apa itu. Sistem pencatatan riwayat aktivitas (audit log) yang menyimpan rincian perubahan data dalam format JSON terstruktur lengkap dengan perbandingan nilai lama dan nilai baru.
Cara saya memakainya. Setiap operasi tambah, ubah, dan hapus memanggil helper buildLog() untuk menyusun payload JSON, yang kemudian di-render oleh komponen LogDetailView menjadi badge berwarna dan tampilan pergeseran nilai (old → new).
Yang bikin penasaran: Pada operasi hapus tabungan, pencatatan log sengaja dieksekusi sebelum perintah DELETE utama dijalankan agar proses penulisan log tidak gagal akibat efek berantai foreign key cascade.
Baca bab ini
Bab 10
Apa itu. Kombinasi Service Worker yang di-bundle secara lokal untuk ketahanan akses offline dan generator laporan keuangan server-side dalam format CSV, JSON Backup, serta HTML-PDF siap cetak.
Cara saya memakainya. Script build-sw.js membungkus service worker dengan 4 strategi caching Workbox sebelum next build berjalan, sementara endpoint ekspor menyatukan pemasukan dan pengeluaran menjadi file unduhan atau halaman cetak berdesain khusus.
Yang bikin penasaran: Alih-alih membebani server dengan headless browser untuk membuat PDF, fitur ekspor menghasilkan dokumen HTML mandiri lengkap dengan aturan CSS @media print dan print-color-adjust yang ringan serta presisi saat dicetak.
Baca bab ini
Aplikasi untuk mengatur siapa boleh melakukan apa di dalam sebuah sistem.
Platform manajemen pengguna, matriks hak akses RBAC dinamis, dan boilerplate arsitektur enterprise berbasis Next.js 16 App Router dan PostgreSQL.
Platform direktori wisata Yogyakarta berbasis komunitas yang dilengkapi AI Trip Planner dan visualisasi rute jalan interaktif.
Undangan pernikahan digital bergaya editorial interaktif dengan animasi berbasis fisika scroll, galeri bento infinite-scroll, dan musik latar persisten.
Undangan pernikahan digital interaktif bergaya film sinematik dengan kamera virtual 2.5D/3D, partikel kanvas real-time, dan galeri mosaik.
trcodes.dev, 2026