Dallas, TX / Open to Roles

Satvik Reddy
Parvathareddy.

Full stack engineer.

Database schema, API layer, React UI, Docker deployment — shipped as one working product, not isolated features.

Backend
FastAPI, Python, PostgreSQL, SQLAlchemy
Frontend
Next.js, React, TypeScript, Tailwind
Infra
Docker, Vercel, Git, REST APIs
Scroll
typed from DB to UIasync by defaultdocker as the dev contractpydantic as source of truthfull stack ownershipLLM evaluation that shipszero config deploysschema first developmentrequest lifecycle thinkingstructured output pipelinesone command to run everythingreal tests on real datatyped from DB to UIasync by defaultdocker as the dev contractpydantic as source of truthfull stack ownershipLLM evaluation that shipszero config deploysschema first developmentrequest lifecycle thinkingstructured output pipelinesone command to run everythingreal tests on real data
real tests on real dataone command to run everythingstructured output pipelinesrequest lifecycle thinkingschema first developmentzero config deploysLLM evaluation that shipsfull stack ownershippydantic as source of truthdocker as the dev contractasync by defaulttyped from DB to UIreal tests on real dataone command to run everythingstructured output pipelinesrequest lifecycle thinkingschema first developmentzero config deploysLLM evaluation that shipsfull stack ownershippydantic as source of truthdocker as the dev contractasync by defaulttyped from DB to UI

01 / About

I own features

start to finish.

I design the database schema, write the FastAPI routes, build the React UI, wire Docker Compose, and deploy — as one cohesive system. Not just code features in isolation.

Most of my projects involve LLMs in some meaningful way. Not just API wrappers — I've built evaluation frameworks, structured output pipelines, and context management systems that behave predictably under real load.

Looking for a backend or full stack role where I can own real features, ship fast, and learn from engineers who care about the fundamentals. Based in Dallas, TX and open to remote.

~/project-root

02 / Projects

01 / 04

Scores job postings against a resume in real time — so job seekers stop applying blind.

CareerCompass

AI career guidance platform

Next.jsFastAPIOpenAIPostgreSQL
01.
asyncio.gatherAll job scoring runs in parallel. One await instead of a sequential loop — latency drops with scale.
02.
Pydantic as contractSame model used for DB validation and as the structured output spec sent to OpenAI.
03.
tsvector indexPostgres full-text search on job titles and descriptions. No Elasticsearch needed.
View on GitHub

// async · typed · 24 tests passing

routes/jobs.py
@router.post("/match")
async def match_jobs(
    profile: UserProfile,
    db: Session = Depends(get_db)
) -> list[JobMatch]:
    jobs = await fetch_active_jobs(db)

    # Score each job against the user profile
    matches = await asyncio.gather(*[
        score_job_match(profile, job)
        for job in jobs
    ])
    return sorted(
        matches,
        key=lambda m: m.score,
        reverse=True
    )

Run test cases across multiple models at once. GPT-4o judges every response on accuracy, relevance, and hallucination risk.

EvaluateAI

LLM evaluation platform

Next.jsFastAPIOpenAISQLite
01.
LLM-as-judgeGPT-4o evaluates with response_format: json_object — scores are structured, not free-form text.
02.
Parallel evalAll model calls run concurrently via asyncio.gather. Results arrive in one batch, not one at a time.
03.
SQLite intentionalZero setup, single file. Schema is identical to Postgres — one line to swap when scale demands it.
View on GitHub

// json_object · parallel · zero-setup DB

services/judge_service.py
async def evaluate_response(
    model_output: str,
    expected: str,
) -> EvalScores:
    result = await openai.chat.completions.create(
        model="gpt-4o",
        response_format={"type": "json_object"},
        messages=[
            {"role": "system", "content": JUDGE_PROMPT},
            {"role": "user", "content": build_prompt(
                model_output, expected
            )},
        ],
    )
    data = json.loads(
        result.choices[0].message.content
    )
    return EvalScores(**data)

Reviews pull requests with full repo context — so suggestions are relevant to your codebase, not generic.

