Projeler.

Dijital zanaatkarlığın küratörlüğünü yapıyorum. Tasarım, kod ve kullanıcı deneyiminin kesişim noktalarını keşfedin.

Featured Projects

Drag to explore
Web

BinauralStudio

Binaural Studio: Web Tabanlı Nöro-Akustik Frekans Modülatörü Binaural Studio, insan beyninin belirli frekanslarla senkronize olma yeteneğini (Brainwave Entrainment) temel alan, tamamen web tarayıcısı üzerinde çalışan profesyonel bir ses sentezleme aracıdır. Bu proje, harici ses dosyalarına ihtiyaç duymadan, gerçek zamanlı matematiksel algoritmalarla saf sinüs dalgaları üreterek bilişsel performansı optimize etmeyi hedefler. 🧠 Binaural Vuruş (Binaural Beats) Nedir? Binaural vuruşlar, aslında kulakların duyduğu bir sesten ziyade, beynin yarattığı bir işitsel illüzyondur. Bilimsel Mekanizma Sağ ve sol kulağa birbirine yakın ama farklı iki frekans (örneğin 200 Hz ve 210 Hz) iletildiğinde, beyin sapındaki Superior Olivary Complex, bu iki sinyali birleştirir. Beyin, aradaki farkı (10 Hz) üçüncü bir ses olarak algılar ve elektriksel aktivitesini bu fark frekansına eşitler. Buna "Frekans Takip Tepkisi" denir. Hedeflenen Beyin Dalgaları Uygulama, kullanıcının ihtiyacına göre şu spektrumlar arasında geçiş yapar: Delta (0.5 - 4 Hz): Derin uyku ve fiziksel yenilenme. Theta (4 - 8 Hz): Derin meditasyon, yaratıcılık ve REM uykusu. Alpha (8 - 14 Hz): Rahatlamış ama uyanık zihin, stres yönetimi. Beta (14 - 30 Hz): Aktif odaklanma, problem çözme ve analitik düşünme. Gamma (30+ Hz): Maksimum bilişsel kapasite ve bilgi sentezleme. 🛠️ Teknik Mimari Piyasadaki hazır MP3 kayıtlarının aksine, bu projede sesler Web Audio API kullanılarak anlık olarak (on-the-fly) üretilir. Bu yaklaşım, ses kalitesinde kayıp yaşanmasını engeller ve sonsuz bir döngü imkanı sunar. Uygulanan Mühendislik Çözümleri Stereo Panner Logic: Sol ve sağ kanalların birbirine karışmasını önlemek için bağımsız StereoPannerNode mimarisi kullanılmıştır. Gerçek binaural etki için stereo kulaklık kullanımı bu katmanla zorunlu kılınmıştır. Exponential Ramping: Frekans geçişleri sırasında oluşan mikro takılmaları ve "çıtırtı" (audio pop) seslerini engellemek için sinyal dalgaları milisaniyeler içinde matematiksel olarak eğilmiştir. Waveform Modulation: Sinüs, Üçgen, Testere ve Kare dalga formları entegre edilerek sesin dokusu (tonu) özelleştirilebilir hale getirilmiştir. 🚀 Teknolojik Stack Dil: Vanilla JavaScript (ES6+) Ses Motoru: Web Audio API (Low-level DSP) Arayüz: Tailwind CSS (Dark Mode & Glassmorphism) Deployment: Vercel 📂 Kullanım ve Kurulum Uygulamayı başlattığınızda "BAŞLAT" butonuna tıklayarak tarayıcının ses motorunu uyanmaya zorlayın. Hedeflediğiniz zihinsel duruma göre (Odaklanma, Uyku vb.) hazır modlardan birini seçin. Önemli: Binaural etkinin oluşması için mutlaka stereo kulaklık kullanın. Geliştirici Notu: Proje geliştirilirken sistem kaynaklarını minimize etmek adına herhangi bir ağır kütüphane kullanılmamıştır. Görseller

JavaScriptTailwind
Web

Jiroskop - 3D Modelleme

