# Raza Jahangir

> AI Systems Engineer in Lahore, Pakistan. Freelance AI systems engineer building production AI agents, RAG pipelines, and private LLM deployments. 13+ years of backend engineering.

I help teams put multi-agent applications, retrieval-augmented generation pipelines, and private, open-weight models into production, and keep them working after launch.

Website: https://razajahangir.dev/

## Services

- **AI agent development**: Single and multi-agent applications with tool calling, state, and limits on what the model may do, built with LangGraph.
- **RAG pipeline development**: Retrieval-augmented generation over your own documents, with citations, built with LlamaIndex and PostgreSQL + pgvector.
- **Private and self-hosted LLM deployment**: Open-weight models on your own hardware through Ollama or vLLM behind a private gateway, with no outbound calls to third parties.
- **LLM evaluation and monitoring**: Test sets from your real data before release, then tracing, dashboards, and alerts for quality, cost, and latency once it is live.

## Approach

### 1. Build

We start with your problem, and I turn it into an agent or retrieval pipeline with solid engineering underneath.

I’ve been a backend engineer since 2012, long before AI arrived: APIs, databases, background jobs, and WordPress plugins running on live sites. I bring that same discipline to AI. A system I build for you isn’t a prompt wrapped in a script: it has clear data models, defined workflows, careful error handling, and limits on what the model is allowed to do. LangGraph and LlamaIndex are the tools I usually reach for; the engineering around them is what makes the system dependable.

### 2. Evaluate

Checking that it works on your data before your team relies on it.

I’ve always worked test-first, and AI needs that care even more, because a model can sound confident and still be wrong. Before anything goes live, I build a test set from your real documents and questions, and measure accuracy, retrieval quality, and where it falls short, so you can see how it performs before deciding. On Atlas Planner, benchmarking was how we chose between approaches, using numbers rather than guesses. Later changes are checked against the same tests, so an improvement in one place doesn’t quietly break something else.

### 3. Deploy

Getting it running reliably, wherever your data needs to live.

I’ve been shipping software to production for over a decade, from releasing WordPress plugins through SVN to deploying sites through CI/CD pipelines. I bring the same habits to AI: versioned releases, automated deployments, and a clear way to roll back. If your data can’t leave your own servers, I can run open-weight models on your machines through Ollama or vLLM behind a private gateway, or put a privacy layer in front of cloud models.

### 4. Monitor

Looking after it once real people start using it.

AI systems rarely crash. Instead they drift: answers slowly get worse, costs creep up, responses slow down. So I set up tracing for every request, so any answer can be followed back step by step, along with dashboards for quality, cost, and latency, and alerts when something moves out of range. Spending has hard budgets, and there’s a way to switch the model off if needed. Years of running production websites taught me that a system needs looking after once it’s live, not just until launch.

### How I use AI to build

I use AI tools to work faster at each step, with clear limits. I don’t put client names, personal data, or credentials into them, and if your contract rules out AI for certain steps, I do those by hand and use it only where it’s allowed.

1. **Design**: We agree on requirements and architecture before any code is written.
2. **Plan**: Your reviewed spec becomes small, testable modules, each with its own plan.
3. **Build & Review**: Each module gets its own branch and tests, and I review each change before it’s merged.
4. **Ship**: Releases go through GitHub Actions to staging, then production, with a way to roll back.

AI makes me faster. The judgement calls, and the responsibility, stay with me.

## Stack

- **AI / Python**: Python, LangGraph, LangChain, LlamaIndex, LangSmith, FastAPI, LiteLLM, Ollama
- **Data**: PostgreSQL + pgvector, Supabase, MySQL
- **Web and infra**: Node.js, Next.js, PHP, WordPress, Docker, Cloudflare Tunnel

## Common questions

### What does Raza Jahangir do?

I'm an AI systems engineer. I build AI agents and retrieval-augmented generation (RAG) systems end to end: the pipeline, testing against real data before release, the service that runs it, and quality, cost, and latency once it is live.

### Can AI run on our own hardware without sending data to a third party?

Yes. For data that can't leave the building, I run open-weight models on your own hardware through Ollama or vLLM behind a private gateway, with no outbound calls to third parties. In-house AI, one of my open-source projects, is a working example of that setup.

### What if a cloud model is the better fit?

Then PII tools such as Microsoft Presidio redact personal details before anything leaves your network, guardrails check what goes in and out, and the original values are restored in the response.

### How do you know an AI system works before launch?

Before release I build a test set from your real documents and questions, and measure accuracy, retrieval quality, and failure cases. Every later change is checked against the same tests, so improvements don't quietly break something else.

### Which tools and frameworks do you use?

Python, LangGraph, LangChain, LlamaIndex, LangSmith, FastAPI, LiteLLM, and Ollama, with PostgreSQL and pgvector for data. Before AI, I spent over a decade building PHP, WordPress, and API backends, starting in 2012.

