Yugesh B

Open to new opportunities

Yugesh B

Data Engineer building automated pipelines, GenAI assistants, and large-scale scraping systems. Based in Chennai, Tamil Nadu, India.

0Years Experience
0Companies
0Flagship Projects
0Technologies

About

From Perl automation to GenAI products

A quick look at how the journey connects.

Data Engineer with 4+ years across web-scraping automation, ETL/data pipelines, and GenAI-powered applications. Started in Perl-based publishing automation, moved through large-scale e-commerce scraping and Bloomberg financial data engineering at TCS, and now builds data infrastructure and AI-assisted tooling at Thurro. Comfortable owning a problem end-to-end — from a raw HTML page or PDF to a production pipeline or a working LLM-backed product.

Current Role

Data Engineer @ Thurro

Location

Chennai, Tamil Nadu, India

Education

BCA, Computer Programming & Applications

Career

Experience

Click a role to expand contributions and tech stack.

Data Engineer

Dec 2025 — Present

  • —Designed and built a distributed job-execution platform (FastAPI + MySQL + APScheduler) that centrally schedules, dispatches, and tracks ~1,500 production web-scraping scripts across a multi-server AWS EC2 fleet, replacing a fragmented per-machine cron setup with zero code duplication.
  • —Architected a broker-free, database-polling job queue using row-level locking (SELECT ... FOR UPDATE SKIP LOCKED) with automatic crash detection and retry-with-backoff, deployed end-to-end on AWS EC2 Windows servers as auto-restarting native services (NSSM).
  • —Built and hardened a config-driven RAG ingestion pipeline processing 28+ financial/regulatory sources into a ClickHouse-backed vector corpus, including diagnosing a native heap-corruption crash and a cross-host n8n execution bug in production.
  • —Reverse-engineered a captcha-gated government vehicle-registration portal into a 5–10x faster automated data pipeline, uncovering and fixing a data-classification bug responsible for ~1.7M misclassified vehicle registrations.
  • —Built an LLM+VLM-powered extraction pipeline turning 40+ regulatory PDF disclosure forms across 30+ Indian insurance companies into structured financial data, using a two-pass text-then-vision verification flow.
PythonFastAPISQLAlchemyAPSchedulerMySQLClickHouseAWS EC2DockerPlaywrightOllamaGoogle Gemini API

Toolbox

Skills & Technologies

Organized by category — every item here has shipped in a real project.

Languages

PythonPerlSQL

Backend & APIs

FastAPIAPSchedulerREST APIsSQLAlchemy 2.0

Web Scraping & Automation

SeleniumPlaywrightScrapyBeautifulSouprequestsurllib

Databases

MySQLMongoDBSQLiteClickHouse

AI / GenAI

LLM Integration (Gemini, Ollama)Vision-Language Models (VLM)RAG PipelinesVoyageAI EmbeddingsVector DatabasesPrompt Engineering

Data & Visualization

PandasNumPyMatplotlibPower BIETL PipelinesPyMuPDFopenpyxl

Cloud & Tooling

AWS S3AWS EC2DockerNSSMn8nZyteGitGitLabStreamlit CloudRender

Practices

AgileScrum

Case Studies

Featured Projects

Two production systems I built and maintained end-to-end.

Indian Law AI Chatbot

Streamlit-based legal Q&A assistant with a self-refreshing case-law dataset and multi-key LLM failover

A production Streamlit chatbot that answers questions on Indian law — the Bharatiya Nyaya Sanhita, Bharatiya Nagarik Suraksha Sanhita, Bharatiya Sakshya Adhiniyam, the Constitution of India, and case law from the Supreme Court and all 24 High Courts — grounded in a 20,700+ entry curated Q&A dataset built by parsing raw legislative text and court judgments. Streams Gemini responses with automatic multi-key failover, renders LLM-generated charts inline, and keeps its dataset current via a fully automated daily GitHub Actions pipeline.

0

Q&A Dataset Entries

0

Courts / Tribunals Tracked

0

Scraper Sources

0

Lines of Python

Language breakdown (live from GitHub)

Python · 70%CSS · 30%

Key Contributions

  • Streaming chat engine with multi-key API failover — round-robin Gemini API key rotator with quota-aware failover, exponential backoff, and auto-continue logic that transparently resumes responses cut off by output-token limits.
  • Self-refreshing legal dataset via GitHub Actions — a daily cron workflow pulls new Supreme Court, High Court, and tribunal judgments from Indian Kanoon's official RSS feeds and auto-commits new entries with no manual upkeep.
  • Offline regex-based Q&A extraction pipeline — parses raw statutory text directly into 20,000+ structured Q&A pairs with no LLM calls, plus a secondary LLM-assisted extraction path for judgment text.
  • Multi-source legal web scraping across three independent sources, each normalized into one unified Q&A schema.