Telefonunuzu Bir Sihirli Değneğe Dönüştürün: Web Tabanlı 3D Jiroskop Kontrolcüsü Selamlar! Ben Yunus. Bugün sizlerle üzerinde büyük keyifle çalıştığım, fiziksel dünya ile dijital ortamı gerçek zamanlı olarak birbirine bağlayan yeni projemi paylaşmak istiyorum: Web Tabanlı 3D Jiroskop Kontrolcüsü. Biliyorsunuz, sistem mimarileri ve interaktif web deneyimleri üzerine kafa yormayı seviyorum. Bu projede amacım basitti: Herhangi bir uygulama indirmeden, sadece telefonumun kamerasından bir QR kod okutarak bilgisayar ekranımdaki 3D bir modeli (bir arabayı veya telefonu) kendi elimdeymiş gibi uzayda döndürebilmek. Kulağa basit geliyor değil mi? Ancak işin içine farklı eksen uzayları, canlı soket bağlantıları, çoklu kullanıcı oturumları ve "deployment" süreçleri girince, fizik kurallarını backend'de bükmek sandığımdan biraz daha karmaşık bir hal aldı. Gelin bu sistemi nasıl inşa ettiğime ve hangi aşamalardan geçtiğime yakından bakalım. 🛠️ Teknoloji Yığını (Tech Stack) Projeyi modern, ölçeklenebilir ve tip güvenli bir yapıda tutmak için aşağıdaki teknolojileri kullandım: Frontend: Vite, TypeScript, Three.js, TailwindCSS Backend: Node.js, Express.js, Socket.IO Deployment: Vercel (Client), Render (API) Tasarım Dili: Spatial Computing & Minimalist Industrial (Buzlu cam efektleri, monokrom tonlar) 🚀 Geliştirme Aşamaları ve Karşılaştığım Zorluklar Bu proje tek bir gecede ortaya çıkmadı. Sistemi sağlam bir temele oturtmak için mimariyi adım adım ve çok detaylı bir şekilde inşa etmem gerekti. Aşama 1: Prototip ve HTTP Çıkmazı Başlangıçta her şeyi tek bir klasörde, basit HTML ve JavaScript dosyalarıyla kurmuştum. Sunucuyu ayağa kaldırıp telefondan bağlandığımda acı bir gerçekle yüzleştim: iOS ve modern mobil tarayıcılar, HTTP bağlantılarında jiroskop (DeviceOrientationEvent) verisine erişimi güvenlik gerekçesiyle tamamen engelliyordu. Sistemi test edebilmek için geliştirme ortamında (localhost) Vite'ın @vitejs/plugin-basic-ssl eklentisiyle otomatik HTTPS sertifikaları üreterek yerel ağda güvenli bir tünel açtım. Bu sayede ilk verileri bilgisayara akıtabilmeyi başardım. Aşama 2: Mimariyi Parçalamak ve TypeScript'e Geçiş Proje büyüdükçe eski require (CommonJS) yapısı ve global değişkenler baş ağrıtmaya başladı. Modeller bazen jiroskop verisi gelmese bile kendi kendine dönüyor, 3000 portu çakışıp sunucuyu çökertiyordu. Derin bir nefes aldım ve projeyi baştan aşağı TypeScript ile refactor ettim. Sistemi src/client ve src/server olarak iki izole dünyaya böldüm. Socket.IO olaylarını Interface'ler ile tip güvenli (type-safe) hale getirdim. Artık sunucu çökmüyor, boşta kalan portu dinamik olarak bulup ayağa kalkıyordu. Aşama 3: 3D Dünyanın Matematiği (Three.js Eksenleri) En çok zaman harcadığım (ve kahve tükettiğim) kısım burasıydı. Telefonu öne eğiyordum, ekrandaki model sağa dönüyordu! Bunun sebebi, telefonun ürettiği Euler açılarının (Alpha, Beta, Gamma) referans sistemiyle, Three.js'in kullandığı Y-Yukarı (Y-Up, Right-Handed) koordinat sisteminin tamamen farklı olmasıydı. Bu uyuşmazlığı çözmek için THREE.Euler üzerinde özel bir eksen eşlemesi (mapping) yaptım. Gerekli yerlerde radyan dönüşümleri ve ters yönlü hareketleri engellemek için negatif çarpanlar kullanarak modeli telefonun tam bir yansıması haline getirdim. Ayrıca, yüklenen farklı .glb modellerinin (kimisi devasa, kimisi karınca kadar) ekranda standart görünmesi için sahneye giren modelin Bounding Box'ını (sınır kutusunu) hesaplayıp otomatik ölçekleme (auto-scaling) ve merkeze alma algoritması yazdım. Aşama 4: Canlıya Alma (Deployment) Cehennemi Projeyi Vercel ve Render'a yüklerken tam bir kaos yaşandı. Vercel tarafı, backend'in TypeScript kodlarını da derlemeye çalışıp transforming... aşamasında sonsuz döngüye girerek dondu. Render tarafı ise, bir Linux makinesi olduğu için benim Windows'ta oluşturduğum package-lock.json yüzünden Rollup derleme hatası (@rollup/rollup-linux-x64-gnu bulunamadı) verip çöktü. Çözüm: Monolitik yapıyı deployment aşamasında bıçak gibi ayırdım. Vercel için arka planı tamamen görmezden gelmesini sağlayan bir vercel.json kuralı yazdım. Render'da ise vite build süreçlerini tamamen devre dışı bırakıp sunucuyu direkt node --import tsx ile canlıya aldım. Aşama 5: Arayüz ve Çoklu Oturum Yönetimi (Rooms) Sistemi internete açtığımda yeni bir sorun doğdu: Herkes aynı kanalı dinlerse, benim telefonum başka birinin ekranındaki arabayı döndürürdü. Bunu çözmek için Oda (Room) Bazlı Oturum mimarisini kurdum. Masaüstü arayüzü açıldığında benzersiz bir UUID oluşturuyor ve bunu bir QR koda gömüyor. Telefon kamerasıyla bu QR kodu okuttuğunuzda, URL üzerinden o özel odaya katılıyorsunuz. Böylece veriler sadece sizin cihazlarınız arasında akıyor. Son dokunuş olarak, arayüzü Spatial Computing trendlerine uygun; buzlu cam efektleri (Glassmorphism), temiz ince tipografiler ve verilerin aktığı devasa monospace fontlarla baştan tasarladım. Ayrıca mobil arayüze bir switch ekleyerek jiroskop dışında Touchpad ile kontrol opsiyonu da sundum. Sonuç Sadece bir cihazı diğerine bağlamaktan öte, donanım verilerini web soketleri üzerinden bir 3D grafik motoruyla senkronize etmek muazzam bir deneyimdi. Frontend'in estetiğini Backend'in katı mantığıyla birleştirdiğinizde, bir web tarayıcısının sınırlarının ne kadar genişleyebileceğini görmek gerçekten heyecan verici. Bu projenin kodlarını detaylıca incelemek veya kendi modellerinizi yükleyip test etmek isterseniz, GitHub repoma göz atabilirsiniz. Yeni projelerde, sınırları daha da zorlamak üzere görüşürüz! Yunus. Görseller:

