Fikirden canlıya ürün çıkaran junior full‑stack geliştirici.

Ben Emir. Veri modeli, API, arayüz, test ve yayın: uçtan uca çalışıyorum. Laravel, Node.js ve Flutter ile canlıya iş çıkardım; ekibin kullandığı teknolojiye hızla uyum sağlarım. İki stajda canlı sistemlere kod teslim ettim; şimdi İstanbul'da bir ekibe tam zamanlı katılmak istiyorum.

Muhammet Emir Haksever
Muhammet Emir Haksever Junior Full-Stack Developer · Laravel, Node.js, Flutter İstanbul · tam zamanlı işe açık
fitcareer.emirhaksever.comCanlı
FitCareer uyum analizi: Laravel ilanı için %89 uyum ve %86 güven skoru FitCareer şirket paneli: aktif ilan, başvuru ve %89 ortalama aday uyumu FitCareer ilan arama: gerçek ilanlar farklı uyum ve güven skorlarıyla

Kendin gir. Aday: demo.aday@fitcareer.test · Şirket: demo.sirket@fitcareer.test · şifre: password

İlanınızdaki maddeler, kanıtıyla.

Junior bir full-stack geliştiricide aranan temel şeyler ve her birini nerede gösterebildiğim. Her satırda kontrol edebileceğin bir bağlantı var.

  1. Backend ve REST API

    FitCareer: Laravel 12 ve Sanctum ile REST API. Destek paneli: Swagger ile belgelenmiş, web paneli ve Flutter uygulamasının birlikte kullandığı API.

  2. Canlıya çıkmış iş

    FitCareer demo hesaplarıyla canlıda. Dijicrea stajındaki destek paneli ve Sümerler Grup sitesi canlıda. Kargo platformunu verilen tasarıma göre geliştirip Plesk'te SSL ve HSTS ile yayına aldım.

  3. Test ve CI

    FitCareer: 163 frontend testi ve backend feature testleri. Alışveriş Listem: 15 test; her push'ta GitHub Actions ile analiz ve web derleme.

  4. Veri ve yetkilendirme

    Destek paneli: admin, teknik ekip ve müşteri için policy tabanlı erişim (RBAC). Alışveriş Listem: kurallar uygulamada değil veritabanında; 27 satır düzeyi güvenlik kuralı.

  5. Hata ayıklama

    Bir ay boyunca aralıklı kesilen bir senkronun kök nedenini buldum. Hata kodda değildi; uygulama sunucusu işi öldürüyordu.

  6. Ekip içinde üretim

    İki staj: Dijicrea'da Laravel destek paneli ve kurumsal site; Toserof'ta canlı e-ticaret servisleri ve 15+ mağazada tema çalışması.

Çalışan ürünler.

Her birinde doğrulayabileceğin bir şey var: canlı demo, açık repo ya da gerçek ekran. Uçtan uca çalıştım; hepsinde ana geliştirici bendim. Toserof ve Dijicrea depoları şirketindir; herkese açık kod FitCareer, Alışveriş Listem ve Ne Yesem?.

FitCareer

CV'yi açıklanabilir bir Fit Score'a dönüştüren ve ilan verisini otomatik kaynak akışlarıyla taze tutan iş eşleştirme platformu.

fitcareer.emirhaksever.com/profile
FitCareer CV profili: CV yüklenince profil otomatik doluyor, profil gücü %100
  • Laravel 12 REST API (Sanctum), React + TypeScript arayüz
  • 61 aktif kaynak (Greenhouse, Lever, Workable…) scheduler + queue ile taranıyor; tekrar eden ilan kaynak + external ID ile yakalanıyor
  • Aday, şirket ve admin panelleri aynı veri akışında
  • Kişisel ürün. Ana geliştirici bendim: ürün, backend ve frontend. 163 frontend testi ve backend feature testleri. Canlı sitede iki demo hesap var.

Alışveriş Listem

Arkadaşlarla aynı listeyi eş zamanlı düzenlemeyi sağlayan Flutter uygulaması. Erişim kuralları uygulamada değil, veritabanında.

Liste detayı: kategoriye göre gruplanmış ürünler
Ana sayfa: aktif liste ve sayaçlar
AI asistan sohbeti
Listelerim: kendi ve paylaşılan listeler, demo verisi

Ekran görüntüleri demo verisiyle alındı.

  • Supabase (PostgreSQL), 27 satır düzeyi güvenlik (RLS) kuralı
  • Gemini anahtarı uygulamadan çıkarıldı; giriş zorunlu Edge Function üzerinden
  • Realtime senkron, veritabanı tetikleyicisiyle push bildirimi
  • Kişisel ürün. Ana geliştirici bendim.

Ne Yesem?

Yazdığın malzeme, TheMealDB Türk mutfağı listesinde süzülür. Favoriler, alışveriş listesi ve kendi tarifin telefonda Hive'da kalır. Kod herkese açık.

