Okt – Des 2026Oct – Dec 2026 · Back-end developerBack-end developer
Loopa — Smart Study Assistant
Aplikasi belajar dengan timer Pomodoro yang memakai webcam untuk mendeteksi tanda kantuk dan menyarankan jeda.A Pomodoro study app that uses the webcam to detect signs of drowsiness and suggest breaks.
Next.js · FastAPI · Python · YOLO11 · Supabase
DokumentasiDocumentation
Tangkapan layar dari situs yang sedang berjalan, diambil 4 November 2026.Screenshots of the live site, taken on 4 November 2026.





MasalahProblem
Orang yang belajar dengan teknik Pomodoro sering tidak sadar saat mulai mengantuk. Loopa membaca webcam, menandai tanda kantuk, dan menyarankan jeda.People studying with the Pomodoro technique often don't notice when they start getting drowsy. Loopa reads the webcam, flags signs of drowsiness, and suggests a break.
Peran sayaMy role
Back-end developer. Saya membangun API sesi (FastAPI di Railway), autentikasi Supabase, dan melatih serta mengevaluasi model deteksinya.Back-end developer. I built the session API (FastAPI on Railway) and Supabase auth, and trained and evaluated the detection model.
Keputusan teknisTechnical decisions
Memeriksa dataset sebelum memercayai angkaAuditing the dataset before trusting the numbers
Saya mengaudit dataset kantukv2 dan menemukan 109 dari 192 gambar uji punya salinan hasil augmentasi di data latih. Split diulang per kelompok gambar sumber sehingga satu foto asli tidak pernah muncul di dua sisi.I audited the kantukv2 dataset and found that 109 of 192 test images had augmented copies in the training set. I re-split by source-image group so one original photo never appears on both sides.
Model kecil yang cukup cepat di CPUA small model that is fast enough on CPU
YOLO11n di-fine-tune pada 3.841 gambar dengan 6 kelas. Inferensi sekitar 52 ms per frame di CPU, sehingga backend tidak membutuhkan GPU.YOLO11n fine-tuned on 3,841 images with 6 classes. Inference takes about 52 ms per frame on CPU, so the backend needs no GPU.
Peringatan dihitung dari rangkaian frameAlerts come from a sequence of frames
Deteksi per frame dijadikan sinyal temporal (kedipan, menguap, mata tertutup) lalu diproses state machine peringatan dua tahap, bukan dari satu frame.Per-frame detections become temporal signals (blinks, yawns, closed eyes) processed by a two-stage alert state machine, never a single frame.
Tip AI tidak boleh jadi titik gagalAI tips must not be a point of failure
Saran istirahat dibuat oleh LLM. Bila LLM tidak tersedia, aplikasi memakai tip berbasis aturan sehingga sesi belajar tetap berjalan.Break suggestions come from an LLM. If the LLM is unavailable, the app falls back to rule-based tips so the session keeps running.
HasilResults
- mAP50 0,959 pada 195 gambar uji statis setelah split ulang.mAP50 0.959 on 195 static test images after the re-split.
- Sekitar 52 ms per frame di CPU.About 52 ms per frame on CPU.
- Berjalan di produksi: frontend di Vercel, backend di Railway.Running in production: frontend on Vercel, backend on Railway.
Yang belum selesaiNot finished yet
- Validasi memakai webcam langsung masih berjalan. Angka mAP50 berasal dari gambar uji statis dan belum mewakili kondisi webcam nyata.Live webcam validation is still in progress. The mAP50 figure comes from static test images and does not yet reflect real webcam conditions.
- Login Google lewat Supabase belum diuji dengan akun sungguhan (per catatan proyek 30 Okt 2026).Google sign-in through Supabase has not been tested with a real account yet (per project notes, 30 Oct 2026).