Skip to content
Portrait of Marko Stupar

Marko Stupar

Software developer

I started writing code in June 2023.

Score 0

Two careers. Thirty seconds.

Space / ↑ jump · X smash (level 2)

approximately 7,696 hourshours

2.4 years professional · 1 year learning

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,904 hours

hours · 2.4 years

JUL 2024 — TODAY

1,259 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 production projects behind me. Still reading, still rewriting.

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 real projects in production.

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

Blood Donation PlatformFull Stack Developer

KApp

A blood donation network used by transfusion centres across the Republic of Srpska.

Donors and transfusion centres in one place. The mobile app handles sign-in, donor profiles and appointments; a separate admin dashboard lets each centre manage its own calls for donors, appointments and support requests.

  • Expo
  • React Native
  • TypeScript
  • expo-router
  • Supabase
  • TanStack Query
  • Zod
  • Next.js
  • Tailwind CSS
  • i18next
View project →

What I built

  • Donor app for transfusion centres across the Republic of Srpska
  • Booking anchored to the centre that owns the appointment
  • Phone-based sign-in backed by Postgres row-level security
  • Push notifications for urgent calls for donors
  • Admin dashboard for calls to action, appointments, users and support tickets
  • Serbian in both Latin and Cyrillic scripts
Relocation PlatformFull Stack Developer

Tvoja Integracija

Everything someone needs to move to Germany and actually settle there.

A mobile app and an admin panel built as one Turborepo, sharing types and query code. Guides, chapters, city-by-city information, a business directory, consultation booking and a built-in e-book reader.

  • Expo
  • React Native
  • Next.js
  • TypeScript
  • Turborepo
  • Supabase
  • TanStack Query
  • Radix UI
  • Tailwind CSS
  • i18next
View project →

What I built

  • Expo app and Next.js admin in one Turborepo, sharing types and data fetching
  • Guides, chapters and city-by-city information for moving to Germany
  • Consultation booking, business directory and industry listings
  • Built-in EPUB and PDF reader for the e-book
  • Maps of cities and organisations — native maps on mobile, Leaflet on the web
  • Three languages: English, Croatian and German

Stack

What I build with.

These are the tools I know well enough to pick up real work with from the first day, not just ones I have tried once.

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.