# Modul 11: Research Matchmaking

## 1. User Flow
1. User membuka halaman "Matchmaking" (Cari Kolaborator).
2. Sistem menanyakan preferensi (Mencari: Co-Author, Reviewer, Mentor, Research Partner).
3. Berdasarkan preferensi dan data profil user (Research Fields & Methods), sistem melakukan scoring sederhana untuk merekomendasikan profil lain.
4. User melihat kartu rekomendasi (Recommendation Card).
5. User dapat mengirimkan "Collaboration Invitation" disertai pesan singkat.
6. Penerima invitation melihat notifikasi/daftar invitation, lalu bisa menerima (Accept) atau menolak (Decline).
7. Jika diterima, kedua pihak mendapatkan detail kontak email satu sama lain.

## 3. Matching Formula (MVP)
Formula berbasis Keyword Overlap (Skor):
- **+3 poin**: Untuk setiap "Research Field" yang sama persis.
- **+2 poin**: Untuk setiap "Research Method" yang sama persis.
- **Syarat mutlak**: Calon kolaborator pada tabel `collaboration_preferences` harus menset `is_open_to_collaborate = 1`.
- Urutkan (Order By) berdasarkan skor tertinggi.

## 9. Upgrade Path ke AI Matching
Di masa depan, kita bisa memanfaatkan Google Gemini Embedding:
1. Setiap "Research Profile" (gabungan field, bio, publikasi) di-convert menjadi vector embeddings.
2. Simpan array/blob vector di tabel database.
3. Saat mencari match, konversi query atau profil user pencari menjadi vector.
4. Gunakan Cosine Similarity untuk mencari jarak terdekat (vector search).
5. Dapat menemukan match yang secara sinonim mirip (misal: "Machine Learning" dan "Artificial Intelligence") tanpa terpaku pada string exact match.

## 10. Testing Scenario
- **Test 1 - Rekomendasi**: Siapkan 3 User. User A punya field "Data Science". User B punya "Data Science". User C punya "Biology". Pastikan saat User A mencari, User B ada di top list.
- **Test 2 - Open for Collab**: Set User B `is_open_to_collaborate = 0`. Cek ulang pencarian dari User A. User B harus tidak muncul.
- **Test 3 - Kirim Invitation**: User A mengirim invitiation ke User B. Masuk db `collaboration_invitations` status `pending`.
- **Test 4 - Respon Invitation**: Login sebagai User B. Accept invitation. Status menjadi `accepted`. User B dapat melihat email User A.
