Conjify: Anemia Screening via Conjunctival Imaging
Built the full AI pipeline for Conjify, a mobile-first web app for non-invasive anemia self-screening via smartphone camera. I designed and trained a dual-head EfficientNet-B0 that simultaneously classifies anemia presence and estimates hemoglobin levels quantitatively, trained on CP-AnemiC dataset (710 images) using multi-task learning with progressive unfreezing. Integrated Grad-CAM to extract spatial activation statistics for structured Llama 3.3 70B clinical interpretation in plain Indonesian. Model achieved 84% accuracy, AUC-ROC 0.902, and Hb regression MAE 1.515 g/dL. Deployed on Hugging Face Spaces via Gradio API.
Computer VisionEfficientNet-B0Multi-task LearningGrad-CAMLLMGradio
View Repository →
NutriVision
Built as the AI component of a cross-path capstone at Coding Camp DBS x Dicoding. I implemented EfficientNetV2 as the backbone with BiFPN for multi-scale feature fusion and FCOS as the detection head, a fully anchor-free approach using stride-based convolution instead of predefined anchor boxes. The app identifies fast food items from major brands and estimates their exact nutritional content.
Computer VisionEfficientNetV2FCOSBiFPNAnchor-Free Detection
View Prototype →
NALAR: Media Literacy Simulation
Most media literacy tools tell people what misinformation looks like. NALAR makes them responsible for it. Players step into the role of a news editor or social media influencer, receive an AI-generated scenario brief built from verified but incomplete materials, then make real editorial decisions: write the headline, choose the tone, draft the script, pick the thumbnail concept. Once published, a simulated social network powered by live AI calls shares, questions, mutates, and replies to the story in real time, visualized as a spreading force graph. Players can respond mid-spread with a clarification, retraction, or silence, and each choice shifts the outcome. The session ends with a full autopsy: the turning point, the media literacy principle that applied, and a responsibility score. Built on Next.js 14 App Router with Zustand for state, Supabase Postgres for persistence, and a multi-model AI layer across Groq and Gemini with Langfuse for observability.
Next.jsTypeScriptAIGroqGeminiSupabasereact-force-graph-2d
Personal AI Agent (WhatsApp)
Built and deployed a personal AI agent directly into my own WhatsApp, handling automated responses, task assistance, and context-aware interactions through a bot pipeline running on personal infrastructure.
AI AgentWhatsAppAutomationPython
PyGrind
A browser-only, 100% AI-driven coding practice platform for AI/ML and backend engineers. Every task, curriculum path, and code review is generated dynamically by an LLM (Groq or Gemini) using the user's own API key, with no backend and no database. Built an adaptive tier system where problem difficulty scales per topic, a Monaco-based practice loop with real-time AI code review gating progression, and an owner-maintained HTML handbook synced as reference material for every problem.
ReactTypeScriptMonaco EditorLLM IntegrationZustandTailwind CSS
View App →
Accessible Campus Navigation
Most navigation systems optimize for distance. This one optimizes for people. I built the Accessibility Index for the Physically Disabled (IAT = 0.8) using fuzzy logic across four physical parameters: slope, width, surface condition, and obstacles. That score integrates directly into the A* cost function, so the algorithm finds the best trade-off between distance and real-world walkability for wheelchair users. Tested on FMIPA UNNES (54 nodes, 27 edges), the accessible route was 66% longer than the shortest path while scoring IAT = 0.8. The model also flags high-risk segments, making it a spatial tool for inclusive infrastructure planning.
PythonA* AlgorithmFuzzy LogicGISAccessibility
LexiLSTM: Campus Complaint Classifier
The real challenge was not the model, it was the absence of labeled data. I used weak supervision with a domain lexicon and fuzzy string matching to auto-generate pseudo-labels across six complaint categories from informal Indonesian social media text. I compared standard BiLSTM, BiLSTM + self-attention, and BiLSTM + multi-head attention. The key finding: added complexity does not consistently win when training labels are noisy. The hybrid approach still delivered +18% accuracy over baseline, with attention weights providing interpretable token-level insight.
NLPBiLSTMSelf-AttentionWeak SupervisionPython
IHSG Prediction via Public Sentiment
I built a hybrid forecasting system integrating public sentiment from Twitter/X with IHSG historical data to predict monthly stock index movement. Sentiment was classified using IndoBERT, chosen for its Indonesian-corpus pre-training, then aggregated into a monthly index and combined with price features as multivariate LSTM input. Adding sentiment reduced RMSE from 834.44 to 711.47 and MAE from 722.46 to 611.98, confirming that public sentiment carries genuine predictive signal for Indonesian market dynamics.
NLPIndoBERTLSTMFinanceSentiment Analysis