Projects
Personal and freelance work
These are projects I built to understand the systems I work with — not showcases, but things I actually wanted to learn how to build. Sorted by relevance to my current focus.
AI / ML
ArchivedAI/MLLLM Chatbot with RAG — Bahasa Indonesia
Self-hosted Telegram chatbot using PrivateGPT + BGE embeddings + Merak-7B, customised for Bahasa Indonesia.
LLM Chatbot with RAG — Bahasa Indonesia
Self-hosted Telegram chatbot using PrivateGPT + BGE embeddings + Merak-7B, customised for Bahasa Indonesia.
Built to explore self-hosted RAG in a non-English language context. The challenge was making retrieval work well for Bahasa Indonesia, which has limited open-source embedding support. Used BGE multilingual embeddings with PrivateGPT as the orchestration layer and Merak-7B as the inference model. Implemented queue management to handle concurrent Telegram requests without overloading the inference server, and multi-DB logging to track query quality over time.
Stack
Tags
ArchivedAI/MLLLM Chatbot with Custom RAG Pipeline
Full RAG pipeline built from scratch using Haystack + GTE-Large + Qdrant + Zephyr-7B. Every layer independently configured.
LLM Chatbot with Custom RAG Pipeline
Full RAG pipeline built from scratch using Haystack + GTE-Large + Qdrant + Zephyr-7B. Every layer independently configured.
A rebuild of the first RAG project, this time constructing the entire pipeline from scratch rather than relying on an all-in-one framework. Used Haystack for pipeline orchestration, GTE-Large for embeddings (better retrieval quality than BGE for this use case), Qdrant as the vector store, and Zephyr-7B as the generation model. The interesting part was understanding exactly why each component was making the decisions it made — forced a much deeper understanding of how retrieval, reranking, and generation interact.
Stack
Tags
ArchivedAI/MLSentiment Analysis Microservice System
Reddit comment sentiment pipeline using VADER/NLTK, deployed as Docker microservices on Linux VMs with a 24-hour auto-update cycle.
Sentiment Analysis Microservice System
Reddit comment sentiment pipeline using VADER/NLTK, deployed as Docker microservices on Linux VMs with a 24-hour auto-update cycle.
Designed as a distributed system rather than a monolith — each stage of the pipeline (data ingestion, preprocessing, sentiment scoring, storage) runs as a separate Docker container. Deployed across Linux VMs using VMware. The 24-hour cycle automatically pulls new Reddit comments via the API, processes them through the NLTK/VADER pipeline, and updates the stored sentiment scores. The microservice architecture made it easy to swap out individual components for testing.
Stack
Tags
ArchivedAI/MLOCR Machine Translation Desktop Tool
Desktop tool combining Tesseract OCR and the DeepL API for image and PDF text detection and translation.
OCR Machine Translation Desktop Tool
Desktop tool combining Tesseract OCR and the DeepL API for image and PDF text detection and translation.
A practical tool built for a specific use case: translating text embedded in images or scanned PDFs where copy-paste isn't possible. Tesseract handles text detection and extraction from images and PDF pages, DeepL handles translation. Wrapped in a simple desktop UI. The main technical challenge was handling image preprocessing to improve OCR accuracy — contrast adjustment, deskewing, and noise reduction before feeding to Tesseract.
Stack
Tags
Web & Systems
PausedWebDashboard Webapp — Ministry of Home Affairs
Full-stack dashboard for national vehicular tax data, built for a Subdirectorate of Indonesia's Ministry of Home Affairs (Kemendagri).
Dashboard Webapp — Ministry of Home Affairs
Full-stack dashboard for national vehicular tax data, built for a Subdirectorate of Indonesia's Ministry of Home Affairs (Kemendagri).
Engaged directly by a Subdirectorate Head at Kemendagri to design and develop a data recap dashboard for national vehicular tax data. Built a full-stack web application with React frontend, Node.js backend, and PostgreSQL database — including bar, pie, and line chart visualisations for categorical and historical tax data. Designed the data standards and system architecture for integrating regional vehicular tax data into a unified view. Led requirements meetings and coordinated with the Ministry of Data and Information Center (Pusdatin) on data consulting and deployment planning. Development was completed; deployment is pending data availability from regional agencies.
Development complete. Deployment pending inter-agency data availability.
Stack
Tags
LiveWebBlog Management System — APMIKINAS
CMS-based blog and content platform for APMIKINAS, an Indonesian micro-business association.
Blog Management System — APMIKINAS
CMS-based blog and content platform for APMIKINAS, an Indonesian micro-business association.
Designed and deployed a blog management system for an Indonesian association of micro and small business entrepreneurs. The platform allows non-technical association staff to publish articles, announcements, and resources without touching code. Built on a CMS to minimise operational overhead after handoff.
Stack
Tags
ArchivedSystemsPatient Management System (C++)
Linked-list-based hospital management system in C++ with role-based access control and in-memory storage.
Patient Management System (C++)
Linked-list-based hospital management system in C++ with role-based access control and in-memory storage.
Built as a data structures exercise — every record lives in a doubly linked list, with no file I/O or database. Implements role-based access: doctor, nurse, and admin roles each have different read/write permissions on patient records. Supports admission, discharge, record update, and search by patient ID or name. The interesting constraint was doing everything in memory while keeping the code navigable and the access control clean.
Stack
Tags
ArchivedWebJava Cafeteria Management System
Three-tier web application using EJB + JSF + Tomcat with multi-role access, order management, and stock control.
Java Cafeteria Management System
Three-tier web application using EJB + JSF + Tomcat with multi-role access, order management, and stock control.
A three-tier enterprise Java application: JSF on the frontend, EJB for business logic, Tomcat as the servlet container. Implements multiple user roles (customer, cashier, kitchen, admin) with role-appropriate views and permissions. Order flow covers submission, kitchen queue, preparation status, and billing. Stock management tracks ingredient levels and flags low-stock items. Built to practice the enterprise Java stack — EJB session beans, CDI injection, and JSF managed beans.
Stack
Tags