PythonStreamlitGoogle Gemini APISQLitePlotlyGitHub ActionsGSAPThree.js

Automated Document Intelligence Pipeline

Multi-engine web scraping & dual-database data pipeline for financial/regulatory disclosure documents

A production data-collection system that scrapes portfolio holdings, factsheets, insurer newsletters, and regulatory (RBI/SEBI) filings from 229 site-specific configurations spanning mutual funds, banks, insurers, and regulators — normalizing, deduplicating, and loading results into a dual-database (MySQL + ClickHouse) pipeline with automated S3 archival. Built and maintained end-to-end across ~29,000 lines of Python.

0

Site Configs

0

Scraping Engines

0

Databases

0

Lines of Python

Key Contributions

  • Config-driven scraping framework processing 229 distinct site sources from a single unified codebase, eliminating per-site custom scripts via declarative YAML configuration.
  • Multi-engine fallback scraping chain (Selenium → Playwright → static HTTP) that escalates to heavier browser automation only when a lighter engine fails.
  • Dual-database persistence layer (MySQL + ClickHouse) with automated staging tables, cross-database sync, and a date-validation quarantine system for ambiguous or invalid dates.
  • LLM-based fallback date-resolution mechanism (via Ollama) as a last-resort recovery step before any record is quarantined.
PythonSeleniumPlaywrightundetected-chromedriverMySQLClickHouseAWS S3OllamaBeautifulSoup

Distributed Scraper Execution Platform

Broker-free, database-polling job orchestration platform coordinating ~1,500 production scraping scripts across a multi-server AWS EC2 fleet

Thurro ran roughly 1,500 Python scraping scripts (Selenium, Playwright, requests) across multiple Windows/Linux EC2 servers on ad-hoc, per-machine cron schedules — with no central visibility into what ran, what failed, or how to add capacity without copying scripts to every new box. Designed and built a control plane from an architecture document down to a live production deployment: a central code server all workers reach over a live SMB share (zero code duplication), a FastAPI control plane, a database-driven scheduler, and a pull-based worker fleet that claims work with row-level locking instead of a message broker.

0

Scripts Orchestrated

0

Core DB Tables

0

Validated Live

Zero

Code Duplication