Node.jsViteTypeScript+2

Tüm Çalışmalar

Web

BinauralStudio

Binaural Studio: Web Tabanlı Nöro-Akustik Frekans Modülatörü Binaural Studio, insan beyninin belirli frekanslarla senkronize olma yeteneğini (Brainwave Entrainment) temel alan, tamamen web tarayıcısı üzerinde çalışan profesyonel bir ses sentezleme aracıdır. Bu proje, harici ses dosyalarına ihtiyaç duymadan, gerçek zamanlı matematiksel algoritmalarla saf sinüs dalgaları üreterek bilişsel performansı optimize etmeyi hedefler. 🧠 Binaural Vuruş (Binaural Beats) Nedir? Binaural vuruşlar, aslında kulakların duyduğu bir sesten ziyade, beynin yarattığı bir işitsel illüzyondur. Bilimsel Mekanizma Sağ ve sol kulağa birbirine yakın ama farklı iki frekans (örneğin 200 Hz ve 210 Hz) iletildiğinde, beyin sapındaki Superior Olivary Complex, bu iki sinyali birleştirir. Beyin, aradaki farkı (10 Hz) üçüncü bir ses olarak algılar ve elektriksel aktivitesini bu fark frekansına eşitler. Buna "Frekans Takip Tepkisi" denir. Hedeflenen Beyin Dalgaları Uygulama, kullanıcının ihtiyacına göre şu spektrumlar arasında geçiş yapar: Delta (0.5 - 4 Hz): Derin uyku ve fiziksel yenilenme. Theta (4 - 8 Hz): Derin meditasyon, yaratıcılık ve REM uykusu. Alpha (8 - 14 Hz): Rahatlamış ama uyanık zihin, stres yönetimi. Beta (14 - 30 Hz): Aktif odaklanma, problem çözme ve analitik düşünme. Gamma (30+ Hz): Maksimum bilişsel kapasite ve bilgi sentezleme. 🛠️ Teknik Mimari Piyasadaki hazır MP3 kayıtlarının aksine, bu projede sesler Web Audio API kullanılarak anlık olarak (on-the-fly) üretilir. Bu yaklaşım, ses kalitesinde kayıp yaşanmasını engeller ve sonsuz bir döngü imkanı sunar. Uygulanan Mühendislik Çözümleri Stereo Panner Logic: Sol ve sağ kanalların birbirine karışmasını önlemek için bağımsız StereoPannerNode mimarisi kullanılmıştır. Gerçek binaural etki için stereo kulaklık kullanımı bu katmanla zorunlu kılınmıştır. Exponential Ramping: Frekans geçişleri sırasında oluşan mikro takılmaları ve "çıtırtı" (audio pop) seslerini engellemek için sinyal dalgaları milisaniyeler içinde matematiksel olarak eğilmiştir. Waveform Modulation: Sinüs, Üçgen, Testere ve Kare dalga formları entegre edilerek sesin dokusu (tonu) özelleştirilebilir hale getirilmiştir. 🚀 Teknolojik Stack Dil: Vanilla JavaScript (ES6+) Ses Motoru: Web Audio API (Low-level DSP) Arayüz: Tailwind CSS (Dark Mode & Glassmorphism) Deployment: Vercel 📂 Kullanım ve Kurulum Uygulamayı başlattığınızda "BAŞLAT" butonuna tıklayarak tarayıcının ses motorunu uyanmaya zorlayın. Hedeflediğiniz zihinsel duruma göre (Odaklanma, Uyku vb.) hazır modlardan birini seçin. Önemli: Binaural etkinin oluşması için mutlaka stereo kulaklık kullanın. Geliştirici Notu: Proje geliştirilirken sistem kaynaklarını minimize etmek adına herhangi bir ağır kütüphane kullanılmamıştır. Görseller

