[{"data":1,"prerenderedAt":919},["ShallowReactive",2],{"blog-post-\u002Ftr\u002Fportless-ile-port-karmasasina-son":3,"locale-configs":645},{"post":4,"translations":639},{"id":5,"title":6,"body":7,"date":630,"description":631,"extension":632,"image":633,"meta":634,"navigation":318,"path":635,"rating":633,"seo":636,"stem":637,"translationKey":233,"__hash__":638},"blog\u002Ftr\u002Fportless-ile-port-karmasasina-son.md","Port Karmaşasına Son: Portless ile Yerel Geliştirme",{"type":8,"value":9,"toc":620},"minimark",[10,14,17,33,38,41,44,81,84,88,91,101,108,119,129,133,136,163,166,169,178,196,221,224,250,260,266,283,287,290,338,353,356,360,363,369,416,432,435,439,446,452,488,502,513,527,531,534,578,581,585,588,598,604,616],[11,12,13],"p",{},"Salı sabahı, frontend’ini başlatıyorsun ve terminal şunu söylüyor: \"Port 3000 is already in use\". Tabii ya. Bir saat önce sadece bir dakikalığına bakmak istediğin diğer proje hâlâ arka planda çalışıyor. Sen de 3001’e geçiyorsun. Kısa süre sonra API de 3000’i istiyor, admin paneli 5173’e oturuyor ve bir yerlerde bir Storybook 6006’da çalışıyor.",[11,15,16],{},"Birkaç hafta birden fazla projeyle çalıştıktan sonra aslında saçma olan bir soru soruyorsun kendine: Hangi numara hangi uygulamaya aitti? Tarayıcı geçmişin sadece localhost kayıtlarından oluşuyor, yer imlerin işe yaramıyor ve ekipteki README’de \"3000 portunda çalışır, doluysa değil\" gibi bir cümle duruyor.",[11,18,19,20,27,28,32],{},"Tam bu noktada ",[21,22,26],"a",{"href":23,"rel":24},"https:\u002F\u002Fportless.sh\u002F",[25],"nofollow","Portless"," devreye giriyor. Port numaraları yerine her projeye sabit, anlamlı bir isim veriliyor, örneğin ",[29,30,31],"code",{},"https:\u002F\u002Fmyapp.localhost",". Bu yazıda nasıl çalıştığına, günlük işine ne kazandırdığına ve sınırlarının nerede olduğuna bakıyoruz.",[34,35,37],"h2",{"id":36},"portlar-neden-sandığından-daha-çok-yoruyor","Portlar neden sandığından daha çok yoruyor?",[11,39,40],{},"Sorun sıradan, ama her gün küçük parçalar halinde dikkatini yiyor. Her framework bir varsayılan portla geliyor: Next.js ve Nuxt 3000’de, Vite 5173’te, Angular 4200’de, Astro 4321’de, Storybook 6006’da başlıyor. Aynı stack’le iki projeyi paralel çalıştıran biri kaçınılmaz olarak çakışmalara düşüyor.",[11,42,43],{},"Sonuçlar hata mesajının ötesine geçiyor:",[45,46,47,55,65,75],"ul",{},[48,49,50,54],"li",{},[51,52,53],"strong",{},"Değişen numaralar:"," Bir proje bugün 3000’de, yarın 3002’de çalışıyor, çünkü dün bir şey açık kalmıştı. Numarayı bilen her şey bozuluyor.",[48,56,57,60,61,64],{},[51,58,59],{},"Koda gömülü yapılandırma:"," OAuth yönlendirme URI’leri, CORS ayarları, webhook hedefleri ve ",[29,62,63],{},".env"," dosyaları çoğu zaman sabit port içeriyor. Port değişince yapılandırma da değişmek zorunda.",[48,66,67,70,71,74],{},[51,68,69],{},"Paylaşılan cookie’ler:"," ",[29,72,73],{},"localhost"," üzerindeki tüm uygulamalar, hangi portta çalışırlarsa çalışsınlar aynı cookie alanını paylaşıyor. Bir projedeki giriş, diğerindeki oturumun üzerine yazabiliyor. Bu tür hataları bulmak zor.",[48,76,77,80],{},[51,78,79],{},"Zihinsel yük:"," Hiçbir bilgi değeri taşımayan eşleştirmeleri aklında tutuyorsun. \"5173 dashboard’dur\" kimsenin ihtiyaç duymadığı bir bilgi.",[11,82,83],{},"Buna yeni bir etken ekleniyor: Dev server’ları yerelde başlatıp tarayıcıda test eden yapay zekâ ajanları. Onların da bir uygulamanın şu anda hangi adreste çalıştığını bilmesi gerekiyor. Sabit bir isim, hem insanlar hem de ajanlar için değişebilen bir sayıdan daha kolay.",[34,85,87],{"id":86},"portlessın-arkasındaki-fikir","Portless’ın arkasındaki fikir",[11,89,90],{},"Portless sorunu, portları görüş alanından çıkararak çözüyor. Arka planda 443 portunu dinleyen yerel bir reverse proxy çalışıyor. Her uygulama orada bir host adı kaydediyor ve proxy istekleri ilgili porta yönlendiriyor.",[92,93,99],"pre",{"className":94,"code":96,"language":97,"meta":98},[95],"language-text","Tarayıcı (myapp.localhost) -> Proxy (Port 443) -> Uygulama (rastgele port)\n","text","",[29,100,96],{"__ignoreMap":98},[11,102,103,104,107],{},"Gerçek portu Portless kendisi seçiyor, 4000 ile 4999 aralığından, ve uygulamaya ",[29,105,106],{},"PORT"," ortam değişkeniyle iletiyor. Onu bilmen de yazman da gerekmiyor. İsim sabit kalıyor, arkasındaki numara değişebiliyor.",[11,109,110,111,114,115,118],{},"Bunun sistem DNS’ine dokunmadan çalışması ",[29,112,113],{},".localhost"," uzantısı sayesinde. Bu uzantıyla biten isimler güncel sistemlerde otomatik olarak ",[29,116,117],{},"127.0.0.1"," adresine çözülüyor. Yani ne hosts dosyasına kayıt ne de yerel bir DNS sunucusu gerekiyor.",[11,120,121,122,124,125,128],{},"Baştan bir güvenlik notu: Proxy varsayılan olarak yalnızca ",[29,123,117],{}," ve ",[29,126,127],{},"::1"," loopback adreslerini dinliyor. LAN modunu açıkça etkinleştirmedikçe ağdan erişilemiyor.",[34,130,132],{"id":131},"kurulum-ve-ilk-başlatma","Kurulum ve ilk başlatma",[11,134,135],{},"Giriş eşiği düşük. Node.js 24 veya daha yeni bir sürüm gerekiyor, macOS, Linux ve Windows destekleniyor. Kurulum npm ile, en iyisi global olarak yapılıyor:",[92,137,141],{"className":138,"code":139,"language":140,"meta":98,"style":98},"language-bash shiki shiki-themes github-dark","npm install -g portless\n","bash",[29,142,143],{"__ignoreMap":98},[144,145,148,152,156,160],"span",{"class":146,"line":147},"line",1,[144,149,151],{"class":150},"svObZ","npm",[144,153,155],{"class":154},"sU2Wk"," install",[144,157,159],{"class":158},"sDLfK"," -g",[144,161,162],{"class":154}," portless\n",[11,164,165],{},"Alternatif olarak proje başına dev dependency olarak da eklenebilir. Ancak o zaman ekip üyeleri farklı sürümler kullanabilir ve bu, 1.0 öncesi bir araç için pek zararsız değil (bununla ilgili ayrıntılar tuzaklar bölümünde).",[11,167,168],{},"Sonrasında proje klasöründe tek bir komut yeterli:",[92,170,172],{"className":138,"code":171,"language":140,"meta":98,"style":98},"portless\n",[29,173,174],{"__ignoreMap":98},[144,175,176],{"class":146,"line":147},[144,177,171],{"class":150},[11,179,180,181,184,185,188,189,191,192,195],{},"Portless, ",[29,182,183],{},"package.json"," dosyandaki ",[29,186,187],{},"dev"," script’ini okuyor ve proxy üzerinden başlatıyor. İsmi ",[29,190,183],{},"’dan, Git kökünden veya klasör adından türetiyor. Farklı bir isim istersen bir ",[29,193,194],{},"portless.json"," oluşturuyorsun:",[92,197,201],{"className":198,"code":199,"language":200,"meta":98,"style":98},"language-json shiki shiki-themes github-dark","{ \"name\": \"myapp\" }\n","json",[29,202,203],{"__ignoreMap":98},[144,204,205,209,212,215,218],{"class":146,"line":147},[144,206,208],{"class":207},"s95oV","{ ",[144,210,211],{"class":158},"\"name\"",[144,213,214],{"class":207},": ",[144,216,217],{"class":154},"\"myapp\"",[144,219,220],{"class":207}," }\n",[11,222,223],{},"Açık açık yazmayı tercih edersen isim ve komutu doğrudan veriyorsun:",[92,225,227],{"className":138,"code":226,"language":140,"meta":98,"style":98},"portless myapp next dev\n# -> https:\u002F\u002Fmyapp.localhost\n",[29,228,229,243],{"__ignoreMap":98},[144,230,231,234,237,240],{"class":146,"line":147},[144,232,233],{"class":150},"portless",[144,235,236],{"class":154}," myapp",[144,238,239],{"class":154}," next",[144,241,242],{"class":154}," dev\n",[144,244,246],{"class":146,"line":245},2,[144,247,249],{"class":248},"sAwPA","# -> https:\u002F\u002Fmyapp.localhost\n",[11,251,252,253,255,256,259],{},"Bunu ",[29,254,183],{}," içine kalıcı olarak da yazabilirsin, böylece ekipte herkes aynı komutu kullanır: ",[29,257,258],{},"\"dev\": \"portless myapp next dev\"",".",[11,261,262,265],{},[51,263,264],{},"İlk başlatmada ne oluyor?"," Portless yerel bir sertifika otoritesi (CA) oluşturuyor, onu güvenilir olarak tanımlıyor ve 443 portunu bağlıyor. Bunun için macOS ve Linux’ta yönetici hakları istiyor. Bu bir kez oluyor ve yerelde HTTPS için kaçınılmaz.",[11,267,268,271,272,274,275,278,279,282],{},[51,269,270],{},"Peki frameworkler?"," Next.js, Express ya da Nuxt zaten ",[29,273,106],{}," değişkenine uyuyor. Onu yok sayan Vite, Astro, Angular, Expo ve diğerleri için Portless uygun ",[29,276,277],{},"--port"," bayrağını (gerekirse ",[29,280,281],{},"--host"," bayrağını da) otomatik ekliyor. Script’ine dokunman gerekmiyor.",[34,284,286],{"id":285},"birden-fazla-servis-için-alt-alan-adları","Birden fazla servis için alt alan adları",[11,288,289],{},"Bir proje nadiren tek bir uygulamadan oluşuyor. Genelde bir frontend, bir API, belki bir dokümantasyon sitesi ya da admin paneli var. Portless ile her servis proje adının altında bir isim alıyor:",[92,291,293],{"className":138,"code":292,"language":140,"meta":98,"style":98},"portless api.myapp pnpm start\n# -> https:\u002F\u002Fapi.myapp.localhost\n\nportless docs.myapp next dev\n# -> https:\u002F\u002Fdocs.myapp.localhost\n",[29,294,295,308,313,320,332],{"__ignoreMap":98},[144,296,297,299,302,305],{"class":146,"line":147},[144,298,233],{"class":150},[144,300,301],{"class":154}," api.myapp",[144,303,304],{"class":154}," pnpm",[144,306,307],{"class":154}," start\n",[144,309,310],{"class":146,"line":245},[144,311,312],{"class":248},"# -> https:\u002F\u002Fapi.myapp.localhost\n",[144,314,316],{"class":146,"line":315},3,[144,317,319],{"emptyLinePlaceholder":318},true,"\n",[144,321,323,325,328,330],{"class":146,"line":322},4,[144,324,233],{"class":150},[144,326,327],{"class":154}," docs.myapp",[144,329,239],{"class":154},[144,331,242],{"class":154},[144,333,335],{"class":146,"line":334},5,[144,336,337],{"class":248},"# -> https:\u002F\u002Fdocs.myapp.localhost\n",[11,339,340,341,344,345,348,349,352],{},"Bu kozmetikten fazlası. Yapı, projenin prodüksiyonda nasıl kurulduğunu yansıtıyor. API’ye ",[29,342,343],{},"api.myapp.localhost"," üzerinden erişen bir frontend, ",[29,346,347],{},"localhost:4000"," çağrısına göre sonraki ",[29,350,351],{},"api.senin-alan-adin.com"," adresine çok daha benziyor. Böylece cookie domain’lerini, CORS kurallarını ve yönlendirme URI’lerini çok daha gerçekçi test edebiliyorsun.",[11,354,355],{},"Bir de yan etki: Yukarıdaki cookie sorunları ortadan kalkıyor. Her host adının kendi cookie alanı var, uygulamalar artık birbirine karışmıyor.",[34,357,359],{"id":358},"çakışmasız-git-worktreeler","Çakışmasız Git worktree’ler",[11,361,362],{},"Git worktree’lerle çalışıyorsan, örneğin bir bugfix ve bir feature üzerinde paralel çalışmak için, sorunu daha da keskin biçimde tanırsın: İki checkout da aynı kodu içeriyor ve aynı portu istiyor.",[11,364,180,365,368],{},[29,366,367],{},"portless run"," kullandığında worktree’leri otomatik tanıyor. Ana dizinde isim değişmiyor, bağlı bir worktree’de branch adı alt alan adı olarak başa ekleniyor:",[92,370,372],{"className":138,"code":371,"language":140,"meta":98,"style":98},"# Ana worktree\nportless run next dev   # -> https:\u002F\u002Fmyapp.localhost\n\n# \"fix-ui\" branch’indeki worktree\nportless run next dev   # -> https:\u002F\u002Ffix-ui.myapp.localhost\n",[29,373,374,379,394,398,403],{"__ignoreMap":98},[144,375,376],{"class":146,"line":147},[144,377,378],{"class":248},"# Ana worktree\n",[144,380,381,383,386,388,391],{"class":146,"line":245},[144,382,233],{"class":150},[144,384,385],{"class":154}," run",[144,387,239],{"class":154},[144,389,390],{"class":154}," dev",[144,392,393],{"class":248},"   # -> https:\u002F\u002Fmyapp.localhost\n",[144,395,396],{"class":146,"line":315},[144,397,319],{"emptyLinePlaceholder":318},[144,399,400],{"class":146,"line":322},[144,401,402],{"class":248},"# \"fix-ui\" branch’indeki worktree\n",[144,404,405,407,409,411,413],{"class":146,"line":334},[144,406,233],{"class":150},[144,408,385],{"class":154},[144,410,239],{"class":154},[144,412,390],{"class":154},[144,414,415],{"class":248},"   # -> https:\u002F\u002Ffix-ui.myapp.localhost\n",[11,417,418,420,421,423,424,427,428,431],{},[29,419,367],{}," komutunu ",[29,422,183],{}," içine bir kez yazıyorsun ve her yerde çalışıyor. Branch başına yapılandırma yok, ",[29,425,426],{},"--force"," yok, çakışma yok. Gerekirse ",[29,429,430],{},"--name"," ile temel adı değiştirebilirsin, worktree öneki korunuyor.",[11,433,434],{},"Özellikle kendi kodunun yanında yapay zekâ ajanlarını ayrı worktree’lerde çalıştırıyorsan bu çok pratik. Her örneğin kendi, tahmin edilebilir adresi oluyor.",[34,436,438],{"id":437},"yerelde-https-ve-kendi-alan-adı-uzantın","Yerelde HTTPS ve kendi alan adı uzantın",[11,440,441,442,445],{},"Portless’ta HTTPS varsayılan olarak açık, HTTP\u002F2 dahil. Bu, kulağa geldiği kadar kendiliğinden değil. Birçok tarayıcı özelliği (service worker’lar, bazı API’ler, secure cookie’ler) HTTP üzerinde prodüksiyondakinden farklı davranıyor. Yerelde baştan HTTPS ile çalışan, bu farkları daha erken fark ediyor. Yine de düz HTTP gerekirse ",[29,443,444],{},"--no-tls"," ile geçebilirsin.",[11,447,448,449,451],{},"Portless varsayılan olarak ",[29,450,113],{}," kullanıyor. Ama uzantıyı değiştirebilirsin:",[92,453,455],{"className":138,"code":454,"language":140,"meta":98,"style":98},"portless proxy start --tld test\nportless myapp next dev\n# -> https:\u002F\u002Fmyapp.test\n",[29,456,457,473,483],{"__ignoreMap":98},[144,458,459,461,464,467,470],{"class":146,"line":147},[144,460,233],{"class":150},[144,462,463],{"class":154}," proxy",[144,465,466],{"class":154}," start",[144,468,469],{"class":158}," --tld",[144,471,472],{"class":154}," test\n",[144,474,475,477,479,481],{"class":146,"line":245},[144,476,233],{"class":150},[144,478,236],{"class":154},[144,480,239],{"class":154},[144,482,242],{"class":154},[144,484,485],{"class":146,"line":315},[144,486,487],{"class":248},"# -> https:\u002F\u002Fmyapp.test\n",[11,489,490,491,494,495,497,498,501],{},"Proxy bunun için hosts dosyasını kendisi güncelliyor, çünkü ",[29,492,493],{},".test",", ",[29,496,113],{},"’un aksine otomatik çözülmüyor. ",[29,499,500],{},"--tld"," bayrağını tekrarlayarak aynı anda birden fazla uzantı da kullanabilirsin.",[11,503,504,505,508,509,512],{},"Özellikle ilginç olan: \"TLD\" olarak sahibi olduğun bir alan adını da kullanabilirsin, örneğin ",[29,506,507],{},"dev.example.com",". O zaman uygulaman yerelde ",[29,510,511],{},"https:\u002F\u002Fmyapp.dev.example.com"," adını alıyor. URL’ler prodüksiyonla aynı yapıya sahip oluyor ve OAuth yönlendirmeleri, alt alan adları arası cookie’ler ve host tabanlı yönlendirme her iki ortamda da aynı davranıyor.",[11,514,515,516,518,519,522,523,526],{},"Uzantı seçimi için net bir öneri var: ",[29,517,493],{},", IANA tarafından ayrılmıştır ve bu yüzden gerçek alan adlarıyla asla çakışmaz. ",[29,520,521],{},".local"," (mDNS\u002FBonjour ile çakışmalar) ve ",[29,524,525],{},".dev"," (Google’a ait ve HSTS ile HTTPS’i zorunlu kılar) uzantılarından kaçınmalısın.",[34,528,530],{"id":529},"tuzaklar-ve-ödünleşimler","Tuzaklar ve ödünleşimler",[11,532,533],{},"Hiçbir araç kusursuz değil. Şu noktaları önceden bilmelisin:",[45,535,536,542,552,558,572],{},[48,537,538,541],{},[51,539,540],{},"Yönetici hakları:"," 443 portu ve yerel CA yükseltilmiş yetki gerektiriyor. Kurumsal yönetilen bilgisayarlarda bu, önce BT ile çözülmesi gereken bir engel olabilir.",[48,543,544,547,548,551],{},[51,545,546],{},"1.0 öncesi:"," Portless henüz 1.0 sürümünde değil. İç durum klasörünün biçimi sürümler arasında değişebilir, bu durumda ",[29,549,550],{},"portless trust"," komutunu yeniden çalıştırman gerekebilir. Global kurulum, ekipte farklı sürümleri önlüyor.",[48,553,554,557],{},[51,555,556],{},"Node.js 24 veya üzeri:"," Hâlâ eski bir Node sürümündeysen önce güncellemen gerekiyor.",[48,559,560,563,564,567,568,571],{},[51,561,562],{},"Karmaşık script’ler:"," Birleşik komutlarda (",[29,565,566],{},"&&",", pipe’lar, ",[29,569,570],{},"NODE_ENV=production vite",") ya da başka script’lere yönlendirmelerde Portless port bayrağı eklemiyor. Orada portu kendin ayarlıyorsun.",[48,573,574,577],{},[51,575,576],{},"Süreç sınırları:"," Reverse proxy ek bir katman. Bir şey ters giderse bakacak bir yer daha oluyor.",[11,579,580],{},"Bunların hiçbiri engelleyici değil. Ama aracı hemen tüm ekipte devreye almak yerine önce tek bir projede denemekte fayda var.",[34,582,584],{"id":583},"sonuç-numaralar-yerine-isimler","Sonuç: Numaralar yerine isimler",[11,586,587],{},"Portless, çoğumuzun artık fark etmeyecek kadar uzun süredir taşıdığı bir sorunu çözüyor. Uygulama başına sabit bir isim, uğraştırmayan HTTPS, düzgün alt alan adları ve sorunsuz çalışan worktree desteği: Bunlar günlük geliştirmedeki küçük sürtünmeleri gözle görülür biçimde azaltıyor.",[11,589,590,591,594,595,597],{},"Denemenin maliyeti düşük. Global olarak kuruyorsun, bir projede ",[29,592,593],{},"\"dev\": \"next dev\""," yerine ",[29,596,233],{}," yazıyorsun ve ilk başlatmadan sonra yeni çalışma şeklini sevip sevmediğini görüyorsun. Düzenli olarak birden fazla projeyi paralel çalıştırıyorsan, worktree’ler ya da ajanlarla çalışıyorsan veya yerelde prodüksiyona mümkün olduğunca yakın test etmek istiyorsan denemeye değer.",[11,599,600,603],{},[51,601,602],{},"Sıradaki adımın:"," Bir proje seç, Portless’ı kur ve istediğin bir isimle başlat. Başka bir şeye gerek yok.",[11,605,606,607,611,612,259],{},"Yerel geliştirme ortamını ve ekip iş akışlarını düzene sokmak mı istiyorsun, yoksa bir web projesinde desteğe mi ihtiyacın var? Daha fazlasını ",[21,608,610],{"href":609},"\u002Ftr\u002Fhizmetler\u002Fweb-gelistirme\u002F","Web Geliştirme"," sayfasında bulabilir ya da ",[21,613,615],{"href":614},"\u002Ftr\u002Filetisim\u002F","bana doğrudan yazabilirsin",[617,618,619],"style",{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":98,"searchDepth":245,"depth":245,"links":621},[622,623,624,625,626,627,628,629],{"id":36,"depth":245,"text":37},{"id":86,"depth":245,"text":87},{"id":131,"depth":245,"text":132},{"id":285,"depth":245,"text":286},{"id":358,"depth":245,"text":359},{"id":437,"depth":245,"text":438},{"id":529,"depth":245,"text":530},{"id":583,"depth":245,"text":584},"2026-10-23","Portless, localhost:3000 gibi port numaralarını sabit ve isimli URL’lerle değiştirir. Nasıl çalıştığını, günlük işine ne kazandırdığını ve nelere dikkat etmen gerektiğini anlatıyorum.","md",null,{},"\u002Ftr\u002Fportless-ile-port-karmasasina-son",{"title":6,"description":631},"tr\u002Fportless-ile-port-karmasasina-son","Jd8EmPw78VUo9TGzRfmLkwMES8dCgqTrqBVtwZs4Qk8",[640,642,644],{"path":641,"translationKey":233},"\u002Fde\u002Fportless-schluss-mit-dem-port-chaos",{"path":643,"translationKey":233},"\u002Fen\u002Fportless-ends-port-chaos",{"path":635,"translationKey":233},[646,746,830],{"id":647,"cta":648,"email":651,"extension":652,"footer":653,"language":664,"meta":667,"nav":668,"routes":690,"services":707,"socials":729,"stem":733,"technologies":734,"__hash__":745},"config\u002Fconfig\u002Fde.yml",{"text":649,"link":650},"Projekt starten","\u002Fde\u002Fkontakt","hello@yasinmesut.com","yml",{"label":654,"title":654,"items":655},"Über",[656,658,661],{"text":657,"link":650},"Kontakt",{"text":659,"link":660},"Impressum","\u002Fde\u002Fimpressum",{"text":662,"link":663},"Datenschutz","\u002Fde\u002Fdatenschutz",{"code":665,"name":666},"de","Deutsch",{},{"label":669,"title":670,"items":671},"Navigation","Links",[672,675,678,681,684,687],{"text":673,"link":674},"Leistungen","\u002Fde\u002Fleistungen",{"text":676,"link":677},"Prozess","\u002Fde\u002Fprozess",{"text":679,"link":680},"Preise","\u002Fde\u002Fpreise",{"text":682,"link":683},"Über mich","\u002Fde\u002Fueber-mich",{"text":685,"link":686},"FAQ","\u002Fde\u002Ffaq",{"text":688,"link":689},"Blog","\u002Fde\u002Fblog",{"home":691,"services":674,"process":677,"pricing":680,"about":683,"contact":650,"faq":686,"blog":689,"legal":660,"privacy":663,"berlin":692,"web-development":693,"app-development":694,"backend-development":695,"ai-development":696,"headless-cms":697,"e-commerce":698,"technical-seo":699,"managed-hosting":700,"vue-nuxt-migration":701,"technologies":702,"vue-js":703,"nuxt":704,"node-js":705,"capacitor":706},"\u002Fde","\u002Fde\u002Fwebentwickler-berlin","\u002Fde\u002Fleistungen\u002Fwebentwicklung","\u002Fde\u002Fleistungen\u002Fapp-entwicklung","\u002Fde\u002Fleistungen\u002Fbackend-entwicklung","\u002Fde\u002Fleistungen\u002Fki-entwicklung","\u002Fde\u002Fleistungen\u002Fheadless-cms","\u002Fde\u002Fleistungen\u002Fe-commerce","\u002Fde\u002Fleistungen\u002Ftechnisches-seo","\u002Fde\u002Fleistungen\u002Fmanaged-hosting","\u002Fde\u002Fleistungen\u002Fvue-nuxt-migration","\u002Fde\u002Ftechnologien","\u002Fde\u002Ftechnologien\u002Fvue-js","\u002Fde\u002Ftechnologien\u002Fnuxt","\u002Fde\u002Ftechnologien\u002Fnode-js","\u002Fde\u002Ftechnologien\u002Fcapacitor",{"label":673,"title":673,"link":674,"items":708},[709,711,713,715,717,719,721,723,725,727],{"text":710,"link":693},"Webentwicklung",{"text":712,"link":694},"App-Entwicklung",{"text":714,"link":695},"Backend-Entwicklung",{"text":716,"link":696},"KI-Entwicklung",{"text":718,"link":697},"Headless CMS",{"text":720,"link":698},"E-Commerce",{"text":722,"link":699},"Technisches SEO",{"text":724,"link":700},"Managed Hosting",{"text":726,"link":701},"Vue- & Nuxt-Migration",{"text":728,"link":692},"Webentwickler in Berlin",[730],{"icon":731,"link":732},"linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fyasin-mesut-okumus\u002F","config\u002Fde",{"label":735,"title":735,"link":702,"items":736},"Technologien",[737,739,741,743],{"text":738,"link":703},"Vue.js",{"text":740,"link":704},"Nuxt",{"text":742,"link":705},"Node.js",{"text":744,"link":706},"Capacitor","p1jBPQlUAK90jNSEZn_SdJqxUmzt7EeYbw6tPwDUGAg",{"id":747,"cta":748,"email":651,"extension":652,"footer":751,"language":762,"meta":765,"nav":766,"routes":783,"services":800,"socials":819,"stem":821,"technologies":822,"__hash__":829},"config\u002Fconfig\u002Fen.yml",{"text":749,"link":750},"Start a project","\u002Fen\u002Fcontact",{"label":752,"title":752,"items":753},"About",[754,756,759],{"text":755,"link":750},"Contact",{"text":757,"link":758},"Legal","\u002Fen\u002Flegal",{"text":760,"link":761},"Privacy","\u002Fen\u002Fprivacy",{"code":763,"name":764},"en","English",{},{"label":669,"title":670,"items":767},[768,771,774,777,779,781],{"text":769,"link":770},"Services","\u002Fen\u002Fservices",{"text":772,"link":773},"Process","\u002Fen\u002Fprocess",{"text":775,"link":776},"Pricing","\u002Fen\u002Fpricing",{"text":752,"link":778},"\u002Fen\u002Fabout",{"text":685,"link":780},"\u002Fen\u002Ffaq",{"text":688,"link":782},"\u002Fen\u002Fblog",{"home":784,"services":770,"process":773,"pricing":776,"about":778,"contact":750,"faq":780,"blog":782,"legal":758,"privacy":761,"berlin":785,"web-development":786,"app-development":787,"backend-development":788,"ai-development":789,"headless-cms":790,"e-commerce":791,"technical-seo":792,"managed-hosting":793,"vue-nuxt-migration":794,"technologies":795,"vue-js":796,"nuxt":797,"node-js":798,"capacitor":799},"\u002Fen","\u002Fen\u002Fweb-developer-berlin","\u002Fen\u002Fservices\u002Fweb-development","\u002Fen\u002Fservices\u002Fapp-development","\u002Fen\u002Fservices\u002Fbackend-development","\u002Fen\u002Fservices\u002Fai-development","\u002Fen\u002Fservices\u002Fheadless-cms","\u002Fen\u002Fservices\u002Fe-commerce","\u002Fen\u002Fservices\u002Ftechnical-seo","\u002Fen\u002Fservices\u002Fmanaged-hosting","\u002Fen\u002Fservices\u002Fvue-nuxt-migration","\u002Fen\u002Ftechnologies","\u002Fen\u002Ftechnologies\u002Fvue-js","\u002Fen\u002Ftechnologies\u002Fnuxt","\u002Fen\u002Ftechnologies\u002Fnode-js","\u002Fen\u002Ftechnologies\u002Fcapacitor",{"label":769,"title":769,"link":770,"items":801},[802,804,806,808,810,811,812,814,815,817],{"text":803,"link":786},"Web Development",{"text":805,"link":787},"App Development",{"text":807,"link":788},"Backend Development",{"text":809,"link":789},"AI Development",{"text":718,"link":790},{"text":720,"link":791},{"text":813,"link":792},"Technical SEO",{"text":724,"link":793},{"text":816,"link":794},"Vue & Nuxt Migration",{"text":818,"link":785},"Web Developer in Berlin",[820],{"icon":731,"link":732},"config\u002Fen",{"label":823,"title":823,"link":795,"items":824},"Technologies",[825,826,827,828],{"text":738,"link":796},{"text":740,"link":797},{"text":742,"link":798},{"text":744,"link":799},"BEGGtwscS8uBihRuME_tB1U5GpFQ77CNdIw2MM8p2iw",{"id":831,"cta":832,"email":651,"extension":652,"footer":835,"language":846,"meta":849,"nav":850,"routes":871,"services":888,"socials":908,"stem":910,"technologies":911,"__hash__":918},"config\u002Fconfig\u002Ftr.yml",{"text":833,"link":834},"Proje başlatın","\u002Ftr\u002Filetisim",{"label":836,"title":836,"items":837},"Hakkında",[838,840,843],{"text":839,"link":834},"İletişim",{"text":841,"link":842},"Künye","\u002Ftr\u002Fkunye",{"text":844,"link":845},"Gizlilik","\u002Ftr\u002Fgizlilik",{"code":847,"name":848},"tr","Türkçe",{},{"label":851,"title":852,"items":853},"Gezinme","Bağlantılar",[854,857,860,863,866,869],{"text":855,"link":856},"Hizmetler","\u002Ftr\u002Fhizmetler",{"text":858,"link":859},"Süreç","\u002Ftr\u002Fsurec",{"text":861,"link":862},"Fiyatlar","\u002Ftr\u002Ffiyatlar",{"text":864,"link":865},"Hakkımda","\u002Ftr\u002Fhakkimda",{"text":867,"link":868},"SSS","\u002Ftr\u002Fsss",{"text":688,"link":870},"\u002Ftr\u002Fblog",{"home":872,"services":856,"process":859,"pricing":862,"about":865,"contact":834,"faq":868,"blog":870,"legal":842,"privacy":845,"berlin":873,"web-development":874,"app-development":875,"backend-development":876,"ai-development":877,"headless-cms":878,"e-commerce":879,"technical-seo":880,"managed-hosting":881,"vue-nuxt-migration":882,"technologies":883,"vue-js":884,"nuxt":885,"node-js":886,"capacitor":887},"\u002Ftr","\u002Ftr\u002Fberlin-web-gelistirici","\u002Ftr\u002Fhizmetler\u002Fweb-gelistirme","\u002Ftr\u002Fhizmetler\u002Fuygulama-gelistirme","\u002Ftr\u002Fhizmetler\u002Fbackend-gelistirme","\u002Ftr\u002Fhizmetler\u002Fyapay-zeka-gelistirme","\u002Ftr\u002Fhizmetler\u002Fheadless-cms","\u002Ftr\u002Fhizmetler\u002Fe-ticaret","\u002Ftr\u002Fhizmetler\u002Fteknik-seo","\u002Ftr\u002Fhizmetler\u002Fyonetilen-hosting","\u002Ftr\u002Fhizmetler\u002Fvue-nuxt-gecisi","\u002Ftr\u002Fteknolojiler","\u002Ftr\u002Fteknolojiler\u002Fvue-js","\u002Ftr\u002Fteknolojiler\u002Fnuxt","\u002Ftr\u002Fteknolojiler\u002Fnode-js","\u002Ftr\u002Fteknolojiler\u002Fcapacitor",{"label":855,"title":855,"link":856,"items":889},[890,891,893,895,897,898,900,902,904,906],{"text":610,"link":874},{"text":892,"link":875},"Uygulama Geliştirme",{"text":894,"link":876},"Backend Geliştirme",{"text":896,"link":877},"Yapay Zeka Geliştirme",{"text":718,"link":878},{"text":899,"link":879},"E-Ticaret",{"text":901,"link":880},"Teknik SEO",{"text":903,"link":881},"Yönetilen Hosting",{"text":905,"link":882},"Vue & Nuxt Geçişi",{"text":907,"link":873},"Berlin'de Web Geliştirici",[909],{"icon":731,"link":732},"config\u002Ftr",{"label":912,"title":912,"link":883,"items":913},"Teknolojiler",[914,915,916,917],{"text":738,"link":884},{"text":740,"link":885},{"text":742,"link":886},{"text":744,"link":887},"euWZ_XwOFTPEe4RoPx_gjTnsrmRBOnDTdp1GprOF9D8",1792759678813]