Skip to content

Work

Selected work

A mix of research, optimization, and systems I’ve spent enough time with to have opinions about.

01 · Undergraduate Thesis · Computer Vision

How do CNNs and Vision Transformers actually arrive at a diagnosis?

Benchmarking Vision Transformers Against CNNs for Plant Disease Diagnosis: Performance, Robustness, and Visual Interpretability

Two models can reach similar accuracy while learning very different representations.

My undergraduate thesis is a computer vision study comparing ResNet-50 and ViT-B/16 inside a controlled three-stage pipeline (leaf localization, species classification, species-conditioned disease prediction) on roughly 54,000 leaf images across 13 species and 38 classes.

  1. YOLO leaf localization
  2. Species classifier
  3. ResNet-50 vs. ViT-B/16
  4. Grad-CAM · attention rollout
A diseased potato leaf beside the CNN's Grad-CAM map, concentrated on one lesion, and the transformer's attention map, spread across the leaf.
Same leaf, different evidence: CNN Grad-CAM vs. ViT attention.

Evidence

  • ViT-B/16 beat ResNet-50 at every stage: 93.8% vs. 92.7% on disease classification, 90.6% vs. 89.4% end to end.
  • ViT attribution maps were 1.83 nats more diffuse (saliency entropy 5.67 vs. 3.84, p < 0.001, n = 1,100).
  • The CNN put 71% of its attribution mass in the top 10% of pixels, against 49% for the ViT, and overlapped lesions more (IoU 0.61 vs. 0.44).
PyTorchCNNsVision TransformersYOLOGrad-CAMAttention RolloutInterpretabilityRepresentation LearningHPC

02 · Optimization · Constraint Programming · Systems

Scheduling is easy until everyone has constraints.

OurClock · Constraint-based university timetable scheduling system

OurClock started as a university software-design project and somehow turned into a multi-year scheduling system used to generate real academic timetables.

The hard part was never putting courses into time slots. It was turning hundreds of small institutional rules into constraints a solver could actually reason about.

  1. Administrative inputs
  2. Constraint model
  3. OR-Tools · CP-SAT
  4. Validated timetable

Evidence

  • Deployed at Krea University across multiple terms, at the scale of 300+ courses.
  • Pilot testing reduced scheduling conflicts by 95%.
  • Valued at ₹50,000 at Krea; institutional contract discussions with IFMR College, Sri City.
Google OR-ToolsCP-SATInteger ProgrammingConstraint ProgrammingFastAPIMariaDBPython

AdamW vs Muon · Optimization · Deep Learning · NLP

Same accuracy. Different optimization story.

I fine-tuned BERT-small with AdamW and hybrid Muon expecting a straightforward optimizer comparison.

The accuracies tied.

So I started looking at convergence, calibration, update geometry, and sharpness instead.

OptimizationPyTorchBERTMuonAdamWLoss Landscapes
GitHub (opens in a new tab)

ACEs and mental-health risk · Applied ML · Statistical Modeling

Can social support change how childhood adversity translates into mental-health risk?

This project started with a dataset of 404 university students and a question that couldn’t be answered well by a single predictive model.

I used structural equation modeling, logistic regression, and random forests to study the relationship between adverse childhood experiences and mental-health outcomes.

It was a replication of Watt et al. (2020), and one result held up: social support appeared as a significant mediator between childhood adversity and mental-health outcomes, as the original study found.

Structural Equation ModelingLogistic RegressionRandom ForestsApplied StatisticsResearch

Side quests

Built for fun. Or for the team. Usually both.

Not the main event. The things I build because I can’t leave a tedious process alone.

Side quest at Skai Lama · built on n8n

Skai Lama content engine

A Monday-morning content pipeline that does the mechanical work and leaves the decisions to people.

Content planning at Skai Lama meant someone reading through a week of Slack, Notion, meeting notes and support chats before anyone could decide what to write. So I wired it up in n8n.

Every Monday it pulls those signals, turns them into a digest, proposes a calendar, researches keywords and drafts the first version. It stops at every step until a human says yes.

The sketch · every Monday

signals, summarised in parallel

  • Slack
  • Notion
  • Google Drive
  • Crisp
  • GitHub PRs
  1. L1

    Signal digest

    Claude Sonnet 4

    every signal needs a named entity, a number or a quote

  2. L2

    Content calendar

    Claude Sonnet 4

    briefs, angles and publish dates

  3. L3

    Research

    Claude Haiku + Ahrefs MCP + web search

    keywords, SERP gaps, real pain points from forums

  4. L4

    First draft

    Claude Sonnet 4

    written against a style guide, ends with a self-critique

human approvesDraft to marketing for review
  • Approval gates are load-bearing

    Each layer waits for a human to approve in Notion. The gates are where real context enters the system, not a formality.

  • Prompts live in Notion, not n8n

    Every agent prompt is fetched at runtime, so whoever improves the prompts never has to open the workflow.

  • Haiku for handoffs, Sonnet for thinking

    Each layer leaves a machine-readable note for the next one. Writing those is extraction, so the smaller model does it.

Things n8n taught me the hard way

  • Inside an n8n loop, .first() quietly returns iteration zero. It has to be .item.
  • Claude still wraps JSON in ``` fences sometimes, even when told not to. Every parse step strips them.
  • n8n's HTTP node drops the upstream fields, so a Code node stitches the payload back onto the Notion response.

Not built yet

  • A real style guide
  • More signal sources
  • A RAG layer
  • Auto-publishing to the CMS

n8n · Claude Sonnet 4 · Claude Haiku · Notion API · Slack API · Ahrefs MCP