BioCollab adalah media pembelajaran interaktif Biologi berbasis model Open-Ended Collaboration (OE-C). Proyek ini dirancang untuk mendukung pembelajaran kolaboratif melalui:
- orientasi fenomena,
- diskusi tim real-time,
- pengisian LKPD kolaboratif,
- evaluasi individu dan evaluasi tim.
Aplikasi dibangun dengan Next.js App Router + Server Actions + MongoDB.
BioCollab adalah e-modul Biologi yang menggabungkan konten materi dan aktivitas kolaborasi tim dalam satu aplikasi web. Siswa dapat membentuk kelompok, berdiskusi, menyusun jawaban LKPD, lalu menyelesaikan evaluasi.
- Meningkatkan keterampilan berpikir kritis dan kreatif siswa.
- Mendorong kolaborasi berbasis masalah open-ended.
- Menyediakan alur belajar terstruktur dari pendahuluan sampai evaluasi.
- Subbab 1: Virus
- Subbab 2: Bakteri
- Subbab 3: Jamur
- Next.js 16.1.6 (App Router)
- React 19.2.3
- TypeScript (strict mode)
- Tailwind CSS v4 (dengan custom theme di
app/globals.css) - lucide-react untuk icon
- Next.js Server Actions (
app/actions.ts) - MongoDB Node Driver (
mongodbpackage) - Koneksi database melalui
lib/mongodb.ts
- ESLint 9 + eslint-config-next
- React Compiler diaktifkan (
next.config.ts→reactCompiler: true)
- Landing page (
/) sebagai pintu masuk. - Pendahuluan (
/pendahuluan) menampilkan capaian, tujuan, dan orientasi. - Materi (
/materi-virus,/materi-bakteri,/materi-jamur) berisi fenomena + tantangan open-ended. - Ruang LKPD (
/lkpd) untuk pembentukan tim, diskusi, dan lembar kerja. - Evaluasi (
/evaluasi) untuk kuis individu + refleksi kelompok (khusus ketua).
- Buat kelompok dengan kode unik 6 karakter.
- Gabung kelompok menggunakan kode.
- Session user disimpan di
localStoragedengan keybiocollab_session. - Auto-login session saat user kembali membuka aplikasi.
- Chat per kelompok disimpan di MongoDB collection
chats. - Refresh pesan dilakukan polling tiap 3 detik.
- LKPD dipisah per topik:
virus,bakteri,jamur. - Tiap topik memiliki 4 bagian:
tugasinkubasiiluminasiverifikasi
- Semua anggota mengisi kuis individu (5 soal pilihan ganda).
- Skor dihitung otomatis dalam persen.
- Ketua kelompok mengisi evaluasi tim (uraian).
- Data evaluasi disimpan/upsert per
groupCode + userName.
Karena menggunakan route group app/(modul), URL tetap bersih tanpa segmen (modul).
/→ Landing page/pendahuluan/materi-virus/materi-bakteri/materi-jamur/lkpd/evaluasi
app/
actions.ts # Server Actions (group, chat, lkpd, evaluasi)
layout.tsx # Root layout + metadata
page.tsx # Landing page
globals.css # Tailwind import + custom theme pastel
(modul)/
layout.tsx # Layout modul + sidebar + GroupProvider
pendahuluan/page.tsx
materi-virus/page.tsx
materi-bakteri/page.tsx
materi-jamur/page.tsx
lkpd/page.tsx
evaluasi/page.tsx
components/
GroupContext.tsx # Session kelompok via localStorage
lib/
mongodb.ts # Mongo client singleton
models/
Group.ts # Model Mongoose (legacy, belum dipakai actions)
Contoh struktur:
{
"groupName": "Kelompok Alpha",
"groupCode": "A1B2C3",
"members": ["Nafisa", "Budi"],
"createdAt": "2026-03-05T00:00:00.000Z",
"lkpd": {
"virus": {
"tugas": "...",
"inkubasi": "...",
"iluminasi": "...",
"verifikasi": "..."
},
"bakteri": {},
"jamur": {}
},
"evaluasiTim": "Opsional, diisi ketua"
}{
"groupCode": "A1B2C3",
"userName": "Nafisa",
"message": "Halo tim",
"createdAt": "2026-03-05T00:00:00.000Z"
}{
"groupCode": "A1B2C3",
"userName": "Nafisa",
"skorPengetahuan": 80,
"evaluasiKelompok": "Opsional, hanya ketua",
"submittedAt": "2026-03-05T00:00:00.000Z"
}File: app/actions.ts
createGroup(groupName, leaderName)- Membuat kelompok baru dan generate
groupCodeunik.
- Membuat kelompok baru dan generate
joinGroup(code, memberName)- Join kelompok berdasarkan kode (idempotent untuk nama yang sama).
getChatMessages(groupCode)- Ambil chat per grup, urut waktu ascending.
sendChatMessage(groupCode, userName, message)- Simpan pesan chat.
saveLKPD(groupCode, topic, lkpdData)- Simpan LKPD berdasarkan topik (
virus|bakteri|jamur).
- Simpan LKPD berdasarkan topik (
getGroupData(groupCode)- Ambil data group terbaru.
saveEvaluation(groupCode, userName, evalData)- Simpan evaluasi individu dan (jika ketua) evaluasi tim.
- Node.js 18+ (disarankan LTS terbaru)
- MongoDB Atlas/local instance
npm installBuat file .env.local di root project:
MONGODB_URI=mongodb+srv://username:password@cluster-url/biocollab_db?retryWrites=true&w=majority
lib/mongodb.tsakan melempar error jikaMONGODB_URIbelum diisi.
npm run devLalu buka: http://localhost:3000
npm run dev→ menjalankan aplikasi mode developmentnpm run build→ build productionnpm run start→ menjalankan hasil build productionnpm run lint→ menjalankan ESLint
- User membuka landing page dan masuk ke modul.
- User mempelajari pendahuluan dan salah satu subbab materi.
- User masuk ke
LKPD:- membuat kelompok baru, atau
- bergabung ke kelompok dengan kode.
- User berdiskusi di tab chat.
- User mengisi LKPD per topik (Virus/Bakteri/Jamur).
- User menyelesaikan evaluasi individu.
- Jika user ketua, user menambahkan evaluasi kelompok.
- Session saat ini berbasis browser
localStorage(bukan autentikasi akun). - Real-time chat menggunakan polling 3 detik (belum WebSocket).
models/Group.tsmasih ada, namun alur utama saat ini menggunakan MongoDB native driver diapp/actions.ts.
Beberapa peningkatan yang bisa dipertimbangkan:
- migrasi polling chat ke WebSocket,
- autentikasi user (mis. NextAuth / auth provider),
- dashboard guru untuk monitoring progres kelompok,
- export hasil LKPD/evaluasi ke PDF/Excel,
- analitik hasil belajar per topik.
- Nama aplikasi: BioCollab
- Tema: E-Modul Biologi berbasis Open-Ended Collaboration
- Metadata title saat ini: BioCollab | E-Modul Biologi OE-C