Skip to content

Ritwick Verma

Software engineer at eBay.I build and self-host the systems I ship.

About

I'm a software engineer at eBay in San Francisco, on the Search Backend org's Query Search Stack team: Cassini, eBay's distributed C++ search engine. Since 2023 I own fitment, the subsystem that decides whether a listing fits the product a query names. MCS from UC Irvine, BTech in CS from SRM Institute.

Outside work I take apart things that were not meant to be opened: a TV's video plane, a keyboard's stock firmware, a phone's hinge sensor. ShutUp, an Android app I wrote in college, passed 26,000+ downloads.

I also run a small Proxmox lab, 16 guests declared in OpenTofu and diffed nightly by CI. It serves this site.

Languages

  • C++
  • Python
  • Java
  • Kotlin
  • C#
  • TypeScript
  • C

Domains

  • Search & retrieval
  • Distributed systems
  • Infrastructure & GitOps
  • Reverse engineering
  • Android
  • Embedded

Tools & Platforms

  • Proxmox
  • OpenTofu
  • Docker
  • Traefik
  • GitLab CI
  • Linux
  • SOPS
  • PostgreSQL
  • SQLite

Experience

  1. Software Engineer 3@eBayJun 2023 – Present

    Own and maintain fitment, the Cassini subsystem that decides whether a sellable item is compatible with the product a buyer's query names.

  2. Software Engineer 2@eBayMar 2021 – Jun 2023

    Query Search Stack (QSS) team in the Search Backend org: Cassini, eBay's distributed, highly available C++ search engine.

  3. Software Development Intern@Shoelace WirelessJun – Sep 2020

    Built a tool that records radio-technology metrics (5G, WCDMA) during network speed tests, stored in Room (SQLite) and uploaded to AWS.

    Built a map-based crowd-density app on MapBox with an MVVM architecture and a Retrofit API client.

  4. Software Development Intern@Advanced Structures IndiaJun – Jul 2018

    Extracted SQL data from Django models with complex relations for internal documentation.

  5. Software Development Intern@Bharat Heavy Electricals LtdJun – Jul 2017

    Built a library management system in Java EE (JSP, servlets, SQL) with 2 ms response times.

  6. MCS, Computer Science@University of California, Irvine2019 – 2020
  7. BTech, Computer Science and Engineering@SRM Institute of Science and Technology2015 – 2019

Projects

ShutUp

Android

Author & maintainer · GPLv3

26,000+

lifetime downloads, 4.3★ when the Play listing was last up

Android app that answers, silences and ends calls from proximity-sensor wave gestures.

Turns a binary proximity sensor and the accelerometer into gestures: a double-wave timing window, pick-up from a flat surface, face-down detection mid-call.

  • Java
  • Kotlin
  • Android
  • EventBus

Plutus

Quant

Author, private repository, paper account

Sharpe 1.04

2007–2026 backtest, one path (95% bootstrap interval 0.62–1.47). SPY 0.63, max drawdown 55% against 37%

Systematic US-equity trader: trend-filtered cross-sectional momentum with volatility targeting, executed through Alpaca.

Universe is S&P 500 + 400 plus still-listed removals to soften survivorship bias; block-bootstrap confidence intervals; stop-losses and daily regime exits were tested and rejected, not assumed. CI deploys to a timer on green master.

  • Python
  • pandas
  • Alpaca
  • uv
  • GitLab CI

TizenAmbilight

Smart TV

Author

20–25 fps

one process on the TV, no capture card, no HDMI splitter

Real-frame ambilight for Samsung Tizen TVs: a headless .NET service on the TV reads the decoded video plane from memory and drives a WLED strip over UDP.

Samsung's capture API returns the static UI layer, so the app dlopens the video-plane entry point instead: NV12 in PQ HDR, tone-mapped per scene and gamut-mapped from BT.2020 to the LEDs.

kwin-canvas

KDE Plasma

Fork maintainer, 40 commits ahead, proposed upstream in stages

374

scenarios against a nested KWin, none failing; REUSE lint in CI

An infinite window canvas for KDE Plasma, built only on KWin's public scripting API: no patched compositor, no private headers.

Every window stays an ordinary KWin window at an ordinary position, so fullscreen apps keep direct scanout; the canvas is a camera, not a second compositor. Written by an agent under my direction; the README says so.

  • KWin
  • QML
  • JavaScript
  • Plasma 6

Homelab

Infra

Architect & sole operator

15 of 16

guests declared in OpenTofu (the dev box is not yet). Nightly CI reports plan drift against the live host

One Proxmox host, 16 guests, 15 declared in OpenTofu, behind a Debian gateway: Docker, Traefik, Authelia SSO and a Headscale VPN.

