Mentora
Mentora adalah proyek berbasis web yang dikembangkan oleh tim beranggotakan tiga orang, di mana saya berkontribusi sebagai pengembang backend. Platform ini berfokus pada kesehatan mental sebagai bagian dari mendukung aspek kesehatan kota pintar, mengintegrasikan kolaborasi dengan lembaga pemerintah dan psikolog profesional. Mentora menampilkan teknologi AI yang menganalisis emosi pengguna berdasarkan masukan mereka dalam buku harian pribadi, dengan tren emosi yang divisualisasikan ditampilkan melalui grafik 7 hari. Bagi pemangku kepentingan pemerintah, sistem ini memberikan dukungan keputusan dengan memetakan wilayah dengan tingkat stres yang tinggi, menawarkan wawasan berharga untuk kesejahteraan masyarakat. Platform ini juga menghubungkan pengguna dengan psikolog untuk konsultasi profesional, termasuk chatbot yang didukung AI untuk dukungan instan, dan menyediakan forum komunitas tempat pengguna dapat berbagi pengalaman, memposting konten, dan saling mendukung.
2025
Situs Web
Node.js, Express, Sequelize, MySQL, REST API, JWT
Masalah
Isu kesehatan mental di perkotaan sering kali terabaikan karena stigma sosial, minimnya akses cepat ke psikolog profesional, dan belum tersedianya data kesehatan mental masyarakat secara real-time bagi pemerintah daerah. Tanpa pemetaan yang jelas, dinas kesehatan kesulitan mengambil intervensi berbasis data untuk pencegahan depresi atau stres massal. Mentora dibangun sebagai platform kesehatan mental komprehensif dalam kerangka inisiatif Smart City Healthcare, menjembatani tiga pemangku kepentingan utama: masyarakat umum yang butuh pencatatan emosi harian dan pendampingan AI, psikolog yang membuka jadwal konsultasi, serta pemerintah yang membutuhkan dashboard pemetaan klaster tingkat stres per wilayah (kecamatan & kelurahan).
Peran saya
Proyek ini dikembangkan oleh tim 3 orang (1 Frontend, 1 AI/ML Engineer, dan 1 Backend Engineer). Saya memegang peran sebagai Backend Developer, bertanggung jawab atas perancangan arsitektur server, basis data relasional, orkestrasi microservice AI, dan implementasi endpoint API:
- Perancangan Basis Data Relasional (MySQL + Sequelize ORM): Merancang skema database kompleks mencakup 14+ model, termasuk relasi multi-tier untuk wilayah administratif (
District&Subdistrict), sistem janji temu (Appointments&PsikologSchedules), riwayat chat persisten, dan jejak emosi harian (EmologHistories). - Orkestrasi AI Chatbot (Alora) & Vector Memory: Mengintegrasikan agen chatbot Alora dengan microservice Python, mengelola pembuatan sesi unik (UUID v4), sinkronisasi memori percakapan, serta transaksi basis data atomik (
sequelize.transaction) saat menyimpan dialog user dan agen secara simultan. - Sistem Pelacakan Emosi (Emolog) & Streak Self-Harm: Membangun API pencatatan diari emosi yang meneruskan teks ke model Natural Language Processing (NLP) untuk klasifikasi emosi otomatis, query tren riwayat 7 hari, dan mekanisme streak pencegahan self-harm.
- Agregasi Klaster Stres Wilayah (Smart City Dashboard): Mengembangkan endpoint analisis klastering wilayah dengan pengelompokan dinamis (
subdistrict_idataudistrict_id), filter demografi (gender, rentang tanggal), serta integrasi rekomendasi kebijakan publik bagi dinas kesehatan. - Sistem Booking Konsultasi & RBAC Multi-Role: Merancang middleware otentikasi JWT dan otorisasi bertingkat (
checkPemerintah,checkPsikolog) untuk mengamankan data rekam medis dan transaksi janji temu.
Arsitektur sistem
Backend bertindak sebagai orkestrator pusat antara klien web, database MySQL, dan service machine learning eksternal:
- Express.js API Layer: Menangani routing modular (
/api/auth,/api/emolog,/api/alora,/api/appointment,/api/emolog-cluster), diamankan olehhelmetdan middleware verifikasi JWT. - Sequelize ORM (MySQL): Mengelola model data relasional, validasi data, foreign key constraints, serta transaksi multi-tabel untuk menjamin konsistensi saat booking konsultasi dan sesi chat.
- AI Microservice Integration (FastAPI/Python): Node.js berkomunikasi via REST client (
axios) ke service AI eksternal untuk inferensi sentimen teks diari, kalkulasi vector embeddings percakapan, dan analisis spasial klaster stres.
Endpoint utama
| Method | Path | Fungsi & Role |
|---|---|---|
POST |
/api/auth/login |
Login user, psikolog, atau dinas pemerintah (JWT Bearer) |
POST |
/api/emolog |
Kirim teks diari untuk deteksi emosi otomatis via model NLP |
GET |
/api/emolog |
Ambil tren emosi pengguna dalam rentang waktu (default 7 hari) |
GET |
/api/emolog-cluster |
Agregasi tingkat stres per kecamatan/kelurahan (Role: Pemerintah) |
POST |
/api/alora/new-chat |
Inisiasi sesi baru AI chatbot Alora dan persistensi memori dialog |
GET |
/api/alora/sessions |
Riwayat daftar sesi obrolan konseling pengguna |
GET |
/api/schedule/:psikolog_id |
Menampilkan ketersediaan jadwal konsultasi psikolog |
POST |
/api/appointment/book |
Booking janji temu konsultasi psikolog |
PUT |
/api/appointment/:id/status |
Update status konsultasi (pending, confirmed, completed) |
GET |
/api/post & POST |
Forum komunitas dukungan kesehatan mental antar-pengguna |
Tantangan teknis
1. Menjamin integritas riwayat percakapan AI dengan transaksi database.
Saat pengguna berinteraksi dengan chatbot Alora, sistem harus mencatat pesan pengguna, memanggil service AI eksternal, dan mencatat balasan AI ke dalam database. Jika salah satu langkah gagal, riwayat chat bisa terputus. Solusinya, penyimpanan status sesi dan pesan dibungkus dalam managed database transaction (sequelize.transaction()). Jika terjadi timeout atau error pada API inferensi, perubahan di-rollback secara otomatis sehingga tidak ada sesi chat menggantung.
2. Agregasi data spasial untuk dashboard pemerintah tanpa degradasi performa.
Endpoint klastering stres wilayah harus menghitung agregasi ribuan log emosi masyarakat yang dikelompokkan berdasarkan batas wilayah administratif (Kecamatan dan Kelurahan) dan difilter berdasarkan jenis kelamin serta rentang tanggal. Query SQL dioptimalkan dengan indexing pada foreign key subdistrict_id, district_id, dan kolom date, serta memanfaatkan fungsi agregasi COUNT dan GROUP BY langsung di tingkat database sebelum hasilnya diformat untuk visualisasi peta.
3. Privasi data pengguna pada fitur pelaporan wilayah. Data kesehatan mental sangat sensitif. Untuk kebutuhan dashboard pemerintah, data emosi diagregasi secara anonim tanpa menyertakan identitas pribadi (nama, nomor kontak, atau isi catatan diari user). Pemerintah hanya menerima metrik statistik konsentrasi emosi (misal: persentase kecemasan/stres) per kode pos atau subdistrict untuk perumusan kebijakan fasilitas kesehatan.
4. Penjadwalan konsultasi dan pencegahan jadwal ganda (double-booking).
Psikolog memiliki batasan hari dan jam praktik. Backend memverifikasi ketersediaan slot sebelum membuat entri Appointment baru. Pengecekan dilakukan secara atomik untuk memastikan dua pengguna tidak bisa memesan slot waktu konsultasi yang sama pada saat bersamaan.
Yang ingin saya perbaiki
- Memindahkan integrasi AI chatbot dan agregasi data spasial ke antrean asinkron (seperti Redis & BullMQ) untuk meningkatkan ketahanan saat trafik tinggi.
- Menambahkan WebSockets (Socket.io) untuk notifikasi janji temu dan respons chat streaming real-time.
- Mengimplementasikan unit testing otomatis pada controller dan endpoint booking konsultasi.
Simulasikan siklus hidup webhook Midtrans & proteksi idempotensi terhadap duplicate webhook atau replay attack pada sistem Kos Kita / SewMe.
POST /midtrans/webhook
Payload & SHA-512 Hash
Verifikasi Server Key
Midtrans API Double-Check
Cek Status Transisi
getOriginal('status')
DB::transaction
Assign Room & Invoice PDF
// System ready. Click one of the action buttons above to simulate.
Analisis dampak pembuatan Compound Index pada tabel tagihan (50.000 records) untuk cron job tengah malam.
ref (Index Seek)
idx_user_bulan_tahun
1 row
0.002% of table
1.2 ms
99.2% faster
O(log N)
B+ Tree Traversal
Proyek Lainnya

Marketplace penjahit yang dibangun saat magang di Unimasoft: pesanan, pelacakan progres, chat, dan pembayaran nontunai.
- Laravel 11
- Livewire
- MySQL
- +2

API perpustakaan digital: peminjaman, permintaan buku, akun premium, dan pembayaran denda nontunai.
- Node.js
- Express
- MySQL
- +3

Platform komunitas edukasi tergamifikasi: mini-game Phaser (Kitty Attack), pipeline skor real-time, dan leaderboard 10 besar.
- Next.js
- Node.js
- Express
- +3