JavaScriptTailwind
Web

Jiroskop - 3D Modelleme

Telefonunuzu Bir Sihirli Değneğe Dönüştürün: Web Tabanlı 3D Jiroskop Kontrolcüsü Selamlar! Ben Yunus. Bugün sizlerle üzerinde büyük keyifle çalıştığım, fiziksel dünya ile dijital ortamı gerçek zamanlı olarak birbirine bağlayan yeni projemi paylaşmak istiyorum: Web Tabanlı 3D Jiroskop Kontrolcüsü. Biliyorsunuz, sistem mimarileri ve interaktif web deneyimleri üzerine kafa yormayı seviyorum. Bu projede amacım basitti: Herhangi bir uygulama indirmeden, sadece telefonumun kamerasından bir QR kod okutarak bilgisayar ekranımdaki 3D bir modeli (bir arabayı veya telefonu) kendi elimdeymiş gibi uzayda döndürebilmek. Kulağa basit geliyor değil mi? Ancak işin içine farklı eksen uzayları, canlı soket bağlantıları, çoklu kullanıcı oturumları ve "deployment" süreçleri girince, fizik kurallarını backend'de bükmek sandığımdan biraz daha karmaşık bir hal aldı. Gelin bu sistemi nasıl inşa ettiğime ve hangi aşamalardan geçtiğime yakından bakalım. 🛠️ Teknoloji Yığını (Tech Stack) Projeyi modern, ölçeklenebilir ve tip güvenli bir yapıda tutmak için aşağıdaki teknolojileri kullandım: Frontend: Vite, TypeScript, Three.js, TailwindCSS Backend: Node.js, Express.js, Socket.IO Deployment: Vercel (Client), Render (API) Tasarım Dili: Spatial Computing & Minimalist Industrial (Buzlu cam efektleri, monokrom tonlar) 🚀 Geliştirme Aşamaları ve Karşılaştığım Zorluklar Bu proje tek bir gecede ortaya çıkmadı. Sistemi sağlam bir temele oturtmak için mimariyi adım adım ve çok detaylı bir şekilde inşa etmem gerekti. Aşama 1: Prototip ve HTTP Çıkmazı Başlangıçta her şeyi tek bir klasörde, basit HTML ve JavaScript dosyalarıyla kurmuştum. Sunucuyu ayağa kaldırıp telefondan bağlandığımda acı bir gerçekle yüzleştim: iOS ve modern mobil tarayıcılar, HTTP bağlantılarında jiroskop (DeviceOrientationEvent) verisine erişimi güvenlik gerekçesiyle tamamen engelliyordu. Sistemi test edebilmek için geliştirme ortamında (localhost) Vite'ın @vitejs/plugin-basic-ssl eklentisiyle otomatik HTTPS sertifikaları üreterek yerel ağda güvenli bir tünel açtım. Bu sayede ilk verileri bilgisayara akıtabilmeyi başardım. Aşama 2: Mimariyi Parçalamak ve TypeScript'e Geçiş Proje büyüdükçe eski require (CommonJS) yapısı ve global değişkenler baş ağrıtmaya başladı. Modeller bazen jiroskop verisi gelmese bile kendi kendine dönüyor, 3000 portu çakışıp sunucuyu çökertiyordu. Derin bir nefes aldım ve projeyi baştan aşağı TypeScript ile refactor ettim. Sistemi src/client ve src/server olarak iki izole dünyaya böldüm. Socket.IO olaylarını Interface'ler ile tip güvenli (type-safe) hale getirdim. Artık sunucu çökmüyor, boşta kalan portu dinamik olarak bulup ayağa kalkıyordu. Aşama 3: 3D Dünyanın Matematiği (Three.js Eksenleri) En çok zaman harcadığım (ve kahve tükettiğim) kısım burasıydı. Telefonu öne eğiyordum, ekrandaki model sağa dönüyordu! Bunun sebebi, telefonun ürettiği Euler açılarının (Alpha, Beta, Gamma) referans sistemiyle, Three.js'in kullandığı Y-Yukarı (Y-Up, Right-Handed) koordinat sisteminin tamamen farklı olmasıydı. Bu uyuşmazlığı çözmek için THREE.Euler üzerinde özel bir eksen eşlemesi (mapping) yaptım. Gerekli yerlerde radyan dönüşümleri ve ters yönlü hareketleri engellemek için negatif çarpanlar kullanarak modeli telefonun tam bir yansıması haline getirdim. Ayrıca, yüklenen farklı .glb modellerinin (kimisi devasa, kimisi karınca kadar) ekranda standart görünmesi için sahneye giren modelin Bounding Box'ını (sınır kutusunu) hesaplayıp otomatik ölçekleme (auto-scaling) ve merkeze alma algoritması yazdım. Aşama 4: Canlıya Alma (Deployment) Cehennemi Projeyi Vercel ve Render'a yüklerken tam bir kaos yaşandı. Vercel tarafı, backend'in TypeScript kodlarını da derlemeye çalışıp transforming... aşamasında sonsuz döngüye girerek dondu. Render tarafı ise, bir Linux makinesi olduğu için benim Windows'ta oluşturduğum package-lock.json yüzünden Rollup derleme hatası (@rollup/rollup-linux-x64-gnu bulunamadı) verip çöktü. Çözüm: Monolitik yapıyı deployment aşamasında bıçak gibi ayırdım. Vercel için arka planı tamamen görmezden gelmesini sağlayan bir vercel.json kuralı yazdım. Render'da ise vite build süreçlerini tamamen devre dışı bırakıp sunucuyu direkt node --import tsx ile canlıya aldım. Aşama 5: Arayüz ve Çoklu Oturum Yönetimi (Rooms) Sistemi internete açtığımda yeni bir sorun doğdu: Herkes aynı kanalı dinlerse, benim telefonum başka birinin ekranındaki arabayı döndürürdü. Bunu çözmek için Oda (Room) Bazlı Oturum mimarisini kurdum. Masaüstü arayüzü açıldığında benzersiz bir UUID oluşturuyor ve bunu bir QR koda gömüyor. Telefon kamerasıyla bu QR kodu okuttuğunuzda, URL üzerinden o özel odaya katılıyorsunuz. Böylece veriler sadece sizin cihazlarınız arasında akıyor. Son dokunuş olarak, arayüzü Spatial Computing trendlerine uygun; buzlu cam efektleri (Glassmorphism), temiz ince tipografiler ve verilerin aktığı devasa monospace fontlarla baştan tasarladım. Ayrıca mobil arayüze bir switch ekleyerek jiroskop dışında Touchpad ile kontrol opsiyonu da sundum. Sonuç Sadece bir cihazı diğerine bağlamaktan öte, donanım verilerini web soketleri üzerinden bir 3D grafik motoruyla senkronize etmek muazzam bir deneyimdi. Frontend'in estetiğini Backend'in katı mantığıyla birleştirdiğinizde, bir web tarayıcısının sınırlarının ne kadar genişleyebileceğini görmek gerçekten heyecan verici. Bu projenin kodlarını detaylıca incelemek veya kendi modellerinizi yükleyip test etmek isterseniz, GitHub repoma göz atabilirsiniz. Yeni projelerde, sınırları daha da zorlamak üzere görüşürüz! Yunus. Görseller:

