hero

Pemendek Tautan, pndek.in

3 min read


Mencoba kembali menggunakan React dengan memakai Framework Remix dan membuat sebuah pemendek tautan.



Bertanya-tanyaSection titled Bertanya-tanya

Pernah ga sih kalian ngasih link ke orang lain, tapi penasaran apakah link tersebut udah dibuka atau belum. Nah pertanyaan ini tuh sering aku pikirkan kalau ada recruiter yang minta resume/cv punyaku. Di situ aku menulis beberapa project / portofolio dan juga link menuju demo project tersebut, tapi apakah iya mereka akan sempat buka link tersebut?

Untuk itu, aku coba untuk membuat sebuah link shortener agar aku bisa mengecek apakah link tersebut sudah dikunjungi atau belum. Kenapa tidak memakai link shortener yang sudah ada, seperti s.id atau bit.ly? Ya karena aku ingin membuatnya sebagai portofolio ku sendiri, dengan begitu aku bisa kustomisasi fitur-fitur yang memang aku ingin pakai.

Karena ini adalah pemendek tautan, aku memutuskan untuk memberi nama project ini pndek.in yang artinya memendekkan.

pndek.in logo

PenyegaranSection titled Penyegaran

Setelah 3 tahun menggunakan Vue.js, aku memutuskan untuk menggunakan framework lain untuk membuat link shortener ini. Untuk menyegarkan kembali ingatan tentang React, aku memilih Remix sebagai framework untuk main web app yang berisi landing page, auth page, dan dashboard.

Kemudian untuk redirect service, aku menggunakan Parcel sebagai bundler file HTML, CSS, dan JavaScript karena aku membayangkan kode yang diperlukan tidaklah terlalu kompleks dan membutuhkan banyak komponen hingga harus memakai sebuah framework JavaScript.

Untuk backend, aku memutuskan menggunakan Node.js dan Express.js sebagai framework-nya karena aku sudah cukup familiar dengan Express.js.

PlanningSection titled Planning

Hal pertama yang kulakukan adalah membuat sebuah product requirement menggunakan Notion, seperti latar belakang mengapa aku membuat fitur A, kira-kira OKR (Objective & Key Result) apa saja, User Acceptance Criteria-nya apa saja, dan apakah fitur tersebut punya limitasi atau tidak dan jika iya kira-kira apa saja workaround-nya. Setelah itu aku breakdown kembali ke sebuah fitur-fitur kecil yang nantinya akan aku gunakan sebagai tiket yang akan aku tulis di Github Projects.

Kemudian untuk layout, aku mencoba untuk menggunakan sebuah generative AI dari Vercel yaitu v0. Menggunakan AI tersebut aku bisa dapat gambaran kira-kira layout web app-ku akan seperti apa nantinya.

db scheme using drawsql

Setelah semua requirement dan design sudah jadi, kemudian aku mulai untuk membuat skema database menggunakan DrawSQL. Menggunakan 3 tabel yaitu User untuk auth, Link untuk URL-URL yang akan disimpan, dan Click untuk menyimpan event saat user redirect menggunakan link pendek yang aku buat.

db scheme using drawsql

MVPSection titled MVP

Pemendek TautanSection titled Pemendek Tautan

Untuk pembuatan link shortener, pendekatan yang aku ambil adalah setiap user yang generate memendekkan tautannya akan mendapat balikan berupa 5 karakter acak sebagai tautan pendeknya. Misal yang ingin dipendekkan adalah https://jaluwibowo.id/blog/pemendek-tautan-pndek-in maka hasil generate-nya bisa jadi adalah pndek.in/qwe78.

Saat user meng-generate link pendek, untuk tambahan keamanan, aku menggunakan Safe Browsing API. Dengan API tersebut memungkinkan untuk pengecekan URL yang telah di-input untuk mengetahui apakah ada potensi situs yang berbahaya seperti phishing ataupun malware.

Untuk redirect service, aku hanya perlu untuk mengirimkan User Agent dan juga referrer dimana kita bisa mendapatkan data device dan juga asal dari link yang telah dikunjungi tersebut.

AnalitikSection titled Analitik

Ketika user mengunjungi dashboard, maka user bisa melihat analitik dari link yang telah dia buat, user bisa melihat jenis device, sistem operasi, maupun peramban yang pengunjung gunakan ketika mengakses link tersebut, karena hal tersebut bisa didapatkan dengan memparsing User Agent. Untuk menambah varian dari analitik, aku menggunakan IP Geolocation API untuk mendapatkan negara dan kota pengunjung.

Bot TelegramSection titled Bot Telegram

Pemilihan penggunaan Telegram bot alih-alih sebuah aplikasi Android yaitu agar user bisa lebih cepat untuk memendekkan dan membagikan URL tersebut. Menggunakan Telegram Bot API karena dokumentasinya yang bagus dan juga gratis.

Aku memanfaatkan Redis sebagai penyimpanan untuk autentikasi pengguna pndek.in mana yang terhubung dengan user Telegram yang sedang aktif menggunakan bot tersebut.

PenutupSection titled Penutup

Setelah semua jadi, kira-kira seperti inilah flow dari pndek.in.

flow of pndek.in

Cukup sekian untuk sharing tentang project pemendek tautan ini. Semoga bisa menjadi inspirasi kalau kalian ingin membuat project yang sejenis. Jika ada yang ingin ditanyakan, silakan komentar di bawah.