Independent Python & FastAPI Engineer

FastAPI backends and data pipelines, built to be tested and explained.
Python · APIs · data pipelines · open-source stat-arb research

I'm Ayush Verma, an independent engineer in Delhi. I build Python and FastAPI backends and data pipelines, and I publish the open-source statistical-arbitrage project HedgeVision so the code can be reviewed. Every project here carries a maturity label (concept, prototype, testnet, live) so you can see what is built and what is not.

Strongest fit: FastAPI backends, data pipelines, API integrations. Also worked with: RAG and agent prototypes, React/Next.js front ends, TimescaleDB, Docker. I also run CorrelateX, my own product studio.

PythonFastAPILangGraphPostgreSQLRedisDockerReactNext.jsTypeScriptTailwind CSSGCPGitHub ActionsRAG / FAISSVertexAIKafkaKali LinuxBurp SuiteOWASP Top 10CrewAITerraformn8nWebflowLinux AdminGrafanaStatistical ArbitragePythonFastAPILangGraphPostgreSQLRedisDockerReactNext.jsTypeScriptTailwind CSSGCPGitHub ActionsRAG / FAISSVertexAIKafkaKali LinuxBurp SuiteOWASP Top 10CrewAITerraformn8nWebflowLinux AdminGrafanaStatistical Arbitrage

Systems & Proof of Work

Selected work, each labelled by how mature it is. Figures marked self-reported come from private repositories.

VI Engine
View Details

VI Engine

Private beta

AI-assisted social content workflows with human approval

ai
FastAPI
Next.js
+3

HedgeVision (open source)

Prototype

Open-source statistical-arbitrage research platform in Python/FastAPI and React

Live preview
trading
Python / FastAPI
React
+3

Financial News Crawler

Prototype

Async Python pipeline that reads financial news RSS feeds and scores sentiment

experiment
Python
aiohttp
+4
Mangal Murti Jeweller — Diamond E-Commerce Platform
View Details

Mangal Murti Jeweller — Diamond E-Commerce Platform

Prototype

Diamond e-commerce site with a large faceted catalog (launching)

full stack
Next.js
React / TypeScript
+5

Code Snippets

Small excerpts from real systems — the kind of details that make products reliable.

LangGraph agentic workflow with conditional tool routing

Multi-step LLM agent that routes between RAG retrieval, code execution, and human handoff based on intent classification.

Python
from langgraph.graph import StateGraph, END
from langgraph.prebuilt import ToolNode

class AgentState(TypedDict):
    messages: list[BaseMessage]
    intent: str
    tool_results: dict
    needs_human: bool

def classify_intent(state: AgentState) -> AgentState:
    prompt = ChatPromptTemplate.from_messages([
        ("system", "Classify: rag | code_exec | human_escalate"),
        ("human", "{query}")
    ])
    result = llm.invoke(prompt.format(query=state["messages"][-1].content))
    state["intent"] = result.content.strip().lower()
    return state

def route_by_intent(state: AgentState) -> str:
    routes = {"rag": "retrieve", "code_exec": "execute",
              "human_escalate": "handoff"}
    return routes.get(state["intent"], "retrieve")

def retrieve_context(state: AgentState) -> AgentState:
    query = state["messages"][-1].content
    embedding = embeddings.embed_query(query)
    docs = vector_store.similarity_search_by_vector(embedding, k=8)
    reranked = reranker.rerank(query, docs, top_k=3)
    state["tool_results"]["retrieved"] = [d.page_content for d in reranked]
    return state

def execute_code(state: AgentState) -> AgentState:
    sandbox = Sandbox(timeout=15, allow_imports=["numpy", "pandas"])
    result = sandbox.run(state["tool_results"].get("code", ""))
    state["tool_results"]["exec_output"] = result.stdout or result.stderr
    return state

graph = StateGraph(AgentState) \
    .add_node("classify", classify_intent) \
    .add_node("retrieve", retrieve_context) \
    .add_node("execute", execute_code) \
    .add_node("handoff", human_handoff) \
    .add_conditional_edges("classify", route_by_intent, {
        "retrieve": "retrieve", "execute": "execute",
        "handoff": "handoff"
    }) \
    .add_edge("retrieve", END) \
    .add_edge("execute", END) \
    .compile()

Async event pipeline — Redis Streams with backpressure

High-throughput event ingestion: async generator → Redis Streams → consumer group with explicit backpressure and dead-letter queue.

Python
import asyncio
from redis.asyncio import Redis
from typing import AsyncGenerator