CodePilot

AI code review tool

Next.jsFastAPIGitHub APIOpenAI
01.
Token budgetContext manager trims repo files to 4k tokens before the prompt is built — no silent truncation mid-review.
02.
unidiff parsingOnly changed hunks are sent. Unchanged context is stripped to reduce noise and stay within limits.
03.
StreamingCompletions stream line by line to the client. Review appears as it generates, not after a 15s wait.
View on GitHub

// streaming · token-budgeted · diff-aware

lib/reviewer.ts
export async function reviewPR(
  pr: PullRequest
): Promise<Review> {
  const [diff, context] = await Promise.all([
    fetchDiff(pr.number),
    buildRepoContext(pr.baseSha, {
      maxTokens: 4000,
    }),
  ])

  const { choices } = await openai.chat.completions.create({
    model: "gpt-4o",
    messages: [
      { role: "system", content: REVIEW_PROMPT },
      { role: "user", content: buildPrompt(diff, context) },
    ],
  })

  return parseReview(choices[0].message.content)
}

Pulls vendor inventory and order data into one view and flags disruptions before they become stockouts.

SupplyChainSync

Supply chain visibility dashboard

Next.jsFastAPIPostgreSQLDocker
01.
inArray batch querySingle Drizzle query with inArray instead of per-vendor fetches. Eliminates N+1 on every dashboard load.
02.
Weighted severityAlert score is weighted across lead time, current stock, and reorder point — not a simple threshold.
03.
DB healthcheckCompose healthcheck blocks the API container from starting until Postgres is accepting connections.
View on GitHub

// no N+1 · weighted alerts · healthchecked

api/dashboard.ts
export async function getVendorStatus(
  vendorIds: string[]
): Promise<DashboardData> {
  const [inventory, orders, alerts] = await Promise.all([
    db.query.inventory.findMany({
      where: inArray(inventory.vendorId, vendorIds),
      with: { vendor: true, product: true },
    }),
    fetchPendingOrders(vendorIds),
    checkDisruptionAlerts(vendorIds),
  ])

  return {
    stockHealth: calcStockHealth(inventory),
    reorderFlags: inventory.filter(
      i => i.qty < i.reorderPoint
    ),
    activeAlerts: alerts.filter(
      a => a.severity === "high"
    ),
  }
}

03 / Stack

How I build

systems.

Every project follows the same request lifecycle. Each layer has a clear job and hands off with a typed contract.

Browser

Next.js SSR

API Route

Server component

FastAPI

Async handler

Pydantic

Validation

SQLAlchemy

ORM / raw SQL

PostgreSQL

Source of truth

API Design

Auto-generated docs

FastAPI generates OpenAPI from type annotations. The spec is always in sync because it comes from the code itself.

Async by default

Route handlers are async throughout. asyncio.gather runs independent queries in parallel, not sequentially.

Typed response models

Every route declares its response model. FastAPI validates outgoing data the same way it validates incoming.

Structured errors

Error responses follow a consistent shape. Clients never parse free-form strings to understand what failed.

Type Safety

Pydantic as source of truth

Schema and validation live in one place. The model is the contract between the DB, the API, and the client.

Zod on the frontend

API responses are validated at runtime before they touch React state. Type errors surface at the boundary.

TypeScript strict mode

No implicit any, no loose nulls. Types flow from Pydantic models through Zod to the UI layer without gaps.

Shared contracts

Backend response shapes are mirrored as Zod schemas. If the API changes, the frontend type error tells you.

Deployment

Docker Compose for everything

API, web, and database start with one command. Dev environment matches production exactly.

Healthchecks before startup

The API container waits for the database healthcheck to pass. No race conditions on cold start.

Vercel for the frontend

Deploys on every push to main. Preview URLs for every pull request. Zero config for Next.js.

Environment parity

Same Compose file runs locally and in CI. No separate dev config to drift out of sync with production.

S

SatvikGPT

ask me anything

Hey — I'm SatvikGPT. Ask me about Satvik's projects, skills, or background.