Belfast, Northern Ireland · Python developer · Microsoft Certified AI-102

Vladislav Sorokin

I build complete systems and keep them running: live products, AI infrastructure, desktop tools and device provisioning.

Most of my work is the whole loop: data ingestion, the engine, the API, the web and mobile clients, the deploy, and the tests that keep it correct. Python is my main language. I also ship in TypeScript, C#/.NET, PowerShell and Kotlin when the job calls for it.

$ status --portfolio
● 2 apps live on Google Play
● 2 web products in production
● 3 plugins in the Obsidian directory
● 1 package on PyPI
● 101 repositories, 55 private
5,800+
contributions in the last 12 months
12,600+
Obsidian plugin downloads
~370k
lines of non-test code in the main projects
3,500+
automated tests across them
2
Android apps on Google Play
1
merged upstream fix in an Obsidian plugin
Private

Much of my strongest work is in private repositories: products that earn money and workplace tooling. They are described here as faithfully as the public ones. I wrote each description from a review of the source, not from its README. I can walk through any private code in an interview.

LiveOpen sourcePrivateIn development
Live products

Shipped, deployed, on Google Play

Two UK consumer products, each with a web app, an Android app, payments and an admin back office. I built and run them alone. Both work with money or public data, so correctness and data quality come first.

FuelScope

Finds cheap fuel across the UK, using the government's live fuel price feed.

Live · Web + AndroidPrivate
  • Sync engine for the government API: OAuth token lifecycle, full and incremental syncs, a single-flight lock, and a Postgres baseline so a restart doesn't sync against nothing.
  • Data-quality pipeline: IQR outlier filtering per fuel type, with motorway, island and Northern Ireland stations as separate segments. Detectors for ghost, stale, inverted and misplaced prices.
  • PostGIS geo search with switchable geocoding providers. A separate worker sends price alerts through FCM and Web Push.
  • Stripe subscriptions, magic-link and Google sign-in, AdMob, and analytics with bot detection.
~54klines
935commits (web + app)
40SQL migrations
5services
Next.js 16 · React 19 · PostGIS · Redis · Expo · Docker

TaxScope UK

UK tax calculators for PAYE, NI, limited companies, IR35, dividends and more.

Live · Web + AndroidPrivate
  • Implements HMRC's PAYE Tax Table Routines spec v24.0 in exact Decimal arithmetic. Covers tax-code parsing (S/C prefixes, K codes, W1/M1), cumulative and non-cumulative bases, and the statutory rounding rules.
  • Checked against HMRC reference vectors for each tax year.
  • A salary/dividend optimiser that tests only the kink points of the piecewise-linear take-home curve, so it gives an exact answer instead of a grid-search estimate.
  • The Android app runs a line-by-line TypeScript port of the engine offline. Golden fixtures exported from the Python engine keep the two in step.
~25klines (web + app)
~260tests
393commits
8calculators
Django · DRF · decimal.js · React Native · GitHub Actions

MicroAccount

Bookkeeping and tax for single-director UK limited companies.

Private
  • Multi-tenant, with one database per company. Invoice data is extracted by an LLM (Claude vision), with vendor-specific parsers and SHA-256 de-duplication.
  • Keeps the director's loan account ledger, imports bank CSVs, and computes Corporation Tax with marginal relief and the CT600 pack.
  • Third-party credentials are encrypted at rest with Fernet key rotation. Registration is by invitation only, auth routes are rate-limited, and deploys go out only after lint and tests pass in CI.
~12.5klines
~110tests
109commits
FastAPI · SQLAlchemy · Anthropic API · fpdf2 · Stripe · GitHub Actions
AI infrastructure

A self-hosted MCP stack I use every day

An authentication gateway that sits in front of my own MCP servers. Any AI client, whether Claude, ChatGPT or Codex, reaches my knowledge bases, WhatsApp and SQL tools through one OAuth-protected endpoint.

AI clientsClaude · ChatGPT · Codex
AuthMCP GatewayOAuth 2.1 · PKCE · DCR · routing · audit
RAG Knowledge Baserag_* tools
WhatsApp MCPwa_* tools
SQL Cortex · Search Console · Play Consoleother backends

AuthMCP Gateway

An authenticating proxy that merges several MCP servers into one endpoint.

Open source · PyPI
  • Proxies the full MCP protocol (tools, resources, prompts, completions) with per-backend namespacing and Streamable-HTTP session tracking.
  • OAuth 2.1 for MCP clients: PKCE, Dynamic Client Registration, and Client ID Metadata Documents with SSRF hardening. JWT rotation and a blacklist.
  • Recovers stale sessions under concurrency with a per-server lock and a double check. Decides retries from tool annotations and adds idempotency keys, so a "send message" call is never sent twice.
  • Backend secrets are encrypted at rest. Includes CSRF protection, rate limiting, a security event log and a built-in MCP security auditor.
