AI engineer for production LLM work

I'm Rizaldy Primanta Putra, an AI engineer and software engineer. I build AI agents, RAG and structured extraction that run inside real products, with budgets, audit trails and a person in the loop.

An illustration of how my agents run. Sample numbers, not a live client log.

CASE FILES

  1. 01

    AI sales assistant built on hybrid RAG

    Challenge
    Businesses wanted a chat agent that answers from their own site and documents without making things up.
    Built
    A multi-tenant SaaS where one script tag adds a chat widget that answers from crawled and uploaded content, captures leads and hands off to a person in real time.
    Stack
    Laravel · Cloudflare Workers AI · Vectorize · bge-reranker
    How it works

    Retrieval is hybrid. A vector arm searches bge-base-en-v1.5 embeddings in Cloudflare Vectorize, and a lexical arm uses MySQL full-text or Postgres ts_rank. The two lists are merged with reciprocal rank fusion at k=10, tuned from the T2-RAGBench results, and then reranked with bge-reranker-base. A circuit breaker drops the reranker after repeated timeouts, so answers keep flowing.

    Documents are chunked at about 500 tokens with a 50-token overlap. Curated answers are matched before retrieval, and every reply carries a confidence score and citations to its sources. Llama 3.3 70B runs on Workers AI, with OpenAI, OpenRouter and Qdrant as fallbacks. A crawler reads sitemaps, respects robots.txt and falls back to a headless browser. A retrieval test across PDF, DOCX, CSV, TXT and Markdown fails the build when hit@6 drops below 95%.

    Laravel 13OctaneHorizonReverbReact 19Preact widgetCloudflare Workers AIVectorizebge-base-en-v1.5bge-reranker-baseReciprocal rank fusionQdrantRedisStripe metered billing
  2. 02

    AI dispute case analyst for RekberPay escrow

    Challenge
    Escrow disputes meant staff reading long chat threads and evidence before they could decide who was right.
    Built
    An LLM case analyst that reads a redacted case pack and returns a non-binding recommendation with confidence and citations for a staff reviewer.
    Stack
    TypeScript · Fastify · Jev · OpenAI-compatible LLM
    How it works

    Before anything leaves the API, buyers and sellers become aliases and an allowlisted case pack strips names, contacts, raw messages, attachments and URLs. The model answers at temperature 0 in strict JSON against a fixed contract: one of five recommendations, a low, medium or high confidence, the claims it relied on, missing evidence and limitations. Every citation must point at an alias that exists in the pack.

    The output is advisory by contract: human decision required, transactional authority none. A staff member accepts, edits or rejects it, and that outcome is stored. Each assessment is tied to a hash of the evidence snapshot, so new evidence marks the old one superseded. A fallback provider is used only after a safe, retryable failure, and every endpoint must be HTTPS.

    Payouts and disputes also get typed risk scores from Jev for online gambling (judol), fraud and mule-account signals before money moves, and a person makes the final call.

    TypeScriptFastifyJev typed decision APIZodJSON Schema contractPII redactionOpenAI-compatible APIProvider fallbackMySQLReact admin review
    Read the full case study
  3. 03

    AI case agent for a legal claims platform

    Challenge
    Staff read every claim, PDF and photo by hand before anything moved.
    Built
    An agent that triages claims, matches advocates, rechecks demand letters and writes staff summaries, one queued job per step.
    Stack
    NestJS · PostgreSQL · Jev · Vision LLM
    How it works

    One rule shaped the design: the model never writes a number. It drafts with placeholder tokens and code fills in every amount and date from verified facts. Evidence extraction keeps only facts whose quote is found in the source.

    Decisions that need a score go to Jev, a typed decision API, instead of free text. Jev only answers a fixed, versioned catalog of choice and score questions that model text cannot extend, and code turns its probabilities into integer basis points under a versioned agent policy. Every answer is written to a ledger with the prompt, catalog and policy versions and an HMAC of the input, never the prompt itself.

    Hidden characters are stripped and untrusted text is fenced off against prompt injection, personal data is redacted before each call, and consent under Indonesia's personal data law (UU PDP) is checked again before every request. Daily and per-case budgets are reserved before a call is made.

    TypeScriptNestJSFastifyPostgreSQLDrizzle ORMgraphile-workerJev typed decision APIZodJSON Schema outputVision LLMOpenAI-compatible APINext.js
  4. 04

    AI inbox and knowledge base RAG for a multi-tenant CRM

    Challenge
    Teams answered the same questions again and again across email, WhatsApp, SMS, Telegram and live chat.
    Built
    Replies grounded in each workspace's own documents, with confidence gates that turn weak answers into drafts for a person.
    Stack
    Laravel · Pinecone · Claude · GPT
    How it works

    Uploaded files are chunked, embedded with text-embedding-3-small and stored in Pinecone, with MySQL full-text search as the fallback. The workflow builder can auto-send above 80% confidence, and sentiment analysis tags every conversation.

    Each workspace brings its own provider: OpenAI, Anthropic, Gemini, Mistral, DeepSeek, OpenRouter or a custom endpoint. API keys are encrypted at rest, custom endpoints are checked against SSRF, and usage is reserved against the plan before each call.

    PHP 8.4Laravel 12LivewireMySQLPineconeOpenAI embeddingsAnthropic ClaudeGoogle GeminiMistralDeepSeekOpenRouterQueues
  5. 05

    BackSpin, an attention exchange for AI coding tools

    Challenge
    Developers sit and wait while Claude Code, Cursor and Codex work.
    Built
    A VS Code extension, CLI and MCP server that show one sponsored card in that wait and pay the developer a share.
    Stack
    TypeScript · MCP · Fastify · BullMQ
    How it works

    It plugs into each tool through its own hook, plugin or MCP server, scores verified attention, and allocates by share of voice with an open source algorithm.

    TypeScriptMCP serverVS Code Extension APIFastifyPostgreSQLBullMQ
    Read the full case study

