Aleksey Zhadan · fullstack developer, DevOps · Head of TechPlatform
Systems engineering: infrastructure, AI‑agents, in-house services
I design and deliver systems that keep running for years: an estate of forty hosts, eight products in production and LLM pipelines, all built and maintained by one pair of hands. Available for private contracts.
731Ansible playbooks and 154 roles in the live estate
98services with their own written spec
8own web and mobile products in constant production use
≈40hosts and network nodes across three countries, plus a k3s cluster
Services
What clients order and what they get
Not "consulting hours", but a working system with documentation and a proven deployment.
Infrastructure and DevOps
Servers, virtualisation, Kubernetes, deployment as code. An estate that can be rebuilt from scratch with one command instead of from memory.
Proxmox, k3s, Podman: from a single box to a cluster
Ansible playbooks and roles for every service
Backups, metrics, on-call and alerting
AI agents and LLM automation
Pipelines where the model does the routine work and passes acceptance against written criteria. Runs on free models too.
Multi-agent setups: planner, workers, verifier
Processing of mail, documents, bank statements, tickets
Chat front end in Mattermost and Telegram
Turnkey web services
From the data schema to deployment and a mobile client. My own products have been in production for years; yours will be built the same way.
Python/FastAPI, PostgreSQL, Valkey
TypeScript/Vue front end, Android in Kotlin
Single sign-on via OIDC from day one
Mail systems
Your own mail server instead of somebody else's cloud: domain migration without losing a single message, reputation kept, LLM-based anti-spam.
Stalwart: JMAP, IMAP, SMTP, webmail
DKIM/SPF/DMARC published from the zone automatically
Large mailboxes sorted out by models
Networking and access from any country
A private network spanning several countries: services reachable from any device, and a broken link never cuts off management.
MikroTik, WireGuard, per-domain routing
Backup management channel
Self-service allow lists through a bot
Single sign-on and secrets
One account for every service in the estate and a secret store the deployment reads passwords from by itself.
Own OIDC provider, with Forgejo, Nextcloud and mail connected
OpenBao: secrets out of the repository and out of people's heads
Role-based access, revoked with a single edit
Products already in production
Eight systems in constant production use
Not demos and not prototypes: each one handles live data every day.
LiveMail
Own webmail on Stalwart/JMAP: millions of messages, search, rules, meta folders for SMS and calls.
Built withStalwart, JMAP, Valkey cache, OIDC sign-in
ResultReplaced a paid Zimbra panel
Anti-spam and mailbox sweep
An LLM pipeline: mail and SMS are grouped by contact, each item gets a model verdict and a decision.
Built withSeveral models, batches with a daily cap
ResultClean-up runs by itself, with an emergency stop
LiveFinance
Bank statement collection and bookkeeping: automatic parsing of PDFs and APIs, balance history.
Built withPDF and bank API parsers, PostgreSQL
ResultSpending analytics without manual entry
LivePhotos
Media library: photos and video with people recognition and shot scoring.
Built withImport from external sources, recognition models
ResultBest shots surface by themselves, people are found by face
LiveHistory
A chronicle of movement and presence: phone, car, geodata.
Built withPhone, StarLine, geodata
ResultOne source of events instead of scattered logs
SyCraft IdP
Own OIDC provider: single sign-on for every service in the estate.
Built withOIDC, with Forgejo, Nextcloud and mail connected
ResultOne account for everything, access managed in one place
SyCraft Control
Android app: contact storage, synchronisation of SMS, call log and calendar.
Built withKotlin, server synchronisation
ResultRemote administration of the phone
AI agent orchestrator
A multi-agent system on Kubernetes: task assignment, workers, and a verifier for answer quality.
Built withk3s, free models under acceptance, Mattermost and Telegram
ResultTasks are solved in batches without spending the paid subscription
Architecture cases
Problem → solution → result
Four problems usually written off as "too hard, let's leave it as it is".
01
Mail moved out of someone else's cloud
15,000 messages in the archive
41 addresses recovered
2 domains with 20 years of history
Problem
Two domains with twenty years of history lived on an external mail service. The provider would not hand over the list of mailboxes, so there was nothing to migrate "as is".
Solution
The address list was reconstructed from the mail archive: 15 thousand messages, 41 addresses. The domains moved to a self-hosted Stalwart, addresses recreated as aliases and lists. DKIM/SPF/DMARC are published automatically from the zone the server itself serves.
Result
Migration without losing a single message, domain reputation intact. New domains are now added with one command.
02
AI sorting the mailbox instead of manual clean-up
47,000 messages in the mailbox
Several models per message
Emergency stop and a daily cap
Problem
Forty-seven thousand messages cannot be sorted by hand, and a wrong deletion cannot be undone. The automation had to be trustworthy enough to delete.
Solution
A pipeline: deduplication, grouping by contact, verdicts from several models, and a decision only when they agree. Work goes in batches with a daily cap and an emergency stop.
Result
The mailbox sorts itself out. Disputed cases go to a human as one list instead of message by message.
03
Multi-agent development on free models
275,000 tokens per batch
0 paid subscription spend
Acceptance against written criteria
Problem
Working with LLMs hits two walls at once: the price of paid models and the answer quality of free ones.
Solution
Tasks are split into parts and handed to free models. The result goes through an independent verifier and acceptance against criteria written down in advance.
Result
One batch delivers 275 thousand tokens of free-model work and zero paid subscription spend, with acceptance still in place.
04
A private network spanning three countries
3 countries in three time zones
2 management channels
Proxy with per-domain routing
Problem
Access to services and external resources from three countries. Some resources are geo-restricted, others are reachable only from inside the estate.
Solution
MikroTik and WireGuard, a split proxy with per-domain routing, and a backup management channel in case the main one dies. Self-service allow lists through a Telegram bot.
Result
Services are reachable from any of the client's devices. Losing the main link does not cut off management.
More cases
Autonomous executor with a reviewer
Built an executor agent that takes jobs from a queue, writes steps in chat and hands work off against written acceptance criteria. A second agent reviews the result and keeps a named log of irreversible actions.
Telegram bots and a chat bridge
Built Telegram bots on Bot API and MTProto clients, one process per account. They can read and export history. Also a bridge to a work chat and a self-serve allow-list bot.
Kubernetes cluster on own machines
Ran a k3s cluster on own machines with dozens of services. Config is code, rollout goes one host at a time so the rest stays up.
Ansible playbooks with a live proof
Wrote about 200 Ansible playbooks. Each rollout checks syntax, goes one host at a time, and is proven by a command, not by the word done.
Monitoring that lifts silent hosts
Built monitoring on Grafana and VictoriaMetrics. A watcher spots silent hosts and brings a down machine back through neighbors and the hypervisor.
Visual duplicates page with origin labels
Built a visual-duplicates page: similar frames are grouped, tagged by origin, and can be unmarked. Backend and UI are live; a control set of hundreds of frames grouped cleanly with no key loss.
Auto tunnel request when a site is geo-blocked
Built geo-block triage: domains are taken from the page and scripts, each is probed from two regions, and matching templates become a ready tunnel request. On a live site, block from one region and OK from the other produced the request automatically.
Cache auto-warm: cold start from seconds to fractions
Built auto-warming for data missing from cache: a background loop warms the needed slices ahead of time. After a full flush, main pages are warm again in fractions of a second instead of a long cold build.
Recent work
Visual duplicates page with origin labels. Built a visual-duplicates page: similar frames are grouped, tagged by origin, and can be unmarked. Backend and UI are live; a control set of hundreds of frames grouped cleanly with no key loss.
Cache auto-warm: cold start from seconds to fractions. Built auto-warming for data missing from cache: a background loop warms the needed slices ahead of time. After a full flush, main pages are warm again in fractions of a second instead of a long cold build.
Auto tunnel request when a site is geo-blocked. Built geo-block triage: domains are taken from the page and scripts, each is probed from two regions, and matching templates become a ready tunnel request. On a live site, block from one region and OK from the other produced the request automatically.
Migration of email infrastructure for two domains to a dedicated server. Migrated mailboxes and mailing lists from external hosting to a self-hosted mail server. Created 2 domains, 10 aliases, and 47 mailing lists; restored MX, SPF, DMARC, and DKIM records. All 57 addresses accept mail, test messages delivered, and delivery verified from external hosts.
Context window tuning: cache use down about 75%. Traced why cache grew on long sessions. A small share of long sessions drove most of the load, so pruning was tuned for that shape. Cache use dropped by about three quarters for the same workload.
Stack
The tools it all rests on
Platform
Linux
Proxmox
Kubernetes (k3s)
Podman / Docker
Ansible · 731 playbooks
Data
PostgreSQL
Valkey / Redis
RAG and vector search
Development
Python / FastAPI
TypeScript / Vue
Android / Kotlin
Mail, access, web
Stalwart (JMAP / IMAP / SMTP)
OIDC / OpenBao
Nginx / Caddy
Networking
MikroTik
WireGuard
LLM
Claude
Qwen
Local models on llama.cpp
Observability and CI
Grafana / VictoriaMetrics
Forgejo / CI
How I work
Four steps from first email to delivery
Every result is proven by a run and by logs, not by the words "it works".
1
Understanding the task
What the outcome must be, what is in the way, where the data lives and who the users are. We work through your material, not through generalities.
2
Architecture and quote
The solution diagram, the list of work and the acceptance criteria are written down before anything starts. The quote is tied to milestones, not to hours.
3
Work with proof
Every stage closes with a run: command output, logs, screenshots. You see what is done before you have to ask.
4
Handover and support
Documentation, access, reproducible deployment. The system lives without me, and if you want, I stay on support.
FAQ
Short answers to common questions
Same numbers and steps as on the page — easy to quote in search or for an assistant.
What does SyCraft do?
Systems engineering end to end: infrastructure and DevOps, LLM-based AI agents, web services, mail and networks. Every result is proven by a run and logs, not by claims.
How much experience and what is already in production?
20 years in engineering, 731 Ansible playbooks and 154 roles, 98 documented services, 8 in-house products in continuous production, and about 40 hosts across three countries plus a k3s cluster.
How does an engagement work?
Four steps: scope the task, architecture and estimate with acceptance criteria, work with proof at every stage, then handoff with documentation and reproducible deploy.