### Where are you based, and how can I hire you?

I'm in Lahore, Pakistan, and work remotely across UK/EU hours and US East mornings. I'm open to freelance projects and to remote roles. Message me on LinkedIn or WhatsApp, or hire me through Upwork.

## Work

## In-house AI

- Status: Open source
- Case study: https://razajahangir.dev/work/inhouse-ai/
- Stack: DOCKER · OLLAMA · LITELLM · PGVECTOR · CLOUDFLARE TUNNEL
- Result: Runs on anything from a CPU-only laptop to a multi-GPU server, with no inbound ports.
- GitHub: https://github.com/razajahangir/inhouse-ai

A self-hosted assistant for teams that need chat and document Q&A without sending files to a third-party model.

### The problem

Think of a small agency or a regulated practice with folders full of contracts, finances, HR records, and client files. An AI assistant would save them hours every week. But pasting those files into a public chatbot is out of the question, and they don’t want yet another company storing their conversations.

### What I built

In-house AI is a private, ChatGPT-style assistant that runs on hardware the team already owns, from a laptop with no graphics card to a server full of GPUs. One Docker Compose file starts everything: the chat app (Open WebUI), a model gateway (LiteLLM), local models (Ollama), and a database (PostgreSQL with pgvector) for chats and documents.

The model, the document search, and the data all stay on that machine. No outside AI provider is set up. Adding one is a deliberate choice, never a default. Each person’s documents are kept separate, and sign-ups close after the first admin account.

### Keeping it private

Nothing on the machine is open to the internet. Instead, a Cloudflare Tunnel connects outward, and Cloudflare Access checks who you are before you even see the login page. There’s an honest trade-off: Cloudflare can see the traffic as it passes through. For stricter data, the same setup works over Tailscale or on the office network only. Setup still needs internet access to download the software and models.

### Room to grow

A built-in benchmark shows how fast the models run on your hardware. When the team outgrows it, the gateway can switch to vLLM on bigger machines, and nothing else has to change.

