Tharun Kumar

Tharun Kumar

Full-Stack Engineer & AI Automation Builder

Selected projects

Browse all 21 projects →

Case studies

Trello Clone — four state models

2025

The same board app built four times over one API — plain React state, Context API, Redux Toolkit and Redux Toolkit in TypeScript — to compare state-management approaches against identical functionality.

The problem

Which state-management approach to reach for is usually argued in the abstract. I wanted the comparison grounded in one real app, where the feature set is identical and only the state layer changes.

What I built

  • Implemented boards, lists, cards, checklists and drag-and-drop against the official Trello API, with real-time sync and persistent cloud storage.
  • Rebuilt the same app on four branches — plain React state, Context API, Redux Toolkit, and Redux Toolkit in TypeScript — each a complete working implementation rather than a sketch.
  • Typed the store, actions and API responses in the TypeScript branch to see what the type layer actually catches once the app is non-trivial.

Outcome

Four deployable branches over one API, and a first-hand read on where Context stops scaling and where Redux Toolkit starts paying for itself.

ReactRedux ToolkitTypeScriptContext APITrello APITailwind CSS

Live Location Tracker — real-time sharing

2026

Share your location live with a group: sign in with Google, open a tracking session, and every member sees each other move on a map with road route, distance and ETA to a chosen target.

The problem

Sharing a live location means streaming frequent GPS fixes to exactly the right people, keeping the map smooth on a one-fix-per-second signal, and never trusting a user id the client sends.

What I built

  • Built a Node WebSocket hub with per-session rooms, an auth handshake sent as the first message (so tokens stay out of URLs and logs), token refresh, heartbeats and message-size limits.
  • Verified Supabase access tokens against the project's JWKS on every REST call and socket, derived the user id server-side, and checked session membership in Postgres — with row-level security as a second layer.
  • Wrote a reconnecting client with exponential backoff that rejoins sessions and flushes the latest unsent fix after a drop.
  • Predicted positions between GPS fixes from speed and heading, and added road routing with distance and ETA by drive, bike or walk mode over OpenStreetMap.

Outcome

Deployed web app on Vercel and API on Railway, with a pub/sub seam in the server ready to swap in Kafka for multi-instance fan-out.

ReactViteNode.jsExpressWebSocketsSupabasePostgreSQLLeaflet

AI PR Review — rules-driven code reviewer

2026

A GitHub Actions bot that reviews every pull request with Gemini against plain-English rules, posts P0–P3 badged comments on the changed lines, and fails the check on critical findings.

The problem

An AI reviewer has to run with secrets while reading code written by whoever opened the PR — so a PR must not be able to rewrite the reviewer, loosen its rules, or talk the model into leaking anything.

What I built

  • Kept the review rules in a plain-English Markdown file of about 190 rules, grouped by severity (P0 to P3): secrets, injection, breaking API and schema changes, bugs, performance, tests, plus guardrails against false alarms.
  • Ran the reviewer through pull_request_target from the base branch, so a PR can't change the reviewer or its rules, and fetched PR files as plain text through the GitHub API instead of checking them out or running them.
  • Wrapped each file in a random per-run boundary the content can't fake, told the model file contents are untrusted, and never sent .env contents.
  • Validated every AI finding against the PR diff (changed line, real file, valid severity), stripped HTML and @mentions, and skipped comments already posted on later pushes.

Outcome

Every push to a PR into main gets badged inline comments and one updated summary; a P0 finding fails the check, and main can only be merged once every comment is resolved.

Node.jsGitHub ActionsGitHub APIGemini APIGitHub Apps

AI Database Copilot — Gemini + MCP over PostgreSQL

2026

Ask a PostgreSQL database questions in plain English: Gemini picks MCP tools, an MCP server runs safe read-only queries, and every question is recorded in an audit log.

The problem

Letting an LLM answer questions from a live database means it writes SQL you didn't write — so it must not be able to change data, read tables it shouldn't, or make up answers.

