Portfolio
I'm Venetsian Jakimov, founder and principal engineer of Dot Com Services in Bulgaria. I build AI agents and MCP servers that work safely on real business systems, plus the full stack around them. This page collects the work. It's also available as a PDF download, and so is my CV.
13 MCP servers built · about 360 tools across them · 9+ AI models routed · 20+ years shipping software
Reach me by email, on LinkedIn or through the contact page.
Current responsibilities
- Product direction and architecture for our own products (NextAI-SEM, the AI Control Center, Marketing OS, MaiaHost hosting) and for client platforms.
- Designing and building the MCP servers and agent workflows that let AI assistants work on live business data, and owning their safety model.
- Writing code across the stack: React/TypeScript and Next.js front ends, PHP and Python APIs, Node.js MCP servers, MariaDB schemas.
- Running production: Linux servers, deployments, monitoring, backups and security reviews.
- Directing AI coding agents (Claude Code, Codex, Gemini) through static-analysis gates, review steps and runbooks.
How I build AI that touches real data
- Preview before write. Every write tool defaults to a dry run. Where it matters, the preview is the real write inside a transaction that is rolled back.
- The server owns the invariants. Totals are computed from line items, payments need a unique reference so a retry can't double-count, and records are voided or archived rather than deleted.
- Rules live where an agent can't route around them: database triggers, row locks and stale-write hashes, not instructions in a prompt.
- People keep the irreversible steps. Sending, publishing, approving and deleting stay with a person or behind an explicit confirmation.
- Every call is audited: who, which token, which arguments, including refused calls.
- Untrusted text is data. Text typed by clients or fetched from the web is labelled as such and never treated as instructions.
The full reasoning is in How I Let AI Agents Write to Live Business Data.
AI Control Center: self-hosted multi-agent platform
My daily control plane for AI work across all projects. Read the write-up.
- 6 Node.js MCP servers, about 130 tools: tasks, memory, approvals and policy; agent routing and delegation; SSH, SFTP, database and backups; loops; content; governance. Every tool call is logged.
- Model routing: 12 registered agents using 9+ models, with a primary, Codex, OpenRouter fallback cascade and circuit breakers; every attempt logged with cost and latency.
- Memory: a graph in 11 tables with a daily optimizer and weekly consolidation.
- Evals: deterministic checks or an LLM judge per loop, a weekly golden-dataset regression, a model bake-off with a fabrication-drift detector, and a prompt-portability harness.
- Autonomous loops with budgets, entity locks, a dead-letter queue, auto-disable after five runs with no effect, and an approval queue limited to low-risk allow-listed actions.
- Stack: Node.js (MCP SDK), PHP API, React admin, MariaDB, Python.
NextAI-SEM: AI commerce and search-marketing platform
My own product, built since March 2026, with an independent install per client. This site runs on it. Read the write-up.
- 53-tool MCP server: per-user hashed tokens, tools gated by enabled modules, strict schemas, dry-run-by-default writes, and every call logged to a file and a database table. MCP test suites with 590+ assertions.
- Sales chat agent on Claude Sonnet with streaming, prompt caching and a fallback model; one tool that submits an enquiry from the site's published lead form, and refuses without recorded consent.
- Multi-site federation for Google Ads keyword coordination, signed with HMAC-SHA256 with replay protection.
- Stack: PHP 8.3, React + TypeScript, Next.js 16 (static), Python FastAPI, MariaDB.
MCP servers for business systems
One reusable MCP endpoint pattern, applied to each system's own risks.
ICEBOX Mechanical (US HVAC contractor): operations system, 56 tools
Customers, projects, invoices, payments, AR aging, statements, proposals to invoices, work orders, equipment, timesheets, crew scheduling and outreach email. Totals computed server-side, payment references unique per invoice, soft deletes and archiving, and anti-spam rules with a daily send cap enforced in the server. I also built a research store where several AI assistants record what construction drawings specify, with a confirmation quorum, adjudicated verdicts and blind takeoffs so one model can't overwrite another's work.
Billing and contracts portal (Dot Com Services): 17 tools
Draft-only writes; the dry run is the real write followed by a rollback; a row lock plus content hash guards against my own open editor; idempotency keys; per-token rate limits; client-typed text returned as quoted data.
Global Kyokushin Budokai: multilingual content system, 35 tools
Append-only revisions, translations pinned to their source revision with content-hash staleness detection, review policies with approvals by a named person, serialised writes per token and SSRF-safe media import.
MaiaHost hosting platform: 16 tools (TypeScript)
Sites, DNS, domains, mailboxes, databases, files, WordPress, backups and tickets, with OAuth 2.1, role-filtered tools, confirmation gates on critical DNS records and an automatic database snapshot before WordPress updates.
Google Ads write server: 15 tools (Python)
Validate-only dry runs with before and after, CPC and daily-budget caps, new campaigns always created paused, no deletions, and an audit log that maps each change to its inverse for rollback.
Marketing OS: evidence-gated marketing system
Research and campaigns across several brands, where AI drafts arrive as rows and a person approves. Read the write-up.
- 41 MCP tools; every write states its origin and defaults to a dry run on nested savepoints.
- Database triggers reject an angle whose claim isn't backed by dated evidence and block export until the creative, claim and legal check pass.
- Two validation axes: is it true, and does it work.
- Stack: PHP API, MariaDB (85 tables), React 19 + TypeScript + Vite.
Generative media pipeline and local models
A local RTX 5070 Ti (16 GB) wired into the agent platform. Read the write-up.
- ComfyUI as MCP tools with 11 workflow templates for video, stills, image editing, music and colorization, queued with model-family grouping, adaptive polling and bounded resubmission.
- In production: 85 on-model jewellery renders for Vanilliart, product-in-place composites for Peletni Kamini, and ad video with human approval of the stills first.
- Local LLMs on llama.cpp (CUDA): Qwen3, Qwen3-Coder, gpt-oss, Devstral, Mistral, Gemma and MiniCPM OCR, as a private, zero-API-cost agent target.
How I work with AI coding agents
- Claude Code with custom subagents routed by cost: Haiku for read-only reconnaissance, Sonnet for implementation and review. Architecture decisions stay with me.
- PHPStan (level 5, banned calls) and TypeScript gates wired into the coding loop across about 20 repositories.
- Per-project analysis caches and runbooks, so agents start from verified context.
- A multi-agent project tracker that runs the checks itself instead of trusting an agent's report, with every merge needing my approval.
Other production platforms
- Cars4Cars.eu: vehicle-transport marketplace with three React back offices and an Expo driver app.
- TaxiZ: multi-carrier taxi dispatch with OSRM routing and Expo driver and passenger apps.
- JETIS: security-monitoring back office migrated from Delphi/MSSQL, with a real-time alarm dispatch console.
Code walkthroughs and live demos of any of these are available on request.