DAL --:--
03 / Work — case studies

Case studies

Problem, approach, and the numbers that came out the other side.

01 · 2026
AISearchPython

Neural Search Engine

Hybrid retrieval for technical documentation, fully local. Every query runs dense BGE-large and SPLADE sparse retrieval in Qdrant and fuses the two rankings with weighted Reciprocal Rank Fusion. A LangGraph router and a local Gemma model turn the results into cited answers.

0.371nDCG@10 on BEIR CQADupStack test (BM25: 0.293)
0.761Recall@100, dev-tuned weighted RRF
50msp50 retrieval: both encoders, Qdrant, fusion
0.2msp50 RRF fusion
● live demo · hybrid retrieval · weighted RRFtype a query · try an error code or a file name
rrf_k
wdense 0.75wsparse 1.25reasons: lexical:error_code
Sparse · SPLADE
nginx returns 502 behind a reverse proxy4 terms
Redirect www to non-www in nginx1 term
.htaccess 301 redirect from http to https0 terms
Dense · BGE-large
nginx returns 502 behind a reverse proxy0.49
Redirect www to non-www in nginx0.11
sitemap.xml not indexed in Search Console0.02
Fused · weighted RRF k=10
nginx returns 502 behind a reverse proxy0.1818
Redirect www to non-www in nginx0.1667
.htaccess 301 redirect from http to https0.1497
BEIR CQADupStack · webmasters · test nDCG@10your setting · 0.365
BM25 baseline0.293
SPLADE only0.312
Dense only · BGE-large0.360
RRF equal · k=600.350
RRF equal · k=100.363
RRF dev-tuned w=(1.5, 0.5)0.371
RRF dynamic · k=100.365
p50 · dense 19.5 + sparse 9.2 + Qdrant 18.8 + fusion 0.2 → 50.1 ms
Repository ↗
§1 Problem

Engineers search docs with both intent ("why does my proxy return 502") and exact tokens (flags, error codes, file names). Dense models handle the first, sparse models the second, and neither handles both.

§2 Approach

Two indexes: 320-token chunks stored twice in Qdrant: 1024-d BGE-large vectors in HNSW and SPLADE sparse vectors in an inverted index

Fusion: Weighted RRF with 1-based ranks, k = 10 selected on the dev split, computed client-side after probing Qdrant’s built-in RRF

Dynamic weights: Queries with identifiers, paths or error codes lean towards SPLADE; natural-language questions lean dense

Answers: A router picks the local index or SearXNG web search; Gemma 4 12B answers only from numbered passages and cites them

§3 Results

0.371 — nDCG@10 on BEIR CQADupStack test (BM25: 0.293)

0.761 — Recall@100, dev-tuned weighted RRF

50ms — p50 retrieval: both encoders, Qdrant, fusion

0.2ms — p50 RRF fusion

↖ fuse ranks, not scores

02 · 2026
AIEvalsPython

LLMWatch

Self-hosted LLM observability and evals. Logs every model call with tokens, latency and cost, traces agent runs step by step, and compares models and prompts with statistics that say whether a difference is real or noise.

10evaluators, from regex to LLM-as-judge
10,000paired-bootstrap resamples per comparison
1 cmddocker compose up: API, UI and SQLite on one port
● live demo · eval comparisonrun · flip cases · watch the statistics
paired cases
baseline · v6
candidate · v7
statuspress run
click a candidate cell to flip it
Repository ↗
§1 Problem

"Model B looks better" is usually decided on a handful of examples. Teams need to know whether a change is a real improvement, what it costs, and when to fail CI.

§2 Approach

Suites: YAML prompt templates, cases and weighted assertions; every edit saves an immutable version

Comparisons: Paired-bootstrap 95% CI for the score and McNemar’s test for pass/fail; below 10 paired cases it refuses to declare a winner

Cost: Provider-reported token usage times your own prices; unpriced models are shown as unpriced, not $0

CI: The llmwatch CLI exits non-zero only on a significant regression against a baseline run

§3 Results

10 — evaluators, from regex to LLM-as-judge

10,000 — paired-bootstrap resamples per comparison

1 cmd — docker compose up: API, UI and SQLite on one port

↖ no winner without significance

03 · 2026
SystemsGoPostgreSQL

Baton

A distributed task orchestrator in Go. Workflows are YAML DAGs; Baton schedules their steps on workers, retries with backoff, compensates completed steps when a workflow fails, and survives worker and orchestrator crashes without losing or double-running work. PostgreSQL is the only state.

~450claimed tasks / s on a laptop
~10sleader failover (lease TTL)
204labeled failures in the decision eval
● live demo · order-fulfilment workflowinject failures · submit
charge pending payments.charge
→
reserve pending inventory.reserve
→
ship pending shipping.create
→
baton-1 · leaderbaton-2 · followerw1 · idlew2 · idlew3 · idle
$ batonctl status wf_7f3a --events
leader baton-1fence 7workflow not submittedPostgreSQL is the only state
Repository ↗
§1 Problem

Coordinating multi-step workflows across crashing workers and replicas usually means either lost work or work that runs twice.

§2 Approach

Event log: Every state change is appended in the same transaction as the tables it updates; replaying the log reproduces them exactly

Fenced leader: A Postgres lease with fencing tokens; a trigger rejects writes from a stale leader

Claims: SELECT … FOR UPDATE SKIP LOCKED under heartbeated leases; results accepted only from the current attempt

Sagas: If a step fails for good, completed steps are compensated one at a time, last first

§3 Results

~450 — claimed tasks / s on a laptop

~10s — leader failover (lease TTL)

204 — labeled failures in the decision eval

↖ the log is the source of truth

04 · 2026
AIVideoC++

video2vec

Turns lecture and tutorial videos into time-aligned transcripts, on-screen text and embeddings for LLMs. A C++20 library and CLI toolset on FFmpeg, whisper.cpp, Tesseract and ONNX Runtime, with no Python at run time.

45swindows with 5s overlap
mstimestamps on words, frames and embeddings
0Python dependencies at run time
● live demo · lecture → .vecscrub or play the video
01:32 / 03:00
Speech · whisper.cppMomentum adds a fraction of the previous step.
Screen · Tesseractv ← βv + ∇L · θ ← θ − αv
Patches · ONNX
6 text-line · frame 01:32
$ load-to-llm --format
## w3 · 01:20–02:05> screen: v ← βv + ∇L · θ ← θ − αv[01:27] Momentum adds a fraction of the previous step.
window 3 / 5no overlapframes kept 2 / 6 · of 13 sampled45s windows · 5s overlap · 1 frame/s
Repository ↗
§1 Problem

Search and RAG over recorded lectures needs more than a transcript: what was on screen, and the exact moment an answer came from.

§2 Approach

Decode once: FFmpeg resamples audio to 16 kHz mono and samples one frame per second into overlapping windows

Read the screen: Tesseract reads up to 6 selected frames per window; an ONNX image model embeds one patch per text line

Transcribe: whisper.cpp word timings shifted onto the media timeline

Package: A versioned, bounds-checked .vec file; load-to-llm renders it as Markdown, JSON or text

§3 Results

45s — windows with 5s overlap

ms — timestamps on words, frames and embeddings

0 — Python dependencies at run time

↖ keep everything, point back to the moment

Let's build · case study 05

Architect the next
case study.

presets
pipeline · tap a block to remove it
add
236msest. p99 latency
$720est. infra / month
5network hops
99.75%end-to-end availability
sends this architecture to Ömer as your brief
◇ Discovery
ulucan.dev / v3 / boot[ 000 / 100 ]
000