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

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/followersCountbut 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.
