Computer Science · BINUS University · 2024–2028 Jakarta, Indonesia

I’m a Computer Science student at BINUS who builds web apps, backend services and machine-learning systems, with a paper accepted at the IEEE co-sponsored ICIMCIS 2026. Outside class, I run operations at Pelita Cargo, a China-to-Jakarta cargo forwarder.

Featured projects

Eight projects across the stack: the interface people use, the service behind it, and the model inside.

  1. 01Cargo Chat LLM
  2. 02GastroTMB
  3. 03Property Listing
  4. 04Pelita Track
  5. 05Tweet Emotions
  6. 06AlkesTrack
  7. 07Crypto Asset NER
  8. 08FootFit

Cargo Chat Extraction

LLM · NLP · Solo project

Local demo · Streamlit · synthetic chatCode ↗
Demo screen: on the left, a pasted WhatsApp chat asking to ship five boxes of kids’ running shoes to Bandung, with a product photo attached; on the right, the extracted order table, the item read from the photo, and sea and air price estimates.

Customers ask for shipping quotes on WhatsApp in short, scattered messages — in Indonesian, Mandarin or English, often with a photo instead of an item name. This pipeline turns the chat into a structured order, prices it from the rate card, and drafts a reply that asks only for what is still missing. It runs free on a laptop CPU with an open-source model (Qwen3.5 9B on Ollama) and is evaluated on real, anonymized customer chats from Pelita Cargo.

Accuracy per field · 33 real chats held out until the prompt was frozen
FieldAccuracy
Box countStated by the customer
97%
Destination cityStated by the customer
97%
Volume (CBM)Stated or computed by code
91%
WeightUnits converted by code
88%
Item typeFree text, often vague
76%
Tariff categoryAn admin pricing decision
53%
  • Model reads, code countsThe LLM only copies numbers and units as written (斤, mm, m). Unit conversion, CBM, minimum charges and the price are tested Python, which also flags impossible answers.
  • Field order mattersWith the box count before the size in the JSON schema, “65 × 45 × 50 cm” came back as 65 boxes. Putting the size first fixed it; more prompt examples did not.
  • Photos helpReading the customer’s photo first raised item-type accuracy from 65% to 76–82% on 17 chats — a small test, not a held-out one.
Overall
208 of 231 details customers stated are read correctly (90%) · the weak spot is the admin’s pricing calls — tariff category and branded rate
Evaluation
Real chats anonymized by rule and checked by hand, never committed · 8 prompt versions compared field by field · 81 automated tests that run without the model
Tried & dropped
Adding similar past admin decisions to the prompt (retrieval with local embeddings) did not beat the plain prompt, so it stays off by default.
Stack
PythonOllamaQwen3.5 9BPydanticStreamlitpytest

GastroTMB

Full-stack web app · Machine learning

gastro-tmb-tmb-prediction.vercel.appOpen ↗
GastroTMB prediction screen: mutation status inputs for ten genes on the left and a TMB-High result with 61.3% confidence and a therapy recommendation on the right.

A screening tool that predicts whether a gastric cancer tumor is TMB-High or TMB-Low from the mutation status of 10 genes. A Random Forest built from 774 patients across five cBioPortal cohorts powers a bilingual (Indonesian / English) web app that shows the prediction’s confidence, each gene’s contribution, and a therapy recommendation.

  1. 5 cBioPortal cohorts
  2. 10-gene mutation features
  3. Random Forest
  4. Flask backend
  5. TMB-High / Low + therapy
Results
On a held-out 20% test set: balanced accuracy 0.82 vs. 0.50 for a majority-class baseline · ROC-AUC 0.93 · catches 17 of 23 TMB-High patients
Stack
PythonFlaskscikit-learnpandasHTMLCSSJavaScript

Property Listing Microservices

Backend · Java · Spring Boot · Microservices

A backend for property listings, split into three Spring Boot services: one stores listings, one stores users, and a public API combines the two for outside clients. Each service owns its own database; the public API has none and gets everything from the other two over REST.

  1. Client request
  2. Public API · no database
  3. Listing service · one page
  4. User service · all owners in one call
  5. Listings with owners
  • BatchedA page of listings always costs two internal calls, however many owners it has.
  • FailuresA service that is down or times out gives a clear 503, a server error gives 502, and a rejected request passes its 4xx and message through.
  • IsolatedDocker Compose runs all three services but exposes only the public API.
Tests
29 automated tests with JUnit, MockMvc and MockRestServiceServer · the public API tests run without the other services
My part
Built the user service and the public API, with their tests and the Docker setup. The listing service was given as starter code.
Stack
Java 17Spring BootSpring Data JPAFlywayH2JUnitGradleDocker Compose

Pelita Track