~13klines
~420tests
v1.2.74on PyPI
12★stars
Python · Starlette · OAuth 2.1 · JWT · Docker

RAG Knowledge Base Platform

Retrieval and grounded Q&A over document collections, with citations.

Open source
  • Hybrid retrieval: Qdrant vectors plus OpenSearch BM25 with weighted score fusion, MMR, context-window expansion and optional Voyage or Cohere reranking.
  • A query classifier spots identifier queries ("Question 6", "p. 42") and shifts weight toward lexical search.
  • Fixed, recursive and semantic chunking. Section-aware metadata and PDF page numbers are carried into the citations.
  • Built-in evaluation: a gold-set harness (exact match, F1, source recall) and auto-tuning. Also served as an OAuth-protected MCP server with 16 tools.
~38klines
~310tests
58migrations
359commits
FastAPI · Qdrant · OpenSearch · PostgreSQL · React · CI
WhatsApp MCP Stream Open source

A TypeScript MCP server for WhatsApp, with staged reconnection, send deduplication, LID-to-phone identity mapping and a local SQLite store. ~9k lines, ~170 tests, CI.

SQL Cortex MCP Open source

Gives AI agents access to SQL databases under a policy layer that understands string literals, with per-dialect timeouts and schema-diff and migration-planning tools.

Grammar-LLM-Bridge Open source

A drop-in replacement for the LanguageTool API that runs on an LLM. Offsets stay exact, in UTF-16 code units. Includes gold-set quality and latency benchmarks.

Writing tools

One proofing engine, three platforms

A design for spelling, grammar and style checking that I built first in a terminal editor, then carried into an Obsidian plugin and a Word-like desktop app. Every version follows the same rule: typing never waits for a checker.

BlueEdit

A fast DOS-style console editor for writing, mathematics and code, on Windows and Linux.

Open source
  • Its own terminal rendering layer that redraws only the changed cells, with a VT input parser and wide-character handling. A key reaches the screen in about 5 ms.
  • LaTeX formulas laid out over several text rows (fractions, roots, matrices), or typeset as Sixel images in Windows Terminal.
  • An LSP client written from scratch, using JSON-RPC over stdio.
  • Pluggable proofing: LanguageTool, Hunspell, the Windows and Word spellers, and local LLMs through llama.cpp with schema-constrained output. Error positions come from a word-level diff. Includes a fastText port for language detection.
~18klines of C#
~600tests
30releases
~5 mskeystroke
C# · .NET 10 · LSP · Sixel · llama.cpp · Inno Setup

BlueProof

LLM spelling and grammar checking for Obsidian that leaves LaTeX formulas alone.

Obsidian directoryOpen source
  • Checks only the paragraphs on screen, after a pause. Answers are keyed by the paragraph's text, so a stale answer is never drawn.
  • An LRU answer cache with exponential backoff that honours Retry-After. Long paragraphs are split at sentence ends, never inside a formula.
  • Runs Hunspell in a Web Worker and fastText in WASM. Desktop, Android and iOS.
  • Models and chunking were chosen by benchmark, and the benchmark results are published.
~9klines of TS
~430tests
212commits
TypeScript · CodeMirror 6 · WASM · Vitest

Markulator

A Markdown and LaTeX editor that looks and works like Microsoft Word.

In developmentPrivate
  • The files stay plain Markdown. They open in any other editor, and a file saved without changes comes back exactly as it was.
  • LaTeX formulas appear typeset as you type: the closing $ turns $x^2$ into a formula at once. A click opens it for editing, with the live result underneath.
  • It catches formula mistakes as you type and offers a fix: a misspelt \farc, a missing }, an unclosed \begin, \lcm that KaTeX has no command for. A fix is offered only if the formula then typesets.
  • Exports to Word with real, editable Word equations. I wrote the converter myself after measuring Pandoc.
~10.5klines
~440tests
Tauri 2 · Rust · TypeScript · Tiptap · KaTeX · Playwright

Fix Math & Auto Math

Obsidian plugins for LaTeX pasted from AI assistants, and for typing maths faster.

Obsidian directoryOpen source
  • Fix Math turns \[…\] and \(…\) from ChatGPT into Obsidian's $…$ form, and leaves code untouched.
  • Auto Math expands snippets from user rule files that reload live. It includes a dependency-free LaTeX tokenizer and a LaTeX-to-Maxima translator.
8,800+Fix Math downloads
3,700+Auto Math downloads
36★stars
TypeScript · Obsidian API
Device provisioning