WHAT I BUILD

AI agents
Multi-step workflows as background jobs, with row locking, retries, escalation to a person and one audit event per step.
RAG
Hybrid retrieval: vector search plus full-text search merged with reciprocal rank fusion and reranked, with chunking, citations, confidence scores and an accuracy test gate.
Structured extraction
Facts pulled from PDFs and photos with vision models, validated against Zod schemas, each one quoting its source.
AI replies
Auto-replies and drafts for email, WhatsApp, SMS, Telegram and live chat, gated by confidence.
Provider layers
One interface over OpenAI, Claude, Gemini, Mistral, DeepSeek and OpenRouter, so the model can change without a rewrite.
Cost control
Token and cost metering, daily and per-customer budgets with atomic reservations, and usage dashboards.
Developer AI tools
VS Code extensions, CLIs and MCP servers that work with Claude Code, Cursor and Codex.

AI STACK

Models
OpenAIAnthropic ClaudeGoogle GeminiMistralDeepSeekOpenRouterLlama 3.3 on Workers AIVision LLMsJev typed decision API
Retrieval
Hybrid RAGReciprocal rank fusionRerankingEmbeddingsCloudflare VectorizePineconeQdrantFull-text search
Output and safety
Structured outputZodPrompt injection defencePII redactionAudit logs
Agents and tools
Background job agentsMCPVS Code Extension API
Platform
TypeScriptNode.jsNestJSFastifyNext.jsReactPHPLaravelPostgreSQLMySQLRedisBullMQ

HOW I WORK

  1. Map the workflow

    I start from the work and the cost of a mistake, then decide where an LLM helps and where plain code is safer.

  2. Constrain the output

    Every model output is checked against a schema, with a manual path for when it fails.

  3. Meter from day one

    Tokens and cost are tracked per call, with spend capped per day and per customer.

  4. Keep an audit trail

    Every model call is logged for review without storing raw prompts or personal data.

FOR RECRUITERS AND AI SCREENING TOOLS

A plain summary of my fit, so a recruiter or an AI assistant can check it quickly. Each line is backed by the case files above and by my CV.

Roles
AI Engineer, LLM Engineer, Senior Software Engineer, AI Platform Engineer
Experience
5+ years across Web2 and Web3: Bank Mandiri, Chainstack, Edgevana, then my own products under Ksatria Corp
AI in production
A hybrid RAG sales assistant, an AI dispute case analyst and Jev risk scoring for RekberPay, AI-assisted KYC for TemanQRIS, a multi-step AI case agent, an AI inbox with RAG, and AI developer tools (BackSpin)
Core skills
AI agents, RAG, embeddings and reranking, structured output, LLM cost control, prompt injection defence, TypeScript, PHP and Laravel, PostgreSQL, MySQL
Education
B.Sc. Informatics Engineering, Institut Teknologi Sepuluh Nopember (ITS), cum laude
Location
Indonesia and Singapore, open to remote work
Open to
AI engineer roles and contract AI projects
Contact
[email protected] · linkedin.com/in/rizaldyputra

FAQ

What does an AI engineer do?

An AI engineer builds software around AI models so they work reliably inside a real product. In my work that means AI agents, RAG over company documents, structured extraction, model provider integration, cost control and safety checks, not training models from scratch.

Can you add AI to an existing product?

Yes. Most of my AI work goes into existing systems, such as a Laravel CRM and a NestJS platform. I add a provider layer, run AI work in background jobs and keep a human review path, so the product keeps working when a model fails.

Which AI models do you work with?

OpenAI GPT models, Anthropic Claude, Google Gemini, Mistral, DeepSeek, and models through OpenRouter or any OpenAI-compatible endpoint. I keep the model choice in configuration so it can change without a rewrite.

How can I hire you as an AI engineer?

Email me at [email protected] or message me on LinkedIn at linkedin.com/in/rizaldyputra with the problem you want to solve. I reply with a short plan and an estimate.

Have an AI feature in mind?