What I built

  • Built an MCP server with six tools (list and describe tables, relationships, samples, summary, query) and turned its tools/list into Gemini function declarations, running a tool-calling loop with a round limit and deadline.
  • Made the MCP server the only path to business data, through a separate mcp_readonly Postgres role with SELECT-only grants, read-only transactions, a statement timeout and a 100-row cap.
  • Added a SELECT-only SQL guard and zod input validation in front of every tool, and tested it against 19 destructive or unsafe SQL attempts.
  • Protected the chat and logs with Google sign-in (Auth.js), and recorded each question, generated SQL, tools used and answer in a searchable audit table.

Outcome

Deployed on Vercel with Supabase Postgres, running the real MCP protocol in-process so it works serverless; the same server also runs over stdio for MCP Inspector and desktop clients.

Next.jsTypeScriptMCPGemini APIPostgreSQLPrismaAuth.js

About

Full-stack engineer at Rexera (a RealPage company), where I work on an AI-powered workflow automation platform for real estate: the Next.js operations portal, the serverless REST API behind it, the Postgres schema under that, and the Python services that do the document extraction. Before Rexera I trained at MountBlue Technologies and built the projects below.

Experience

Software Engineer, Full Stack — Rexera (a RealPage company)

Oct 2025 – Present
  • Core developer on an AI-powered real-estate workflow automation platform — payoff requests, HOA document acquisition and municipal lien searches — contributing 800+ commits across a pnpm/Turborepo monorepo.
  • Built the Next.js 15 operations portal: workflow dashboards, task and SLA tracking, document review, financials and client-facing views.
  • Shipped 50+ REST endpoint modules on Vercel serverless functions with Zod-validated contracts shared between API and frontend.
  • Modelled the Postgres schema on Supabase across 130+ migrations with row-level security, role-based access and WebSocket realtime subscriptions; migrated the data layer to Prisma.
  • Built the document OCR/extraction pipeline with human-in-the-loop review, Python Prefect flows and 100+ n8n workflows orchestrating AI agents, email, fax, IVR and voice.
  • Shipped services as Docker images with Helm charts and GitHub Actions CI/CD, alongside 350+ Jest and Playwright suites.

Software Engineer Trainee — MountBlue Technologies

May 2025 – Sep 2025
  • Intensive full-stack program — JavaScript, DOM, React, Node.js, Express and SQL — with continuous code review.
  • Shipped the drills and projects below before being placed with a client engineering team.

Stack

Languages
TypeScriptJavaScript (ES6+)PythonSQLHTML5CSS3
Frontend
ReactNext.js (App Router)ReduxTailwind CSSshadcn/ui
Backend
Node.jsExpressREST API designWebSocketsMicroservicesJWT auth
Data
PostgreSQLSupabasePrismaSequelizeMySQL
AI / LLM
LLM integrationLangChainOCR & document extractionPrefectn8n
Cloud
AWS (S3)VercelSupabase
AI tooling
Claude CodeCodexGemini CLIRoo CodeOpenCode
Testing & DevOps
PlaywrightJestDockerGitHub ActionsCI/CD

Coding practice

Also recently

Task Manager API

2026

REST API over a relational schema linking users to their tasks — full CRUD, filtering by priority and status, sorting by due date, bcrypt password hashing and JWT-protected routes. Migrated from MySQL to Postgres and containerised.

Node.jsExpressSequelizePostgreSQLJWTDocker

WebSocket Lookup Server

2026

Small Express server exposing a WebSocket endpoint for live user lookup — a focused exercise in duplex connections and message handling.

Node.jsExpressWebSocket

Messanger

2026

Messaging app experiment built on top of the WebSocket server work.

JavaScriptNode.jsWebSocket

Sequential Boxes

2026

A 3×3 grid whose state is modelled as an ordered click history rather than per-cell booleans, so the reverse-order clearing replays real user input instead of a fixed animation. Async clearing sequenced in useEffect with guards against duplicate clicks and post-unmount updates.

React 19ViteTailwind CSS

Contact

Open to full-stack engineering roles. The fastest way to reach me is email.

Download Résumé