Most AI projects die in production. Mine don't.
More than 80% of AI projects never reach production. RAND, 2024
150+ in production, still running. The demo is the easy part. Systems die later, on real data, at real volume, on the edge cases nobody thought to test. I build the dedup, the guardrails, and the failure handling nobody films, because that's what decides whether something survives week two.
The model stopped being the hard part a while ago. The hard part is working out what one person does all day, then building something that does it for them and keeps doing it long after launch. I came to this through linguistics, the study of how meaning gets built and how it falls apart. Making an AI system behave is the same problem. Precise language in, predictable behavior out. Plenty of people can write the code. The rare part is taste: knowing what to build, what to keep boring and deterministic, and what to leave alone. Most of my best decisions were things I talked someone out of.
Three currents, often running at once
AI Automation
Workflows that triage, enrich, decide, and act on real data. I build deterministic systems where reliability is the point, and agentic ones where the reasoning earns its cost. Choosing between the two is most of the work.
Marketing & RevOps
I close the distance between marketing activity and revenue. I wire the GTM stack end to end and report on what moves the number, not just what's easy to count. Direct-response instincts in the Halbert/Kennedy tradition, applied to systems instead of single letters.
Language & Structure
Trained linguist, phonetics specialization. I write prompts as specifications rather than requests. Precision at that step is what everything downstream depends on.
What "production-grade" actually means
A demo runs once, on stage. A system runs every day, on real data, when no one's watching. The difference is dedup logic, hallucination checks, brand-voice enforcement, and false-positive reduction.
Principles I build by
→ Specificity beats generality
General-purpose AI rollouts look impressive and go unused. Systems built around one real workflow get used. I'd rather solve one person's task completely than gesture at solving everyone's.
→ The boring parts are the product
Deduplication, validation, error handling, voice enforcement. Nobody demos these. They're the reason a system survives contact with reality.
→ Deterministic until proven otherwise
Agentic architecture is a tool, not a default. Most problems want a reliable pipeline. I reach for autonomy last, not first.
→ Language is the interface
What an AI system produces is capped by the precision of what you feed it. That's a linguistics problem before it's an engineering one, and it's where most implementations bleed.
Four surfaces of a GTM stack, and what I built on each
Pipeline generation, signal and routing, data and context, intelligence and enablement. Each surface gets one system described in full, with the rest of that surface underneath it. All anonymized: no clients, no revenue figures. The logo behind a system is the least interesting thing about it.
Turning an idea of who you want to reach into contacts a rep can actually work, without a data team standing in the middle of it.
You type a plain-English description of who you want to reach. The system parses it into structured targeting, pulls and enriches matching prospects, writes a multi-step sequence in a defined brand voice, checks its own output for hallucinations, dedupes against the CRM, and pushes it live. Sentence in, campaign out.
The unglamorous middle is where the value sits. Enrichment runs after the filters, not before, so credits only go to prospects that already cleared geography, freemail, and role checks. That cut data cost per campaign by about two thirds. Bad-fit contacts get diverted rather than dropped, because a list you can audit beats a list that looks clean.
This is not an agent, and that was deliberate. The LLM does the language; the orchestration does the thinking. Autonomy would have demoed better and broken more.
Dormant-database revival
A six-stage pipeline read 22,191 cold CRM records against a written ICP and returned 391 contacts across 72 accounts, each with a verified buying signal and a named buyer, capped at ten per account so no one logo swamps the sequence. A human audited every signal before it counted. The whole run cost under three dollars in model calls. Compute was never the constraint. What matters is whether the CRM holds enough firmographic detail to reason over, and without that you're asking a model to guess and calling it enrichment.
Thin-market sourcing
A scraper CLI with typed, schema-validated extraction for the segments the standard data vendors cover badly. When coverage is the bottleneck, buying more credits doesn't fix it.
Catching buying intent while it's still intent, deciding whether it's real, and putting it in front of a rep before it cools.
Ten high-ticket industrial product lines, each with its own tells: the spec page read three times in a week, the case study downloaded, the comparison guide opened, the webinar attended. The marketing automation platform already sees all of it and files it as activity. Activity isn't intent. This weights every action by signal strength and by the size of the deal behind it, then decays the scores, so "hot" means hot now and not hot in March.
A score still isn't a lead. Before anything reaches a person, each signal is read against live CRM history: internal traffic, a contact we surfaced last month, an existing customer re-engaging, an open opportunity a teammate is already working, or a real conversation about this exact product in the last ninety days. Only what survives gets enriched, researched against the open web, and assembled into one alert that says who they are, what they're looking at, and why the system thinks it's new.
False alarms cost more than missed leads. Ping a rep about an account a colleague already owns and they stop trusting the system inside a week, and after that every real alert reads like noise. So qualification fails closed, surfacing only on evidence of net-new interest, while enrichment fails open, because a lookup hiccup should never bury a real lead. Research runs only after a contact is independently verified. An unmatched name goes straight to notification rather than handing a guess to a model that would happily invent a biography.
I built this on ActiveCampaign because that's what the stack ran, but nothing in the architecture is specific to it. The platform is a sensor and a tag store; the same wiring sits on HubSpot or Marketo without the logic changing. And it compounds. Every campaign, landing page, and content asset you ship afterwards becomes another sensor feeding the same engine.
The outbound twin
Same philosophy pointed at correspondence instead of web behavior. An LLM classifier reads inbound mail for expansion signals inside accounts we already serve. Detection is easy. Restraint is the hard part. A classifier that fires on everything is noise wearing a useful costume, so the whole thing is tuned around what it declines to surface.
The layer every other system reads from. Get it wrong and every tool invents its own version of the truth.
A prompt library collects answers. This holds the source of truth. One repo of structured markdown (ICP, personas, voice, the claims the company never makes) composed in layers and injected into every AI workflow in the org. Anyone can pull it from Slack with a slash command. Nobody can fork it in private.
Hallucination is a context problem before it's a prompt problem. A model fills gaps with plausible fiction when nobody hands it the source of truth. Versioning that truth like code turned drafts that needed three rounds of correction into drafts that come back clean.
The production system stays private, so I rebuilt the architecture in the open. It's a runnable reference with an assembly engine, CI budget enforcement, and a fictional company in place of any client. Clone it and run it.
Inspect the reference buildA gateway in front of the CRM
Nothing I build writes to Salesforce directly. Reads and writes go through a secured service-account gateway, so access is scoped and revocable in one place instead of scattered across a dozen workflow credentials. Boring, and the reason security signs off.
Lead intake as an application
A spreadsheet template that everyone downloaded, filled in wrong, and re-downloaded whenever it changed, rebuilt as a small web app that validates against live CRM state at entry. Most internal tooling wins are like this. You don't make the tool smarter, you make it harder to use wrong.
Research that arrives before anyone has to go looking for it, in the place they already work.
A rep types a company name into the channel they already live in and gets a structured brief back seconds later: ICP fit, likely buyers, application match, recommended products, and the thing most research tools skip, the relationship. Net-new or existing? What do they already own? Is a teammate working open pipeline there? The command fans out in parallel, reads the company's public footprint from a live research API, pulls demand-side truth from the CRM, composes both against a version-controlled context layer, and posts back to the same thread.
Most research bots summarize a website. The work here was the join. Supply-side signal from the open web meets demand-side reality from the CRM, so the brief can warn a rep they're about to walk into a deal a colleague already owns. Context files are read from a versioned repo at request time, never pasted into a prompt, so one edit propagates to every brief the team will ever run. Customer data stays walled off from model training by default. Nobody asks for that one, and it's why the system got approved.
Weekly competitive dossier
Seven sources per competitor (site diffs, newsletters, RSS, and four social surfaces) collected on a schedule and synthesized against our own positioning rather than summarized in isolation. The output is three sections: what's happening, what it means for us, and what to do about it. Competitive intel goes stale because keeping it current is a chore, so I stopped making it one.
Video intelligence
Scrapes the best-performing videos in a niche over the last ninety days, ranked by outlier score against each channel's own baseline rather than raw views. A million views from a channel that always does a million tells you nothing. It pulls the transcripts, writes a breakdown card per video, then synthesizes a winning-formula document across all of them: the hooks, structures, and angles that did the work. Content strategy from evidence rather than instinct.
RAG assistant + AEO/GEO pipeline
Two halves of one problem: getting grounded answers out of a body of source material, and structuring published material so answer engines surface and cite it correctly. Retrieval is where most RAG fails, because a fluent answer over the wrong chunk is the most expensive kind of wrong. So the effort went into grounding and citation rather than the generation layer. The public-facing half turned answer engines into a measurable referral channel that compounds year over year.
Working together
I take a small number of engagements. The work is project-based: fixed scope, a shipped system, and documentation so you own what we build. If you're running a B2B sales or marketing motion and the top of your funnel is manual, expensive, or both, that's the problem I solve.
Start with the pipeline diagnosticEverything above is anonymized. This one you can play.
Client work stays private. Lahjat doesn't. I designed and shipped it end to end, and it's the clearest proof I have that the linguistics training does real work.
A GeoGuessr for Arabic speech. Hear a clip, drop a pin, find out where the voice is from.
The interesting decision is in the scoring. Arabic dialects don't follow national borders, so the data model doesn't either. Cities sit in roughly 37 linguistically motivated clusters, so guessing Mosul for an Aleppo clip scores better than guessing Baghdad, even though Baghdad is closer on the map, because Mosul and Aleppo share qeltu features Baghdad lacks. Geography is the obvious model. It's also the wrong one.
Every guess feeds an accuracy-weighted, crowd-tagged corpus of dialect audio as a byproduct. The thing teaches while it collects.
Play Lahjat ↗Recent writing
Long-form notes on the systems above: what they do, the decisions behind them, and what broke. Not a recap of this week's AI headlines.
Signal,
Not Noise
One real system per issue: what it does, the architecture decision behind it, and what broke before it worked. If you build automation for a living, or want to, this is tuition I already paid, free. No hype, no headline roundups.
Say hello
Have a project, a question, or just want to talk shop? Send a message and I'll get back to you personally, usually within a day or two.