Okt – Des 2026Oct – Dec 2026 · Back-end developerBack-end developer
Eyva: Smart Study Companion
Aplikasi belajar dengan timer Pomodoro yang memakai webcam untuk mendeteksi tanda kantuk dan menyarankan jeda. Sebelumnya bernama Loopa.A Pomodoro study app that uses the webcam to detect signs of drowsiness and suggest breaks. Formerly called Loopa.
Next.js · FastAPI · Python · YOLO11 · Supabase · Railway
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. Eyva membaca webcam, menandai tanda kantuk, dan menyarankan jeda.People studying with the Pomodoro technique often don't notice when they start getting drowsy. Eyva reads the webcam, flags signs of drowsiness, and suggests a break.
Peran sayaMy role
Back-end developer. Saya membangun API sesi dan autentikasi (FastAPI di Railway, Supabase), melatih serta mengevaluasi model deteksinya, dan menghubungkan login serta insight AI ke frontend.Back-end developer. I built the session and auth API (FastAPI on Railway, Supabase), trained and evaluated the detection model, and wired sign-in and AI insights into the frontend.
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.
Berganti nama, lalu backend dipisah dan login diwajibkanRenamed, then the backend split out and sign-in made mandatory
Saat berganti nama dari Loopa menjadi Eyva, backend dan model saya pisahkan dari monorepo ke repo sendiri. Semua endpoint sesi kini mewajibkan login, dan token Supabase diverifikasi di backend sehingga riwayat dan statistik hanya terlihat oleh pemiliknya. Sesi yang sedang berjalan dimuat ulang dari Supabase setelah redeploy.When Loopa was renamed Eyva, I moved the backend and model out of the monorepo into their own repo. Every session endpoint now requires sign-in, and Supabase tokens are verified on the backend so history and statistics are visible only to their owner. Active sessions are reloaded from Supabase after a redeploy.
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 dengan model YOLO dan penyimpanan Supabase aktif.Running in production: frontend on Vercel, backend on Railway with the YOLO model and Supabase storage active.
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, Nov 2026).Google sign-in through Supabase has not been tested with a real account yet (per project notes, Nov 2026).
- Model dilatih di CPU dengan 35% data dan 12 epoch. Pelatihan penuh di GPU belum dilakukan.The model was trained on CPU with 35% of the data for 12 epochs. Full GPU training has not been done yet.