Backend systems · Data pipelines · Graph databases · Backend systems · Data pipelines · Graph databases · Backend systems · Data pipelines · Graph databases · Backend systems · Data pipelines · Graph databases ·
backend, data and graph systemsBackendDataGraphBackend
systems
About me
I build backend and data systems. At Vimaan
Robotics I write the Cypher and SQL that turn computer-vision scans into live
warehouse inventory. When those numbers don't match the source records, my checks
are what flag it. Before that I spent over two years at Cognizant building Python
and Node.js services.
Away from the keyboard I shoot photos and video, read fiction and
fantasy, and travel whenever I can.
Text-to-Cypher with local models, so answers come from the data instead of the
model's memory. Agents on Microsoft Foundry and Copilot Studio. Structured output from small local models, with schema checks and a LoRA training pipeline.
Pick a skill to see where I've used it. Pick a job, project or certificate to jump to it.
The same links are listed under each skill in the section above.
Where I've worked
Software Engineer
Vimaan Robotics · Bengaluru
NOWAug 2025 – Present
Cut new-warehouse onboarding from 2–3 days to under 1 day with a Python configuration
builder and UI.
Configure facility-specific Cypher and SQL that turn computer-vision scans into live
inventory on client dashboards.
Build reconciliation logic that flags mismatches, missing entries, and exceptions against
source records.
Debug Java/Spring Boot services, graph pipelines, and dashboards; support releases with
log analysis and regression testing.
Run CI/CD and Docker-based deployments on Linux, and maintain pipeline and frontend
configuration.
Senior Systems/Software Engineer
Cognizant · Bengaluru
2022Sep 2022 – Jan 2025
Cut PostgreSQL query execution time by 25% and improved overall query performance by 19%,
earning the Cognizant Excellence Award.
Shipped Python/FastAPI and Node.js microservices on Docker and Kubernetes across AWS and
Azure.
Built REST and GraphQL APIs with OAuth 2.0/JWT, rate limiting, and caching, plus
Kafka/RabbitMQ event-driven workflows.
Set up observability with Prometheus, Grafana, and ELK; mentored junior engineers through
code reviews.
Personal projects
0102030405
Olist Query Studio
BugSieve
Sort-Downloads
AI Resume Analyzer
Ethereal Command
01
Olist Query Studio
LLM · Graph analytics
Turns plain-English analytics questions about the Olist e-commerce dataset into Cypher and runs them against Neo4j.
What I built
Query generation from the graph schema with a local Ollama model
A validator, an EXPLAIN check and a read-only account on every query
Matches 91 of 112 verified benchmark questions (81%)
How it flows
Plain-English question
Local Ollama modelwrites Cypher from the graph schema
Validator + EXPLAINchecked before it runs
Neo4jread-only account
Answer
Try a question
How many orders were delivered?
Recorded run · Cypher written by the local model
MATCH (o:Order {status: 'delivered'}) RETURNcount(o) AS deliveredOrders
deliveredOrders
96,478
Which five translated product categories generated the most delivered-order item GMV, excluding freight?
Benchmark · checked query and answer
MATCH (:Order {status: 'delivered'})-[:HAS_ITEM]->(i:OrderItem)
-[:OF_PRODUCT]->(:Product)-[:IN_CATEGORY]->(c:Category)
RETURN c.nameEnglish AS category,
round(sum(i.price) * 100) / 100 AS deliveredItemGmvBrl
ORDER BY deliveredItemGmvBrl DESC, category
LIMIT 5
category
deliveredItemGmvBrl
health_beauty
1,233,131.72
watches_gifts
1,166,176.98
bed_bath_table
1,023,434.76
sports_leisure
954,852.55
computers_accessories
888,724.61
What is the average review score for delivered orders that arrived after their estimated delivery date?
Benchmark · checked query and answer
MATCH (o:Order {status: 'delivered'})-[:HAS_REVIEW]->(r:Review)
WHERE o.deliveredAt > o.estimatedDeliveryAt
RETURNavg(r.score) AS averageReviewScore
averageReviewScore
2.57
Which five customer states have the most unique customers?
Benchmark · checked query and answer
MATCH (c:Customer)
RETURN c.state AS state, count(DISTINCT c.uniqueCustomerId) AS customers
ORDER BY customers DESC, state
LIMIT 5
state
customers
SP
40,302
RJ
12,384
MG
11,259
RS
5,277
PR
4,882
Delete all canceled orders.
Recorded run · the model declined
Declined as unsafe. “This request asks to delete data, which is not allowed by this tool. It can only read data.” No query was written or run.
Nothing runs in your browser: these are saved from the real tool and its benchmark.
A local 7B model keeps the data on the machine, but an answer takes several seconds and matches 81% of the benchmark. One correction attempt keeps latency bounded; the validator is a second check, and the read-only database account is what actually stops writes.
Turns free-text bug reports into schema-validated triage records, from category and severity to a suggested next step.
What I built
A FastAPI service running a local Qwen 2.5 model
Guardrails that mark anything the report doesn't support as “unknown”
A React review UI that keeps the JSON in view
30 of 30 benchmark responses schema-valid
How it flows
Free-text bug report
FastAPI + Qwen 2.5runs locally
Guardrailsunsupported claims become “unknown”
Schema check
React review UI
Try a report
Whenever I select dark mode in Safari, the settings panel stays white.
Benchmark run · base Qwen 2.5 3B
{
"category": "ui",
"severity": "low",
"priority": "P4",
"environment": "Safari",
"reproducible": true,
"probable_cause": "The dark mode setting may not update the background color of the settings panel.",
"suggested_action": "Verify that the dark mode setting correctly changes the background color of the settings panel."
}
5 of 5 labels match the expected answer.
Customer addresses were permanently deleted for every account during yesterday’s migration; no restore is available.
Benchmark run · base Qwen 2.5 3B
{
"category": "database",
"severity": "critical",
"priority": "P1",
"environment": "unknown",
"reproducible": "unknown",
"probable_cause": "The migration script may have used a destructive DELETE statement instead of an upsert or a restore function.",
"suggested_action": "Review the migration script to ensure it uses the correct SQL commands and includes a rollback plan if necessary."
}
5 of 5 labels match the expected answer.
Each time I save an order note, the database stores the same note twice.
Benchmark run · base Qwen 2.5 3B
{
"category": "database",
"severity": "medium",
"priority": "P3",
"environment": "unknown",
"reproducible": true,
"probable_cause": "The save operation may not update the record ID correctly.",
"suggested_action": "Verify the order note is being saved with a unique ID each time."
}
5 of 5 labels match the expected answer.
An unauthenticated user can read another customer’s private invoice by changing the invoice ID in the URL.
Benchmark run · base Qwen 2.5 3B
{
"category": "security",
"severity": "high",
"priority": "P1",
"environment": "unknown",
"reproducible": "unknown",
"probable_cause": "The URL parameter may bypass authentication checks.",
"suggested_action": "Verify that the invoice ID is authenticated before accessing the invoice content."
}
4 of 5 labels match. Expected severity “critical”.
Nothing runs in your browser: these are saved from the base model’s benchmark run on 30 synthetic reports.
A 3B model and a tuned prompt took category accuracy on the 30-report synthetic suite from 40% to 83%, but the tuning used that suite, so it is not a held-out result. Severity is still right only about half the time, so the guardrails prefer “unknown” and the UI asks for review. No fine-tune result is claimed until a reviewed, real-world evaluation exists.
Duplicates go to the Recycle Bin, grouped in one folder so they restore in one go, and name clashes become “name (2)” instead of overwriting. Matching on size plus MD5 only catches byte-identical copies, which is what a Downloads folder needs.
Compares PDF/DOCX resumes with job descriptions and returns ATS-style feedback, keyword gaps and suggestions.
What I built
A Next.js frontend and an Express/TypeScript API that share Zod schemas
Supabase auth
OpenAI-assisted feedback backed by deterministic scoring
In progress · repository not public yet
How it flows
Resume + job descriptionPDF or DOCX
Next.js UISupabase auth
Express/TypeScript APIZod schemas shared with the UI
Scoringdeterministic, with OpenAI-assisted feedback
ATS-style report
The technical detail+
Technologies
Next.js
TypeScript
Express.js
Supabase
OpenAI API
Zod
Tradeoffs
OpenAI writes the feedback, but the score comes from deterministic scoring, with a heuristic fallback when no API key is set. Sharing Zod schemas between the Next.js app and the Express API keeps both sides on one contract.
05
Ethereal Command
System telemetry dashboard
A local system-monitoring dashboard for CPU, RAM, GPU, storage, thermal, network and process telemetry.
What I built
An Express backend that polls telemetry behind cached endpoints
A React/Vite UI with live cards, time-series charts and process tables
In progress · repository not public yet
How it flows
System telemetryCPU, RAM, GPU, storage, thermal, network, processes
Express poller
Cached endpoints
React/Vite UIlive cards, charts, process tables
The technical detail+
Technologies
React
TypeScript
Vite
Tailwind CSS
Express.js
Recharts
Tradeoffs
The backend polls on its own timers (system every second, processes every two, GPU every three) and answers from an in-memory cache, so the UI never waits on a slow sensor, at the cost of data a few seconds old.
Everything else I've built, including experiments and older work, is on GitHub.
See all on GitHub
Certifications
Each credential links to the issuer's page, so you can verify it yourself.