A laptop build pipeline, from barcode to imaged machine

Production tooling for building an IT department's fleet of HP and Dell laptops. On GitHub these look like separate small utilities. Together they form one pipeline. Most tools ship as a C# app and a readable PowerShell script under one version number, and tests keep the two editions in step.

Scan

The engineer scans the serial, name label and asset tag of each switched-off laptop, in any order. Works offline.

AssetScanner

Look up

An HTTP service answers each machine's name and tag by its BIOS serial. Hot-reloads its data and can run as a Windows service.

InventoryLookup

Boot

Custom WinPE images are cloned onto many USB sticks at once, or booted over the network.

WinPE-Builder · USBImageClone · MultiUSBSync · iPXE Station

Build

Flashes the BIOS if needed, applies the security profile for the model, then images, names and tags the machine.

BuildPipeline

BuildPipeline

A WinPE pipeline that flashes BIOS, sets BIOS security and images HP and Dell laptops.

In productionPrivate
  • An idempotent state machine that resumes correctly after the firmware flash's own reboot. A UEFI BootNext entry brings the machine back to the pendrive.
  • Wraps HP BCU and Dell cctk: every BIOS change is read, set and read back. One CSV row and one profile per model, with no per-model scripts.
  • A stateful fake BIOS makes the logic testable without hardware. Regression tests compare its output byte for byte with the legacy batch-file system it replaced.
491commits
30releases
~200test checks
PowerShell · WinPE · WMI · HP BCU · Dell cctk

USBImageClone

Captures a bootable USB drive and writes it to many drives at once, in the spirit of Rufus or Etcher.

Private
  • Unbuffered, write-through I/O on raw physical drives with sector-aligned buffers, so copies of hundreds of GB don't flood the file cache.
  • Its own FAT32 formatter for drives above 32 GB, written from Microsoft's fatgen103 spec.
  • Pure-function checks run before any write. Each copy is verified against the image, and one failing drive doesn't stop the others.
~9.4klines
8releases
2editions
C# · .NET 4.8 · Win32 I/O · PowerShell · Pester

WinPE-Builder

Builds custom WinPE images and installation images from JSON recipes.

Private
  • Calls the managed DISM API directly from .NET 10 to add components, inject drivers and edit the offline registry.
  • Recovers from killed builds: it records the owning process ID and start time, then unmounts only the images it left behind.
  • Inspects an image in seconds without mounting it. Comes with a GUI, a CLI and a PowerShell edition.
~12.8klines
16releases
C# · .NET 10 · DISM API · wimgapi · WinForms

MultiUSBSync

Pushes a folder onto many USB drives at once. A general-purpose tool that works with any content.

Private
  • Reads each source file once and writes it to every drive at the same time.
  • Each copy goes to a temporary part file and is renamed only when complete. A pulled drive leaves no half-written files and doesn't stop the others.
  • Copies only what changed, by hash. Large files bypass the Windows file cache, so the PC stays responsive during multi-gigabyte copies.
  • Notices when a drive slows down mid-copy, refuses to scan a whole 2 TB disk by accident, and replaces read-only files while keeping their attributes.
~4.8klines
3.1.2version
2editions
C# · .NET 4.8 · PowerShell · WinForms

iPXE Station

A self-hosted PXE/iPXE boot server with a web interface.

Open source
  • Proxy DHCP through dnsmasq that runs alongside the existing DHCP server. Handles BIOS, UEFI and iPXE clients separately.
  • Nested menu builder with cycle detection, generating both iPXE and GRUB. Kernel parameters come from boot recipes for each distro.
  • Booted machines report missing drivers, battery health and kernel errors back to the server.
~19klines
~390backend tests
406commits
FastAPI · React · dnsmasq · iPXE · Docker
More platforms

Telephony, research, audio and operations

Systems that each needed knowledge of a domain beyond web development: Asterisk telephony, discourse analysis, audio processing, SSH and cryptography, observability.

DigitalPBX

A modern alternative to FreePBX for managing Asterisk, with an AI voice agent.

In developmentPrivate
  • The whole PBX model (about 15 entity types) lives in Postgres. PJSIP and dialplan config is generated from Jinja templates and reloaded through Celery.
  • Streams live AMI events to the browser over WebSockets and saves call records.
  • An AI phone agent that speaks Asterisk's AudioSocket protocol: voice detection, then speech-to-text, LLM and text-to-speech, with pluggable providers and call transfer.
  • Auto-provisioning for Yealink, Polycom, Snom, Fanvil and Grandstream phones. TOTP two-factor login and an audit log.
