Skip to content

Marko Stupar

Self-taught software developer

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

Nobody was counting. So I counted.

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.

Learning2 h/day

approximately 792 hours

hours · 1 year

JUN 2023 — JUL 2024

Professional8 h/day

approximately 6,536 hours

hours · 2.3 years

JUL 2024 — TODAY

1,213 days since the first line of code

Story

Shift work, then code.

Police officer, then two hours a day after shift, then a first paid role. None of it happened quickly.

  1. BEFORE 2023

    Police Officer

    Shift work, reports, and a lot of paperwork. I liked the job. I did not want to do it forever.

  2. JUN 2023

    First line of code

    Two hours a day after shift, every day. Tutorials first, then small things of my own.

  3. JUL 2024

    Software Developer · Info Puls

    First paid role. Learned what production actually demands from code.

  4. JUN 2026now

    Software Engineer · Atomic Solutions

    Building and maintaining real systems, end to end.

  5. TODAY

    Still shipping

    Eight products in the air. Still reading, still rewriting.

Transition

I changed careers completely.

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

Three phases, one direction.

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.

  1. 01

    Written by hand

    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.

  2. 02

    AI as a tutor

    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.

  3. 03

    AI as leverage

    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

Eight products in the air.

Mobile apps, an admin dashboard, a monorepo that serves both, and the packages they share. Each one runs for real people.

Range

Not just tutorials. Real products.

Different industries, different constraints, the same job: understand the domain well enough to build something the people in it will actually use.

Stack

What I build with.

Not everything I have touched — what I would be comfortable owning on day one.

Languages

  • TypeScript
  • JavaScript
  • SQL
  • HTML
  • CSS

Mobile

  • React Native
  • Expo
  • expo-router
  • React Navigation
  • Reanimated
  • FlashList
  • EAS

Web

  • React
  • Next.js App Router
  • Tailwind CSS
  • Radix UI
  • React Hook Form
  • Zod
  • Vite

Data & Backend

  • Supabase
  • Postgres + RLS
  • Deno Edge Functions
  • TanStack Query
  • Zustand
  • WooCommerce
  • WordPress REST API
  • Orval

Tooling & Quality

  • Vitest
  • Playwright
  • Maestro
  • pnpm
  • Turborepo
  • Git
  • Sentry
  • Firebase Analytics
  • i18next

Published Packages

My own packages, published to npm under my Atomic Solutions scope. Shared config and UI used across the products above.

  • @atomic-solutions/react-native-ui
  • @atomic-solutions/react-ui
  • @atomic-solutions/react-supabase
  • @atomic-solutions/wordpress-api-client
  • @atomic-solutions/moja-apoteka-json-feeds

Process

Six steps, every time.

The same loop whether it is a bug report or a new product. AI sits inside it, not around it.

  1. 01

    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.

  2. 02

    Plan

    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.

  3. 03

    Build

    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.

  4. 04

    Review

    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.

  5. 05

    Test

    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.

  6. 06

    Ship

    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

Let's talk.

No form, no scheduling widget. Email is fastest, and it reaches me directly.