Petar Scepanovic · Full stack engineer

Retail software, from browser to background jobs.

I’m Petar. I build with TypeScript, React, Next.js, Node.js, .NET, and Azure. My work connects store interfaces, live delivery updates, and the services behind them.

Professional work

What I build at work.

At Zühlke, I work on retail software across the web, cloud services, and Android. Here are a few features I’ve delivered.

  1. Zühlke

    Belgrade, Serbia

    Software EngineerFeb 2024 to Present
    • Designed and built Azure Durable Functions batch processing with per delivery retries and a poison queue; used Cosmos DB ETags and retries to prevent concurrent updates from silently overwriting store data.
    • Proposed and built Azure Web PubSub updates replacing polling every 60 seconds, so store staff see delivery changes without waiting up to a minute.
    • Built core features for a Next.js store operations PWA: navigation, notes, tasks, deliveries, feature flags and offline access to previously loaded data.
    • Built user feedback for an LLM assistant, saving ratings and comments with the conversation history.
    • Built Kotlin Android notifications with Firebase Cloud Messaging, using managed configuration to subscribe devices to their store’s topic, and added the GitLab APK pipeline.
    • Delivered regional and area loss reporting across React and C#/.NET APIs, with configurable periods, loss against budget and completion rates for recommended store actions.
    • Introduced Playwright testing across two apps, including authenticated workflows. Added GitLab CI tests with a production Next.js build and seeded Cosmos DB emulator.
  2. BlueGrid

    Belgrade, Serbia

    Frontend DeveloperMay 2021 to Sep 2023
    • Built React and TypeScript dashboards for retail loss prevention, compliance and inventory workflows.
    • Migrated Redux request handling to TanStack Query so components could reuse cached data instead of issuing repeated API requests.
  3. OMP

    Barcelona, Spain · Remote

    Frontend DeveloperOct 2020 to Mar 2021
    • Modernized an enterprise React product with Hooks and TypeScript; defined OpenAPI contracts and integrated REST endpoints with backend engineers.

Side projects

Two projects you can inspect.

Relay handles webhook delivery and recovery. Batch makes large CSV imports easier to review. The case studies cover the decisions, failure paths, and tests, with links to the source.

Delivery architecture · Diagram

Every delivery has a recovery path.

  1. AcceptValidate the event and store delivery work.
  2. DeliverClaim a job, sign the request, send it.
  3. RecoverRetry a failure or replay it as a new delivery.

ASP.NET Core → PostgreSQL → .NET worker

Local distributed system2026

Webhook delivery, retries, and replay

Relay Webhook Delivery

Signed webhook delivery with a PostgreSQL queue, automatic retries, and manual replay. A dashboard shows every attempt and the path back from failure.

  • ASP.NET Core
  • .NET worker
  • PostgreSQL
  • Next.js
Import workflow · Diagram

A clear path through a messy file.

  1. ImportParse a CSV with an explicit header contract.
  2. ReviewFind invalid rows and keep the review state.
  3. ConfirmSummarize valid records in the browser.

React · TypeScript · Zod · Zustand

Browser import workflow2025

CSV import, validation, and review

Batch Transaction Processor

A CSV import in three steps. It validates large synthetic files, points to problems in individual rows, and keeps the review state when moving between steps.

  • React 19
  • TypeScript
  • Zod
  • Zustand

Get in touch

Let’s talk about what you’re building.