Full-stack web app · React · Supabase

pelitacargo-track-dashboard.vercel.appOpen ↗
Pelita Track dashboard: shipment counts by status, a manifest table of waybills with routes and customs stamps, and a stage timeline for one sea-freight shipment.

A shipment tracking dashboard for China–Indonesia freight forwarding, modeled on how Pelita Cargo works. Customers search the manifest and follow each shipment through six stages, from pickup to delivery; admins add shipments and move them forward. Data lives in Supabase, and the cost estimator uses Pelita Cargo’s real all-in rates — per CBM for sea freight, per kg for air.

  • TrackSearch by waybill or client and see a timestamped stage timeline.
  • AdminAdd shipments by marking code, volume and rate, then update their status.
  • EstimateCalculate all-in shipping cost from real per-CBM and per-kg rates.
Stack
React 19ViteReact RouterSupabasePostgreSQLCSSVercel

Indonesian Tweet Emotions

NLP · Comparative study · Team project

A comparative study of six models from three families — classical machine learning, a BiLSTM and pre-trained Transformers — classifying five emotions in Indonesian tweets (EmoT from IndoNLU, 4,401 tweets). The models are ranked on macro-F1, because the five classes are imbalanced.

Macro-F1 on the held-out test set (440 tweets)
ModelMacro-F1
IndoBERTweetTransformer · Twitter domain
0.76
IndoBERTTransformer · general domain
0.70
Complement Naive BayesClassical ML
0.69
SVMClassical ML
0.67
Random ForestClassical ML
0.64
BiLSTM + FastTextSequential
0.63
  • Domain beats sizeIndoBERTweet, pre-trained on Indonesian tweets, beats the general-domain IndoBERT: data close to the task mattered more than model size.
  • Small dataOn 4,401 imbalanced tweets, Complement Naive Bayes outscores the BiLSTM — a strong baseline when data is limited.
  • Not luckOn the same 440 test tweets, IndoBERTweet’s lead over Naive Bayes holds up: if the two were equally good, a gap this big would show up less than 1% of the time (McNemar’s test, p = 0.0066).
My part
Exploratory data analysis and slang normalization — mapping colloquial Indonesian to standard words with a slang lexicon before any model sees the text.
Stack
Pythonscikit-learnPyTorchHugging Face TransformersTensorFlowFastTextGradioJupyter

AlkesTrack

Full-stack web app · Django · Solo project

bryandalee.pythonanywhere.comOpen ↗
AlkesTrack facility page: an eight-stage delivery timeline with dates for each completed stage, above a table of delivery details.

A monitoring system for the distribution of medical equipment to public health centres. The provider’s admin keeps working in the Excel file they already use, uploads it, and checks a preview before anything is saved; from there the app tracks every unit through eight delivery stages and shows each role — the provider, the health office and the health-centre staff — only what belongs to them.

  • ImportUpload the working Excel file and review it row by row before it is written.
  • RolesSeparate views for the provider admin, the health office, and each health-centre PIC.
  • TrackingEach unit moves through eight delivery stages, updated automatically.
Background
Built from a real brief for a medical-equipment provider. The contract fell through, so it lives on as a public demo with sample data only.
Stack
DjangoPythonPostgreSQLopenpyxlHTMLCSS

Crypto Asset NER

NLP · Research · Co-author

Accepted · ICIMCIS 2026

Named-entity recognition for crypto assets in Indonesian tweets. Distant supervision labels 25,726 tweets against a CoinGecko knowledge base, heuristic denoising filters out everyday words that share a ticker, and an IndoBERTweet-CRF model is then fine-tuned on 1,461 manually annotated tweets.

  1. Indonesian tweets
  2. Distant supervision labels
  3. Heuristic denoising
  4. IndoBERTweet-CRF + gold fine-tuning
  5. Crypto entities
Results
Entity-level F1 85.4% (precision 83.3%, recall 87.7%) in 5-fold cross-validation · annotator agreement Fleiss’ κ 0.97
My part
Worked with the team on the data pipeline — preparing the tweet data, distant-supervision labeling, heuristic denoising — annotated the Gold Standard as one of three annotators, and co-wrote the paper.
Stack
PythonPyTorchIndoBERTweetCRFJupyter

FootFit

Computer vision · Web app · Team project

A web app that measures your foot from a single photo. You put your heel against a wall, lay any ID-sized card (KTP, ATM or e-money) beside your foot as a scale reference, and take one photo from above. Classical computer vision does the rest — no ruler, no deep learning.

  1. Photo + card reference
  2. Gray World white balance
  3. YCrCb skin thresholding
  4. GrabCut segmentation
  5. Foot measurements