Ne Yesem ana sayfa: malzeme arama ve kendi tariflerin
Türk mutfağı listesi: Adana kebap ve diğer tarifler
Favori tarifler: Adana kebap kayıtlı
Alışveriş listesi: tarif malzemeleri
Yeni tarif ekleme: ad, malzemeler ve yapılış
  • TheMealDB'nin Türk mutfağı listesi; ilk malzeme yemek adının içinde aranır
  • Favoriler, alışveriş listesi ve kendi tarifin telefonda Hive'da kalır
  • Kişisel proje. Ana geliştirici bendim. Kod herkese açık. Mağaza yayını yok.

Destek / Talep Paneli

Dijicrea stajımda geliştirdim: üç rol için Laravel destek paneli ve aynı API'yi kullanan Flutter uygulaması; ofis Wi-Fi doğrulaması, push bildirimleri ve canlı mola sayacı.

destek.dijicrea.com/admin
Destek paneli yönetici ekranı: talep özetleri, son destek talepleri, öncelikli talepler ve müşteri talep hacmi
Aynı API'yi kullanan Flutter uygulaması: teknik ekip ana ekranı ve talep özeti

Web yönetici paneli ve Flutter uygulaması: tek Laravel backend, iki istemci. Panel demo verisiyle gösteriliyor.

  • Ofis Wi-Fi doğrulaması: uygulama bağlı ağın adını (SSID) okur; mesai saatinde ofis ağıyla eşleşirse backend günün ilk çevrim içi saatini kaydeder
  • Firebase push bildirimleri: yeni talep, atama, mesaj ve durum değişikliği ilgili kişinin telefonuna düşer (FCM HTTP v1, Android ve iOS)
  • Canlı mola sayacı: mola açıkken kalıcı bildirimde süre canlı akar; "Molayı durdur" bildirimden çalışır, 10 dakikada bir hatırlatma gelir
  • Admin, teknik ekip ve müşteri girişleri; policy tabanlı erişim (RBAC)
  • Tek token tabanlı backend, iki istemci: web paneli ve Flutter; Swagger belgeleri herkese açık
  • Form Request doğrulama, servis katmanı, ince controller, e-posta bildirimleri
  • iOS derlemesi ekip içinde TestFlight ile paylaşılıyordu. Bu akış Mac ister. Stajda bu dağıtımı gördüm.

Staj ve müşteri işleri

Her biri bir vaka sayfası açıyor.

Koddan bir parça.

FitCareer'ın ilan toplama hattı. 61 kaynaktan gelen her ilan bu metottan geçiyor: normalize et, kaynağın kurallarını doğrula, varsa güncelle, yoksa oluştur.

  • Bağımlılıklar constructor'dan geliyor; her adım tek başına test edilebiliyor.
  • Güncellemede first_seen_at korunuyor; ilanın yaşı doğru kalıyor.
  • Çağıran taraf ilanın yeni mi güncelleme mi olduğunu öğreniyor; bu bilgi kaynak sağlığı sayaçlarını besliyor.
  • findExisting eşleşmeyi kaynak ve external_id ile yapar. content_hash saklanır; arama onu kullanmaz.
GitHub'da gör
JobIngestionService.phpL23–62
public function ingest(JobSource $source, array $rawListing): array
{
    $attributes = $this->jobNormalizerService->normalize($source, $rawListing);
    $this->jobSourceIngestPolicyService->assertAcceptable($source, $attributes);
    $externalId = (string) $attributes['external_id'];
    $contentHash = (string) $attributes['content_hash'];

    $existing = $this->duplicateDetectionService->findExisting($source, $externalId, $contentHash);

    if ($existing !== null) {
        $incomingProviderUpdatedAt = $attributes['provider_updated_at'] ?? null;

        unset($attributes['first_seen_at'], $attributes['provider_updated_at']);

        $existing->fill($attributes);

        if ($incomingProviderUpdatedAt !== null) {
            $existing->provider_updated_at = $incomingProviderUpdatedAt;
        }

        $existing->save();

        $job = $this->scrapedJobEnrichmentService->enrich($existing);

        return [
            'job' => $job->fresh(['sourceProvider', 'skills']),
            'created' => false,
        ];
    }

    $attributes['first_seen_at'] = now();

    $job = Job::query()->create($attributes);
    $job = $this->scrapedJobEnrichmentService->enrich($job);

    return [
        'job' => $job->fresh(['sourceProvider', 'skills']),
        'created' => true,
    ];
}

Kimsenin bulamadığı bir hatayı nasıl bulurum.