Node.jsViteTypeScript+2
Web

CloudVault

Kendi Bulut Depolamamı Yaptım: YunusSayginli Cloud Selamlar! Bugün uzun zamandır üzerinde çalıştığım ve beni çok heyecanlandıran bir projemi sizlerle paylaşmak istiyorum: YunusSayginli Cloud. Biliyorsunuz, veri depolama ihtiyacımız her geçen gün artıyor. Fotoğraflar, videolar, belgeler derken Google Drive, iCloud veya Mega gibi servislere her ay ücret ödemek zorunda kalıyoruz. Üstelik verilerimiz başkalarının sunucularında duruyor. "Neden kendi bilgisayarımdaki boş alanı, dünyanın her yerinden erişebileceğim bir buluta dönüştürmeyeyim?" dedim ve kodlamaya başladım. Nedir Bu Sistem? Nasıl Çalışır? https://cloud.yunussayginli.com adresi üzerinden çalışan bu sistem, aslında benim yerel bilgisayarımdaki (veya sunucumdaki) belirli bir klasörü web arayüzüne yansıtıyor. Piyasadaki diğer çözümlerden farkı şu; genellikle dosya paylaşımı için SSH veya SMB gibi karmaşık ağ protokolleri, port açma işlemleri veya FTP istemcileri gerekir. Benim geliştirdiğim sistemde ise bunların hiçbiri yok. Kullanıcı (yani şimdilik ben), sadece web sitesine giriyor ve karşısına tanıdık bir dosya yöneticisi çıkıyor. Projenin Temel Özellikleri Geliştirdiğim bu sistemin sunduğu avantajlar şunlar: Web Tabanlı Arayüz: Herhangi bir uygulama indirmeden, tarayıcı üzerinden dosyalarıma erişebiliyorum. Sıfır Konfigürasyon: SSH anahtarları veya karmaşık IP ayarlarıyla uğraşmadan, doğrudan dosya yükleyip indirebiliyorum. Tam Kontrol: Verilerim, bilmediğim bir veri merkezinde değil, doğrudan benim kontrolümdeki disklerde saklanıyor. Hız ve Güvenlik: Arada üçüncü parti bir servis sağlayıcı olmadığı için sınırlar (upload/download limitleri) tamamen benim internet hızıma bağlı. Ne Zaman Kullanıma Açılacak? Şu an için proje geliştirme aşamasında ve kapalı devre testlerini yapıyorum. Sistemin kararlılığını, güvenliğini ve hızını optimize ediyorum. Ancak hedeflerim büyük! Yakında yapacağım güncellemelerle birlikte: Kullanıcı Kayıt Sistemi: İsteyen herkesin kendine özel bir hesap oluşturabileceği, Kişiselleştirilmiş Alanlar: Her kullanıcının kendine ait izole bir depolama alanına sahip olacağı, Dosya Paylaşımı: Yüklediğiniz bir dosyayı arkadaşlarınızla tek tıkla paylaşabileceğiniz, gerçek bir bulut depolama servisine dönüştürmeyi planlıyorum. Gelişmelerden haberdar olmak için blogumu takipte kalın. Kendi bulutumuzda, özgürce görüşmek üzere!

ReactNext.jsAV1