~22klines
32migrations
~40test files
FastAPI · React · Asterisk · AMI · Celery · Redis · CI

CDA Toolkit

LLM pipelines for Critical Discourse Analysis of news text, used in academic research.

Private
  • Five stages in dependency order: quotes, social actors, quote analysis, actor power, review. Each stage builds on the output of the earlier ones.
  • One JSON schema mapped onto each provider's native structured output: Anthropic, OpenAI, Gemini, DeepSeek and Ollama.
  • Circuit breakers, recovery of truncated JSON, Wikidata entity matching and cost tracking for each run. Supports a draft paper with an inter-rater reliability protocol.
~23klines
5LLM providers
FastAPI · React · TypeScript · multi-LLM

FlexAudioHub

A transcription platform, and a native Android app that turns therapy sessions into clinical notes.

Private
  • Adaptive chunking (the server's first, then local ffmpeg), speaker diarization, and de-duplication by content hash and audio fingerprint.
  • Per-user API keys encrypted at rest, with cost quotas and usage pricing.
  • Kotlin/Compose app with a foreground recording service and Room storage. Token refresh is safe under concurrent requests. SOAP notes come from schema-constrained LLM output.
~20klines
25migrations
2clients
FastAPI · React PWA · Kotlin · Jetpack Compose · CI

TermHub

An SSH workspace for Windows, with ClusterSSH-style typing into many hosts at once.

In developmentPrivate
  • ConPTY tabs that host the Windows Terminal control. Its own SFTP v3 client with many requests in flight.
  • Converts PuTTY keys to OpenSSH with Argon2 and bcrypt-pbkdf implemented in the repo. Imports sessions from MobaXterm and PuTTY.
  • Passwords stay in Windows Credential Manager and reach OpenSSH through SSH_ASKPASS.
~18klines of C#
~150tests
C# · .NET 10 · WPF · ConPTY · OpenSSH
Northern Lights Private

A multi-host observability stack (Prometheus, Loki, Grafana) driven by a TOML inventory, with LLM alert triage sent to Telegram.

Ring RTSP Bridge Open source

Brings Ring cameras into a local Frigate NVR, with workarounds for undocumented H.264 and push-channel failures.

NAS DevBox Open source

A full Linux development environment in a container on a NAS, controlling the host's Docker. Comes with a LinkedIn article.

FlexAudioPrint Open source

Whisper transcription in a web app, with subtitles and translation. 10★.

SpeakItAI Open source

Azure Neural text-to-speech with a web interface. 45★, my most-starred repository.

Smaller tools Open source

Microsoft Learn video downloader (8★), VPN routing for AsusWRT Merlin, Keyboard Layout Fixer, Belfast bin-collection tracker.

How I work

Habits that show up across the code

These are patterns I saw again and again when reviewing these repositories, not slogans.

Check against a reference

Tax engines are tested against HMRC vectors. The mobile port is checked against golden fixtures exported from the server. The new build pipeline is compared byte for byte with the system it replaced.

Measure before choosing

Proofing models, chunking and the Word export path were each chosen by benchmark, and the results are written up. Keystroke latency is measured, not guessed.

Safe by default around hardware and money

Every BIOS setting is read back after writing. Every disk write passes a preflight check first. Money is always Decimal. Secrets are encrypted at rest, and tool calls carry idempotency keys.

Ship the whole thing

Installers, release scripts with checksums, migrations, user guides for non-developers in PDF and HTML, and design-decision records in English and Russian.

Open-source contribution: my fix for a race condition in auto-checking was merged into the LanguageTool plugin for Obsidian.

Toolbox

Stack

Grouped by how much production code I have in each, most first.

LanguagesPython · TypeScript · C# / .NET · PowerShell · Kotlin · SQL · some Rust
BackendFastAPI · Django / DRF · Starlette · Next.js · SQLAlchemy · Alembic · Celery · Redis
Data & searchPostgreSQL · PostGIS · SQLite · Qdrant · OpenSearch / BM25
AIMCP servers and gateways · RAG · OpenAI · Anthropic · Gemini · DeepSeek · Ollama · llama.cpp · Whisper · Azure AI (AI-102)
ClientsReact · React Native / Expo · Kotlin / Compose · WPF · WinForms · Tauri · terminal UIs · Obsidian / CodeMirror
SecurityOAuth 2.1 / PKCE / DCR · JWT · Fernet encryption at rest · SSRF guards · rate limiting · TOTP
OpsDocker Compose · GitHub Actions · nginx · Prometheus / Loki / Grafana · Linux VPS · NAS self-hosting
Windows & hardwareWinPE · DISM · PXE / iPXE · HP BCU · Dell cctk · raw disk I/O · Asterisk / PJSIP