Semua proyek

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.

Tahun

2025

Kategori

Situs Web

Perkakas

Node.js, Express, Sequelize, MySQL, REST API, JWT

Studi Kasus

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_id atau district_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

Diagram arsitektur platform Mentora

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 oleh helmet dan 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.
Live Technical Simulator
Interactive Backend Simulatorv1.2 · Live

Simulasikan siklus hidup webhook Midtrans & proteksi idempotensi terhadap duplicate webhook atau replay attack pada sistem Kos Kita / SewMe.

01. INBOUNDIDLE

POST /midtrans/webhook

Payload & SHA-512 Hash

02. SECURITYWAIT

Verifikasi Server Key

Midtrans API Double-Check

03. IDEMPOTENCYWAIT

Cek Status Transisi

getOriginal('status')

04. SIDE EFFECTSWAIT

DB::transaction

Assign Room & Invoice PDF

laravel-worker.log0 ms

// System ready. Click one of the action buttons above to simulate.

Proyek Lainnya

↑↓ pilih↵ bukaesc tutup
fijri.my.id