class EventPipeline:
    def __init__(self, redis: Redis, stream: str, group: str,
                 consumer: str, max_pending: int = 500):
        self.redis = redis
        self.stream = stream
        self.group = group
        self.consumer = consumer
        self.max_pending = max_pending
        self.dlq = f"{stream}:dead"

    async def ingest(self, events: AsyncGenerator[dict, None]) -> int:
        count = 0
        batch = []
        async for event in events:
            batch.append(("event", event))
            if len(batch) >= 50:
                await self.redis.xadd(self.stream, dict(batch))
                count += len(batch); batch = []
        if batch:
            await self.redis.xadd(self.stream, dict(batch))
            count += len(batch)
        return count

    async def consume(self, handler) -> None:
        await self._ensure_group()
        while True:
            pending = await self.redis.xpending(self.stream, self.group)
            if pending["pending"] >= self.max_pending:
                await asyncio.sleep(0.5); continue  # backpressure

            messages = await self.redis.xreadgroup(
                self.group, self.consumer, {self.stream: ">"},
                count=10, block=2000
            )
            for msg_id, data in messages:
                try:
                    await handler(data)
                    await self.redis.xack(self.stream, self.group, msg_id)
                except Exception as exc:
                    await self.redis.xadd(self.dlq, {
                        "original_id": msg_id, "data": str(data),
                        "error": str(exc), "ts": str(time.time())
                    })
                    await self.redis.xack(self.stream, self.group, msg_id)

    async def _ensure_group(self):
        try:
            await self.redis.xgroup_create(
                self.stream, self.group, id="0", mkstream=True
            )
        except ResponseError:
            pass  # group already exists
Skills & Capabilities

Stack I actually use.

These are the tools in the projects above — Python, FastAPI, LangGraph, React/Next.js, PostgreSQL, Redis, Docker, and the surrounding ecosystem.

AI & LLM

16 skills

LLM orchestration, RAG pipelines, agentic workflows, and applied ML.

LangGraphLangChainCrewAIAutoGenVertexAIOpenAI API / AssistantsRAG / FAISS / pgvectorOSS LLMs (Ollama, vLLM, Llama)Whisper (STT)ElevenLabs / Groq TTSHMM & Regime DetectionScikit-learnPandas / NumPyHugging FaceAgentic WorkflowsPrompt Engineering

Backend & Data

12 skills

APIs, async pipelines, real-time streams, and data persistence.

PythonFastAPIPostgreSQLTimescaleDBRedisSQLAlchemyPydanticWebSocketsKafka / RabbitMQCelery / Task QueuesPrometheusGrafana

Frontend

9 skills

Production UIs and interactive dashboards.

ReactNext.jsTypeScriptTailwind CSSFramer MotionThree.jsReact Three FiberTradingView Chartsshadcn/ui

Infra & DevOps

12 skills

End-to-end deployment, cloud infrastructure, and observability.

DockerDocker ComposeGitHub ActionsCI/CD PipelinesGCP / AzureAWS (EC2, S3, Lambda)DigitalOcean / RailwayNginx / Reverse ProxyLinux / Shell ScriptingProcess AutomationCloudflare / DNSTerraform (Basics)

Security & Ethical Hacking

12 skills

Offensive security, hardening, and infrastructure defense.

Kali LinuxNmap / MasscanBurp SuiteWiresharkNikto / NucleiHydra / JohnMetasploitOWASP Top 10SSH HardeningFirewall / iptablesVPN / WireGuardLog Analysis & Monitoring

IT Support & Systems

11 skills

Systems administration, networking, and technical support.

Linux AdministrationWindows ServerActive DirectoryNetwork ConfigurationDNS / DHCPTroubleshooting & DebuggingBackup & RecoveryRemote Desktop / RDPPrinter & Peripheral SetupSoftware Installation & PatchingUser & Access Management

Low-Code & No-Code

10 skills

Rapid delivery platforms and workflow automation (2025–2026).

WebflowBubbleAirtableZapier / MakeSoftr / Gliden8nRetoolFramer (Sites)Notion AutomationsTypeform / Tally

Quant & Data Systems

8 skills

Market data pipelines, strategy tooling, and financial infrastructure.

Statistical ArbitrageWalk-Forward BacktestingBinance WebSocket APICointegration AnalysisRisk & MonitoringEvent-Driven ArchitectureMarket Data PipelinesOrder Book Analysis

How I Work

I handle architecture, backend, and delivery myself, with Docker for deployment. If a scope needs a skill I do not have, I will say so before we start. You deal with one person throughout.

Client feedback

You can read client reviews on Upwork.

Frequently Asked Questions

I aim for explicit APIs, clear state, retries and tests, and I label every project by how mature it actually is. Common questions about how I work and what to expect.

Let's Build Something Great

I'm always interested in working on exciting projects and collaborations.