Full-stack engineer · open to relocation
I built a marketplace on my own. It has been in production ever since.
Schema, API, storefront, deploy pipeline — one engineer, end to end. Bronyka Shop runs on NestJS, PostgreSQL and Docker, and I am the one who ships it and keeps it up.
Five more products beyond it, ~75,000 lines of TypeScript, and a habit of testing anything that touches someone's money.
- Name
- Maksim Miliutin
- Role
- Full-stack engineer
- Based in
- Russia · open to relocation & visa sponsorship
- Education
- Computer Science, RTU MIREA — two years completed
- Languages
- Russian, Ukrainian — native · English — improving toward B2
Currently building
Trellis
Grammar is a dependency graph, not a list of topics
Currently building
A language app from A0 to C2 where topics unlock when their prerequisites are consolidated, explanations are written for the learner's native language, and essays feed back into the same graph: a mistake in your text drops the topic and schedules it for review.
97,494 lines · 358 files · 598 tests · six languages
Not shipped yet. The learning logic, the schema contracts and the seams between layers are covered by tests; the app has not been run end to end. The first real launch will find things, and that is worth budgeting for rather than hiding.
Design decisions
Questions are not generated at runtime
Templates are expanded ahead of time and slots are filled only with words the learner already knows.
Slots are not independent
Hence compatibility tags and links between slots, rather than filling each one at random.
Mistakes are seeded from the native language
The error-hunt exercise corrupts sentences along interference patterns.
Pseudo-words in the placement test
If a false positive costs nothing, the measurement does not work.
Learning logic knows no framework
Server, app and tests run the same code.
The seams are tested on purpose
Almost every bug found so far lived between modules, not inside them.
- Stack
- TypeScript · gRPC · Prisma · Expo · React Native · monorepo
Projects
Bronyka Shop
A collectibles marketplace with real-time buyer–seller chat, order management and a mobile-first PWA storefront. Built solo, running in production.
operational
- Users
- 250+
- Products
- 252
- Orders
- 70+
- Owner
- 1 engineer — architecture to deploy
- Runtime
- NestJS · Prisma · PostgreSQL · Redis
- Client
- React · Vite · PWA · i18next
- Edge
- Docker · nginx · Cloudflare R2
- Realtime
- Socket.IO buyer–seller chat
More on GitHub
-
C++ desktop library
A C++ library with a Qt GUI, talking to PostgreSQL through libpqxx.
-
C# / .NET APIs
REST services in C# with data access through Entity Framework Core.
-
Academic web projects
Full-stack coursework projects, built and hosted end to end.
-
This site
Hand-written HTML, CSS and JavaScript. Three languages, two themes, no framework and no build step.
Beyond the marketplace
Bronyka Shop pays the bills. These are the products I build when I get to choose the problem — mostly things I needed myself and could not find.
-
Reste
French medical quotes advertise "70% reimbursed" and mean 70% of a reimbursement base that can be a fifth of the price. An €800 crown returns €84, not €560. Reste reads the quote and shows what you will actually pay, with every number traced to its official source.
-
Veilla
A daily check-in call for an elderly parent living alone, scheduled in the parent's timezone. Transcript and audio are never stored — only structure leaves the call. The product is not the call: it is the decision about when to wake the daughter at two in the morning, and, more importantly, when not to. Suppressed alarms are a measured number.
-
Pasmurno
A mood journal for a circle of five people rather than a feed — no likes, no algorithm. The AI companion answers at four in the morning and says plainly that it is not a therapist. Chat never reaches the server and sits encrypted on the device. When the words sound like a real crisis, it surfaces the helplines for the user's country.
-
Vydokh
Quitting vape without shame. A slip resets the streak and nothing else: current streak, best streak and total clean days are three separate numbers, and the last two never burn. Money saved counts every clean day, because it really was not spent. There is no red anywhere in the palette — a slip is data, not a failure.
-
Mira
Point the camera at a plate for calories and macros, or at yourself for a face and skin read. It keeps both histories and correlates habits against the face score with a lag of nought to two days, entirely on device — always with the sample size, never claiming a cause. Barcodes are scored from Open Food Facts with a source link on every finding.
How I work
Money code gets tests
Reste has 67 tests and Veilla 103. Not because tests are a ritual, but because a wrong number about someone's money is worse than no number: the user has no way to tell it is wrong.
Rates are data, not constants
The French GP consultation went from €26.50 to €30 in December 2024. Hardcoded figures go stale silently and keep returning answers. Every rate in Reste carries a validity period and a source, and every calculation is made as of a date.
"Cannot compute" is a valid answer
When a line has no known reimbursement base, Reste says so instead of treating it as zero. A line without a base looks exactly like an honest full-cost line, so a silent zero would put a wrong total next to four right ones.
Bugs live between modules
Almost every defect I have found sat in the seam, not inside a unit: a column renamed on one side only, a rule declared in two places, a contract field written but never read. So the seams get their own tests: schema against queries, contract against both ends.
What I leave out
No invented regional averages, no annual cap I cannot verify. If the data to do it honestly does not exist, the feature does not ship.
About
I am a full-stack engineer with production experience rather than a folder of tutorials. I designed and built an online marketplace from an empty repository: database schema, backend, frontend, infrastructure. It now serves real customers and processes real orders, and every incident on it is mine to fix.
Two years of Computer Science at RTU MIREA gave me the fundamentals; everything past that I learned by shipping. I am looking for a team where I can bring the same ownership — and learn from engineers who have run systems larger than mine.
- Shipped solo
- One marketplace in production, five more products beside it
- Comfortable with
- Owning a feature from schema to production
- Looking for
- Full-stack or backend role, relocation welcome
Resume
Experience
Founder & lead full-stack developer 2026 — present
Bronyka Shop — bronykashop.com
- Owned the whole stack: architecture, development, deployment and production upkeep across backend, frontend and infrastructure.
- Backend on NestJS, Prisma and PostgreSQL — REST API, JWT auth with access/refresh rotation, role-based access control, rate limiting.
- Buyer–seller messaging over WebSockets (Socket.IO), with an admin panel that watches live message flow.
- Storefront on React and Vite: catalog, cart, checkout, order tracking, RU/EN localisation, mobile-first PWA with offline support.
- Ran it as a business: checkout funnel, SEO (sitemap, Open Graph), and customer orders handled through the built-in chat.
- Deployed with Docker Compose behind nginx and Cloudflare, assets on R2, CI through GitHub Actions.
Technical skills
Education
- RTU MIREA
- Computer Science — two years completed
Technical notes
Decisions I made while building Bronyka Shop, written up short.
Where I am
Moscow now. Both targets are cities I can work from on site, and the paperwork is mine to start.
- From
- Moscow, Russia
- To
- Pick a destination
- Status
- Available for remote work now; on site from 2027.
Dressed as 1995
The chrome is a costume; the year is not.
- Windows 9524 Aug
- Linux 1.2Mar
- Qt 0.9020 May
- Java 1.0a23 May
- PHP/FI8 Jun
- Apache 0.6.2Apr
- Ruby 0.9521 Dec
- JavaScript4 Dec
- PNG 1.01 Oct
Two of them are still in my stack.
Get in touch
Open to full-stack and backend roles. Relocation welcome — I am actively planning a move to the EU and can start the paperwork on my side.
- Telegram
- @QQWaffles
- GitHub
- github.com/maksim-miliutin
- in/maksim-milyutin
- Website
- bronykashop.com
Available for remote work now; on site from 2027.