My part
Built the automated segmentation module — Gray World white balance, YCrCb skin thresholding, a Safe Zone heuristic and GrabCut — and produced the demo video.
Stack
PythonOpenCVNumPyFastAPIDocker
footfit.onrender.comOpen ↗
FootFit app screen: instructions to place the heel against a wall, lay a card beside the foot, and photograph with flash from above.

More projects

Frontend and desktop builds, plus the interface prototypes I designed in Figma.

sinefolis-cinema-website-six.vercel.appOpen ↗
Sinéfolis homepage: a gold hero banner, a cinema hall photo, and counters for 114 cinemas and 439 screens.

Frontend · Vanilla JavaScript

Sinéfolis Cinema Website

A cinema chain website designed in Figma, then built with plain HTML, CSS and JavaScript. Navigation works like a single-page app with no reloads; visitors filter films by cinema location, search promos and locations, and send feedback through a validated form. Responsive down to mobile.

HTMLCSSJavaScriptFigma

Desktop app · Team project

TixConzer

A desktop app for booking concert tickets, designed with object-oriented Java and a Swing interface.

JavaSwingOOP

Interface prototypes · Figma

  • QantinOnline food-ordering app for the BINUS campus canteen, designed for a Human–Computer Interaction course.Open in Figma ↗
  • BundaCareBaby-care app combining doctor consultations for babies, a health tracker, a parents’ forum, and a marketplace for baby products.Open in Figma ↗
  • SinéfolisThe design behind the cinema website above.Open in Figma ↗

Research

Peer-reviewed work from the BINUS School of Computer Science.

J. Davin, S. Anthony, B. Dale, C. Sompie, H. Lucky, and R. Charisma, “Heuristic-Augmented Denoising in Distant Supervision for Crypto Assets Named Entity Recognition Using IndoBERTweet-CRF,” accepted at the 8th International Conference on Informatics, Multimedia, Cyber, and Information System (ICIMCIS 2026), Jakarta, Indonesia, Dec. 2–3, 2026.

  • Technically co-sponsored by the IEEE Indonesia Section
  • Accepted papers are submitted for inclusion in IEEE Xplore
Accepted Paper #1571310604

Experience & education

Running a business taught me to ship, own outcomes, and talk to customers.

Co-Owner & Business Development Manager

Pelita Cargo — China → Jakarta cargo forwarding

2025 – Present
  • Co-owner running day-to-day operations: handling customers and managing their shipments from China to Jakarta.
  • Built Pelita Track, a tracking dashboard based on the company’s shipping workflow and real all-in rates.
  • Built a local LLM pipeline that turns customers’ WhatsApp price inquiries into structured orders and draft replies, evaluated on anonymized real chats.
  • Relaunched the company’s social presence as Koko Cargo across TikTok, Instagram and Threads.
  • Designed a four-pillar content framework: an educational series, the Bongkar Rahasia Impor import price-comparison series, infographics, and relatable everyday content.
  • Wrote the brand guidelines, scripts and hashtag strategy, and edit the videos myself.

Bachelor of Computer Science

Bina Nusantara University — School of Computer Science, Alam Sutera campus

2024 – Present
Expected 2028
GPA
3.94 / 4.00
Honors
Dean’s List 2025 · View certificate ↗
Coursework
Machine LearningDeep LearningComputer VisionHuman–Computer InteractionSpeech RecognitionResearch MethodsComputational BiologyObject-Oriented Programming

Certifications & training

  • Microsoft Azure AI FundamentalsAI-900T00-A · 15-hour training completion · Microsoft Elevate AI × GreatNusa (BINUS)View certificate ↗

Skills

What I’ve used to build the projects above.

Frontend & UI design

ReactJavaScriptHTMLCSSReact RouterResponsive designFigma

Backend, data & deployment

Spring BootSpring Data JPADjangoFlaskSQLPostgreSQLMySQLSupabaseREST APIsMicroservicesJUnitpytestPydanticDockerVercelRenderGit & GitHub

Machine learning & AI

LLMsPrompt engineeringStructured outputOllamaEmbeddings & retrievalLLM evaluationStreamlitscikit-learnOpenCVNumPypandasJupyterRandom ForestNLPText preprocessingImage segmentationModel evaluationMacro-F1Balanced accuracyROC-AUC

Programming languages

JavaPythonJavaScriptC

Spoken languages

IndonesianEnglishMandarin

Business

OperationsContent strategyBrand designVideo editing

Contact

Let’s build
something.

I’m looking for a software engineering internship — frontend, backend or AI/ML. The fastest way to reach me is email.

New message

Say hello.

This goes straight to my inbox. I’ll reply to the email you leave below.

Replies go to the email you enter.

Message sent.

Thanks. I’ll get back to you at .

Document Download

Loading…