# Stanimir Stoyanov > I build the seam between physical hardware and language models. Stanimir Stoyanov, software engineer in Sofia. ESP32 firmware, self-hosted data platforms, an offline-first mobile app, and the MCP servers that let AI agents read it all. Contact: hello@stoyanov.sh GitHub: https://github.com/stoyanov-x Location: Sofia, BG ## Selected work ### Fleet firmware that has to survive the field — private repository ESP32 nodes reporting over a flaky uplink, where the interesting part is the gate: Python pipeline tests, the committed intermediate representation revalidated without a network, the C rules modules run against host harnesses, the dashboard renderer exercised against a stub DOM, and finally the whole sketch cross-compiled for the target. Only the last step catches a missing extern "C" — every host test is C on both sides of the call. Outcome: Release confidence without a lab full of hardware. Stack: C, ESP-IDF, arduino-cli, Python ### Devices the vendor never exposed — https://github.com/stoyanov-x/homebridge-tapo-stoyanov TP-Link ships a cloud “Things” API that HomeKit can’t see. I mapped the undocumented endpoints, wrote the research down, then turned it into a Homebridge plugin — including the IR hub, whose LAN path is blocked by a pairing-time device password, so the cloud path with a signed request is the one that works. Outcome: Hardware I own, controlled by the system I chose. Stack: TypeScript, Homebridge, Protocol work ### An API shaped for agents, not dashboards — https://github.com/stoyanov-x/equibles-api A read-only HTTP surface over that database: SEC filings, XBRL financials, 13F holdings, insider and congressional trades, short interest. Every endpoint answers the question an agent actually asks, and none of them let it write. Outcome: A model that cites filings instead of guessing at them. Stack: Python, MCP, FastAPI ### Market data you actually own — private repository A self-hosted Postgres with ParadeDB on a single VPS: ingest pipelines, migrations, full-text and vector search over filings, and a query layer thin enough to run on a €5 box. Outcome: Years of history, no vendor, no per-seat pricing. Stack: Postgres, ParadeDB, Coolify, Hetzner ### Image models with no API key — https://github.com/stoyanov-x/mflux-playground Flux on Apple Silicon: a web UI, LoRA training runs, and a job queue wrapped around a FastAPI service and an ASP.NET Core host. Everything stays on the machine it runs on. Outcome: Generation, training and experiments on a laptop. Stack: Python, C#, React, Apple Silicon ### An app that has to open someone else’s database — https://github.com/stoyanov-x/fitnotes-research FitNotes users have years of training history in a file format nobody published. I mapped it, then rebuilt the app on Expo so the same data opens unchanged — offline by default, analysis on the device, no account anywhere. Outcome: Switching apps stops meaning abandoning the history. Stack: Expo, React Native, Java ## Client work, described by outcome - **A logistics integration that stopped being a spreadsheet.** Monthly reconciliation by hand, replaced by a service that reconciles continuously and complains loudly when reality diverges from the plan. - **A device fleet with a test gate instead of a prayer bench.** Firmware, host tooling and visualisation moved into one pipeline, so a regression is caught on a pull request rather than on a customer site. - **An analytics stack a single person can operate.** Self-hosted, containerised, backed up and monitored. It has survived an unclean database stop without losing a migration. - **Agent access to systems that were never designed for it.** Thin, read-only, well-typed surfaces in front of legacy data — so an assistant can answer questions and cannot break anything. ## Approach - **Reproduce before you fix.** A bug I can’t make happen on demand is a rumour. First a failing test, then the smallest change that turns it green. - **Fix the seam before the boxes.** Interfaces, data shapes and who owns what outlive every implementation behind them. I settle those in writing first, then let the modules churn inside the line I drew. - **Every change reversible.** Backups, migrations and the test gate are not paperwork — they are what makes an ambitious change safe to attempt. The exits are built before the feature. - **Prefer the boring tool.** Postgres, a shell script and a single binary beat a diagram of nine services. Complexity has to earn its place. ## Stack - **Languages:** TypeScript, Python, Rust, C#, C - **Systems:** Postgres · ParadeDB, Docker · Coolify, Hetzner · Linux, ESP-IDF - **AI surfaces:** MCP servers, Anthropic & OpenAI APIs, Local inference, RAG over filings - **Testing:** Playwright, pytest, C host harnesses, arduino-cli cross-compile - **Leading:** Hiring & onboarding, Design review, Roadmaps & scoping, Mentoring ## Contact Contract work, a strange integration, or a device that needs a better interface than the one it shipped with. I read everything. Email: hello@stoyanov.sh