Git is the source of truth: a scheduled pipeline pulls live configs and commits the diff, secrets are SOPS-encrypted in the repo, and a 5-minute health check pages once per new fault, after it persists, with a cooldown.

  • Proxmox
  • OpenTofu
  • Docker
  • Traefik
  • Authelia
  • SOPS

Crush 80 firmware

Firmware

Maintainer: per-key RGB, OpenRGB, the update and recovery tooling, the hardware findings. Fork of a community ZMK port, Apache-2.0

154 LEDs

lit from a ported WS2812 driver on the SoC's SPI DMA, GRB, one data line

Open firmware for a Wobkey Crush 80 Pro keyboard whose vendor never released source: ZMK on the Telink TLSR9511, a RISC-V SoC. USB, Bluetooth, 154 per-key LEDs and OpenRGB, installed over the stock updater with one cable.

My first identification was wrong: WB32 and a QMK port that could never run. The stock image's USB descriptor said TLSR9511, QMK has no port for it, and the findings document records the wrong turn next to the evidence. The matrix, LED line and power gate were traced from PCB photos and the stock binary's GPIO init.

SudoStamp

Security

Author, private repository

18 of 18

checks pass in a replay of pam_rssh's real sequence, negative controls included

Approve a sudo prompt on my workstation with a fingerprint on my phone. LAN only, key in the phone's hardware keystore.

The phone speaks two ssh-agent messages; the ECDSA key never leaves the TEE and BiometricPrompt gates every signature. A replay of pam_rssh's real sequence, with negative controls, is the gate before touching /etc/pam.d/sudo.

  • Kotlin
  • Android Keystore
  • ssh-agent
  • PAM

Kaeru

Galaxy Fold

Author, private repository, in progress

3 states

is all the public hinge sensor gives; the real angle comes from the sensor HAL's own log line

The iPhone Duo unfold animation, recreated on a Galaxy Z Fold from what the hardware actually reports.

A table of measured facts drives the design: which display is which by aspect ratio, not id; raw frames streamed from screencap; the overlay excluded from capture through a shell-reflected SurfaceControl call.

  • Kotlin
  • Android
  • SurfaceFlinger
  • MediaProjection

RPG Engine

Games

Author

44

C++ source files, no game or physics engine

2D RPG in C++ with no game engine: collisions, animation and dialogue trees written from scratch.

Maps are authored in Tiled and loaded through tmxlite; collision, sprite animation, weapons and dialogue are hand-rolled on SDL2.

  • C++
  • SDL2
  • tmxlite
  • Tiled

Gesture-Manager-X

Linux desktop

Maintainer of the fork, GPLv3

7★

on GitHub

GTK GUI for libinput-gestures touchpad gestures, an extended fork of gestureManager.

Adds the gestures and settings libinput-gestures supports that the upstream GUI did not expose.

The keyboard

My Crush 80, drawn from the 6×16 matrix in the ZMK board definition for it, after the vendor shipped no source. 86 switches, 16 column strobes, 6 row senses. Crush 80 firmware project →

Type on it or tap a key. Each press shows its matrix position and the two GPIO lines the firmware reads it through.

  1. Git is the truth: a homelab that diffs itself nightly

    Sixteen guests, fifteen declared in OpenTofu, a nightly pipeline that commits whatever changed on the box and reports what the plan disagrees with, paging that costs one message per fault. What it caught and where it falls short.

  2. Plutus: what the backtest cannot tell you

    The five-signal bot that lost to SPY, and a Sharpe of 1.04 with its confidence interval attached.

  3. Reading a Samsung TV's video plane from inside the TV

    No capture card, no HDMI splitter: a headless Tizen app pulls decoded frames out of memory and drives an LED strip. The capture ABI, the HDR colour math, and the ways it fails.

  4. How this site is built, and how it was made

    What on this site is mine, what is machine-made under my direction, and which numbers are dated snapshots.

Homelab

One Proxmox host, 14 containers and 2 VMs, declared in OpenTofu and diffed against the live host nightly by CI. A Debian gateway fronts it with Traefik, Authelia and Headscale; secrets are SOPS-encrypted in the same repo; every guest is backed up nightly and copied off the host. It serves this site. Git is the truth: how the lab runs →

  • VM100Home Assistant
  • CT101Hermes Agent
  • CT102Technitium
  • CT104Vaultwarden
  • CT105Glance
  • CT106Immich
  • CT107Paperless-ngx
  • CT108Backup Server
  • VM110Gateway
  • CT111Remux
  • CT113Syncthing
  • CT114Portfolio
  • CT115CI Runner
  • CT116Plutus
  • CT117Kavita
  • CT118Devbox

Static inventory, not a live status page.

Terminal

terminal

ritwick@portfolio:~$ help

Tap to type · Enter runs a command