Pranav T Pattanashetty

Software engineer Bloomington, Indiana

I’m finishing an M.S. in Computer Science at Indiana University (May 2027). This summer I was a software development engineer intern at SparkFX.

Outside class I build products end to end. Creuno is a sponsorship marketplace for creators, now in beta. AIGO is a serverless ride-hailing platform on AWS. I’ve also published three peer-reviewed papers in applied machine learning.

Open to new-grad software, machine learning and cloud roles starting in 2027.

Products

Creuno In beta

A workspace and sponsorship marketplace for creators.

creuno.com
Creuno home screen: a left sidebar with Home, Analytics, Discover People, Campaigns, Collabs, Workspace, Calendar, Creator Coach, Messages and Deals. The main area greets the creator and shows cards for $16,700 in motion across 15 active deals, 76 new opportunities, a calendar, 67.9K total audience across two connected channels, a Creator Coach chat panel and a creator score of 62 out of 100.
Home. Money in motion, what is due this week, and the coach one click away.

Creators plan and publish content, see what is working across their channels, and run brand deals from the first pitch to a paid invoice. Brands post campaigns, review applicants and follow results as they come in. I built it with one other engineer.

Every table sits behind Postgres row-level security, so a creator can only read their own deals and a brand only its own campaigns. A deal moves through an explicit state machine (accepted, delivered, invoiced, paid, complete), which keeps the money from drifting out of step with the work.

The Creator Coach answers from the creator’s own analytics, content and deal history through pgvector retrieval, its output is schema-validated before it renders, and a promptfoo evaluation suite in CI checks that it does not invent metrics.

Shipped
323 pull requests, 216 database migrations
Backend
Supabase and Postgres with row-level security, 24 edge functions
Release gate
85% statement coverage, 397 Playwright end-to-end tests
AI
Gemini and Groq-hosted Mistral, pgvector retrieval, Zod-validated output
Frontend
27 lazy-loaded routes, so a first visit fetches one page

Built with React · TypeScript · Vite · Tailwind · Supabase · PostgreSQL · pgvector · LangGraph · Vitest · Playwright

AIGO

Serverless ride-hailing on AWS, with the machine learning kept off the trip path.

AIGO live trip screen: a street map with the car at the pickup point and a line to the drop-off pin, a LIVE WEBSOCKET badge, and a progress list where finding a driver, driver assigned and driver on the way are done and on the trip is current.
A trip in progress. The driver position and status arrive over the WebSocket API.

Riders book a trip and follow it live; drivers go online and get matched. Behind the web client are 11 services, six of them Node.js Lambda microservices on API Gateway, EventBridge, SQS and DynamoDB, split along five workflows: trip matching, payments, notifications, ETA prediction and driver location.

Finding nearby drivers is the hot path, so driver positions are bucketed by geohash on a DynamoDB global secondary index. Against 100,000 seeded drivers that reads 95.06% fewer items than a scan at 100% recall, and building the benchmark exposed a 100x unit error in the radius-to-cell conversion, which is now fixed.

Demand forecasting, dynamic pricing, fraud scoring, support-message triage and rider-driver matching run on Amazon Bedrock and SageMaker as asynchronous, event-driven paths, so a slow model call never holds up a live trip.

Services
11, including 6 Node.js Lambda microservices
Location reads
95.06% fewer items with geohash buckets, 100% recall
API cost
HTTP API over REST API Gateway, about 70% less per request at list price
Shared code
One Lambda layer used by all 6 services
Infrastructure
Terraform, GitHub Actions, CloudWatch

Built with Node.js · AWS Lambda · API Gateway · EventBridge · SQS · DynamoDB · Bedrock · SageMaker · Terraform · React · Leaflet

Open source

sentinel

A stateless MCP server in Go, and a harness that grades any MCP server against the spec.

The July 2026 revision of the Model Context Protocol removed sessions and made every server written before it non-conformant in ways nobody had listed. Sentinel is a Go broker built on the new revision, behind Envoy, plus a Python harness that scans any endpoint and grades it rule by rule, with the specification clause attached to each finding.

Five MUST requirements cannot be checked from outside a server, such as whether a token’s audience is really validated. The harness reports those as indeterminate and leaves them out of the gate instead of counting them as passes.

  • 52-rule executable conformance catalog with SARIF output and an exit-code contract for CI
  • 39 of 39 seeded violations caught, 0 false positives
  • Retries made idempotent by sealing request state with AEAD
  • Manifest tokenization 80.45% faster, verified with benchstat at n=10

Built with Go · Python · Envoy · PostgreSQL · OpenTelemetry · Docker Compose

