Platform pemeriksaan, transkripsi tulisan tangan (OCR), dan penilaian otomatis jawaban ujian essay berbasis Vision AI yang terintegrasi menggunakan Google Form / Portal Simulasi, FastAPI, Next.js 16 (Tailwind v4), dan Redis/Celery.
AI Exam Assessment System adalah solusi cerdas untuk otomatisasi koreksi lembar jawaban essay mahasiswa yang diunggah dalam format PDF atau gambar. Dengan menggabungkan teknologi Multimodal Vision AI (GPT-4o-mini / Gemini 1.5 Flash) untuk mengekstrak tulisan tangan secara akurat dan menilai konten secara objektif berdasarkan kriteria rubrik dinamis, sistem ini memangkas beban administratif koreksi dosen secara signifikan.
Sistem dirancang dengan arsitektur asinkron yang tangguh (queue-based) agar dapat berjalan stabil, responsif, dan hemat resource pada server berspesifikasi minimum (VPS RAM 4GB).
- Next.js 16.2.9 (App Router, React 19)
- Tailwind CSS v4 (Desain modern, adaptif, dengan variabel HSL terintegrasi)
- Material Symbols Outlined (Ikon UI)
- Cookie-based JWT Auth (Manajemen sesi pengguna aman)
- Next.js Middleware (Server-side routing & protection rute di
/src/middleware.ts) - Responsive Split-screen Layout (Stacked view vertikal di mobile, adjustable panel split di desktop pada halaman Review)
- FastAPI (Python framework berkinerja tinggi, asynchronous)
- Celery & Redis (Antrean FIFO & processing asinkron terdistribusi)
- PyMuPDF (fitz) & Requests (Pemrosesan file PDF & unduhan berkas eksternal)
- PostgreSQL (Penyimpanan database relasional tangguh)
- SQLAlchemy (Python ORM)
- Google Apps Script Webhook (Integrasi instan dari pengiriman Google Form resmi)
- GPT-4o-mini / Gemini 1.5 Flash (Vision & Text Scoring API)
- Resend API (Otomatisasi pengiriman laporan hasil ujian berbentuk HTML premium ke email mahasiswa)
exam-ai/
βββ backend/ # FastAPI Backend & Celery Workers
β βββ app/
β β βββ api/ # Endpoint API, Webhooks, & Authentication
β β βββ core/ # Konfigurasi, Keamanan, & Database
β β βββ models/ # Model Database (SQLAlchemy)
β β βββ schemas/ # Skema Validasi Pydantic
β β βββ services/ # Layanan Vision LLM & Email (Resend)
β β βββ workers/ # Task Celery (Async Jobs)
β βββ Dockerfile
β βββ requirements.txt
βββ frontend/ # Next.js Dashboard UI
β βββ src/
β β βββ app/ # Halaman Next.js (Dashboard, Portal Submit, Review, dll.)
β β βββ components/ # Header (Clean Header) & Sidebar (Mobile Navigation Drawer)
β β βββ context/ # AuthContext (Sesi & HTTP Interceptor)
β β βββ middleware.ts # Proteksi Halaman Server-side
β βββ Dockerfile
β βββ package.json
βββ docker-compose.yml # Orkestrasi Docker lokal/produksi
βββ PRD.md # Dokumen Kebutuhan Produk (Final)
βββ README.md # Panduan Dokumentasi (File Ini)graph TD
A[Mahasiswa unggah berkas ujian] -->|Google Form / Portal Simulasi| B[Apps Script / Webhook]
B -->|HTTP POST| C[FastAPI Backend /api/v1/webhook/submit]
C -->|Simpan status: QUEUED| D[(PostgreSQL)]
C -->|Enqueue Task| E[Redis Broker]
E -->|FIFO queue| F[Celery Worker]
F -->|Convert PDF/Image & Extract Text| G[Vision LLM API]
G -->|Terapkan Rubrik & Kriteria Penilaian| H[Scoring & Feedback Engine]
H -->|Update status: COMPLETED| D
D -->|Dosen Review & Update Nilai| I[Dashboard Admin Next.js]
I -->|Setujui & Kirim Email| J[Resend API]
J -->|HTML Report Premium| K[Email Mahasiswa]
- Pengumpulan Berkas: Mahasiswa mengirim lembar jawaban via Google Form resmi atau secara simulasi di
/submitportal mahasiswa. - Trigger Webhook: Data dialirkan ke FastAPI backend
/api/v1/webhook/submit, dicatat statusnya (QUEUED), dan didelegasikan ke antrean. - Pemrosesan Asinkron (Celery + Redis): Worker mengambil tugas, menggunakan
PyMuPDFuntuk memecah PDF, mengirim gambar ke Vision LLM untuk OCR (transkripsi tulisan tangan) & analisis kriteria nilai. - Dashboard & Koreksi Manual: Dosen masuk ke
/login(terproteksi middleware server-side). Dosen dapat melihat antrean real-time, statistik dinamis (Total Mahasiswa, Ujian Aktif, Akurasi AI), mengedit rubrik soal dinamis, memicu hitung ulang AI, atau melakukan koreksi skor/umpan balik secara manual. - Notifikasi Premium: Setelah disetujui, sistem mengirim laporan HTML premium (mengandung bagan visual per soal, skor kelulusan, & feedback dosen) secara otomatis ke email mahasiswa.
- Docker & Docker Compose terinstal di komputer Anda.
- API Key Google Gemini atau OpenAI.
- API Key Resend.
git clone https://github.com/adimhsd/exam-ai.git
cd exam-aiBuat berkas .env di folder root dengan isi sebagai berikut:
# Database Configuration
POSTGRES_USER=postgres
POSTGRES_PASSWORD=securepassword
POSTGRES_DB=exam_db
DATABASE_URL=postgresql://postgres:securepassword@db:5432/exam_db
# Redis
REDIS_URL=redis://redis:6379/0
# LLM APIs
OPENAI_API_KEY=your_openai_api_key
GEMINI_API_KEY=your_gemini_api_key
# Resend Email Service
RESEND_API_KEY=your_resend_api_key
EMAIL_FROM=Exam System <no-reply@exam.adi-muhamad.my.id>Jalankan perintah berikut untuk membangun dan menjalankan semua container:
docker compose up --build -dSetelah semua container aktif:
- Frontend Dashboard: http://localhost:8080
- Backend API (Swagger Docs): http://localhost:8000/docs
- Portal Submit Mahasiswa: http://localhost:8080/submit
Untuk mengalirkan data otomatis dari tanggapan Google Form ke backend FastAPI:
- Buka Google Sheet tempat tanggapan Form disimpan.
- Pilih menu Extensions > Apps Script.
- Tempel kode berikut:
function onSubmit(e) {
var url = "http://168.144.140.116:8000/api/v1/webhook/submit"; // Sesuaikan URL API backend Anda
var response = e.values;
var payload = {
"timestamp": response[0],
"email": response[1],
"nama": response[2],
"nim": response[3],
"file_url": response[4] // Pastikan kolom ke-5 berisi URL upload berkas PDF
};
var options = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(payload)
};
UrlFetchApp.fetch(url, options);
}- Buat trigger di menu Triggers (ikon jam) > Add Trigger > Pilih
onSubmit> Event Source:From spreadsheet> Event type:On form submit> Simpan dan berikan izin akses.
- Fungsionalitas Utama (Selesai):
- Antrean asinkron FIFO (Celery & Redis)
- Pipeline Vision LLM OCR (Transkripsi tulisan tangan lembar jawaban)
- Editor Rubrik Ujian Interaktif & Bank Soal dinamis (Dosen dapat mengedit, menambah, & menghapus soal/kriteria evaluasi AI)
- Form Pembuatan Ujian Baru Dinamis per Mata Kuliah
- Form Pembuatan Kelas/Mata Kuliah Baru
- Portal Pengiriman Simulasi Mahasiswa (
/submit) - Desain Ulang Template Email HTML Hasil Ujian Premium (dengan visual progress bars per soal & kelulusan otomatis)
- Keamanan server-side routing Next.js (
middleware.ts) - Dasbor Analitik Dinamis dari Database Postgres (penghitungan volume pengumpulan, log sistem gagal, akurasi rata-rata AI, jumlah mahasiswa aktif)