![LiteLLM model gateway, with deployed models and endpoints](https://razajahangir.dev/work/inhouse-ai/litellm-model-gateway.webp)

![Open WebUI chat against a local model](https://razajahangir.dev/work/inhouse-ai/open-webui-private-chat.webp)

### What’s public

The full setup is on GitHub: the compose file, the gateway config, the benchmark, and the security notes. Passwords and keys stay in a private settings file that never gets committed.

## Atlas Planner

- Status: Client work
- Case study: https://razajahangir.dev/work/atlas-planner/
- Stack: WORDPRESS · PHP 8.1 · OPENAI · JSON SCHEMA · RAG
- Result: MVP in eight weeks, then seven months of weekly releases. Four contracts, all rated 5 stars.
- Upwork: https://www.upwork.com/freelancers/developerraza?p=2113898981690503168
- Note: I do not hold ownership rights to this plugin; it was custom-developed for a client.

AI goal planning for a coaching membership. Members assess life and business, then get focus areas, goals, and scheduled actions from the client's own library.

### The problem

Picture a member of a coaching community. They’ve just scored their life and business on a wheel, and now they’re looking at the results, wondering what to do first.

The client already had the answer: a library of goals and actions their coaches trust. What they didn’t have was a way to match the right ones to each member. A generic chatbot would ignore that library, and one bad AI reply could land straight in someone’s plan.

### What I built

Atlas Planner turns those scores into a plan. The AI picks the areas that matter most, then suggests clear, measurable goals and actions taken from the client’s own library, not made up on the spot. Each week, a check-in sends a short nudge and offers to move anything that slipped.

Every AI reply has to match a strict format. If it doesn’t, the plugin rejects it and asks again, so nothing broken reaches a member’s plan. Personal details are removed before anything goes to the model, and members can delete their AI data. Every call is logged with its speed and cost. If the AI ever needs to be switched off, simple rules take over and members still get suggestions.

The planner itself had to be dependable, too. Repeating actions stay correct across time zones and daylight saving. Reminders, daily digests, and weekly check-ins run on time. It works with the tools the community already used: BuddyBoss notifications, ActiveCampaign email, SMS, the CRM, and GamiPress points and streaks. Members can export their plan as a PDF, a calendar file, or a spreadsheet.

### How it went

The first version went live in eight weeks. Then came seven months of weekly releases as members used it and the client asked for more. This project and Custom GPT Manager were delivered across four contracts, all rated 5 stars.

### What’s public

The client owns the code, so it isn’t public. The engagement is listed on Upwork.

## DraftCraft

- Status: Open source
- Case study: https://razajahangir.dev/work/draftcraft/
- Stack: FREE & OPEN SOURCE · GPL v2+ · WORDPRESS.ORG
- Result: Free on WordPress.org, with a test suite run on PHP 8.0 and 8.2.
- WordPress.org: https://wordpress.org/plugins/draftcraft
- GitHub: https://github.com/ArtisansWP/DraftCraft

Scheduled blog drafts for WordPress, in the site's own voice, held for review before anything is published.

### The problem

Every blog owner knows the feeling: you meant to post this week, and the week is gone. AI can write a post in seconds, but most people don’t want a robot publishing to their site unchecked. They want the draft done and the final say kept for themselves.

### What I built

DraftCraft writes blog drafts on a schedule, in the site’s own voice, and leaves them waiting for review. Nothing goes live until a person says so.

The site owner brings their own OpenRouter key, so they choose the model: Claude, GPT-4o, Gemini, DeepSeek, Llama, and more. They set the tone, audience, and structure once. Then DraftCraft runs hourly, twice a day, daily, weekly, or on demand. It rotates through categories so no single topic takes over, or works through a spreadsheet of keywords and dates first.

Each draft arrives ready to polish: proper headings, a table of contents, links to existing posts, an FAQ section that search engines understand, and a featured image from an AI image model or Unsplash. The SEO title, description, and focus keyword go straight into Rank Math, Yoast, or All in One SEO, whichever the site uses. If a draft needs work, the owner can ask DraftCraft to revise it from the editor.

### How it’s tested

Tests run against WordPress itself on every change, on PHP 8.0 and 8.2, through GitHub Actions. They never call the AI, so they stay fast and free to run.

### What’s public

DraftCraft is free and open source (GPL v2 or later) on WordPress.org, and the full code is on GitHub. It needs WordPress 6.0 or newer, PHP 8.0 or newer, and an OpenRouter key. An Unsplash key is optional.

## Custom GPT Manager

- Status: Client work
- Case study: https://razajahangir.dev/work/custom-gpt-manager/
- Stack: WORDPRESS · PHP · JAVASCRIPT · OPENROUTER
- Result: Built end to end, then extended over six months. Rated 5 stars.
- Upwork: https://www.upwork.com/freelancers/developerraza?p=2113899795565277184
- ARWP Agents on WordPress.org: https://wordpress.org/plugins/arwp-agents/
- Note: I do not hold ownership rights to this plugin; it was custom-developed for a client.

Several chat agents from wp-admin, each with its own prompt, model, knowledge base, and access rules, embedded with a shortcode.

### The problem

One WordPress site, lots of jobs for AI. The client wanted several assistants, each with its own instructions, its own model, its own knowledge, and its own audience. Most chat plugins give you a single bot. Some expose the API key in the browser, and a public chat box with no limits can burn through an AI budget overnight.

### What I built

Custom GPT Manager lets the client create as many agents as they need from the WordPress dashboard. Each one gets its own prompt, model, and settings, and goes on any page with a shortcode. Several agents can share a page without getting in each other’s way.

Agents can learn from the client’s own material: uploaded files (PDF, Word, CSV, or text) or pages pulled in from websites. Answers stick to that material and show where they came from. A content-coach agent reads the site’s own pages and links back to them.

The API key never leaves the server. Filters check every message before and after each reply, including attempts to trick an agent into misbehaving. Access can depend on a member’s role or plan, and limits and cool-downs stop anyone from running up the bill. The dashboard shows every conversation, what it cost, how fast it was, and any errors, and sends an email or Slack alert when something looks wrong.

### How it went

I built it end to end, then kept extending it for six months. Rated 5 stars.

### What’s public

The client owns the plugin, so the source is private. The engagement is on Upwork.

Later, I rebuilt the core idea from scratch as ARWP Agents, a free plugin on [WordPress.org](https://wordpress.org/plugins/arwp-agents/). It shares no code with the client’s version. It keeps the essentials: separate agents with their own prompt and model, shortcodes, streaming replies, message filters, role-based access, usage limits, and a chat log with token counts. The knowledge bases, citations, alerts, and exports stayed with the client. The source is on [GitHub](https://github.com/ArtisansWP/arwp-agents).

## Intelara

- Status: In progress
- Case study: https://razajahangir.dev/work/intelara/
- Stack: NEXT.JS 16 · REACT 19 · SUPABASE · OPENROUTER · MCP
- Try Intelara: https://chat.intelara.ai

A private AI chat workspace that keeps projects, threads, files, notes, and tools together, with your own OpenRouter key and a spend cap on every project.

### The problem

If you use AI for real work, your chats pile up fast. A client project, a side project, and a research thread all end up in one long list, each needing different instructions and a different model. Your files live somewhere else, your notes somewhere else again, and with pay-as-you-go models it’s easy to lose track of what you’re spending.

### What I’m building

Intelara is a private AI workspace that keeps all of that together. You sort your work into projects and threads. Each project has its own model, instructions, settings, and spend cap, and any chat can override them, branch off from an earlier message, or keep its own history.

You bring your own OpenRouter key, which is stored encrypted, and get the full range of models, with usage counted against the project’s cap. No key yet? A free tier runs on a shared free model, tuned for English, Urdu, and Arabic.

### Your files and notes, right beside the chat

Upload files to a project’s knowledge base, and Intelara finds the right passages while you chat. It searches by meaning and by keyword, and shows exactly which sources it used. Notes sit in the same project, with tags and a link back to the chat they came from.

### Tools that do things for you

Intelara connects to tools like GitHub, Linear, Notion, Supabase, Sentry, Stripe, Cloudflare, Upwork, Figma, and Vercel through MCP. You sign in to each one with OAuth, so no API keys get pasted around, and only secure remote servers are allowed. Tools attach to a whole project or a single chat, and can run on their own or ask before each call. Tools you aren’t using are left out, which keeps the model focused.

### The everyday details

Replies stream in with proper formatting, maths, code highlighting, and right-to-left text. You can pin messages, search, use a command palette, save prompts to a library, attach files, and take a screenshot of any reply. Every user only ever sees their own projects, chats, notes, and files, and the database itself enforces that.

### Where it stands

Intelara is live for testing at [chat.intelara.ai](https://chat.intelara.ai). It’s built with Next.js 16, React 19, Supabase, and OpenRouter.

## AgenticLearn

- Status: In progress
- Case study: https://razajahangir.dev/work/agenticlearn/
- Stack: FASTAPI · LANGGRAPH · DEEPSEEK · GEMINI · TAVILY · POSTGRES

A tutor that helps developers close a specific gap, instead of sending them through a full course.

### The problem

Imagine a PHP developer who’s just been asked to start writing Python. They already understand loops, APIs, and databases. What they’re missing is a handful of Python-specific things. Yet every course starts at “Hello, world” and takes weeks. And by the time a course is recorded, the tools it teaches have often moved on.

### What I’m building

AgenticLearn is a tutor that starts with you, not with a syllabus. It finds out what you already know, builds a short course aimed only at your gaps, looks up current material instead of trusting what a model remembers, and checks its own lessons before you read them.

Under the hood, it’s three AI workflows built with LangGraph, sharing one database. One model, DeepSeek, writes. A second, Gemini, checks the work. Tavily search keeps everything current, and LangSmith traces every run, so I can see what each step did and what it cost.

### 1. Getting to know you

A friendly counsellor chats with you about your goal, your preferred stack, and your background. If you’re new, it simply agrees a topic with you. If you’re experienced, it asks real-world questions aimed at whatever it’s least sure about, marking each skill as confident, shaky, or unknown. It stops once it’s confident, or after 12 questions at most. The result is your learner profile: your level, your skills, and your gaps.

![AgenticLearn intake workflow: load the thread, assess the answer, then either ask the next question or save the learner profile](https://razajahangir.dev/work/agenticlearn/intake-workflow.webp)

### 2. Building your course

Click “Generate curriculum” and it researches current docs and best practices, throws out stale or off-topic sources, and drafts a set of modules, each tied to one of your gaps. Then Gemini reviews the draft: is every gap covered, is the order right, is it up to date? If not, the draft gets fixed, up to twice, before you ever see it.

![AgenticLearn curriculum workflow: plan queries, research, grade sources, draft, verify, and revise before saving](https://razajahangir.dev/work/agenticlearn/curriculum-workflow.webp)

### 3. Learning, checking, moving on

Open a module and you get a lesson at your level, fact-checked before it’s shown. Ask questions and a tutor answers using that lesson. When you’re ready, a five-question quiz checks what stuck. Pass, and the next module unlocks. Miss a few, and you get a short review of just those ideas, then another go.

![AgenticLearn lesson workflow: route the event to lesson generation with fact-checking, the tutor, the quiz, or grading with unlock or remediation](https://razajahangir.dev/work/agenticlearn/lesson-workflow.webp)

### Where it stands

AgenticLearn is still in progress, with no public release or demo yet. Next up: using quiz results to reshape the rest of the course, so it keeps adapting as you learn.

## devnull-tui

A terminal client for dev-null.sh. Feeds, threads, profiles, and compose, with requests signed for the /api/v1 API.

An unofficial community client, not affiliated with dev-null.sh. It isn’t AI, but it’s the kind of backend work I did for thirteen years before AI, and still enjoy.

- Stack: Go · Bubble Tea
- Source: https://github.com/razajahangir/devnull-tui

## Contact and profiles

- LinkedIn: https://www.linkedin.com/in/raza-jahangir
- Upwork: https://www.upwork.com/freelancers/developerraza
- GitHub: https://github.com/razajahangir
- Substack: https://razajahangir.substack.com
- YouTube: https://www.youtube.com/@razajahangir
- X: https://x.com/developerRaza
