Hi, I'mStefanBlagojević

Full Stack & Mobile Developer

Belgrade, Serbia

My journey into web development started with a practical desire: to build applications that I could use with my friends. This hobby grew into a deep interest in crafting seamless digital experiences, leading me to teach myself modern technologies like React and Next.js. I am excited to apply my self-driven and detail-oriented approach to a professional development role.

Professional Work Experience

Full-Stack & Mobile Developer

IPTV / Streaming Platform (Belgrade)

  • Modernized and re-shipped a ~3-year-stale Android/Android TV codebase across 20+ reskin builds: updated SDK and target API, brought Play Store compliance current, and managed APK/AAB releases.
  • Built a Next.js + PostgreSQL interface over legacy PHP systems, parsing raw HTML into structured JSON for faster search, custom sorting, and a cleaner internal UI.
  • Maintained client-facing WordPress sites: debugged layout and content issues directly in the editor and theme files.
  • Patched legacy PHP/Laravel/MySQL bugs on a production-mirror server before promoting fixes to the live environment.

Mobile App Developer

Contract

  • Built a cross-platform mobile frontend in React Native and Expo for a secure event-access product, implementing client requirements from written PDF specifications.
  • Implemented camera-based QR scanning and a typed component architecture in TypeScript.
  • Owned the frontend repo independently; coordinated API contracts directly with the backend developer.

Personal Project

Screenshot of Meowspace

Meowspace

A cross-platform social app for sharing pet photos, built solo and shipped to Google Play. The mobile app is the primary client; a companion web app at meowspace.app provides read-only browsing and account management.

Key Features

  • AI image moderation. Every upload runs through Hugging Face's DETR object detector — posts are gated on whether a recognized pet covers enough of the frame and no human is detected, with the pipeline failing closed on every error path.
  • Chat schema. Public conversation metadata sits in one collection, private messages in a separate subcollection. Unread state is derived per-conversation from a lastReadAt: {uid: timestamp} map instead of being stored per-message — simpler to update, cheaper to read.
  • Push pipeline. Cloud Functions trigger on Firestore writes and deliver via the Expo Push API, honoring per-user notification preferences and auto-cleaning dead device tokens.
  • Security rules. Granular Firestore rules with typed validators and narrow update lanes — e.g. non-owners can increment likesCount/followersCount but can't touch any other field on a post or user.
  • Force-update gate. A Firestore-backed config check on cold start blocks the app behind an "Update" CTA when below a minimum build version, failing open on network errors so a Firestore outage never bricks the app.

Mobile features

  • Real-time feed, comments, and notifications via Firestore listeners
  • Direct messaging with edit, delete, and reply-to
  • Email/password and Google OAuth, with email verification and onboarding gating
  • Optimistic UI with rollback on likes
  • Image pipeline with Cloudinary thumbnail/medium/full transforms and progressive loading
  • Block, report, and account deletion flows

Stack

React Native, Expo, TypeScript, Firebase (Auth, Firestore, Cloud Functions, Analytics, Crashlytics), Cloudinary, Hugging Face Inference API, EAS Build & Update.

Meowspace Play Store Listing

My Tech Stack

Frontend

JavaScript
TypeScript
React
React Native
Expo
Next.js
HTML5
CSS3
Tailwind
SASS

Backend

Node.js
Express.js
MongoDB
Socket.IO

Software Tools

Firebase
Cloudinary
GitHub
Git

Design & Workflow

Figma
Photoshop
Jira
Trello