VotaCrudGenerator
My Laravel package that generates CRUD code from the database schema: 850+ installs on Packagist.
Senior backend engineer · PHP / Laravel · LLM features in production
I build Laravel backends and the LLM features inside them. In software since 2012, on Laravel since 2016. This year I built and shipped VotaWallet, an expense tracker for Serbia, on my own.
Belgrade, Serbia (CET) · Remote with EU and US teams, or relocation
Open to senior backend roles
I also take projects
My product
I got tired of typing my expenses in by hand. A friend once showed me that the QR code on a Serbian receipt links to almost the whole receipt. Now I scan it, and the app sorts every item into a category.
From the QR code the app pulls the official receipt record from the tax administration, with no OCR, and it learns categories from your confirmations. It has family budgets and a Telegram bot, and it never connects to bank accounts.
The hardest part so far was getting into the app stores: screenshots, descriptions, review rules and the code for all of it.
Web app, Telegram bot and Android on Google Play. iOS is in App Store review.


Laravel 13, PHP 8.4, Octane, Horizon, Reverb, Passport, Filament, PostgreSQL, Redis, Pest · Nuxt 4, Vue 3, Vuetify (Material Design 3), Capacitor · Python FastAPI + OpenCV · Terraform, Google Cloud Run, GitHub Actions.
While the app waited for Apple’s review, I added an MCP server to it. Connect Claude, ChatGPT or Gemini to your own wallet and ask where the money went. The server does the math, the model only talks.
The code is private. I’ll walk you through it on a call.
Senior roles at product companies: fully remote at GrowFood, and with a US team at Alyce before that.
I care about how code reads and runs. A tidy data aggregation or a well-placed cache makes my day.
Led the R&D direction inside the dev team: PHP and Laravel upgrades across all services, Redis queues, Kafka, Datadog, and 10+ production Telegram bots on one platform.
B2B SaaS from Boston: new features and architecture decisions in a production codebase, daily work in English with a US team.
Launched matetech.ru from an empty repo: a multi-tenant learning platform with sub-companies and subdomains. Built a code-generation system and brought in git-flow.
Built pushex.io from the ground up on Laravel, with Go microservices and a custom worker model for faster personalized push delivery. Hired engineers.
Made diler.ru from scratch on Laravel and Vue, with a catalog parser that a non-technical manager configures for each source site.
Took the service from zero to launch: architecture, database, admin panel, user area and tests.
The project management years still help in AI work: clear specs and careful checks of model output.
Three products from an empty repo, architecture and database included: legko.com, diler.ru, matetech.ru.
PHP 8, Laravel, Go, MySQL, PostgreSQL, Redis, Kafka, ClickHouse, Docker, Kubernetes, Linux, REST API and OpenAPI.
Synergy University, Applied Informatics (Bachelor’s). Also studied at NRNU MEPhI (Computer Systems and Technologies), the LKSh summer computer school and the Mytishchi School of Programmers.
Russian (native), English B2 (certified), Serbian (basic).
My Laravel package that generates CRUD code from the database schema: 850+ installs on Packagist.
A Laravel 13 and Nuxt 4 starter for projects that will be written with coding agents, built from the VotaWallet experience.
Built in one day at Monad Blitz Belgrade, Aug 2026: track-and-trace that anchors 100,000 codes on-chain in two transactions through one Merkle root.
Akinator, but for beer. A Bayesian engine picks the question that narrows the choice the most, and a bartender named Brew asks it. It knows 11,000+ beers and is still in development.
In development
In VotaWallet, models draft and check each other; the tests and my own review decide what ships.
Checked against the real code and database, the plan for VotaWallet’s MCP server had missed five problems you can’t see from a chat. All of them were closed before the feature shipped.
A long design conversation with Gemini about an MCP server for VotaWallet.
I checked every claim against the code, read-only production data and the MCP clients’ docs.
That check turned up the problems the chat had missed, so the spec was written around them.
A second model reviewed the plan without changing anything: 25 findings.
Each finding went back to the code before I accepted or rejected it.
Tests first, then code: Claude Code wrote it task by task from the spec.
Shipped, then checked live with Claude, ChatGPT and Gemini.
Every feature starts from a written spec. VotaWallet has two dozen of them, plus a short list of rules the agents may not break.
I read every diff before it merges, and each change comes with a test that shows what it does. Nothing reaches production until the full suite passes.
On Pivonator, the reviewing model ran its own simulator and caught a sign error in the math that picks the next question.
When an agent gets something wrong, I find out why and write a rule. Once it joined a table with a similar name from another data domain: the result was wrong only on some loop iterations and nothing threw. That is a rule now.
73 agent skills in the VotaWallet repo. Most are community packs I chose and tuned; the project-specific ones I wrote.
Personal assistant
It lives in one Telegram chat, files what I send into my Obsidian notes and watches VotaWallet’s CI and production errors.
Rules it runs on
Once a week it reads its own history and proposes changes to its own rules. I approve or reject them.
How it behaves. Real messages stay private.
Adapted from an open-source framework. One agent drafts only from a fact base I keep correct. A second agent reviews with a fresh context. A check flags any line I could not defend in a conversation, and a script checks that machines read the PDF correctly. The final text is mine: I edit it and decide what goes out. It suits any document where every line has to hold up: proposals, contracts, support replies.
Contract work and consulting. Same rules as in my own products: a written spec first, tests on every change, and nothing goes out without your approval.
Your customers connect Claude, ChatGPT or Gemini to their own data in your app, with narrow access they can revoke. Totals come from your server, so they match your app. Records added by AI are marked, and an AI import can be undone in one step.
A support bot over your docs, ticket triage that learns from your team’s choices, photo classification, Telegram bots and assistants that draft for a person to approve.
Laravel and Nuxt with a Material Design UI, and one codebase for web and mobile. Google Cloud is set up with Terraform, and CI runs from the first day.
For an existing team, I set up agentic coding with rules, skills and MCP servers, as I did for the dev team at GrowFood, and add a CI gate that tests what the agents write.
At handover you get the repo, docs generated from the code, and a rules file that the next developer or AI agent reads first.
An evocation wizard and a kenku monk who carves runes.
Five screen credits, 2009-2013.
KinopoiskWhere I live and go to startup events: Startup World Cup Serbia as the founder of VotaWallet, Monad Blitz Belgrade with a one-day build.
Also anime and films, fencing a few years back, and beer as a dataset (Pivonator).