Yash Agarwal
WorkProjectsOpen SourceWritingAbout
Hire me

Yash Agarwal

Backend, distributed systems, and the network layer underneath.

Open to SWE roles and internships · 2027 graduate

Site

  • Work
  • Projects
  • Open Source
  • Writing
  • About

Elsewhere

  • LinkedIn
  • GitHub
  • X
  • Email

© 2026 Yash Agarwal.

Punjab, India

9 projects

Things I built, and what was actually hard about them.

Ordered by how much of me is in them rather than by date. Each one gets the architecture, my role, the stack, and the numbers, because a list of repository names tells you nothing about whether someone can build.

SalongraphyApache Fory: gRPC Code GenerationVajra: Next-Generation FirewallGreenOpsDataPulseNeuroPredictBudgetBuildersVitalSenseSnippetStore
01In productionDec 2024 - Present

Salongraphy

A hiring marketplace for salons and beauty artists, live on Google Play.

salongraphy.inPrivate repo · walkthrough on request
Flutter appWeb · SSRAdmin BFFExpress APIPostgreSQLBullMQ workersS3 · Firebaseone API contract · four clients

Salongraphy is a two-sided hiring platform: artists build a portfolio and apply for work, salons post jobs and hire. I built the whole thing: the Express API, the Postgres schema, the Flutter app on the Play Store, the server-rendered marketing and discovery site, and the internal admin console. I run it in production.

The interesting part is not any one screen, it is that four codebases share one API contract without drifting. The admin console is a backend-for-frontend: the browser never sees a token, every call is same-origin through Next route handlers, and a single refresh-and-retry hop handles token rotation so an expired access token never reaches the user as an error.

  • REST API of 60+ controllers over a 45-table Postgres schema: profiles, job posts, applications, a social feed with comments and reporting, follows, search, and subscriptions.
  • Role-based admin console with a permission matrix, immutable audit logs, post moderation and a user-deletion pipeline, running as a backend-for-frontend so no token ever reaches the browser.
  • Monetisation across three payment providers: Razorpay, Google Play billing and Apple IAP, behind one eligibility service that decides what a given user may actually do.
  • Background workers on BullMQ for push notifications and email, with per-route rate limiting, client version gating and a locality index seeded from Indian locality data for geographic search.
  • Flutter client in clean architecture: 300+ files split across domain, data and presentation layers, Riverpod for state and go_router for navigation.

4

codebases, one API

300+

Dart source files

60+

REST controllers

Live

on Google Play

My role

Sole engineer: API, mobile, web, admin, infrastructure

Stack

Node.jsExpressPostgreSQLSequelizeBullMQRedisFlutterRiverpodNext.js 16TypeScriptAWS S3 / R2FirebaseDocker
02ShippedMay 2026 - Aug 2026

Apache Fory: gRPC Code Generation

Google Summer of Code 2026. Two merged PRs bringing gRPC codegen to Fory's IDL compiler for Dart and Swift.

Final reportPR #3723 · DartPR #3776 · SwiftDocs
Fory IDLforyc compilerDart · gRPCSwift · gRPCJavaRust · C++cross-language interop in CI

Apache Fory is a multi-language serialization framework. Its IDL compiler could already emit model types for eleven languages, but gRPC service generation was landing language by language. I owned Dart and Swift: a Fory IDL service definition now produces an idiomatic client and server in both, across all four gRPC shapes and all three schema frontends.

