Understand
Read the existing code before touching it. Find out what the request actually means and who is affected when it changes.
aiAI maps an unfamiliar codebase fast: entry points, data flow, and the callers a change will reach.
Marko Stupar
I started writing code in June 2023.
approximately 7,328 hourshours
2.3 years professional · 1 year learning
Before software, I was a police officer.
Time invested
Two hours a day after shift for the first year. Eight a day once someone started paying for it. Every number here is computed from today's date — nothing is written down by hand.
approximately 792 hours
hours · 1 year
JUN 2023 — JUL 2024
approximately 6,536 hours
hours · 2.3 years
JUL 2024 — TODAY
1,213 days since the first line of code
Story
Police officer, then two hours a day after shift, then a first paid role. None of it happened quickly.
Shift work, reports, and a lot of paperwork. I liked the job. I did not want to do it forever.
Two hours a day after shift, every day. Tutorials first, then small things of my own.
First paid role. Learned what production actually demands from code.
Building and maintaining real systems, end to end.
Eight products in the air. Still reading, still rewriting.
Transition
I was a police officer. Shift work, reports, paperwork. I was good at it, and I did not want to do it for another twenty years.
So I started learning to code in the evenings. Two hours a day, after shifts, because that was the time I had. It took a year before anyone paid me for it.
Nothing about that was brave. It was the thing I decided to do, and then kept doing.
How I work
I learned to write code by hand before any of this was good. That order matters — it is the reason I can read what a model produces and know when it is wrong.
JUN 2023 — JUL 2024
No shortcuts. JavaScript, React, HTTP, SQL, Git — typed out one character at a time until the patterns stopped being magic. Two hours a day, after shifts, every single day.
JUL 2024 — 2025
First job, first real codebase, first bugs I could not explain. AI became the colleague who is always awake: explaining unfamiliar code, arguing about an approach, catching what I missed in review.
2025 — NOW
The work moved up a level. I decide the shape of the system, an agent handles the typing, and I review every line before it ships. Faster, but nothing lands that I could not have written and cannot defend.
AI did not replace learning how to code. It changed how I use what I know.
Work
Mobile apps, an admin dashboard, a monorepo that serves both, and the packages they share. Each one runs for real people.
Range
Different industries, different constraints, the same job: understand the domain well enough to build something the people in it will actually use.
Iwaaant · Maza
KApp · Moja Apoteka · Maza · Tvoja Integracija
KApp · Tvoja Integracija · RU4M
Moja Apoteka
zesty.bet · eKuponi
KApp
Iwaaant · zesty.bet · eKuponi
Stack
Not everything I have touched — what I would be comfortable owning on day one.
Languages
Mobile
Web
Data & Backend
Tooling & Quality
Published Packages
My own packages, published to npm under my Atomic Solutions scope. Shared config and UI used across the products above.
Process
The same loop whether it is a bug report or a new product. AI sits inside it, not around it.
Read the existing code before touching it. Find out what the request actually means and who is affected when it changes.
aiAI maps an unfamiliar codebase fast: entry points, data flow, and the callers a change will reach.
Decide the shape of the change and where the boundaries sit. Small diffs that fix the root cause, not the report.
aiAI pressure-tests the approach — trade-offs, edge cases, and what breaks in six months.
Write it. Match the code that is already there. No new dependency for something a few lines can do.
aiAI drafts the repetitive parts. The architecture and every decision in it stay mine.
Read the diff as a stranger would. Look for the bug that only shows up on the input nobody typed yet.
aiAI is a second reviewer on every diff — good at the boring classes of mistake I stop seeing.
Cover the money path: valid input, invalid input, boundaries, and the required fields. Run them before calling it finished.
aiAI writes the cases I would skip, and I check that the assertions test behaviour rather than the implementation.
Deploy, then watch it. A feature is not done because it merged — it is done because it works for the people using it.
aiAI helps read the logs and trace a report back to the line that caused it.
Contact
No form, no scheduling widget. Email is fastest, and it reaches me directly.