🚀 MÜLAKAT PLATFORMU — NETFLIX TARZI UI AKIŞ DOKÜMANI
(Developer-Ready / Integration-Ready)
Bu doküman üç bölümden oluşur:
Üst bilgi mimarisi – sayfa düzeyi akış
Detaylı UI akışı – kullanıcı hareketlerine göre sayfalar, modallar, dinamik satırlar
AI Analizi asenkron akışı – verinin UI’ya nasıl yansıyacağı
- 🧩 ÜST BİLGİ MİMARİSİ AKIŞI
Ana sayfa UI şu satırlardan dinamik oluşturulur (Netflix gibi row-based layout):
- Son Gelen Başvurular
Kaynak: /applications?sort=created_at:desc
- Favori Mülakatlar (HR tarafından işaretlenenler)
Kaynak: /interviews?favorite=true&userId=hrUserId
- AI Skoru Yüksek Adaylar (dinamik)
Kaynak: /interviews?sort=ai_score:desc&limit=20
- Pozisyon Bazlı Mülakat Koleksiyonları (dinamik)
Backend sağlıyor: /positions → her position için: /interviews?position_id=X
Bu satırların tamamı dinamik oluşturulur. UI tarafı:
positions.map(position => ( ))- 🎬 DETAYLI UI AKIŞ ŞEMASI (ADIM ADIM)
Aşağıdaki akış diyagramı developer’ın UI’ı sıfır zahmetle inşa etmesi için hazırlanmıştır.
A) Ana Sayfa → Mülakat Kartına Tıklama
Kullanıcı aksiyonu: Mülakat kartına tıklar (Netflix’te bir diziye tıklamak gibi)
UI davranışı: Fullscreen modal overlay açılır.
B) Mülakat Modalı Yapısı
Modal açılınca ilk render şu sırayla gelir:
| Candidate summary panel (top area) | | - Aday ismi (tıklanabilir → Candidate Profile) | | - Pozisyon | | - Tarih | | - Genel AI Özet Yazısı (async load) | | - Genel AI Skorları (async load) |
| Bölüm Listesi / Soru Listesi (player altında) | | - Soru #1: title + süre + analyzed badge | | - Soru #2: ... |
Modal Davranış Kuralları (kritik)
Modal kapansa bile video kaldığı yerden devam eder. lastWatchedTime localStorage veya backend kullanıcı state’inde tutulabilir.
Bölüm listesi modal içinde player’ın hemen altında yer alır.
Genel analiz modal açıldığında async yüklenir: /ai/interview/:id/general-analysis
Soru analizleri bölüm tıklanınca async yüklenir: /ai/interview/:iid/question/:qid
C) Bölüm (Soru) Seçildiğinde Akış
Kullanıcı soru listesinde bir soruya tıklayınca:
Player, ilgili soru videosuna geçer (tek dosyaysa startTime, endTime segment → jump logic)
UI soru bilgisi panelini günceller:
Question #2
- Soru title
- Soru açıklaması
- Soruya ait AI analizleri (async)
AI analizleri yüklenene kadar skeleton gösterilir.
D) Aday Profiline Tıklandığında
Candidate summary panelindeki aday ismine tıklanır:
→ /candidate/:id
Bu sayfa şunları içerir:
Aday temel bilgiler (isim, eposta, pozisyonlar)
Tüm mülakat geçmişi (Netflix’te yapımcının diğer işleri gibi)
Tüm AI skorları (genel + soru bazlı)
CV / dosyalar
HR notları (editable)
Favoriye eklenen mülakatları gösteren özel bölüm
Bu sayfa ajana backend’den JSON aldıkça componentleri dolduracak şekilde tasarlanır.
E) Filtre Akışı (Ana Sayfa Üstü)
Kullanıcı ana sayfada sağ üstteki filtre butonuna basar:
Filtre opsiyonları:
Pozisyon
AI Skor aralığı (slider)
Tarih aralığı
Reviewer
Etiket (Strong, Medium, Weak)
UI davranışı:
Filtreler aktive edilince ana sayfadaki tüm satırlar yeniden hesaplanır.
Her row dinamik API isteği yapar.
F) Kıyaslama Modu (Aynı pozisyon için)
Kullanıcı modal içinde “Compare” butonuna tıklar:
→ Sidebar veya mini popover açılır:
AI Score Comparison Chart Skill Breakdown Comparison Communication vs Problem-Solving vs Technical
Bu mod sadece aynı pozisyon ID’ye sahip mülakatlarda görünür.
G) Favori Mülakat Ekleme Akışı
HR kullanıcı modal ya da kart üzerinde favoriye tıklar:
→ /favorite POST → Ana sayfadaki “Favoriler” satırı kendi kendine güncellenir.
Netflix davranışı gibi: immediate UI refresh + optimistic update.
- 🧠 AI Analizleri Asenkron Veri Akışı
Bu bölüm ajana UI ile backend arasındaki asenkron yapıyı doğru kurdurmak için.
- Soru videoları backend’den AI server’a akıyor
Backend zaten her soru kaydedildiğinde AI server’a gönderiyor. UI bu sürece karışmaz.
- UI analizleri GET ile çeker UI → Backend endpoint'leri:
Genel analiz: GET /ai/interview/:interviewId/general-analysis
Soru analizi: GET /ai/interview/:interviewId/questions/:questionId/analysis
UI tarafında:
İlk render: skeleton
Veri gelince: panel güncellenir
Timeout/retry yapılabilir
AI verisi gecikirse UI bozmaz
Partial data geldiğinde bile render edilir
- Status polling opsiyonu
İstersen AI tarafı uzun süren işlerde polling yapılabilir:
GET /ai/interview/:iid/status
UI şu yöntemle yönetir:
Genel analiz yoksa → “Analiz hazırlanıyor…” badge
Soru analizleri yoksa → “Bu soru analiz ediliyor…”
- 🧱 GENEL UYGULAMA MİMARİSİ ÖZETİ (UI perspektifi)
UI Akışı:
Homepage Rows (dynamic) InterviewCard → onClick → Modal Modal Load general data Load video Load segments Load general AI async User selects question Load question video segment Load question AI async CandidatePage Load candidate info Load all interviews Load AI history Load HR notes
- 📌 Bu Dokümanın Amacı
Bu belgeyi takımındaki UI geliştiriciye verdiğinde:
Var olan UI component library’sine bu akışı entegre eder.
Backend API’lerini tüketmek için hangi UI davranışının beklendiğini bilir.
Netflix tarzı satır yapısının nasıl dinamik oluşturulacağını anlar.
Modal player, segment navigation, AI async yükleme gibi “zor” davranışları net bir şekilde uygular.
Tasarımcı için gerekli olan sayfa hiyerarşisi tamamlanmıştır.
React / Vue / Next / Remix fark etmeksizin uygulanabilir.