# Ashish Kr Jha > Software Engineer based in India. I build production React applications and the services under them: data-access layers in TypeScript, Python services and scheduled pipelines, and the server-side controls around LLM agents that read and write enterprise data. Then I maintain them, which is a different job. ## At a glance - 11 markets in production - 185 screens in production - 400+ field reps supported - $27k annual licensing removed ## Contact - Email: ashishjha14411@gmail.com - GitHub: https://github.com/AshishJha14411 - LinkedIn: https://www.linkedin.com/in/ashish-kumar-jha-59303520b - Blog: https://blog.ashishkrjha.dev - Résumé: https://ashishkrjha.dev/Ashish_Kr_Jha_Resume.pdf ## Selected work ### Quill & Code (Live) A writing and publishing app with an AI drafting mode. I built both halves: the FastAPI service, data model and background jobs, and the React front end on top. Owning both ends means a schema change is my problem in two places. - FastAPI service over PostgreSQL with Alembic migrations, and a Celery worker on Redis for durable background jobs - Redis-backed rate limiting, with sanitisation and profanity filtering on user-submitted content - Gemini calls for the drafting mode run server-side rather than from the browser, keeping the key out of the client - Next.js 15 / React 19 client with TanStack Query for server state and Zustand for session state, typed from the backend's OpenAPI schema so the two can't drift apart quietly Stack: FastAPI, PostgreSQL, Redis, Celery, Next.js, React 19, TypeScript, Tailwind Live: https://blog-proj-sooty.vercel.app/ ### Interview Practice (Live) Technical interview practice that grades whether the mental model holds up, rather than whether the right word came out. The hard part is scoring that without quietly rewarding fluency. - Sessions built from an uploaded job description or resume - Competency plan shown before the session starts - Three-tier hints that point at the concept rather than supplying the term - Post-session summary of what was covered and what wasn't Stack: Next.js, TypeScript, Tailwind, LLM Evaluation Live: https://int-prac.vercel.app/ ### LLM Agent Platform (Working POC) A chat assistant over enterprise data. The model asks for typed tools and the client resolves them in parallel, under a hop cap. Left uncapped it will keep asking, and every hop costs a round trip and tokens. - Gemini function-calling over a small set of typed tools: list objects, fetch schema, query records - Scheduled Node.js job extracts platform schema, filters system and audit fields through an allowlist, and publishes a versioned artifact the agent reads at runtime - React clients over an async execution API: execute→poll with backoff, cancellation, retries, and idempotency via unique external IDs - Session invalidation and recovery, with response normalisation across browser and tablet runtimes Stack: Node.js, TypeScript, React, Gemini, Tool Calling ### Secure AI Automation (Design + deployed foundation) The first version called the model straight from the client, which was fine until it had to touch regulated data. Execution moved server-side behind the platform's own auth, and this is the mutation pipeline that came out of that. - Intent parsing runs with no tools declared and a fixed response schema, so text embedded in an untrusted ticket has nothing to call - Past that boundary, execution is ordinary deterministic code rather than model output - Writes go through a dry-run diff, a two-surface approval, and a state-hash check at execute time to catch drift between approval and execution - Savepoint rollback, per-action caps, and an append-only audit trail with encryption on sensitive fields Stack: Node.js, PostgreSQL, LLM Safety, Audit & Compliance ### Enterprise Survey Platform (Production) A React survey platform wired into enterprise CRM records, built to replace a bought-in tool that cost more and did less. The licence saving was the easy part to measure. The compliance rules were the part that took the time. - Questionnaires driven by therapeutic area, country, product and compliance rules - Admin tooling so business users could change surveys without a deployment - Used by 400+ field representatives across 4 continents - Removed roughly $27,000 a year in licensing Stack: React, TypeScript, Enterprise CRM, REST APIs ## Experience ### Cloud Rank Pvt. Ltd., Senior Consultant Apr 2023 to Present · India - Ship features for a production TypeScript/React application used daily across 11 global markets: roughly 185 screens, Redux Toolkit state management and multilingual support from a shared codebase. - Maintain the application's data-access layer: request chunking around platform query limits, parallel request orchestration, timeout handling, retries and independent request-state management. - Built internal tooling on the TypeScript Compiler API that indexes 771 source files into a 2,795-node, 17,985-edge graph, making imports, JSX component trees, Redux data flow and call graphs queryable instead of read in full. - Built a scheduled Node.js pipeline that extracts and filters platform schema through an allowlist, publishing an artifact consumed at runtime by an LLM tool-calling agent. - Built React clients for enterprise AI assistants with async execution, polling, cancellation, retry logic and response normalisation across browser and tablet runtimes. - Worked on the foundations for secure enterprise AI workflows: server-side LLM execution, structured outputs, approval gates, auditability, rollback protection and compliance-aware boundaries. - Worked with global stakeholders on requirements, estimates and releases, and reviewed code and debugged alongside junior developers. ### Freelance, Software Developer Nov 2021 to Mar 2023 · Guwahati - Built custom web applications and academic projects using JavaScript, React and REST APIs. - Worked with engineering students to design and deliver full-stack applications, managing milestones and technical planning. - Evaluated tooling and libraries to improve project architecture and implementation quality. ### Salesforce & Enterprise CRM, Engineering, Additional Experience Earlier · India - Configured and customised enterprise CRM solutions across sales, medical and analytics workflows. - Built integrations with external systems using REST APIs. - Built production reporting solutions, dashboards and field applications. - Supported production deployments, issue resolution and stakeholder communication. ## Education Bachelor of Technology, Girijananda Chowdhury Institute of Management and Technology, 2021 (India) ## Skills - Languages: Python, TypeScript, JavaScript, SQL - Backend & data: FastAPI, Node.js, REST APIs, PostgreSQL, SQLAlchemy, Alembic, Redis, Celery - Infrastructure: Docker, Google Cloud, Cloud Run, Cloud Scheduler, Cloud Storage, Git - AI engineering: LLM API integration, Tool / function calling, Structured outputs, Agent workflows, Prompt-injection boundaries, Token & cost budgeting - Frontend: React, Next.js, Redux Toolkit, Vite, Tailwind CSS ## Writing - [The CORS Error That Was a Race Condition](https://blog.ashishkrjha.dev/the-cors-error-that-was-a-race-condition): The browser console said the request had been blocked by CORS policy, that no Access-Control-Allow-Origin header was present on the requested resource. - [My Idle Background Worker Was the Most Expensive Thing I Owned](https://blog.ashishkrjha.dev/my-idle-background-worker-was-the-most-expensive-thing-i-owned): I opened the Cloud Run billing breakdown expecting the database to be the villain. Failing that, the AI generation, which calls out to a model and streams tokens back and feels expensive, in the way… - [No fetch, No Storage: Shipping Inside a Sandboxed Host](https://blog.ashishkrjha.dev/no-fetch-no-storage-shipping-inside-a-sandboxed-host): The answer came back in writing, from the vendor, and it amounted to: yes, and you'll be building it yourself. The question had been a simple one. The platform we build on has an agent feature. - [Instructions Are Hints: Guardrails for an LLM Tool Loop](https://blog.ashishkrjha.dev/instructions-are-hints-guardrails-for-an-llm-tool-loop): I wrote the same rule three times. Once in the tool description, so the model would read it while deciding what to call. Once in the system prompt, in capitals, because the first one wasn't holding. - [Code Graphs for AI Coding Agents: Better Repository Context and Safer Refactoring](https://blog.ashishkrjha.dev/code-graphs-for-ai-coding-agents-better-repository-context-and-safer-refactoring): You've probably watched this happen. You ask an agent to add a rule to checkout. It opens CheckoutPage.tsx, then CheckoutButton.tsx, then checkout.css, because they all have "checkout" in the name… - [Build a TypeScript Code Graph with the Compiler API](https://blog.ashishkrjha.dev/build-a-typescript-code-graph-with-the-compiler-api): Have you ever written a helper function, opened a pull request, and had someone comment "we already have this"? I have. More than once, in the same codebase.