Key Contributions

  • Broker-free distributed job queue in MySQL using row-level locking (SELECT ... FOR UPDATE SKIP LOCKED) so concurrent workers atomically claim eligible work with no message broker and no race conditions.
  • FastAPI control plane plus an APScheduler-based central scheduler reading cron/interval schedules from the database as the single source of truth for 'is this job due.'
  • Zero-code-duplication architecture — one central code server exposes all ~1,500 scripts over a live SMB network share (via Windows symbolic links, not junctions, since junctions don't support network paths); new worker capacity needs only a bare Python venv.
  • Full observability: every execution attempt is recorded with status, timing, and — on failure — the complete traceback plus a classified error type (dependency, timeout, network, HTTP 403/429, browser-automation).
PythonFastAPISQLAlchemy 2.0APSchedulerMySQLAWS EC2Windows Services (NSSM)SeleniumPlaywright

AdQvest Document Chunking & Embedding Pipeline

Config-driven RAG ingestion pipeline turning 28+ financial/regulatory sources into an embedded, searchable vector corpus

A production RAG ingestion pipeline that scrapes, extracts, classifies, chunks, embeds, and indexes financial and regulatory documents (NSE/BSE announcements, SEBI circulars, RBI bulletins, PIB releases, and more) from 28+ heterogeneous sources landing in S3. A single generic, YAML-configured engine handles all 28 source tables through declarative config rather than one bespoke script per source, writing embedded chunks into ClickHouse for downstream RAG applications to query.

0

Source Tables

0

Aggregate Collections

0

ClickHouse Instances

VoyageAI

Embeddings

Key Contributions

  • Config-driven core (table_registry.yaml) declaring every one of 28 source tables once — its S3 landing path, target ClickHouse table, field overrides, and schedule — so adding a new source is a config entry, not new code.
  • Generic chunking engine: downloads from S3, extracts text (pypdfium2 + PyMuPDF with scanned-page/OCR detection), classifies document type, chunks and embeds via VoyageAI, and writes to ClickHouse with safeguards so a partial failure never marks a truncated document 'done.'
  • Aggregation layer rolling up 28 per-source chunk tables into 7 shared collection tables that downstream retrieval actually queries against.
  • Diagnosed a silent production failure where 'chunked' rows never processed further — traced through the full trigger chain to a broken n8n integration executing commands on the n8n host instead of inside the application container, affecting every scheduled table.
PythonMySQLClickHouseAWS S3DockerVoyageAIpypdfium2PyMuPDFn8n

VAHAN Vehicle Registration Data Pipeline

Reverse-engineered a captcha-gated government portal into a 5–10x faster pipeline, uncovering a bug behind 1.7M misclassified vehicle registrations

VAHAN, India's government vehicle-registration analytics portal, has no official API, gates every query behind a captcha, and silently fails on queries that are too broad for its backend. Reverse-engineered the portal's real JSON endpoint and built a resilient, self-healing pipeline collecting Maker × Vehicle-Category × Fuel-Type × State × Month registration data at national scale — replacing a fragile browser-automation scraper, while independently discovering and fixing data-integrity bugs worth millions of misclassified vehicle registrations.

0

Report Configs

0

Misclassified Records Found

0

Historical Backfill

0

Speed vs. Browser Engine

Key Contributions

  • Reverse-engineered the portal's undocumented JSON API (maker-report-page), identifying the exact request shape required and confirming the endpoint is captcha-exempt within a session's trust window — bypassing the need to click through the UI for every query.
  • Built two parallel scraping engines: a Playwright browser-automation engine as ground truth, and a pure-requests engine talking to the JSON API directly — 5–10x faster and verified via live A/B testing to mirror the browser engine exactly.
  • Automated captcha solving via local (Ollama) and cloud vision-language models, with magic-byte image validation and a 3-attempt retry loop so a single OCR misread doesn't silently drop a data combination.
  • Resilience layer: proxy fallback (Zyte) triggered only on genuine blocking codes (403/429/503, distinguished from real portal downtime), 3-way concurrent state scraping, per-combination failure tracking with automatic end-of-run retry, and per-state resumability after a killed run.
PythonrequestsBeautifulSoupPlaywrightMySQLSQLAlchemypandasOllamaZyteconcurrent.futures

IRDAI Insurance Disclosure Data Extraction Pipeline

Two-pass LLM+VLM extraction pipeline turning 40+ regulatory PDF forms across 30+ insurers into structured financial data

An end-to-end system that automates extraction of quarterly IRDAI 'NL' form disclosures (premium, claims, commission, operating expense, balance sheet, and channel-wise schedules) for 30+ Indian general and health insurers across FY24–FY26 — replacing a fully manual quarterly data-entry process with a pipeline feeding a ClickHouse analytics warehouse.

0

PDF Form Types

0

Insurers Covered

0

Fiscal Quarters

Text + Vision

Extraction Passes

Key Contributions

  • Pipeline: S3-sourced PDFs → PyMuPDF-based page/table classification (regex + keyword heuristics) → coordinate-based (bounding-box) table reconstruction → two-pass LLM+VLM extraction → cleaning/normalization → ClickHouse/MySQL storage → automated validation → Excel reporting.
  • Deterministic coordinate-based table parsing — for complex multi-segment tables (e.g. Fire/Marine/Motor/Health columns × quarter/YTD sub-columns), clusters raw word bounding boxes into rows/columns from geometry alone, before ever calling an LLM.
  • Two-pass multimodal extraction: an LLM text pass drafts values from parsed PDF text, then a VLM vision pass (Gemini / Ollama-hosted Gemma, page rendered as a 300–600 DPI image) visually cross-checks row/column alignment and figures against the source layout — catching misalignments pure text extraction misses.
  • Engineered a custom compact output format (TOON — Table-Oriented Output Notation) and parser to cut LLM/VLM token usage and simplify downstream parsing versus verbose JSON/CSV.
PythonPyMuPDFGoogle Gemini APIOllamaClickHouseMySQLAWS S3pandasopenpyxl

Credentials

Certifications

Salesforce Certified Administrator (SCA)

Salesforce

Credential link coming soon

Python

LinkedIn Learning

Credential link coming soon

Data Science (Machine Learning)

LinkedIn Learning

Credential link coming soon

Testimonials

What colleagues say

This section is reserved for real feedback from managers and teammates — nothing fabricated in the meantime.

Manager testimonial

Coming soon

Colleague testimonial

Coming soon

Mentor testimonial

Coming soon

Resume

Full Resume

View inline or download the PDF.

PDF preview isn't supported in this browser — use the download button below.

Get in touch

Let's build something

Open to Data Engineering, Python automation, and GenAI application roles.

yugeshb26@gmail.com
GitHub
LinkedIn
Chennai, Tamil Nadu, India

Open to new opportunities

Opens your email client with the message pre-filled to yugeshb26@gmail.com.