sentinel harness Python · no server internals runs against any URL any MCP endpoint the broker, or someone else's unmigrated server probe · Mcp-Method / Mcp-Name response settled from outside 25 MUST · 4 SHOULD → PASS / FAIL / N-A, each with a specification citation not observable from outside INDETERMINATE · 5 MUST token-audience-validated no-token-passthrough handle-possession-is-not-auth mrtr-retries-are-idempotent invocations-are-audited covered by broker's own suite host-side access a scan does not have TestTokenForAnotherAudience… TestInboundTokenNeverForwarded TestDuplicateRetryIsIdempotent TestChainDetectsTampering
What a black-box scan can and cannot settle. Five MUST requirements sit below the line; the harness reports them as INDETERMINATE and the broker covers them with tests that have the access a scan does not.
Console capture: the same harness against two servers
$ sentinel scan --endpoint http://127.0.0.1:9000/mcp --gate must   # unmigrated

MUST:   2 pass, 25 fail, 5 indeterminate, 0 n/a
SHOULD: 1 pass,  4 fail, 0 n/a
37 rules in 0.42s
5 MUST rule(s) cannot be verified black-box and were excluded from the gate.
exit 1

$ sentinel scan --endpoint http://127.0.0.1:9001/mcp --gate must   # conformant

MUST:   27 pass, 0 fail, 5 indeterminate, 0 n/a
SHOULD:  5 pass, 0 fail, 0 n/a
37 rules in 0.29s
5 MUST rule(s) cannot be verified black-box and were excluded from the gate.
exit 0

Captured on 24 August 2026 against the fixtures in the repository, when the catalog had 37 rules. Exit 1 means the server failed the gate; exit 2 is reserved for the scanner itself failing.

meridian

An agent evaluation harness that tells you how small a regression it could have missed.

Every trial runs in its own container, and assertions run on state copied out to the host after the container is gone, so an agent cannot pass by rewriting its own test results. A contamination probe with a deliberate failing direction checks that the isolation actually holds.

Scores are pass^k with a cluster bootstrap and a paired significance test, and every verdict reports its minimum detectable effect. A pass from an underpowered suite is not evidence that nothing broke, and the gate says so.

  • 0 false regressions across 30 gate runs
  • 4 of 5 seeded regressions caught, with the miss explained in the results file
  • 5 of 5 archived runs replayed byte-exact
  • Minimum detectable effect 0.183; a 0.030 tolerance needs about 262 tasks

Built with Python · Docker · PostgreSQL · Alembic · pytest · mypy --strict

task one trial container own workdir volume agent runs here untrusted extract state to host, then destroy assert on the host a contamination probe with a deliberate failing direction proves the isolation is real score pass^k, bootstrap CI not a single mean gate head vs merge base tolerance AND paired test and its limit minimum detectable effect “this run could only have caught a drop of 0.183 or larger; resolving your 0.030 tolerance would take about 262 tasks.”
The container is never trusted. State is extracted to the host and the container destroyed before any assertion runs, and the gate reports the smallest regression the run could actually have detected.
Console capture: the unit layer, on a machine with no Docker
$ uv run pytest -m unit -q

........................................................................ [ 31%]
........................................................................ [ 63%]
........................................................................ [ 95%]
...........                                                              [100%]

SKIPPED [1] tests/integration/test_budget_halt.py:98:
  the Docker daemon is not reachable; integration tests need it

226 passed, 1 skipped, 46 deselected in 3.20s

Captured on 24 August 2026. The tests that need real container isolation refuse to run without it rather than quietly passing.

Peer-reviewed research

  1. Computing Conference, United Kingdom

    Cricket shot classification from video

    A 3D ResNet-18 trained with a physics-informed loss: temporal continuity, energy and momentum terms.

  2. 11th ICSCMI, Melbourne

    Enhancing fine-tuning of pre-trained language models with metaheuristic algorithms

    A genetic algorithm and the Whale Optimization Algorithm searching the layer-freezing schedule for RoBERTa.

  3. 6th IEEE Conference, Malaysia

    Exercise form detection from surface electromyography

    Windowed signal features from two surface EMG channels, classified with recurrent models.

Experience

  1. Jun – Aug 2026
    Charlotte, NC

    SparkFX Software Development Engineer Intern

  2. Jan – Apr 2025

    PROLIM Solutions Software Developer Intern

  3. Jun – Aug 2024
    Bengaluru, India

    LiRC Tek Solutions Software Developer Intern

Education

  1. 2025 – 2027

    Indiana University Bloomington M.S., Computer Science

    GPA 3.89. Assistant instructor for Introduction to Programming.

  2. 2021 – 2025

    PES University B.Tech., Computer Science