Sistem penjadwalan SI UIN Alauddin dengan integrasi Gemini AI Chatbot.
- Node.js (v14 atau lebih tinggi)
- npm atau yarn
- Gemini API Key (dari https://ai.google.dev/)
npm installDuplikasi file .env.example menjadi .env:
cp .env.example .envEdit file .env dan masukkan Gemini API Key Anda:
GEMINI_API_KEY=your_api_key_here
MODEL=gemini-2.5-flash-lite
PORT=3000
npm startServer akan berjalan di http://localhost:3000
- β Tampilan jadwal kuliah interaktif (List & Grid mode)
- β Filter berdasarkan hari, semester, dosen, dan ruangan
- β Floating Chat Icon - Icon chat yang floating di kanan bawah
- β Chat Popup Modal - Chatbot muncul dalam popup modal yang stylish
- β Markdown rendering untuk respons bot
- β Responsive design
- β Express.js Server
- β Integrasi Gemini API 2.5 Flash Lite
- β CORS enabled untuk frontend
- β Conversational memory - chatbot mengingat history percakapan
- Buka aplikasi - Halaman akan terbuka di browser
- Klik Chat Icon - Icon chat floating di bagian kanan bawah layar
- Ketik pesan - Tulis pertanyaan atau pesan Anda
- Kirim - Tekan tombol "Kirim" atau Enter
- Tutup - Klik tombol X di sudut kanan atas popup untuk menutup
- "Berikan rekomendasi wisata di Sulawesi Selatan"
- "Buat itinerary 3 hari ke Bantimurung"
- "Apa saja destinasi wisata di Makassar?"
.
βββ index.js # Backend server utama
βββ package.json # Dependencies & scripts
βββ .env.example # Template environment variables
βββ public/
β βββ index.html # Main HTML file
β βββ script.js # Frontend JavaScript
β βββ style.css # Styling (termasuk chat icon & modal)
β βββ assets/ # Logo & gambar
βββ README.md # File ini
Mengirim pesan ke Gemini AI dan mendapatkan respons.
Request:
{
"conversation": [
{ "role": "user", "text": "Halo" },
{ "role": "model", "text": "Halo! Apa kabar?" }
]
}Response:
{
"result": "Respons dari Gemini AI..."
}GEMINI_API_KEY- API key untuk GeminiMODEL- Model Gemini yang digunakan (default: gemini-2.5-flash-lite)PORT- Port server (default: 3000)
Chatbot dikonfigurasi sebagai "Agen Penjadwalan Kuliah Pada Sistem Informasi UIN Alauddin Makassar" yang:
- BATASAN BAHASA: Anda HANYA diizinkan merespons menggunakan Bahasa Indonesia yang baik, formal, dan mudah dipahami.
- BATASAN DOMAIN: Anda HANYA beroperasi untuk lingkup Program Studi Sistem Informasi.
- BATASAN TOPIK: Anda HANYA boleh menjawab pertanyaan yang berhubungan dengan jadwal perkuliahan, nama dosen, mata kuliah, hari, jam, dan ruangan kelas.
- PENOLAKAN PERTANYAAN DI LUAR KONTEKS: Jika pengguna menanyakan hal di luar jadwal kuliah (misalnya: cara memprogram PHP, berita terkini, jadwal jurusan lain, resep makanan, dll), Anda WAJIB menolak dengan sopan.
- Contoh Penolakan: "Mohon maaf, saya hanya asisten penjadwalan kuliah Jurusan Sistem Informasi UIN Alauddin Makassar. Saya tidak dapat menjawab pertanyaan di luar informasi jadwal perkuliahan."
- KEBENARAN DATA (NO HALLUCINATION): Jawaban Anda WAJIB 100% bersumber dari [DATA JADWAL KULIAH] di bawah ini. Jangan pernah menebak, mengarang jadwal, atau memodifikasi waktu/ruangan. Jika data dosen, mata kuliah, atau jadwal yang dicari pengguna tidak ada di dalam daftar, sampaikan bahwa "Jadwal tersebut tidak ditemukan pada data Semester Genap 2025/2026."
- Pastikan file
.envsudah ada dan berisi GEMINI_API_KEY - Verify API key dari https://ai.google.dev/
- Server sudah dikonfigurasi dengan CORS enabled
- Pastikan frontend mengakses
http://localhost:3000
- Pastikan server running dengan
npm start - Buka browser console (F12) untuk melihat error details
- Check network tab untuk melihat API request
- Chat Memory - Setiap percakapan menyimpan history untuk konteks yang lebih baik
- Markdown Support - Bot merespons dengan formatting Markdown yang akan di-render
- Responsive - Chat modal responsive untuk mobile devices
- Floating Icon - Icon always visible dan accessible di mana pun user berada di halaman
Edit di public/style.css:
.chat-icon {
background-color: #0d6efd; /* Ubah warna sini */
}Edit di index.js, bagian systemInstruction di dalam request config.
Edit di public/style.css:
.chat-icon {
bottom: 30px; /* Jarak dari bawah */
right: 30px; /* Jarak dari kanan */
}Untuk pertanyaan atau issues, silakan buat issue di repository ini.
Dibuat untuk Final Project RevoU Hacktivi Mini Project β¨