AI Integration & Full-Stack Engineer

I ship AIand the apparound it.

I build the whole thing — the model that runs it, the application that serves it, and the interface people actually touch.

Next.jsllama.cppReactGGUFTypeScriptOllamaTailwindvLLMGSAPComfyUIThree.jsDiffusersWebGLPyTorchNodeCUDAFastAPITensorRTPostgresElectronVercelQuantizationNext.jsllama.cppReactGGUFTypeScriptOllamaTailwindvLLMGSAPComfyUIThree.jsDiffusersWebGLPyTorchNodeCUDAFastAPITensorRTPostgresElectronVercelQuantization
Three fields, one person

Most people do one of these.

01AI Integration

Make the model run at all

Open weights are not software. Getting one onto real hardware means picking a quantization, budgeting VRAM against context length, and wrapping the result in something that answers a request without falling over because the GPU is already busy.

llama.cppvLLMOllamaPyTorchCUDAGGUF
02Full-Stack Development

Wire it into a real application

The model is one service among several. It still needs routes, a data layer, auth, a queue for the jobs that take a minute, and an honest error state for the day it is down. This is the part that turns a demo into something a business can actually depend on.

Next.jsReactTypeScriptNodeFastAPIVercel
03Web & UI Design

Make it worth looking at

Nobody trusts software that looks unfinished. Layout, type scale, motion that explains rather than decorates, and the states nobody remembers to draw — empty, loading, failed. The page you are reading is the argument: every pixel and every scroll on it is mine.

TailwindGSAPThree.jsWebGLFigma
01 / Inference
02 / Product
03 / Interface
Selected work

What is actually on the machine.

Not case studies. 5 things I have built or keep running — what it took to make each one start, and where you can go look at it.

adan@rtx4090:~/work

Each process reports its own measure — resident VRAM on a 24 GB card for the inference work, Lighthouse and throughput for the full-stack builds. Approximate, and measured here rather than quoted.

SD-Native

AI Integration · 2025 · shipped

Stable Diffusion as a desktop app, not a browser tab

$sd-native --backend a1111
backend127.0.0.1:7860 reachable
torch2.4.1 + cu121 · cuda:0
checkpointsdxl_base · fp16
ready — ui attached, queue idle

A native front end over an AUTOMATIC1111 backend — model switching, live preview while a job renders, a job queue, and VRAM-aware defaults so a smaller card degrades instead of falling over. The person using it never opens a terminal.

PythonAUTOMATIC1111Desktop UICUDA
Source on GitHub

adankhan.net

Web & UI Design · 2026 · live

This site — designed, built and deployed end to end

$next build --turbopack
webgl scenes2 · react-three-fiber
scrolllenis + scrolltrigger
reduced motionhonoured on every tween
deployed — adankhan.net, tls valid

Next.js on the App Router with React 19, two WebGL scenes rendered through React Three Fiber, GSAP ScrollTrigger driving every pinned section, and Lenis smoothing the scroll. Design, build, contact backend, DNS and deploy are all mine. Everything you are currently looking at is the deliverable.

Next.jsReactTypeScriptWebGLGSAP
You are here

Local LLM Runtime

AI Integration · 2025 · running

One 4090 behaving like an inference server

$llama-server -m qwen2.5-32b-q4_k_m.gguf -ngl 65
quantizationQ4_K_M
gpu layers65 / 65 offloaded
kv cachef16 · 8192 ctx
ready — streaming on :8080

Ollama, llama.cpp and LM Studio driving Qwen and DeepSeek builds from one place. GGUF conversion, quantization chosen per model instead of per habit, and layer offload tuned until the weights and the context both fit on the card.

llama.cppOllamaGGUFLM Studio
More on GitHub

Headless ComfyUI

Full-Stack Development · 2024 · in use

Node graphs that run with no browser open

$python run_graph.py --headless upscale_batch.json
graph34 nodes · 6 custom
batch128 items · resumable
browsernot required
done — outputs written, state checkpointed

ComfyUI workflows executed as a job rather than a UI session — graphs built programmatically, custom nodes where the stock ones run out, and batches that survive being interrupted and pick up where they stopped.

ComfyUIPythonAutomation
More on GitHub

Integration Rescue

Full-Stack Development · ongoing · open

