Hello, I'm

Onur Macit.

Backend Developer

Python · Django · FastAPI · Go · PostgreSQL · Redis

I turn product requirements into reliable backends: APIs, data flows, and infra that holds up under real traffic.

Full metrics and work history are in my CV. This site covers what I shipped and how I approached it.

Experience

Backend Developer · Vyrin Lab

2024 - Present

Sole backend developer on an early-stage product team. Own APIs, caching, realtime messaging, and growth infrastructure for a live production product.

Apparelte

Visit ↗

Fashion social platform

Custom feed ranking, deep-link growth infrastructure, and realtime messaging on a live Django platform serving iOS users in three languages.

  • Replaced the chronological home feed with a multi-signal ranking algorithm: engagement scoring, freshness decay, tiered diversity shuffle, and pinned new content
  • Built the short-link and universal-link system (link.apparelte.com) handling Instagram in-app browsers, social crawlers, and App Store fallbacks; fixed a production 404 cascade caused by middleware ordering
  • Shipped WebSocket DMs with typing indicators and FCM push fan-out; implemented private accounts and follow requests with cross-endpoint visibility rules
  • Debugged production incidents end to end: stale i18n caches fixed with language-aware keys, duplicate push notifications stopped with a Redis cooldown
DjangoDRFChannelsPostgreSQLRedisCeleryFCMDigitalOcean

Freelance Developer · Self-employed

2023 - 2024

Built production web apps end to end for SMB clients, including korkmazelektrik and albayraklarotoservis, from requirements through deployment on their own hosting.

Projects

Screenshotbeam

Visit ↗

Screenshot SaaS

Context
Side-project SaaS: users submit URLs, system returns rendered screenshots. Needed concurrency, abuse protection, and billing from day one.
Constraint
Playwright in Python worked for a POC but cost ~200MB idle per instance and ~2s cold start on every new browser session. API could not wait on Chrome inside the request thread.
Decision
Split orchestrator from renderer, then went all-in on Go: a dedicated renderer (Fiber + go-rod) with a pre-warmed browser pool and DNS-aware SSRF checks, and the FastAPI orchestrator later rewritten in Go with a Redis Streams job queue and a circuit breaker on renderer calls. Rejected a Node Puppeteer pool; wanted to drop the Node dependency and control memory directly.
Outcome
Idle memory ~200MB → ~50MB per renderer. ~2s saved per render via warm browsers. Shipped Stripe billing, signed URLs, webhooks, an admin dashboard with API playground, and Prometheus/Grafana monitoring around the core.
Production lesson
Render service is paused today due to infra cost, but the split paid off: landing, auth, and billing stayed up without touching the renderer. Restart is a scaling problem, not a rewrite.
GoFibergo-rodPostgreSQLRedisDockerStripePrometheus

IMDb Clone

Source ↗

Movie database API

Context
Full movie database backend: JWT auth, ratings, watchlists, and media handling. Built to practice production patterns end to end, not as a toy CRUD app.
Constraint
Every feature had to survive a real deployment loop: migrations, cache invalidation, and media uploads could not depend on manual steps or a single environment.
Decision
Dockerized the full stack and wired GitHub Actions to run the test suite on every PR. Pushed caching into Redis with explicit invalidation rules and moved media to Cloudinary instead of local storage.
Outcome
Reproducible environment in one command, automated tests gating every merge, and a cache layer that cut repeated catalog queries without stale-data bugs.
Production lesson
CI/CD discipline on a side project pays off immediately: refactors became cheap because the pipeline catches regressions before they land.
DjangoDRFPostgreSQLRedisCeleryDockerGitHub Actions

Writing

I write about backend architecture and production lessons on Medium.

Medium

Contact

Open to backend roles where I can own systems end to end.

onurmaciit@gmail.com