Both PRs are merged into apache/main and shipping. Along the way I found and fixed a runtime divergence in Fory's Swift implementation: under reference tracking, Swift wrote a different reference flag for value-type structs than Java, Rust and C++ did, so Java could not read Swift-produced bytes. Swift now follows the same convention as the other runtimes.

  • Dart generator (#3723): client and service base per schema, covering unary, server-streaming, client-streaming and bidirectional RPCs, with no manual Fory registration required at startup.
  • Swift generator (#3776): providers, an async client, service metadata and stream adapters for grpc-swift, with a per-thread Fory runtime because the Swift runtime is single-threaded and a shared instance raced under ThreadSanitizer.
  • Symbol-collision preflight that fails generation before writing files when two declarations would claim one identifier: namespace enums, duplicates, flattened helpers, names that normalise together, and nested declarations.
  • Cross-language interop driven in both directions against a Java peer, across all three schema frontends, wired into CI on every relevant change.
  • Reserved-name guarding: generated classes inherit from gRPC base types and Object, so an RPC named `ToString` produced an invalid override. Codegen now detects that and fails with a clear diagnostic.

2

PRs merged to apache/main

4,830

lines added

58

files touched

3

IDL frontends supported

My role

GSoC 2026 contributor · Mentor: Chaokun Yang

Stack

DartSwiftJavagRPCProtocol BuffersFlatBuffersCI
03ShippedNov 2025 - Aug 2026

Vajra: Next-Generation Firewall

National winner, Smart India Hackathon 2025. A DPDK-accelerated NGFW with IDS/IPS, ML threat detection and automated SOAR response.

GitHub
WireDPDK · NICSuricataML analysisSOARiptables rulesLive dashboardkernel bypass

Vajra is two systems that talk to each other. The detection engine is a C++ and Python pipeline that captures traffic through DPDK kernel bypass, inspects it, scores it with ML models, and responds by pushing firewall rules. The command center is a Flutter desktop app that launches the engine, subscribes to its live event stream over WebSocket, and renders threats and flows in real time.

The engine runs headless; the app is the operator's window into it. Team Sudarshana built it for Smart India Hackathon 2025 and won at the national level against a field of more than 50,000 participants.

  • High-throughput TCP/IP packet pipeline in C++ over DPDK with vfio-pci: capture moved into user space, zero-copy I/O, inline feature extraction and entropy calculation.
  • Suricata running on DPDK alongside it for line-rate deep packet inspection, protocol decoding and signature matching.
  • Encrypted-traffic analysis that flags exfiltration, port scanning and C2 patterns on TLS sessions without decrypting them, plus a UBA engine for insider-threat signals.
  • SOAR layer that generates iptables and nftables rules at runtime in response to detections, with every action recorded through a unified logger.
  • Live WebSocket event stream into a cross-platform Flutter command center showing threats, flows and analytics as they happen.

50,000+

participants beaten

Line rate

packet inspection

0-copy

userspace capture

2

engines, one stream

My role

Systems and detection engine · Team Sudarshana

Stack

C++DPDKSuricataPythonFastAPIFlutterLinuxiptables / nftablesWebSocket
04ActiveJan 2026 - Present

GreenOps

A Kubernetes operator that suspends stateful Apache Flink jobs when the grid turns dirty, and resumes them without losing a record.

Private repo · walkthrough on request
carbon thresholdsavepointsavepointresume · 0 lossgCO₂/kWh

Carbon-aware scaling is easy for batch and stateless workloads, which is where most tooling points. Stream processors are the awkward case: stop one carelessly and you throw away in-flight windowed state and break exactly-once processing. GreenOps handles that case. It watches grid carbon intensity, and when the grid turns dirty it suspends the Flink job, but only after its state has been safely captured to a savepoint.

The rule the whole system is built around: a job is never suspended unless its state is safely captured first. A failed or timed-out savepoint aborts the suspension and leaves the cluster running. Suspension goes through the FlinkDeployment rather than scaling the Deployment directly, because the Flink operator owns that Deployment and will undo any replica change made behind its back.

  • Custom CRD and operator reconciling every 60 seconds: patches FlinkDeployment state to suspended, lets the Flink operator take a savepoint, then resumes from that savepoint path on a clean grid.
  • Three scheduling policies: threshold, forecast (declines dirty windows too short to pay for the savepoint and restart), and optimising (prefers the jobs avoiding most carbon per second of disruption under a concurrency cap).
  • Replayed over fourteen days of a simulated grid curve, the forecast policy kept 92% of the carbon saving for one-seventh of the suspensions and zero wasted ones.
  • Self-calibrating cost prediction: the operator times its own suspends and restarts and keeps a rolling history, moving from static constants to observed percentiles to ridge regression on state size and parallelism as evidence accumulates.
  • Ships as a Helm chart with a one-command local environment: Minikube, MinIO, the Flink operator, a sample job and the full monitoring stack.

0

records lost on suspend

14,277g

CO₂ avoided in replay

1/7th

the disruption of naive

5s

MAE, regression predictor

My role

Lead architect · 4-person team

Stack

JavaJava Operator SDKKubernetesApache FlinkHelmPrometheusGrafanaMinIO / S3Docker
05ShippedApr 2026

DataPulse

A Slack bot that brings OpenMetadata into the channels where data teams already live.

GitHubOpenMetadata PR
SlackDataPulseOpenMetadata15m alerts9am digestretries · circuit breaker · rate limits

Instead of switching to a separate UI to ask whether a table is healthy, where its data comes from, or who owns it, your team types `/datapulse` and gets a Block Kit answer in seconds. It also works in the background: polling OpenMetadata every fifteen minutes for newly-failing quality tests, and posting a 9am digest with the tables that need attention and an overall platform health score.

  • Search, data-quality, lineage and ownership commands rendered as Block Kit, with a two-level upstream/downstream lineage tree.
  • Resilience built in: retries, a circuit breaker around the OpenMetadata client, per-user rate limiting and friendly error messages rather than stack traces in a channel.
  • Shipped alongside an upstream contribution to OpenMetadata itself: a StarRocks connector fix querying INFORMATION_SCHEMA for table comments.

4

slash commands

15m

alert polling loop

9am

daily digest cron

My role

Sole engineer

Stack

Node.jsBolt.jsSlack Block KitOpenMetadata APIDocker
06ShippedNov 2025 - Dec 2025

NeuroPredict

An ML-backed clinical prediction service with a Flutter client and an admin review console.

GitHub
Node APIModelReports · JWT

A trained prediction model exposed through a Python inference API, wrapped by a Node backend that handles auth, roles and report storage, and consumed by a Flutter app. Clinicians submit a case, get a prediction and a stored report; an admin surface reviews what the model has been asked and what it answered.

  • Model developed and evaluated in notebooks, then served behind a stable HTTP inference contract rather than shipped as a notebook.
  • Node/Express backend with JWT middleware, admin role gating, and persisted prediction reports.
  • Flutter client covering auth, submission, report history and an admin page, plus a companion marketing site.

3

tiers: model, API, app

JWT

role-gated admin

My role

Full stack: model serving, backend, app

Stack

PythonJupyterFlaskNode.jsExpressJWTFlutter
07ShippedJun 2024 - Aug 2026

BudgetBuilders

A bidding marketplace connecting customers with builders, backed by a migration-managed Postgres API.

GitHub
Flutter appWeb · SSRAdmin BFFExpress APIPostgreSQLBullMQ workersS3 · Firebaseone API contract · four clients

Customers post orders, builders bid on them, and the platform manages the lifecycle between the two. The backend is a properly structured Express service: versioned migrations, request validation middleware, rate limiting, refresh-token auth and email OTP, with a Flutter client on top and CI on every push.

  • Order, sub-order, bid and interested-builder models with a migration runner rather than ad-hoc schema drift.
  • Layered middleware: auth, validation, rate limiting and centralised error handling, with structured logging and env validation at boot.
  • Dockerised backend with a GitHub Actions pipeline.

8

domain models

CI

on every push

My role

Sole engineer

Stack

Node.jsExpressPostgreSQLFlutterDockerGitHub Actions
08ShippedMar 2025 - Apr 2025

VitalSense

Automated emergency-room triage from vital signs.

GitHub
p99 latency

ER triage is time-consuming during peak hours, inconsistent under human error, and prone to delay when staff are short, a failure mode the COVID-19 surge made obvious. VitalSense classifies incoming patients as severe or non-severe from real-time physiological data so the critical ones are seen first.

  • Full pipeline from raw vitals through feature engineering to a severity classifier, with the problem framing and evaluation written up alongside the model.

2-class

severity triage

My role

ML engineering

Stack

PythonJupyterscikit-learn
09ShippedMar 2026

SnippetStore

A gRPC service in Dart demonstrating unary and server-streaming RPCs over Protocol Buffers.

GitHub
Fory IDLforyc compilerDart · gRPCSwift · gRPCJavaRust · C++cross-language interop in CI

Save, fetch, list and delete code snippets over gRPC. Small by design: it was the groundwork for the Dart gRPC codegen that became my Google Summer of Code project at Apache Fory, and it is where the shape of an idiomatic generated Dart client got worked out by hand first.

  • Service and message definitions in proto, a server, and a demo client exercising every RPC.
  • Directly informed the design that shipped in apache/fory#3723.

2

RPC types exercised

My role

Sole engineer

Stack

DartgRPCProtocol Buffers

Want the walkthrough?

Several of these live in private repositories. I am happy to walk through the code, the schema, or the decisions behind any of them, including the ones I would make differently now.

Get in touchyash60work@gmail.com