Software engineer, Istanbul

ÖzgürKarakaya

I'm a backend-leaning junior software engineer in Istanbul. I build products with Java/Spring and Flutter, from the server to the app.

Sokak Efsaneleri: the Balat street with the animals
Sokak Efsaneleri: a legendary cat card
Blindy: the candle-lit table on the home screen
Blindy
in closed beta at getblindy.app
Sokak Efsaneleri
in App Store review
Surebet Analyzer
code on GitHub

Blindy

A dating app where two students talk anonymously for seven minutes before either of them sees a face.

  • Reactive Java backend with a WebSocket gateway fed by Redis pub/sub
  • Flutter app covered by about 3,200 widget and golden tests
  • Runs on my own server behind Cloudflare, with encrypted nightly backups
Read the case study: Blindy
Blindy: the match screen with two candles and the two anonymous nicknames
Blindy: a chat that opened after both people said yes
Blindy: the second round of an anonymous chat, both answers to a question and three choices for a first date

Sokak Efsaneleri

A slide-and-merge puzzle about Istanbul's street animals. Version 1.0 went to App Store review in October 2026.

  • 500 levels, every one checked by a breadth-first solver
  • Difficulty tuned against a simulated player fitted to real play data
  • Built on Windows and shipped to iOS through a cloud Mac pipeline
Read the case study: Sokak Efsaneleri
Sokak Efsaneleri: a cat merging into its legendary form on the board
Sokak Efsaneleri: the album of collected animals, four stages for each
Sokak Efsaneleri: a level board with cats, dogs and obstacles on a seaside promenade

Surebet Analyzer

Reads football odds from several sources in real time and flags price combinations whose implied probabilities add up to less than 100%.

  • Async collectors over WebSocket, WAMP and HTTP feeds
  • Stakes split in whole kuruş, with an exact OR-Tools CP-SAT model for manual analysis
  • Backend covered by 1,209 pytest tests, type-checked with mypy in strict mode
Read the case study: Surebet Analyzer
Surebet Analyzer: the list of found opportunities, with a card showing the net difference for one match
Surebet Analyzer: source health, with each anonymised source, its feed type and whether it is active
Surebet Analyzer: the detail of one match with the calculated net difference and the selected prices, each from its own source, with their stakes

How they work

Each project, reduced to the path its data takes. The case studies open these paths up step by step.

Blindy

dating app, closed beta

Read the case study
  1. Flutter appRiverpod, Dio, WebSocket

    Sends the message to core-api with its own id (clientMsgId), so a retry can never create a copy.

  2. core-apiSpring WebFlux, 14 modules

    Stores it once. A second request with the same id is answered from the stored row.

  3. Postgres + Redissource of truth, queue, pub/sub

    Postgres keeps that one row; the event goes to a Redis channel named after the receiver.

  4. Chat gatewayholds sockets, no database

    Whichever gateway holds their WebSocket is subscribed to that channel and passes the message on.

  5. Their phoneWebSocket, or Firebase if offline

    Gets the message over the WebSocket. If it is offline, a Firebase notification wakes it.

Sokak Efsaneleri

mobile game, App Store

Read the case study
  1. Level generatorseeded and deterministic

    Builds a candidate board from a seed. The same seed always gives the same board.

  2. BFS solverfinds the shortest win

    Finds the shortest win. The level is kept only if that depth fits its place in a block of ten.

  3. Unity clientC#, six layers

    Ships in the game already solved; with the player's consent, playing it sends level_start and level_end.

  4. BigQuerydaily export, level funnel

    A daily export turns those events into a level funnel that shows where people get stuck.

  5. Remote Config121 live parameters

    The game reads 121 parameters from it, so balance can change without a new release.

Surebet Analyzer

real-time analysis

Read the case study
  1. Odds feedsWebSocket, WAMP, HTTP

    A price changes at one source. Depending on the source, it is read over WebSocket, WAMP or HTTP.

  2. Collectorsasyncio, every 30 s

    One asyncio cycle reads all sources at once, every 30 seconds by default, and stores the batch.

  3. Event matcherfuzzy names, kickoff ±3 h

    Finds the same match at the other sources: names that agree once normalised, kickoffs at most 3 hours apart.

  4. Stake splitwhole kuruş, CP-SAT for manual analysis

    Adds up the implied probabilities of one price per outcome. Under 100%, the budget is split in whole kuruş.

  5. PWA + Telegramper-user alerts

    The PWA lists the match, and users whose threshold it clears get one Telegram message, edited as prices move.

Experience

  1. Jul – Sep 2026

    Software Development InternFintecia

    Backend work on a production core banking platform in Java and Spring. I extended live services without breaking compatibility, fixed build and dependency issues in a large codebase and wrote multi-table Oracle SQL for analysis and test data.

  2. Aug 2025 – Jan 2026

    Flutter Developer, freelanceRootraft Coffee App

    Cross-platform features with Flutter and Firebase: sign-in, Firestore, push notifications, QR transactions, Google Maps and Iyzico payments.

  3. Jun – Aug 2025

    Online InternFLO Group

    Training in ERP, supply chain and e-commerce. I designed and presented a stock tracking project.

  4. 2022 – 2026

    B.S. Information Systems and TechnologiesYeditepe University

    Blindy started here as my graduation project.

What I work with

Backend
Java 17, Spring Boot, Spring WebFlux, R2DBC, REST and OpenAPI, WebSocket
Data
PostgreSQL, Redis, Oracle SQL, SQLite, BigQuery
Mobile and web
Flutter, Riverpod, React, TypeScript, Next.js
Games
Unity 6, C#
Python
FastAPI, asyncio, OR-Tools, pytest, Hypothesis
Infrastructure
Docker Compose, Caddy, Cloudflare, GitHub Actions, Codemagic, Firebase
AI-assisted work
Claude Code and Codex every day, with written agent instructions in each repository

Hiring for a backend or mobile role?

I'm looking for a junior software engineer role, backend first. Email is the fastest way to reach me.

ozgur.karakayabs@gmail.com

Off the clock

DJ

I DJ, and my mixes are on SoundCloud.

The player loads from soundcloud.com only after you press play.

Photography

Photos I take around the city.