Bağımsız yayın
Yazılar
ve notlar
Bu siteyi yaparken ve projelerde çalışırken öğrendiklerim. Pazarlama değil, not defteri.
- 01Türkçe İ, CSS ve büyük harfle yazılan İngilizce terimlerArayüz2026.106 dkTürkçe bir sayfada text-transform: uppercase, i harfini İ yapar. Türkçe kelimeler için doğru, JavaScript ya da Firebase için yanlış. Bu sitede sorunu elle tutulan bir kelime listesiyle değil, iki dilli verinin kendisiyle çözdüm; aynı kural paylaşım kartlarında da çalışıyor.
- 02Bir Vue SPA'yı arama motorlarına ve yapay zekâ tarayıcılarına görünür kılmakArama ve GEO2026.105 dkTek sayfalık bir uygulama, JavaScript çalıştırmayan bir tarayıcıya boş bir div gösterir. Bu sitede her rota build sırasında iki dilde gerçek HTML'e dönüşüyor; hreflang, JSON-LD, sitemap, robots.txt ve llms.txt aynı içerikten üretiliyor ve build sonunda kendini denetliyor.
- 03Satori ile her sayfaya ve her dile ayrı paylaşım kartıArama ve GEO2026.106 dkBu sitede her sayfanın Türkçe ve İngilizce iki ayrı 1200×630 paylaşım kartı var ve hepsi build sırasında Satori ile çiziliyor. İşin zor kısmı düzen değil fontlar oldu: ş, ğ ve İ önce kutu olarak çıktı. Çözüm, font alt kümelerini bırakıp tam TTF dosyalarına geçmekti.
- 04Syne'nin g harfi: hata değil tasarım, yine de iki harfi değiştirdimTasarım ve etkileşim2026.105 dkSitenin başlık fontu Syne'nin küçük g ve ğ harfleri büyük boyutta bize kırık gibi göründü. Font dosyasını inceledim; sorun bir hata değil, tasarımın kendisiydi. Çözüm, yalnızca bu iki harfi Archivo'dan alan, birkaç KB'lık bir yama ve tarayıcının harf harf font seçmesi oldu.
- 05Yükleme ekranındaki takılmayı compositor'a taşımakArayüz2026.105 dkDEVILYXRD yazan açılış ekranı ilk sürümde takılıyordu. Çözüm daha hızlı JavaScript yazmak değil, ana iş parçacığına hiç iş bırakmamaktı: dört gerçek kilometre taşı, yalnızca transform ile hareket eden parçalar ve işler ters gittiğinde devreye giren zamanlayıcılar.
- 06x³: Mauve gizli modunu bulunabilir ve ucuz tutmakTasarım ve etkileşim2026.106 dkFooter'daki devilyxrd yazısının x harfine üç kez tıklayınca site Mauve moduna geçiyor. Bu notta sırrın kendini nasıl ele verdiğini, açılınca neleri değiştirdiğini ve bütün bunları hareket azaltma tercihine saygı duyarak birkaç sınıf ve değişkenle nasıl ucuz tuttuğumu anlatıyorum.
- 07Dil adreste yaşar: Türkçe kökte, İngilizce /en altındaArayüz2026.106 dkSiteyi iki dilli yaparken dili localStorage'a ya da tarayıcı ayarına bırakmadım, adrese yazdım. Türkçe kökte, İngilizce /en altında duruyor; router dili URL'den okuyor, LocLink de bağlantıları okuduğun dilde tutuyor. Bu notta kurgunun nasıl çalıştığını anlatıyorum.
- 08XSLT ile süslenen sitemap.xml'den gerçek bir HTML site haritasınaArama ve GEO2026.105 dksitemap.xml'i insanlar da okuyabilsin diye önce bir XSLT stil dosyasıyla süsledim. Tarayıcılar XSLT desteğini kaldırma yoluna girince bundan vazgeçtim: XML yalnızca makineler için kaldı, insanlar için iki dilli ve prerender edilen bir /sitemap sayfası yazdım.
- 09İmleci kovalamayı bıraktım: CSS cursor ile yerel SVG imleçTasarım ve etkileşim2026.106 dkÖzel imleç çoğu sitede fareyi kovalayan bir elemandır ve hep biraz geride kalır. Bu sitede imleci tarayıcının kendisine çizdirdim: cursor özelliğinde SVG data URI, iki CSS değişkeni ve gizli mod için bir x. JavaScript'le çalışan disk artık yalnızca etiket taşıyor.
- 10Görmediğini durdur: döngüleri ekran dışında ve perde arkasında uyutmakArayüz2026.106 dkSitede sürekli hareket eden çok şey var: hero alanı, halkalar, kayan kelime bandı, menüdeki kapak çizimleri. Bu notta bunların hangi kurallarla çalıştığını yazıyorum: yalnızca transform ve opacity, Vue'yu atlayan rAF döngüleri ve görünmeyen her şeyi durduran küçük mekanizmalar.
- 11Tasarım prototipinden üretim koduna: kontrollü kaosu Vue'ya taşımakTasarım ve etkileşim2026.105 dkBu site kod olarak değil, etkileşimli bir tasarım prototipi olarak başladı: devilyxrd, Controlled Chaos. Bu notta o prototipi sayfa sayfa Vue 3 ve TypeScript koduna nasıl taşıdığımı, neyi olduğu gibi aldığımı ve neleri sonradan ekleyip değiştirdiğimi anlatıyorum.
- 12npm'den pnpm'e geçiş ve TypeScript'i neden ~5.9'da tuttumMühendislik2026.105 dkProje npm ile başladı, sonra paket yöneticisini pnpm'e taşıdım. Bu notta geçişte neler yaptığımı anlatıyorum: kilit dosyasının dönüşümü, packageManager ve engines alanları, katı node_modules yapısı ve TypeScript'i neden ~5.9 aralığına sabitlediğim.
- 13Tek altyapı, birçok site: çok dilli bir CMS'te içerik modeliMühendislik2026.095 dkYEE CMS, Yunus Emre Enstitüsü'nün farklı merkezlerinin içeriklerini ortak bir altyapıda yönetmek için geliştirilen çok siteli, çok dilli bir platform. Bu yazıda bu tür bir sistemde içerik modelinin neden her şeyin merkezinde durduğunu ve katmanlar arasındaki ilişkiyi nasıl düşündüğümü anlatıyorum.
- 14Bir ürün, üç yüz: Motice'te web, servis ve mobil aynı monorepodaMühendislik2026.085 dkMotice; pilates, yoga, kişisel antrenman ve wellness stüdyoları için geliştirilen bir CRM/ERP ürünü. Yönetim uygulaması, müşteri portalı ve mobil uygulama aynı işletme süreçlerinin farklı yüzleri. Bu yazı, onları tek bir TypeScript monoreposunda tutmanın ne anlama geldiğini anlatıyor.
- 15Gerçek cihazlarda blockchain: üç Raspberry Pi ile 72 saatAr-Ge ve donanım2026.075 dkDevilyxrd Blockchain, Go ile yazdığım bir blockchain çekirdeğini TypeScript ve NestJS servisleriyle birleştiren kişisel Ar-Ge projem. Onu yerel bir süreçte değil, üç Raspberry Pi üzerinde 72 saat boyunca çalıştırdım. Bu yazı, neyi ölçtüğümü ve neyi ölçmediğimi anlatıyor.
- 16Kod yazmadan önce: Mentorual'da kararları netleştirmekÜrün ve analiz2026.065 dkMentorual'da işin bugünkü merkezi kod değil, kodun dayanacağı kararlar. Gereksinimler, kullanım senaryoları, ekran aileleri ve rol-yetki matrisi üzerinden ilk sürümün sınırlarını çizmenin neden üretimin bir parçası olduğunu bu notta anlatıyorum.
- 17Ortak kimlik, ayrı kurallar: OYS & TYS monoreposundan notlarMühendislik2026.055 dkOYS & TYS'de öğrenci, öğretici, aday ve yönetici aynı kimlik altyapısını paylaşıyor ama her alanın verisi ve iş kuralları farklı. Turborepo içinde ortak paketleri paylaşırken alan sınırlarını açık tutmaya dair düşüncelerimi bu notta topluyorum.
- 18Uçtan uca sorumluluk: BGB'de katmanların birbirine etkisiMühendislik2026.045 dkBGB, kumar zararlarını azaltmaya yönelik bir dijital ürün. Mobil uygulama, servisler, yönetim paneli ve web arayüzünde uçtan uca sorumluluk almak, bir katmandaki kararın diğerlerine nasıl yansıdığını görmemi sağladı. Bu notta o deneyimi anlatıyorum.
- 19Aynı veri, dört kullanıcı: Türk Sanatı Platformu üzerine notlarMühendislik2026.035 dkTürk Sanatı Platformu'nda ana merkez ve alt platformlar aynı ürünün içinde yaşıyor. Ziyaretçi, sanatçı, başvuru sahibi ve yönetici aynı veriye farklı ihtiyaçlarla yaklaşıyor; bu notta çok kiracılı bir yapıda bu farkları birlikte düşünmeyi anlatıyorum.
- 20İki dilde yayın: NoktaTR'de içerik, akış ve arayüz birlikteÜrün ve analiz2026.025 dkNoktaTR, .tr dergisinin kültür, sanat ve edebiyat içeriğini Türkçe ve İngilizce olarak dijital ortama taşıyor. Bu notta içerik yapısı, editoryal akış ve arayüz hiyerarşisinin neden birbirinden bağımsız kararlar olmadığını anlatıyorum.
- 21Klinik başvuru sisteminde formun arkasındaki süreçÜrün ve analiz2026.015 dkKadir Yücebaş için geliştirdiğim sistemde başvuru formu işin yalnızca görünen kısmı. Bu notta başvurunun klinik ekibine ulaşmasını, durumunun takip edilmesini ve iki dilli arayüzlerin aynı veri modeline bağlanmasını nasıl düşündüğümü anlatıyorum.
- 22Yazılımdan donanıma: bina yıkama drone'u ve Raspberry Pi ekranlarıAr-Ge ve donanım2025.125 dkIOTROCOP'ta iki projeyi baştan sona tek başıma geliştirdim: bina yıkama amaçlı bir drone ve kafe ile marketler için telefondan yönetilen reklam ekranları. İkisi de bana aynı şeyi öğretti: donanımda tek bir bileşen yoktur, sistem vardır.
- 23Raspberry Pi üzerinde telemetri arayüzü: veri akarken akıcı kalmakAr-Ge ve donanım2025.115 dkRaspberry Pi üzerinde çalışan araç takip ve navigasyon sisteminde canlı GPS, interaktif harita ve anlık telemetriyi tek bir arayüzde topladım. Bu notta gömülü bir cihazda veri toplama ile arayüz performansını birlikte düşünmenin neleri değiştirdiğini anlatıyorum.
- 24Sahadan gelen veri: akıllı tarımda edge işleme ve bağlantı koşullarıAr-Ge ve donanım2025.105 dkGAIA / AgroBlock, tarım alanındaki sensörleri, kamera düğümlerini ve edge cihazlarını tek bir sistem yaklaşımında ele alan bir Ar-Ge çalışması. Bu notta fiziksel ortamın ve bağlantı koşullarının yazılım mimarisini nasıl şekillendirdiğine dair düşüncelerimi topluyorum.
- 25Analizden altyapıya: freelance işlerde bütün süreci üstlenmekÜrün ve analiz2025.095 dkFreelance olarak geliştirdiğim e-ticaret, kongre ve kurumsal web sitelerinde analiz, tasarım, yazılım ve teknik altyapının tamamı bendeydi. Bu notta tek kişinin bütün süreci taşımasının neyi kolaylaştırdığını ve neyi zorlaştırdığını anlatıyorum.