Bir mağaza backend'inin günlük senkronu bir ay boyunca "bazen" yarıda kesildi. Aşağıda iz adım adım duruyor. Bütün işlerimde aynı disiplin var.

  • Ölç, tahmin etme.Tek değişkeni değiştir, ölç, kaydet.
  • Bozmadığını kanıtla.Test, önce/sonra ölçümü, her yayın için geri alma kopyası.
  • Kod sistemin yalnızca bir parçası.Sunucu, süreç yöneticisi ve zamanlayıcı da hesaba girer.
  1. Günlük senkron bazen yarıda kalıyor.

    Üç mağazanın koleksiyon sayfaları bu veriyle besleniyor. Bir aydır aralıklı olarak kesiliyordu.

  2. Bellek mi yetmiyor?

    1. teori. Çalışma sırasında belleği ölçtüm: normal.

  3. API limiti mi?

    2. teori. Bütün istekleri logladım: limit aşımı yok.

  4. Ağ mı?

    3. teori. Bağlantıyı izledim: kesinti yok.

  5. Uygulama sunucusu işi öldürüyordu.

    Passenger, uzun senkronu yürüten web sürecini "boşta" sanıp kapatıyordu. Kod doğruydu; onu çalıştıran ortam değildi.

  6. Senkronu web sürecinden ayırdım.

    Ayrı bir fırlatıcı süreç işi yürütüyor. Arıza bir daha yaşanmadı.

Yazının tamamını oku

Deneyim

  • Haziran 2026'da başladı
    Ağustos 2026

    Yazılım Geliştirici Stajyeri

    Toserof · İstanbul

    • Kişisel mağaza panosu, ekip aracı değil. 16 mağazadaki kendi optimizasyonlarımı, PageSpeed skorlarını ve tema pull yedeklerimi burada tuttum. Ekibe açmadan ayrıldım.
    • 15+ mağazada tema ve revize; yayından önce kopya temada test. Bir canlı mağazada mobil PageSpeed 42'den 78'e. Koleksiyon API'si üç mağazayı 3.635 ürünlük katalogdan besliyor; bir aylık aralıklı kesilme kodda değil, uygulama sunucusundaydı.
    • Kargo sitesinin genel tasarımını sahibi verdi. Ben koda döküp yayına aldım (üç dil, önce Romence). Ayrıldıktan sonraki revizeleri başkası yaptı.
    • Chatbot staj süresince gerçek müşteri mesajlarını yanıtladı: 7 dil, yaklaşık 60 sürüm. WhatsApp ve Instagram yayını için Meta tarafındaki adımları öğrendim. Bugün canlıda olmayabilir.
  • Şubat 2026
    Haziran 2026'da bitti

    Yazılım Geliştirici Stajyeri

    Dijicrea · İstanbul

    • RBAC ve e-posta bildirimleri içeren Laravel destek panelini geliştirdim
    • REST API'leri tasarlayıp Swagger ile belgeledim; Flutter istemciyi entegre ettim
    • Mobil akışları ben yazdım: ofis Wi-Fi (SSID) doğrulaması, Firebase push ve bildirimde canlı mola sayacı. iOS derlemesi ekipte TestFlight ile paylaşılıyordu; bu Mac ister, akışı stajda gördüm.
    • Sümerler Grup sitesini ve admin panelini ben geliştirdim. Proje adı, teslim tarihi, lokasyon ve kampanya talepleri o panelden giriliyor.
  • 2022 – 2026

    Bilişim Sistemleri ve Teknolojileri (Lisans)

    Burdur Mehmet Akif Ersoy Üniversitesi

Neyle üretime çıktım.

Yalnızca yukarıdaki projelerde görebileceğin teknolojiler. Her satır nerede kullanıldığını söylüyor.

Backend

PHP, Laravel, REST API, Sanctum, Eloquent, queue & scheduler, Form Request, Swagger/OpenAPI

Kullanıldığı yer: FitCareer, Destek Paneli, Sümerler Grup

Veri

MySQL, PostgreSQL (Supabase, RLS), MongoDB

Kullanıldığı yer: FitCareer, Alışveriş Listem, kargo platformu

Frontend

React, TypeScript, Vite, Tailwind CSS, JavaScript, Shopify Liquid

Kullanıldığı yer: FitCareer, Shopify temaları

Mobil

Flutter, Dart, Provider, Supabase, Firebase Messaging

Kullanıldığı yer: Alışveriş Listem, Destek Paneli mobil, Ne Yesem?

Node.js

Express, EJS, Gemini API, Meta Graph API, WhatsApp Cloud API, Shopify Admin API

Kullanıldığı yer: AI müşteri botu, koleksiyon API'si, kargo platformu

Kalite ve yayın

PHPUnit, Flutter test, GitHub Actions, Git, Lighthouse/PSI, cPanel, Plesk, Let's Encrypt

Kullanıldığı yer: FitCareer, Alışveriş Listem, performans çalışması, kargo platformu

Junior full‑stack geliştirici mi arıyorsunuz?

Full-stack, backend veya mobil bir ekibe tam zamanlı katılmak istiyorum. E-posta gönderin, genellikle bir gün içinde dönerim.

Küçük freelance işler için de yazabilirsiniz.