The job people actually hire me for

$python -c "import torch; print(torch.cuda.is_available())"
False
driver cuda12.4
torch buildcu118 · mismatch
rebuildtorch 2.4.1 + cu121
True — model loads, zero code changed

Someone has a model, an application, and a wall between them. It is almost always CUDA against the wrong torch build, a checkpoint in a format nothing will load, or memory that fragments an hour into a run. Ongoing client work.

CUDAPyTorchDebugging
Connect on LinkedIn
How it actually goes
01Weights

It starts as 30GB of floats

A raw checkpoint is not a product. It is a directory of tensors with no interface, no memory budget and no idea what hardware it is about to meet.

02Quantize

Squeeze it onto the card

GGUF conversion, 4-bit and 8-bit quantization, KV-cache tuning, layer offloading. The difference between 'out of memory' and 60 tokens a second.

03Serve

Wrap it in something callable

llama.cpp, Ollama or a custom FastAPI server. Streaming responses, batching, warm starts, graceful failure when the GPU is already busy.

04Ship

Hand it to a human

A web app or a desktop app with a real interface. Progress bars, cancellable jobs, model management. The user never learns what a tensor is — that is the whole point.

01 / Weights
02 / Quantize
03 / Serve
04 / Ship
What I do

9 things people actually hire me for.

Three of these are about making a model run. Three are about the software around it. Three are about whether anyone enjoys using the result. Most projects need at least one from each column.

AI Integration

03

01Local LLM deployment

Get open models running fast on your own hardware — llama.cpp, Ollama, vLLM, GGUF quantization, GPU offload tuning.

llama.cppOllamaGGUFvLLM

02Diffusion pipelines

Stable Diffusion and ComfyUI wired into real applications: headless graph execution, custom nodes, batch and queue systems.

ComfyUIA1111Diffusers

03Inference optimization

Profiling and fixing the slow path — CUDA issues, VRAM fragmentation, precision choices, throughput versus latency tradeoffs.

CUDAPyTorchTensorRT

Full-Stack Development

03

01Full-stack web applications

Next.js front to back: routing, route handlers, auth, the data layer, and a deploy that goes out when you push. Built to be handed over, not babysat.

Next.jsReactTypeScriptPostgres

02AI features in existing apps

Dropping generation, chat or search into a codebase that already exists — streaming endpoints, job queues, retries, and sane behaviour when the model is down.

StreamingQueuesWebhooks

03AI desktop applications

Python inference backends packaged behind a native UI, so non-technical users get a double-clickable app instead of a README.

ElectronPySideFastAPI

Web & UI Design

03

01Interface & design systems

Type scale, spacing, colour and component states defined once and reused, so the tenth screen still looks like the first one.

Design systemsTailwindFigma

02Motion & 3D on the web

Scroll-driven storytelling, WebGL scenes and interaction that has a reason to exist — held to a frame budget, not bolted on at the end.

GSAPThree.jsWebGL

03Performance & accessibility

Real numbers on real devices: layout that holds down to a small phone, keyboard and screen-reader paths that work, and motion that backs off when the OS asks.

Core Web VitalsA11yResponsive
About

An AI feature is only as good as the app around it.

The stack, top to bottomdepth ↓
AIFull-stackDesign

That is the whole reason I work across three layers instead of specialising in one. A model that answers in 400ms is worthless behind a form that loses your input. A beautiful interface is worthless if the inference behind it dies on the second concurrent user. The failures live at the joins.

So I have spent my time in the unglamorous parts of all three: CUDA version conflicts and VRAM fragmentation at the bottom, hydration errors and cache headers in the middle, and at the top the type scale and the empty state — the details that decide whether software feels finished or feels like a prototype.

What that buys you is that there is no handoff. No waiting while the backend team and the frontend team agree whose bug it is. One person owns the path from the weights on disk to the pixel on the screen.

3 layers
Interface · application · inference
24 GB
RTX 4090 — local inference lab
End-to-end
Weights on disk → pixel on screen
CurrentlyTaking on new work
Remote · worldwideEvery message gets a reply
Contact

Have something to build, or something that stopped working?

Tell me what you are trying to make, or what is currently in the way. A model that will not fit on the card, a product that needs a front end, an integration that refuses to behave — I reply to everything.