SortedLaunch.

LLM app development

LLM apps that hold up.

A demo that works once is easy. I build LLM features that keep working on real inputs, with evals, latency budgets, and guardrails, on top of OpenAI or Anthropic.

It behaves on real data

I write evals against your actual inputs before I ship, so you know how the feature does on the messy cases, not just the happy path in a demo.

Fast enough to use

Streaming, caching, and a latency budget from the start. The response shows up while people are still paying attention.

Grounded, not guessing

Retrieval over your own content, with citations and guardrails, so answers come from your data instead of the model making things up.

From prompt to production.

The hard part of an LLM feature is everything around the model call. I handle retrieval, tool use, retries, cost tracking, and the evals that tell you a change made things better and not worse.

  • Retrieval with a real vector store and good chunking
  • Tool calling and agents that stay on task
  • Cost and quality tracking, so nothing drifts quietly

Models

OpenAI and Anthropic, picked per task on cost and quality. Not married to one, and easy to swap.

The stack

TypeScript, Next.js, Node, and PostgreSQL with pgvector or a dedicated vector store when the corpus is large.

Retrieval

Embeddings, chunking, and reranking tuned to your content, with citations so answers stay checkable.

Handover

Your repo, your API keys, your prompts and evals. The system is yours to run and extend without me.

What I usually build.

Pick the closest fit, or we scope the real feature on a call.

Chat and assistants

Grounded chat with memory, tool use, and streaming, wired into your product and data.

Retrieval and search

Ask questions over your docs, tickets, or catalog and get answers that cite the source.

Agents and automation

Multi step agents that call tools and finish a task, with limits so they stay predictable.

Tell me the use case.

Fifteen minutes and I come back with a scope, a price, and a date. If an LLM is the wrong tool for the job, I will say so.