{"id":35371,"date":"2025-11-28T23:31:04","date_gmt":"2025-11-28T20:31:04","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/"},"modified":"2025-11-28T23:31:04","modified_gmt":"2025-11-28T20:31:04","slug":"48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/","title":{"rendered":"48 Saatlik Buton: Supabase, Google Auth ve Kapsam Kaymas\u0131yla M\u00fccadele"},"content":{"rendered":"<p><body><\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i yaz\u0131l\u0131m d\u00fcnyas\u0131nda, bir fikri h\u0131zla hayata ge\u00e7irme yetene\u011fi, inovasyonun ve ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. \u00d6zellikle bir hackathon s\u0131ras\u0131nda veya h\u0131zl\u0131 bir prototipleme ihtiyac\u0131nda, &#8220;48 saatlik buton&#8221; gibi projelerle kar\u015f\u0131la\u015fmak ka\u00e7\u0131n\u0131lmazd\u0131r. Bu makale, bir butona t\u0131klayarak basit bir veritaban\u0131 etkile\u015fimi sa\u011flayan, kullan\u0131c\u0131 kimlik do\u011frulamas\u0131 i\u00e7in Google Auth kullanan ve t\u00fcm bunlar\u0131 Supabase backend&#8217;iyle destekleyen bir web uygulamas\u0131n\u0131 48 saat i\u00e7inde geli\u015ftirme senaryosunu ele al\u0131yor. Ancak, bu t\u00fcr k\u0131s\u0131tl\u0131 zamanl\u0131 projeler, ba\u015flang\u0131\u00e7ta cazip g\u00f6r\u00fcnse de, <strong>kapsam kaymas\u0131 (scope creep)<\/strong>, entegrasyon karma\u015f\u0131kl\u0131klar\u0131 ve beklenmedik sorunlar gibi gizli tehlikeler bar\u0131nd\u0131r\u0131r. Bu yaz\u0131da, bu zorluklarla nas\u0131l ba\u015fa \u00e7\u0131kaca\u011f\u0131n\u0131z\u0131, ak\u0131ll\u0131 ara\u00e7 se\u00e7imleri ve stratejik planlama ile ba\u015far\u0131ya nas\u0131l ula\u015faca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. \u0130lk paragraf, projenin \u00f6z\u00fcn\u00fc a\u00e7\u0131klarken ayn\u0131 zamanda anahtar kelimeleri do\u011fal bir \u015fekilde bar\u0131nd\u0131rarak okuyucunun ilgisini \u00e7ekmeyi hedefler.<\/p>\n<p>Bir geli\u015ftirici olarak, belirli bir zaman diliminde fonksiyonel bir \u00fcr\u00fcn ortaya koyma bask\u0131s\u0131 alt\u0131nda kalmak olduk\u00e7a yayg\u0131nd\u0131r. &#8220;MVP&#8221; (Minimum Viable Product) kavram\u0131n\u0131n temeli de budur: en az \u00e7aba ile en temel de\u011feri sunan bir \u00fcr\u00fcn yaratmak. Ancak bu s\u00fcre\u00e7te, projenin ilk ba\u015fta belirlenen s\u0131n\u0131rlar\u0131n\u0131n d\u0131\u015f\u0131na \u00e7\u0131k\u0131lmas\u0131, yeni \u00f6zellik istekleri veya beklenmedik teknik engellerle kar\u015f\u0131la\u015f\u0131lmas\u0131 s\u0131k\u00e7a g\u00f6r\u00fclen bir durumdur. \u0130\u015fte bu noktada, do\u011fru teknoloji se\u00e7imi ve s\u0131k\u0131 bir proje y\u00f6netimi disiplini, 48 saatlik bir meydan okuman\u0131n \u00fcstesinden gelmek i\u00e7in kritik hale geliyor. Bu makale, Supabase ve Google Auth gibi modern ara\u00e7lar\u0131 kullanarak, hem h\u0131zl\u0131 bir \u015fekilde de\u011fer yaratmay\u0131 hem de kapsam kaymas\u0131n\u0131n tuza\u011f\u0131na d\u00fc\u015fmeden projenizi ba\u015far\u0131yla tamamlamay\u0131 hedefleyen stratejileri sunmaktad\u0131r.<\/p>\n<h2>Temel Ta\u015f\u0131y\u0131c\u0131lar: Supabase, Google Auth ve Kapsam Kaymas\u0131na Detayl\u0131 Bir Bak\u0131\u015f<\/h2>\n<p>Ba\u015far\u0131l\u0131 bir 48 saatlik proje i\u00e7in, kullan\u0131lan ara\u00e7lar\u0131 ve kar\u015f\u0131la\u015f\u0131labilecek potansiyel tuzaklar\u0131 iyi anlamak elzemdir. Bu b\u00f6l\u00fcmde, projemizin temel yap\u0131 ta\u015flar\u0131 olan Supabase ve Google Auth&#8217;\u0131 detayl\u0131ca inceleyecek ve h\u0131zl\u0131 geli\u015ftirmenin en b\u00fcy\u00fck d\u00fc\u015fmanlar\u0131ndan biri olan &#8220;kapsam kaymas\u0131&#8221; kavram\u0131na derinlemesine dalaca\u011f\u0131z.<\/p>\n<h3>Supabase Nedir ve Neden Tercih Etmeliyiz?<\/h3>\n<p>Supabase, geli\u015ftiricilere a\u00e7\u0131k kaynakl\u0131 bir Firebase alternatifi sunan, bir backend-as-a-service (BaaS) platformudur. Temelinde PostgreSQL veritaban\u0131 bar\u0131nd\u0131ran Supabase, ger\u00e7ek zamanl\u0131 abonelikler (realtime subscriptions), kimlik do\u011frulama (authentication), depolama (storage), sunucusuz fonksiyonlar (edge functions) ve API gibi bir dizi hizmeti tek bir \u00e7at\u0131 alt\u0131nda toplar. Bu, \u00f6zellikle h\u0131zl\u0131 prototipleme ve MVP geli\u015ftirme s\u00fcre\u00e7lerinde geli\u015ftiricilerin veritaban\u0131, kimlik do\u011frulama veya sunucu y\u00f6netimi gibi altyap\u0131sal endi\u015felerle u\u011fra\u015fmadan do\u011frudan \u00fcr\u00fcn \u00f6zelliklerine odaklanmas\u0131n\u0131 sa\u011flar. Supabase&#8217;in sundu\u011fu otomatik API \u00fcretimi sayesinde, veritaban\u0131 tablolar\u0131n\u0131z\u0131 olu\u015fturur olu\u015fturmaz, RESTful API ve GraphQL API u\u00e7 noktalar\u0131na an\u0131nda eri\u015febilirsiniz. Bu, frontend geli\u015ftiriciler i\u00e7in inan\u0131lmaz bir h\u0131z avantaj\u0131 demektir. Ayn\u0131 zamanda, PostgreSQL&#8217;in sa\u011flad\u0131\u011f\u0131 esneklik ve SQL bilginizi kullanabilme imkan\u0131, bir\u00e7ok geli\u015ftirici i\u00e7in Firebase&#8217;in NoSQL yakla\u015f\u0131m\u0131na k\u0131yasla daha tan\u0131d\u0131k ve tercih edilebilir bir deneyim sunar. G\u00fcvenlik taraf\u0131nda ise, Row Level Security (RLS) \u00f6zellikleri ile veritaban\u0131n\u0131zdaki verilere kimlerin eri\u015febilece\u011fini detayl\u0131 bir \u015fekilde kontrol etmenize olanak tan\u0131r. 48 saatlik bir projede, bu t\u00fcr kapsaml\u0131 ve entegre bir \u00e7\u00f6z\u00fcm, zaman\u0131 en verimli \u015fekilde kullanmam\u0131z\u0131 sa\u011flar.<\/p>\n<h3>Google Auth Nas\u0131l \u00c7al\u0131\u015f\u0131r ve Uygulamam\u0131za Ne Katacak?<\/h3>\n<p>Kullan\u0131c\u0131lar\u0131n uygulamalar\u0131m\u0131za g\u00fcvenli ve kolay bir \u015fekilde eri\u015fmesini sa\u011flamak, herhangi bir projenin kritik bir bile\u015fenidir. Google Auth, bu ihtiyac\u0131 kar\u015f\u0131lamak i\u00e7in en yayg\u0131n ve g\u00fcvenilir y\u00f6ntemlerden biridir. Google Auth, OAuth 2.0 protokol\u00fcn\u00fc kullanarak, kullan\u0131c\u0131lar\u0131n Google hesaplar\u0131 arac\u0131l\u0131\u011f\u0131yla uygulaman\u0131za giri\u015f yapmalar\u0131na olanak tan\u0131r. Bu sayede, kullan\u0131c\u0131lar\u0131n yeni bir hesap olu\u015fturma veya \u015fifre hat\u0131rlama zahmetine girmesine gerek kalmazken, geli\u015ftiriciler de kendi kimlik do\u011frulama sistemlerini s\u0131f\u0131rdan kurma ve bak\u0131m\u0131n\u0131 yapma y\u00fck\u00fcnden kurtulur. S\u00fcre\u00e7 genellikle \u015fu ad\u0131mlar\u0131 i\u00e7erir:<\/p>\n<ol>\n<li>Kullan\u0131c\u0131, uygulaman\u0131zdaki &#8220;Google ile Giri\u015f Yap&#8221; butonuna t\u0131klar.<\/li>\n<li>Uygulama, kullan\u0131c\u0131y\u0131 Google&#8217;\u0131n kimlik do\u011frulama sayfas\u0131na y\u00f6nlendirir.<\/li>\n<li>Kullan\u0131c\u0131, Google hesab\u0131yla giri\u015f yapar ve uygulaman\u0131z\u0131n belirli bilgilere (e-posta adresi, profil resmi vb.) eri\u015fim izni vermesini onaylar.<\/li>\n<li>Google, ba\u015far\u0131l\u0131 do\u011frulaman\u0131n ard\u0131ndan bir eri\u015fim belirteci (access token) ve\/veya ID belirteci (ID token) ile kullan\u0131c\u0131y\u0131 uygulaman\u0131za geri y\u00f6nlendirir.<\/li>\n<li>Uygulama, bu belirte\u00e7leri kullanarak kullan\u0131c\u0131n\u0131n kimli\u011fini do\u011frular ve oturumunu ba\u015flat\u0131r.<\/li>\n<\/ol>\n<p>Supabase, Google Auth gibi \u00fc\u00e7\u00fcnc\u00fc taraf kimlik do\u011frulama sa\u011flay\u0131c\u0131lar\u0131yla sorunsuz entegrasyon sunar. Bu entegrasyon sayesinde, birka\u00e7 basit yap\u0131land\u0131rma ad\u0131m\u0131yla uygulaman\u0131za g\u00fcvenli ve kullan\u0131c\u0131 dostu bir giri\u015f sistemi ekleyebilirsiniz. 48 saat gibi k\u0131s\u0131tl\u0131 bir s\u00fcrede, s\u0131f\u0131rdan bir kimlik do\u011frulama sistemi kurmak yerine mevcut, g\u00fcvenilir bir \u00e7\u00f6z\u00fcm\u00fc entegre etmek, projenin zaman \u00e7izelgesine sad\u0131k kalman\u0131n en iyi yoludur.<\/p>\n<h3>Kapsam Kaymas\u0131 (Scope Creep) Nedir ve Neden Bir Tehlikedir?<\/h3>\n<p>&#8220;Kapsam kaymas\u0131&#8221;, bir projenin ba\u015flang\u0131\u00e7ta belirlenen kapsam\u0131n\u0131n, kontrols\u00fcz bir \u015fekilde geni\u015flemesi durumunu ifade eder. Bu durum, genellikle proje devam ederken ortaya \u00e7\u0131kan yeni fikirler, ek \u00f6zellik istekleri veya orijinal gereksinimlerin yanl\u0131\u015f anla\u015f\u0131lmas\u0131 sonucunda meydana gelir. Kapsam kaymas\u0131, 48 saatlik gibi k\u0131s\u0131tl\u0131 zamanl\u0131 projelerde \u00f6zellikle y\u0131k\u0131c\u0131 olabilir \u00e7\u00fcnk\u00fc:<\/p>\n<ul>\n<li><strong>Zaman A\u015f\u0131m\u0131:<\/strong> Ek \u00f6zellikler, \u00f6ng\u00f6r\u00fclen s\u00fcreyi a\u015fman\u0131za neden olur.<\/li>\n<li><strong>B\u00fct\u00e7e A\u015f\u0131m\u0131:<\/strong> Ek i\u015fler, daha fazla kaynak ve maliyet gerektirir (daha uzun s\u00fcreli projelerde).<\/li>\n<li><strong>Kalite D\u00fc\u015f\u00fc\u015f\u00fc:<\/strong> K\u0131s\u0131tl\u0131 zamanda \u00e7ok fazla i\u015f yapmaya \u00e7al\u0131\u015fmak, mevcut \u00f6zelliklerin kalitesini d\u00fc\u015f\u00fcrebilir.<\/li>\n<li><strong>Ekip Motivasyon Kayb\u0131:<\/strong> S\u00fcrekli de\u011fi\u015fen hedefler ve uzayan \u00e7al\u0131\u015fma saatleri, ekip \u00fcyelerinin motivasyonunu olumsuz etkileyebilir.<\/li>\n<li><strong>Proje Ba\u015far\u0131s\u0131zl\u0131\u011f\u0131:<\/strong> Sonu\u00e7 olarak, proje belirlenen hedeflere ula\u015famayabilir veya tamamen ba\u015far\u0131s\u0131z olabilir.<\/li>\n<\/ul>\n<p>48 saatlik buton projemiz gibi k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli projelerde bile kapsam kaymas\u0131 riski y\u00fcksektir. &#8220;Bu butona bir de saya\u00e7 ekleyelim&#8221;, &#8220;Her kullan\u0131c\u0131n\u0131n farkl\u0131 bir renk se\u00e7ene\u011fi olsun&#8221;, &#8220;T\u0131klama ge\u00e7mi\u015fini bir grafikte g\u00f6sterelim&#8221; gibi masum g\u00f6r\u00fcnen istekler bile, k\u0131s\u0131tl\u0131 bir zaman diliminde projeyi tamamen raydan \u00e7\u0131karabilir. Bu nedenle, projenin ba\u015f\u0131ndan itibaren net s\u0131n\u0131rlar belirlemek, bu s\u0131n\u0131rlara sad\u0131k kalmak ve her yeni fikri dikkatle de\u011ferlendirmek hayati \u00f6nem ta\u015f\u0131r. Kapsam kaymas\u0131yla m\u00fccadele, sadece teknik beceri de\u011fil, ayn\u0131 zamanda disiplinli bir proje y\u00f6netimi yakla\u015f\u0131m\u0131 gerektirir.<\/p>\n<h2>48 Saatlik Buton Projesi: K\u0131s\u0131tl\u0131 Zaman, B\u00fcy\u00fck Hedefler ve Stratejik Yakla\u015f\u0131m<\/h2>\n<p>Hayal edin: \u00d6n\u00fcn\u00fczde 48 saat var ve basit ama i\u015flevsel bir web uygulamas\u0131 geli\u015ftirmeniz gerekiyor. Bu, &#8220;48 Saatlik Buton Projesi&#8221;dir. Temel amac\u0131, kullan\u0131c\u0131n\u0131n Google hesab\u0131 ile giri\u015f yap\u0131p, bir butona her t\u0131klad\u0131\u011f\u0131nda bu t\u0131klamay\u0131 Supabase veritaban\u0131na kaydetmek ve kullan\u0131c\u0131n\u0131n kendi t\u0131klama ge\u00e7mi\u015fini g\u00f6r\u00fcnt\u00fclemesini sa\u011flamak. \u0130\u015fte bu kadar! \u0130lk bak\u0131\u015fta kolay g\u00f6r\u00fcnen bu g\u00f6rev, do\u011fru stratejiler uygulanmazsa h\u0131zla karma\u015f\u0131kla\u015fabilir. Ba\u015far\u0131l\u0131 olmak i\u00e7in, projenin kapsam\u0131n\u0131 net bir \u015fekilde tan\u0131mlamal\u0131 ve buna s\u0131k\u0131 s\u0131k\u0131ya ba\u011fl\u0131 kalmal\u0131y\u0131z.<\/p>\n<h3>MVP Tan\u0131m\u0131: Projenin Olmazsa Olmazlar\u0131 Nelerdir?<\/h3>\n<p>Bu proje i\u00e7in Minimum Viable Product (MVP) tan\u0131m\u0131m\u0131z \u015funlar\u0131 i\u00e7ermelidir:<\/p>\n<ul>\n<li>Kullan\u0131c\u0131lar\u0131n Google hesaplar\u0131yla kolayca giri\u015f yapabilmesi.<\/li>\n<li>Giri\u015f yapm\u0131\u015f kullan\u0131c\u0131lara sunulan basit bir buton.<\/li>\n<li>Butona her t\u0131kland\u0131\u011f\u0131nda, kullan\u0131c\u0131n\u0131n kimli\u011fi (user_id) ve t\u0131klama zaman\u0131 (clicked_at) ile birlikte veritaban\u0131na yeni bir kay\u0131t eklenmesi.<\/li>\n<li>Kullan\u0131c\u0131n\u0131n kendi ge\u00e7mi\u015f t\u0131klamalar\u0131n\u0131 listeleyebilmesi.<\/li>\n<li>Kullan\u0131c\u0131n\u0131n \u00e7\u0131k\u0131\u015f yapabilmesi.<\/li>\n<\/ul>\n<p>Bu temel \u00f6zellikler d\u0131\u015f\u0131nda, akl\u0131m\u0131za gelebilecek &#8220;butona animasyon ekleyelim&#8221;, &#8220;farkl\u0131 temalar olsun&#8221;, &#8220;t\u0131klama say\u0131s\u0131 grafi\u011fi g\u00f6sterelim&#8221; gibi t\u00fcm ek fikirler, kapsam kaymas\u0131 tuza\u011f\u0131na d\u00fc\u015fmemek i\u00e7in kesinlikle bu 48 saatlik dilimin d\u0131\u015f\u0131na itilmelidir. Projeyi bitirdikten ve temel i\u015flevselli\u011fi kan\u0131tlad\u0131ktan sonra bu t\u00fcr eklemeler d\u00fc\u015f\u00fcn\u00fclmelidir.<\/p>\n<h3>Teknoloji Se\u00e7imi ve Ara\u00e7lar\u0131n Rol\u00fc<\/h3>\n<p>Projemizin h\u0131z ve verimlilik odakl\u0131 do\u011fas\u0131 g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, do\u011fru teknoloji y\u0131\u011f\u0131n\u0131n\u0131 se\u00e7mek kritik \u00f6neme sahiptir. Frontend i\u00e7in, h\u0131zl\u0131ca statik bir HTML\/CSS\/JavaScript sayfas\u0131 yeterli olacakt\u0131r. Karma\u015f\u0131k bir framework (React, Vue gibi) kullanmak, \u00f6\u011frenme e\u011frisi ve ba\u015flang\u0131\u00e7 kurulum maliyeti nedeniyle 48 saatlik s\u00fcreyi a\u015fabilir. Backend i\u00e7in ise Supabase ve kimlik do\u011frulama i\u00e7in Google Auth kombinasyonu, bize zaman kazand\u0131racak en ideal se\u00e7enektir. Supabase, hem veritaban\u0131 hem de kimlik do\u011frulama API&#8217;lerini tek bir yerden sunarak entegrasyon s\u00fcrecini basitle\u015ftirirken, Google Auth kullan\u0131c\u0131 deneyimini iyile\u015ftirir ve g\u00fcvenli\u011fi sa\u011flar.<\/p>\n<div class=\"tip-box\">\n    Uzman \u0130pucu: K\u0131s\u0131tl\u0131 zamanl\u0131 projelerde, bilmedi\u011finiz veya yeni \u00f6\u011frenmeye ba\u015flad\u0131\u011f\u0131n\u0131z teknolojilerden ka\u00e7\u0131n\u0131n. En iyi bildi\u011finiz, en h\u0131zl\u0131 \u015fekilde sonu\u00e7 alabilece\u011finiz ara\u00e7lara odaklan\u0131n. &#8220;Yap\u0131lacaklar&#8221; listesi yerine &#8220;Yap\u0131lmamas\u0131 Gerekenler&#8221; listesi tutmak, kapsam kaymas\u0131na kar\u015f\u0131 etkili bir savunma olabilir.\n  <\/div>\n<p>Bu stratejik yakla\u015f\u0131m sayesinde, projemizi tan\u0131ml\u0131 s\u0131n\u0131rlar i\u00e7inde tutarak, hem fonksiyonel bir \u00fcr\u00fcn ortaya koyabilir hem de 48 saatlik s\u00fcreyi verimli bir \u015fekilde kullanabiliriz. \u015eimdi, bu teorik yakla\u015f\u0131m\u0131 ger\u00e7ek d\u00fcnyaya ta\u015f\u0131ma zaman\u0131: Supabase ve Google Auth entegrasyonuna odaklanal\u0131m.<\/p>\n<h2>Supabase ve Google Auth ile H\u0131zl\u0131 ve G\u00fcvenli Entegrasyon: Ad\u0131m Ad\u0131m Uygulama<\/h2>\n<p>\u015eimdi s\u0131ra, 48 saatlik buton projemizi hayata ge\u00e7irmeye geldi. Bu b\u00f6l\u00fcmde, Supabase projesi olu\u015fturmaktan, Google Auth&#8217;u yap\u0131land\u0131rmaya ve frontend taraf\u0131nda butona t\u0131kland\u0131\u011f\u0131nda veritaban\u0131na veri kaydetmeye kadar ad\u0131m ad\u0131m t\u00fcm teknik detaylar\u0131 ele alaca\u011f\u0131z. Amac\u0131m\u0131z, en az kodla maksimum i\u015flevsellik elde etmek ve kapsam kaymas\u0131na kar\u015f\u0131 sa\u011flam bir duru\u015f sergilemektir.<\/p>\n<h3>Supabase Projesi Olu\u015fturma ve Veritaban\u0131 Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>\u0130lk ad\u0131m, Supabase platformunda yeni bir proje olu\u015fturmakt\u0131r. Supabase kontrol paneline giri\u015f yapt\u0131ktan sonra, &#8220;New Project&#8221; butonuna t\u0131klayarak projenizi olu\u015fturabilirsiniz. Projenizi olu\u015fturduktan sonra, &#8220;SQL Editor&#8221; veya &#8220;Table Editor&#8221; sekmesini kullanarak veritaban\u0131m\u0131z\u0131 haz\u0131rlamam\u0131z gerekiyor. Basit bir t\u0131klama sayac\u0131 uygulamas\u0131 i\u00e7in, her t\u0131klaman\u0131n kullan\u0131c\u0131 kimli\u011fiyle ili\u015fkilendirildi\u011fi bir tabloya ihtiyac\u0131m\u0131z var. A\u015fa\u011f\u0131daki SQL komutu ile <code>clicks<\/code> ad\u0131nda bir tablo olu\u015fturaca\u011f\u0131z:<\/p>\n<pre><code>\n  CREATE TABLE public.clicks (\n    id UUID DEFAULT gen_random_uuid() PRIMARY KEY,\n    user_id UUID REFERENCES auth.users(id),\n    clicked_at TIMESTAMPTZ DEFAULT now()\n  );\n  ALTER TABLE public.clicks ENABLE ROW LEVEL SECURITY;\n  CREATE POLICY \"Users can insert their own clicks.\" ON public.clicks\n    FOR INSERT WITH CHECK (auth.uid() = user_id);\n  CREATE POLICY \"Users can view their own clicks.\" ON public.clicks\n    FOR SELECT USING (auth.uid() = user_id);\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu SQL beti\u011fi, <code>clicks<\/code> tablosunu olu\u015fturur. <code>id<\/code> s\u00fctunu benzersiz bir tan\u0131mlay\u0131c\u0131, <code>user_id<\/code> s\u00fctunu ise <code>auth.users<\/code> tablosundaki kullan\u0131c\u0131lara referans veren bir yabanc\u0131 anahtard\u0131r. <code>clicked_at<\/code> s\u00fctunu ise t\u0131klama zaman\u0131n\u0131 otomatik olarak kaydeder. En \u00f6nemlisi, <strong>Row Level Security (RLS)<\/strong> kurallar\u0131 tan\u0131mlad\u0131k. Bu kurallar, her kullan\u0131c\u0131n\u0131n yaln\u0131zca kendi t\u0131klama kay\u0131tlar\u0131n\u0131 ekleyip g\u00f6r\u00fcnt\u00fcleyebilmesini sa\u011flar. Bu, Supabase'in g\u00fc\u00e7l\u00fc g\u00fcvenlik \u00f6zelliklerinden biridir ve uygulama taraf\u0131nda karma\u015f\u0131k yetkilendirme kodlar\u0131 yazma ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r, bu da bize 48 saatlik s\u00fcrede b\u00fcy\u00fck avantaj sa\u011flar. Unutmay\u0131n, RLS'i etkinle\u015ftirmek ve do\u011fru politikalar\u0131 yazmak, uygulaman\u0131z\u0131n g\u00fcvenli\u011fi i\u00e7in temel bir ad\u0131md\u0131r.<\/p>\n<h3>Google Provider'\u0131 Supabase \u00dczerinden Aktif Etme<\/h3>\n<p>Supabase, \u00e7e\u015fitli \u00fc\u00e7\u00fcnc\u00fc taraf kimlik do\u011frulama sa\u011flay\u0131c\u0131lar\u0131n\u0131 (Google, GitHub, Facebook vb.) kolayca entegre etmenizi sa\u011flar. Google Auth'u etkinle\u015ftirmek i\u00e7in \u015fu ad\u0131mlar\u0131 izleyin:<\/p>\n<ol>\n<li>Supabase projenizin kontrol paneline gidin.<\/li>\n<li>Sol men\u00fcden \"Authentication\" sekmesine t\u0131klay\u0131n.<\/li>\n<li>\"Providers\" men\u00fcs\u00fcne gidin ve \"Google\" se\u00e7ene\u011fini bulun.<\/li>\n<li>Google sa\u011flay\u0131c\u0131s\u0131n\u0131 etkinle\u015ftirin. Bu noktada, Google API Konsolu'ndan alman\u0131z gereken Client ID ve Client Secret bilgilerini girmeniz istenecektir.<\/li>\n<li>Google Cloud Console'a gidin (console.cloud.google.com). Yeni bir proje olu\u015fturun veya mevcut bir projenizi se\u00e7in.<\/li>\n<li>\"APIs & Services\" > \"Credentials\" b\u00f6l\u00fcm\u00fcne gidin.<\/li>\n<li>\"Create Credentials\" > \"OAuth client ID\" se\u00e7ene\u011fini se\u00e7in.<\/li>\n<li>Uygulama t\u00fcr\u00fc olarak \"Web application\"\u0131 se\u00e7in.<\/li>\n<li>\"Authorized JavaScript origins\" b\u00f6l\u00fcm\u00fcne uygulaman\u0131z\u0131n URL'sini (\u00f6rn: <code>http:\/\/localhost:3000<\/code> veya <code>https:\/\/your-domain.com<\/code>) ekleyin.<\/li>\n<li>\"Authorized redirect URIs\" b\u00f6l\u00fcm\u00fcne Supabase'in size verdi\u011fi URL'yi (genellikle Supabase URL'nizin sonuna <code>\/auth\/v1\/callback<\/code> eklenmi\u015f hali) ekleyin. Bu URL'yi Supabase'in Google Auth ayarlar\u0131ndan kopyalayabilirsiniz.<\/li>\n<li>Olu\u015fturulan Client ID ve Client Secret'\u0131 al\u0131p Supabase Google Auth ayarlar\u0131na yap\u0131\u015ft\u0131r\u0131n.<\/li>\n<\/ol>\n<p>Bu ad\u0131mlar\u0131 tamamlad\u0131ktan sonra, Supabase projeniz Google Auth ile kimlik do\u011frulamas\u0131 yapmaya haz\u0131r hale gelecektir.<\/p>\n<h3>Frontend'den Supabase ve Google Auth Kullan\u0131m\u0131<\/h3>\n<p>\u015eimdi s\u0131ra, kullan\u0131c\u0131 aray\u00fcz\u00fcm\u00fcz\u00fc olu\u015fturmaya ve Supabase ile etkile\u015fime girmeye geldi. Basit bir HTML dosyas\u0131 ve JavaScript kodu ile bu i\u015fi halledece\u011fiz. \u0130lk olarak, HTML yap\u0131m\u0131z\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code>\n  <!DOCTYPE html>\n  <html lang=\"tr\">\n  <head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>48 Saatlik Buton<\/title>\n    <style>\n      body { font-family: Arial, sans-serif; margin: 20px; background-color: #f4f7f6; color: #333; }\n      .container { max-width: 600px; margin: 50px auto; padding: 30px; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.1); background-color: #fff; text-align: center; }\n      button { background-color: #4CAF50; color: white; padding: 12px 20px; border: none; border-radius: 5px; cursor: pointer; font-size: 16px; margin: 10px; transition: background-color 0.3s ease; }\n      button:hover { background-color: #45a049; }\n      #auth-ui, #app-ui { margin-top: 20px; }\n      #clicks-list { list-style: none; padding: 0; max-height: 200px; overflow-y: auto; border: 1px solid #eee; border-radius: 5px; margin-top: 20px; text-align: left; }\n      #clicks-list li { padding: 10px; border-bottom: 1px solid #eee; }\n      #clicks-list li:last-child { border-bottom: none; }\n      .hidden { display: none; }\n      @media (max-width: 768px) {\n        .container { margin: 20px auto; padding: 20px; }\n        button { padding: 10px 15px; font-size: 14px; }\n      }\n    <\/style>\n  <\/head>\n  <body>\n    <div class=\"container\">\n      <h2>48 Saatlik Buton Projesi<\/h2>\n\n      <div id=\"auth-ui\">\n        <p>Devam etmek i\u00e7in Google ile giri\u015f yap\u0131n.<\/p>\n        <button id=\"signInBtn\">Google ile Giri\u015f Yap<\/button>\n      <\/div>\n\n      <div id=\"app-ui\" class=\"hidden\">\n        <h3>Merhaba, <span id=\"userName\"><\/span>!<\/h3>\n        <p>Butona t\u0131klayarak bir etkinlik kaydedin.<\/p>\n        <button id=\"clickBtn\">T\u0131kla Bana!<\/button>\n        <button id=\"signOutBtn\">\u00c7\u0131k\u0131\u015f Yap<\/button>\n\n        <h4>T\u0131klama Ge\u00e7mi\u015finiz:<\/h4>\n        <ul id=\"clicks-list\">\n          <li>Y\u00fckleniyor...<\/li>\n        <\/ul>\n      <\/div>\n    <\/div>\n\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@supabase\/supabase-js@2\"><\/script>\n    <script>\n      const supabaseUrl = 'YOUR_SUPABASE_URL'; \/\/ Supabase projenizin URL'si\n      const supabaseAnonKey = 'YOUR_SUPABASE_ANON_KEY'; \/\/ Supabase projenizin anon anahtar\u0131\n\n      const supabase = Supabase.createClient(supabaseUrl, supabaseAnonKey);\n\n      const authUi = document.getElementById('auth-ui');\n      const appUi = document.getElementById('app-ui');\n      const signInBtn = document.getElementById('signInBtn');\n      const signOutBtn = document.getElementById('signOutBtn');\n      const clickBtn = document.getElementById('clickBtn');\n      const userNameSpan = document.getElementById('userName');\n      const clicksList = document.getElementById('clicks-list');\n\n      async function signInWithGoogle() {\n        const { error } = await supabase.auth.signInWithOAuth({\n          provider: 'google',\n          options: {\n            redirectTo: window.location.origin \/\/ Ba\u015far\u0131l\u0131 giri\u015ften sonra bu adrese y\u00f6nlendir\n          }\n        });\n        if (error) console.error('Giri\u015f Hatas\u0131:', error.message);\n      }\n\n      async function signOutUser() {\n        const { error } = await supabase.auth.signOut();\n        if (error) console.error('\u00c7\u0131k\u0131\u015f Hatas\u0131:', error.message);\n      }\n\n      async function recordClick() {\n        const user = await supabase.auth.getUser();\n        if (user.data.user) {\n          const { data, error } = await supabase\n            .from('clicks')\n            .insert([\n              { user_id: user.data.user.id }\n            ]);\n\n          if (error) console.error('T\u0131klama Kay\u0131t Hatas\u0131:', error.message);\n          else {\n            console.log('T\u0131klama kaydedildi:', data);\n            fetchClicks(); \/\/ Yeni t\u0131klamay\u0131 listede g\u00f6stermek i\u00e7in listeyi yenile\n          }\n        }\n      }\n\n      async function fetchClicks() {\n        clicksList.innerHTML = ''; \/\/ Listeyi temizle\n        const user = await supabase.auth.getUser();\n        if (user.data.user) {\n          const { data, error } = await supabase\n            .from('clicks')\n            .select('clicked_at')\n            .eq('user_id', user.data.user.id)\n            .order('clicked_at', { ascending: false });\n\n          if (error) console.error('T\u0131klamalar\u0131 Getirme Hatas\u0131:', error.message);\n          else {\n            if (data.length === 0) {\n              clicksList.innerHTML = '<li>Hen\u00fcz hi\u00e7 t\u0131klaman\u0131z yok.<\/li>';\n            } else {\n              data.forEach(click => {\n                const li = document.createElement('li');\n                li.textContent = <code>T\u0131kland\u0131: ${new Date(click.clicked_at).toLocaleString()}<\/code>;\n                clicksList.appendChild(li);\n              });\n            }\n          }\n        }\n      }\n\n      function updateUI(session) {\n        if (session) {\n          authUi.classList.add('hidden');\n          appUi.classList.remove('hidden');\n          userNameSpan.textContent = session.user.user_metadata.full_name || session.user.email;\n          fetchClicks();\n        } else {\n          authUi.classList.remove('hidden');\n          appUi.classList.add('hidden');\n          userNameSpan.textContent = '';\n          clicksList.innerHTML = '';\n        }\n      }\n\n      \/\/ Olay dinleyicileri\n      signInBtn.addEventListener('click', signInWithGoogle);\n      signOutBtn.addEventListener('click', signOutUser);\n      clickBtn.addEventListener('click', recordClick);\n\n      \/\/ Oturum durumunu kontrol et\n      supabase.auth.getSession().then(({ data: { session } }) => {\n        updateUI(session);\n      });\n\n      supabase.auth.onAuthStateChange((event, session) => {\n        console.log('Auth state changed:', event, session);\n        updateUI(session);\n      });\n    <\/script>\n  <\/body>\n  <\/html>\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu kod blo\u011fu, <code>supabase-js<\/code> k\u00fct\u00fcphanesini kullanarak Supabase ile etkile\u015fim kurar. <code>signInWithGoogle<\/code> fonksiyonu, kullan\u0131c\u0131n\u0131n Google ile giri\u015f yapmas\u0131n\u0131 sa\u011flarken, <code>signOutUser<\/code> fonksiyonu oturumu sonland\u0131r\u0131r. <code>recordClick<\/code> fonksiyonu, butona her t\u0131kland\u0131\u011f\u0131nda mevcut kullan\u0131c\u0131n\u0131n kimli\u011fiyle birlikte <code>clicks<\/code> tablosuna yeni bir kay\u0131t ekler. <code>fetchClicks<\/code> ise kullan\u0131c\u0131n\u0131n kendi t\u0131klama ge\u00e7mi\u015fini Supabase'ten sorgular ve listeler. <code>updateUI<\/code> fonksiyonu, kullan\u0131c\u0131n\u0131n oturum durumuna g\u00f6re aray\u00fcz\u00fc g\u00fcnceller. Bu sayede, 48 saatlik proje hedeflerimize ula\u015fmak i\u00e7in gerekli t\u00fcm temel i\u015flevselli\u011fi sa\u011flam\u0131\u015f oluyoruz.<\/p>\n<h2>Kapsam Kaymas\u0131na Kar\u015f\u0131 M\u00fccadele: Proje S\u0131n\u0131rlar\u0131n\u0131 Nas\u0131l Koruyabiliriz?<\/h2>\n<p>H\u0131zl\u0131 geli\u015ftirme projelerinin do\u011fas\u0131 gere\u011fi, yeni fikirler ve iyile\u015ftirme \u00f6nerileri s\u00fcrekli olarak ortaya \u00e7\u0131kar. Bu durum, projenin ba\u015flang\u0131\u00e7ta belirlenen kapsam\u0131ndan sapmas\u0131na, yani kapsam kaymas\u0131na (scope creep) yol a\u00e7abilir. 48 saat gibi k\u0131sa bir s\u00fcre zarf\u0131nda, bu t\u00fcr sapmalar projenin tamamlanmas\u0131n\u0131 imkans\u0131z hale getirebilir. Dolay\u0131s\u0131yla, projenin s\u0131n\u0131rlar\u0131n\u0131 korumak, sadece iyi bir proje y\u00f6netimi prati\u011fi de\u011fil, ayn\u0131 zamanda projenin hayatta kalmas\u0131 i\u00e7in kritik bir stratejidir.<\/p>\n<h3>Net Gereksinimler Belirleme ve MVP'ye Odaklanma<\/h3>\n<p>Kapsam kaymas\u0131yla m\u00fccadele etmenin ilk ve en \u00f6nemli ad\u0131m\u0131, projenin ba\u015f\u0131nda \u00e7ok net ve yaz\u0131l\u0131 gereksinimler belirlemektir. 48 Saatlik Buton projesi \u00f6rne\u011finde, amac\u0131m\u0131z sadece \"Google ile giri\u015f yap, butona t\u0131kla ve t\u0131klamay\u0131 kaydet\" \u015feklindeki temel i\u015flevsellikti. Bu gereksinimler, bir belgede listelenmeli ve projenin her a\u015famas\u0131nda referans noktas\u0131 olarak kullan\u0131lmal\u0131d\u0131r. Proje s\u00fcresince ortaya \u00e7\u0131kan her yeni fikir veya istek, bu gereksinim listesiyle kar\u015f\u0131la\u015ft\u0131r\u0131lmal\u0131d\u0131r. E\u011fer yeni fikir, MVP'nin (Minimum Viable Product) tan\u0131mlanm\u0131\u015f temel \u00f6zelliklerinden birine do\u011frudan hizmet etmiyorsa, o fikir \u015fimdilik bir kenara b\u0131rak\u0131lmal\u0131 ve projenin \"sonraki a\u015famalar\u0131\" listesine eklenmelidir.<\/p>\n<p>MVP'ye odaklanmak, sadece \"olmazsa olmaz\" \u00f6zelliklere \u00f6ncelik vermek anlam\u0131na gelir. \u00d6rne\u011fin, t\u0131klama ge\u00e7mi\u015fini listeleyen bir tablonun g\u00f6rsel olarak s\u00fcslenmesi, arama veya filtreleme eklenmesi gibi \u00f6zellikler, projenin temel amac\u0131na hizmet etmedi\u011fi i\u00e7in bu 48 saatlik dilimin d\u0131\u015f\u0131nda tutulmal\u0131d\u0131r. Bu, \"i\u015fi bug\u00fcn bitir, yar\u0131n g\u00fczelle\u015ftir\" mant\u0131\u011f\u0131yla hareket etmektir. K\u0131s\u0131tl\u0131 zamanda, kusursuz bir \u00fcr\u00fcn yerine, \u00e7al\u0131\u015fan ve temel ihtiyac\u0131 kar\u015f\u0131layan bir \u00fcr\u00fcn sunmak her zaman daha de\u011ferlidir.<\/p>\n<h3>Etkili \u0130leti\u015fim ve Beklenti Y\u00f6netimi<\/h3>\n<p>Kapsam kaymas\u0131n\u0131n en b\u00fcy\u00fck tetikleyicilerinden biri de yanl\u0131\u015f ileti\u015fim ve y\u00f6netilmeyen beklentilerdir. E\u011fer bir ekip i\u00e7inde \u00e7al\u0131\u015f\u0131yorsan\u0131z veya bir m\u00fc\u015fteri i\u00e7in geli\u015ftirme yap\u0131yorsan\u0131z, projenin ba\u015f\u0131nda herkesin kapsam konusunda ayn\u0131 sayfada oldu\u011fundan emin olun. \"Bu 48 saatte ne yapaca\u011f\u0131z ve ne yapmayaca\u011f\u0131z?\" sorusunun cevab\u0131 herkes i\u00e7in net olmal\u0131d\u0131r. Yeni bir \u00f6zellik \u00f6nerisi geldi\u011finde, bunun mevcut zaman ve kaynak \u00fczerindeki etkilerini a\u00e7\u0131k\u00e7a belirtmek ve neden bu \u00f6zelli\u011fin \u015fimdilik kapsam d\u0131\u015f\u0131nda tutulmas\u0131 gerekti\u011fini a\u00e7\u0131klamak \u00f6nemlidir. \"Evet, bu harika bir fikir, ancak MVP i\u00e7in \u00f6ncelikli de\u011fil. Bunu projenin ikinci a\u015famas\u0131nda de\u011ferlendirebiliriz\" gibi yap\u0131c\u0131 bir dil kullanmak, hem fikir sahibini k\u00fc\u00e7\u00fcmsememek hem de projenin kapsam\u0131n\u0131 korumak i\u00e7in etkili bir yoldur.<\/p>\n<div class=\"tip-box\">\n    Uzman \u0130pucu: Projenizin kapsam\u0131n\u0131 ba\u015ftan net bir \u015fekilde tan\u0131mlay\u0131n ve her yeni fikirde \"Bu, 48 saatlik butonun temel amac\u0131na hizmet ediyor mu?\" sorusunu sorun. \"Hay\u0131r\" ise, o \u00f6zelli\u011fi sonraki a\u015famalara erteleyin. Her yeni \u00f6zellik iste\u011fi i\u00e7in k\u00fc\u00e7\u00fck bir \"bekleme listesi\" tutun.\n  <\/div>\n<h3>S\u0131k\u0131 Zaman \u00c7izelgesi ve Mod\u00fcler Geli\u015ftirme<\/h3>\n<p>Zaman \u00e7izelgesine s\u0131k\u0131 s\u0131k\u0131ya ba\u011fl\u0131 kalmak, kapsam kaymas\u0131na kar\u015f\u0131 en g\u00fc\u00e7l\u00fc silahlardan biridir. 48 saatlik bir proje i\u00e7in, her 6-12 saatlik dilimde nelerin tamamlanmas\u0131 gerekti\u011fini planlay\u0131n. Bu mikro-d\u00f6n\u00fcm noktalar\u0131, projenin ilerlemesini takip etmenizi ve herhangi bir sapmay\u0131 erken a\u015famada tespit etmenizi sa\u011flar. E\u011fer bir b\u00f6l\u00fcm planlanandan uzun s\u00fcr\u00fcyorsa, di\u011fer \u00f6zelliklerden \u00f6d\u00fcn vererek veya basitli\u011fi tercih ederek telafi etmeye haz\u0131r olun.<\/p>\n<p>Mod\u00fcler geli\u015ftirme yakla\u015f\u0131m\u0131 da kapsam kaymas\u0131 riskini azaltabilir. Her bir \u00f6zelli\u011fi (kimlik do\u011frulama, t\u0131klama kayd\u0131, liste g\u00f6r\u00fcnt\u00fcleme) ayr\u0131, ba\u011f\u0131ms\u0131z mod\u00fcller olarak d\u00fc\u015f\u00fcnmek, birinde ortaya \u00e7\u0131kan bir sorunun di\u011ferlerini etkilemesini engeller. Ayr\u0131ca, gelecekte yeni \u00f6zellikler eklemek istedi\u011finizde (48 saat sonras\u0131), mevcut temel yap\u0131y\u0131 bozmadan bu mod\u00fclleri kolayca entegre etmenizi sa\u011flar. Bu disiplinli yakla\u015f\u0131m, h\u0131zl\u0131 tempolu projelerde bile kontrol\u00fc elinizde tutman\u0131za ve ba\u015far\u0131ya ula\u015fman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h2>\u0130leri D\u00fczey Optimizasyonlar ve Sonu\u00e7lar: Projenizi Bir Ad\u0131m \u00d6teye Ta\u015f\u0131mak<\/h2>\n<p>48 saatlik buton projemizin temel i\u015flevselli\u011fini ba\u015far\u0131yla tamamlad\u0131k. Supabase ve Google Auth'un entegrasyonuyla g\u00fcvenli bir kimlik do\u011frulama sistemi kurduk, veritaban\u0131na veri kaydettik ve kapsam kaymas\u0131n\u0131n tuzaklar\u0131ndan ka\u00e7\u0131nmay\u0131 \u00f6\u011frendik. Ancak, deneyimli geli\u015ftiriciler i\u00e7in her zaman \"daha iyisi nas\u0131l yap\u0131l\u0131r?\" sorusu akla gelir. Bu b\u00f6l\u00fcmde, projenizi bir ad\u0131m \u00f6teye ta\u015f\u0131yacak ileri d\u00fczey ipu\u00e7lar\u0131na ve mobil uyumluluk gibi optimizasyonlara de\u011finece\u011fiz, ard\u0131ndan projenin genel bir \u00f6zetini sunup s\u0131k\u00e7a sorulan sorular\u0131 yan\u0131tlayaca\u011f\u0131z.<\/p>\n<h3>Mobil Uyumluluk ve Performans \u0130pu\u00e7lar\u0131<\/h3>\n<p>G\u00fcn\u00fcm\u00fczde kullan\u0131c\u0131lar\u0131n b\u00fcy\u00fck \u00e7o\u011funlu\u011fu web sitelerine mobil cihazlardan eri\u015fti\u011fi i\u00e7in, projenizin mobil uyumlu olmas\u0131 elzemdir. Yukar\u0131daki HTML kodumuzda basit CSS kurallar\u0131 ile temel bir mobil uyumluluk sa\u011flad\u0131k. Ancak daha geli\u015fmi\u015f bir yakla\u015f\u0131m i\u00e7in <strong>CSS Media Queries<\/strong> kullanmak, farkl\u0131 ekran boyutlar\u0131na g\u00f6re tasar\u0131msal ayarlamalar yapmam\u0131z\u0131 sa\u011flar:<\/p>\n<pre><code>\n  \/* Mobil \u00f6ncelikli (Mobile First) yakla\u015f\u0131m *\/\n  body {\n    font-family: Arial, sans-serif;\n    margin: 15px;\n    background-color: #f4f7f6;\n    color: #333;\n  }\n\n  .container {\n    max-width: 100%;\n    padding: 15px;\n    box-shadow: 0 0 8px rgba(0,0,0,0.1);\n    border-radius: 8px;\n    background-color: #ffffff;\n  }\n\n  \/* Tablet ve daha b\u00fcy\u00fck ekranlar i\u00e7in *\/\n  @media (min-width: 768px) {\n    body {\n      margin: 30px;\n    }\n    .container {\n      max-width: 800px;\n      margin: auto;\n      padding: 30px;\n    }\n  }\n\n  \/* Masa\u00fcst\u00fc ve daha b\u00fcy\u00fck ekranlar i\u00e7in *\/\n  @media (min-width: 1024px) {\n    .container {\n      max-width: 960px;\n    }\n  }\n  <\/pre>\n<p><\/code><\/p>\n<p>Performans a\u00e7\u0131s\u0131ndan, Supabase'in sundu\u011fu <strong>ger\u00e7ek zamanl\u0131 (realtime)<\/strong> abonelikleri kullanarak t\u0131klama listesini an\u0131nda g\u00fcncellemek, kullan\u0131c\u0131 deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. <code>fetchClicks()<\/code> fonksiyonunu belirli aral\u0131klarla \u00e7al\u0131\u015ft\u0131rmak yerine, Supabase'in <code>on()<\/code> metodunu kullanarak <code>clicks<\/code> tablosundaki de\u011fi\u015fiklikleri dinleyebilirsiniz. Ayr\u0131ca, uygulaman\u0131z\u0131n da\u011f\u0131t\u0131m\u0131nda CDN (\u0130\u00e7erik Da\u011f\u0131t\u0131m A\u011f\u0131) kullanmak ve JavaScript dosyalar\u0131n\u0131 minimize etmek gibi standart web optimizasyon tekniklerini uygulamak, y\u00fckleme s\u00fcrelerini k\u0131saltacakt\u0131r.<\/p>\n<h3>Sonu\u00e7: 48 Saatlik Dersler ve Kazan\u0131mlar<\/h3>\n<p>48 saatlik buton projesi, k\u0131s\u0131tl\u0131 bir zaman diliminde fonksiyonel bir web uygulamas\u0131 geli\u015ftirmenin hem zorluklar\u0131n\u0131 hem de \u00f6d\u00fcllerini g\u00f6zler \u00f6n\u00fcne serdi. Supabase ve Google Auth gibi g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131 ak\u0131ll\u0131ca kullanarak, kimlik do\u011frulama ve veritaban\u0131 i\u015flemlerini dakikalar i\u00e7inde entegre edebilece\u011fimizi g\u00f6rd\u00fck. En \u00f6nemlisi, kapsam kaymas\u0131n\u0131n projeler \u00fczerindeki y\u0131k\u0131c\u0131 etkisini anlad\u0131k ve net s\u0131n\u0131rlar, MVP odakl\u0131 \u00e7al\u0131\u015fma ve disiplinli bir yakla\u015f\u0131mla bu tehditle nas\u0131l m\u00fccadele edilece\u011fini \u00f6\u011frendik. Bu proje, h\u0131zl\u0131 prototipleme becerilerinizi geli\u015ftirirken ayn\u0131 zamanda ger\u00e7ek d\u00fcnya proje y\u00f6netiminin inceliklerini kavraman\u0131za yard\u0131mc\u0131 olacak de\u011ferli bir deneyimdir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ol>\n<li>\n<h4>S: Neden Supabase yerine Firebase kullanmamal\u0131y\u0131m?<\/h4>\n<p>C: Supabase a\u00e7\u0131k kaynakl\u0131, PostgreSQL tabanl\u0131 (SQL'e a\u015fina olanlar i\u00e7in ideal) ve self-hosting imkan\u0131 sunar. Ayr\u0131ca, otomatik RESTful API olu\u015fturmas\u0131 b\u00fcy\u00fck bir avantajd\u0131r. Firebase ise Google ekosistemine daha entegredir ve NoSQL veritaban\u0131 (Cloud Firestore) kullan\u0131r. Se\u00e7im, projenizin gereksinimlerine, veritaban\u0131 tercihlerinize ve a\u00e7\u0131k kaynak felsefesine olan yak\u0131nl\u0131\u011f\u0131n\u0131za ba\u011fl\u0131d\u0131r.<\/p>\n<\/li>\n<li>\n<h4>S: Kapsam kaymas\u0131n\u0131 tamamen \u00f6nlemek m\u00fcmk\u00fcn m\u00fcd\u00fcr?<\/h4>\n<p>C: Kapsam kaymas\u0131n\u0131 tamamen \u00f6nlemek olduk\u00e7a zor olsa da, iyi bir planlama, net ileti\u015fim, disiplinli bir yakla\u015f\u0131m ve MVP'ye s\u0131k\u0131 s\u0131k\u0131ya ba\u011fl\u0131 kalmakla etkilerini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde minimize edebilirsiniz. Her yeni \u00f6zelli\u011fi \"sonraki a\u015fama\" i\u00e7in biriktirmek iyi bir stratejidir.<\/p>\n<\/li>\n<li>\n<h4>S: Google Auth entegrasyonu ne kadar g\u00fcvenlidir?<\/h4>\n<p>C: Google Auth, OAuth 2.0 standard\u0131n\u0131 kulland\u0131\u011f\u0131 i\u00e7in olduk\u00e7a g\u00fcvenlidir. Bu protokol, kullan\u0131c\u0131 kimlik bilgilerini do\u011frudan uygulaman\u0131zla payla\u015fmadan yetkilendirme sa\u011flar. Ancak, uygulama taraf\u0131nda Supabase gibi hizmetler arac\u0131l\u0131\u011f\u0131yla token'lar\u0131 g\u00fcvenli bir \u015fekilde saklamak ve sunucu taraf\u0131nda do\u011frulamalar\u0131 do\u011fru yapmak \u00f6nemlidir. Supabase, bu s\u00fcre\u00e7lerin \u00e7o\u011funu sizin i\u00e7in g\u00fcvenli bir \u015fekilde y\u00f6netir.<\/p>\n<\/li>\n<li>\n<h4>S: 48 saatlik bir proje i\u00e7in hangi teknolojileri se\u00e7meliyim?<\/h4>\n<p>C: H\u0131zl\u0131 geli\u015ftirme i\u00e7in d\u00fc\u015f\u00fck \u00f6\u011frenme e\u011frisine sahip, iyi belgelenmi\u015f, g\u00fc\u00e7l\u00fc topluluk deste\u011fi olan ve kapsaml\u0131 entegrasyonlar sunan teknolojiler idealdir. Supabase gibi BaaS \u00e7\u00f6z\u00fcmleri, basit bir HTML\/CSS\/JavaScript frontend veya Svelte\/Vue gibi hafif framework'ler, bu t\u00fcr projeler i\u00e7in m\u00fckemmel se\u00e7eneklerdir. Karma\u015f\u0131k ve zaman al\u0131c\u0131 kurulum gerektiren ara\u00e7lardan ka\u00e7\u0131n\u0131n.<\/p>\n<\/li>\n<li>\n<h4>S: Supabase'te Row Level Security (RLS) neden bu kadar \u00f6nemli?<\/h4>\n<p>C: RLS, veritaban\u0131 seviyesinde yetkilendirme kurallar\u0131 tan\u0131mlaman\u0131za olanak tan\u0131r. Bu sayede, her kullan\u0131c\u0131n\u0131n yaln\u0131zca kendi verilerine eri\u015febilmesini veya belirli eylemleri ger\u00e7ekle\u015ftirebilmesini sa\u011flayabilirsiniz. Bu, g\u00fcvenlik katman\u0131n\u0131 do\u011frudan veritaban\u0131na ta\u015f\u0131yarak uygulama kodunuzdaki g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n riskini azalt\u0131r ve \u00f6zellikle h\u0131zl\u0131 geli\u015ftirme projelerinde g\u00fcvenli\u011fi basitle\u015ftirir ve h\u0131zland\u0131r\u0131r.<\/p>\n<\/li>\n<\/ol>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i yaz\u0131l\u0131m d\u00fcnyas\u0131nda, bir fikri h\u0131zla hayata ge\u00e7irme yetene\u011fi, inovasyonun ve ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. \u00d6zellikle bir hackathon s\u0131ras\u0131nda&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-35371","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>48 Saatlik Buton: Supabase, Google Auth ve Kapsam Kaymas\u0131yla M\u00fccadele<\/title>\n<meta name=\"description\" content=\"G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i yaz\u0131l\u0131m d\u00fcnyas\u0131nda, bir fikri h\u0131zla hayata ge\u00e7irme yetene\u011fi, inovasyonun ve ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. \u00d6zellikle bir hackathon s\u0131ras\u0131nda veya h\u0131zl\u0131 bir prototipleme ihtiyac\u0131nda, &quot;48 saatlik buton&quot; gibi projelerle kar\u015f\u0131la\u015fmak ka\u00e7\u0131n\u0131lmazd\u0131r. Bu makale, bir butona t\u0131klayarak basit bir veritaban\u0131 etkile\u015fimi sa\u011flayan, kullan\u0131c\u0131 kimlik do\u011frulamas\u0131 i\u00e7in Google Auth kullanan ve t\u00fcm bunlar\u0131 Supabase backend&#039;iyle destekleyen bir web uygulamas\u0131n\u0131 48 saat i\u00e7inde geli\u015ftirme senaryosunu ele al\u0131yor. Ancak, bu t\u00fcr k\u0131s\u0131tl\u0131 zamanl\u0131 projeler, ba\u015flang\u0131\u00e7ta cazip g\u00f6r\u00fcnse de, kapsam kaymas\u0131 (scope creep), entegrasyon karma\u015f\u0131kl\u0131klar\u0131 ve beklenmedik sorunlar gibi gizli tehlikeler bar\u0131nd\u0131r\u0131r. Bu yaz\u0131da, bu zorluklarla nas\u0131l ba\u015fa \u00e7\u0131kaca\u011f\u0131n\u0131z\u0131, ak\u0131ll\u0131 ara\u00e7 se\u00e7imleri ve stratejik planlama ile ba\u015far\u0131ya nas\u0131l ula\u015faca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. \u0130lk paragraf, projenin \u00f6z\u00fcn\u00fc a\u00e7\u0131klarken ayn\u0131 zamanda anahtar kelimeleri do\u011fal bir \u015fekilde bar\u0131nd\u0131rarak okuyucunun ilgisini \u00e7ekmeyi hedefler.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"48 Saatlik Buton: Supabase, Google Auth ve Kapsam Kaymas\u0131yla M\u00fccadele\" \/>\n<meta property=\"og:description\" content=\"G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i yaz\u0131l\u0131m d\u00fcnyas\u0131nda, bir fikri h\u0131zla hayata ge\u00e7irme yetene\u011fi, inovasyonun ve ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. \u00d6zellikle bir hackathon s\u0131ras\u0131nda veya h\u0131zl\u0131 bir prototipleme ihtiyac\u0131nda, &quot;48 saatlik buton&quot; gibi projelerle kar\u015f\u0131la\u015fmak ka\u00e7\u0131n\u0131lmazd\u0131r. Bu makale, bir butona t\u0131klayarak basit bir veritaban\u0131 etkile\u015fimi sa\u011flayan, kullan\u0131c\u0131 kimlik do\u011frulamas\u0131 i\u00e7in Google Auth kullanan ve t\u00fcm bunlar\u0131 Supabase backend&#039;iyle destekleyen bir web uygulamas\u0131n\u0131 48 saat i\u00e7inde geli\u015ftirme senaryosunu ele al\u0131yor. Ancak, bu t\u00fcr k\u0131s\u0131tl\u0131 zamanl\u0131 projeler, ba\u015flang\u0131\u00e7ta cazip g\u00f6r\u00fcnse de, kapsam kaymas\u0131 (scope creep), entegrasyon karma\u015f\u0131kl\u0131klar\u0131 ve beklenmedik sorunlar gibi gizli tehlikeler bar\u0131nd\u0131r\u0131r. Bu yaz\u0131da, bu zorluklarla nas\u0131l ba\u015fa \u00e7\u0131kaca\u011f\u0131n\u0131z\u0131, ak\u0131ll\u0131 ara\u00e7 se\u00e7imleri ve stratejik planlama ile ba\u015far\u0131ya nas\u0131l ula\u015faca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. \u0130lk paragraf, projenin \u00f6z\u00fcn\u00fc a\u00e7\u0131klarken ayn\u0131 zamanda anahtar kelimeleri do\u011fal bir \u015fekilde bar\u0131nd\u0131rarak okuyucunun ilgisini \u00e7ekmeyi hedefler.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-28T20:31:04+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"48 Saatlik Buton: Supabase, Google Auth ve Kapsam Kaymas\u0131yla M\u00fccadele\",\"datePublished\":\"2025-11-28T20:31:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/\"},\"wordCount\":3847,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/\",\"name\":\"48 Saatlik Buton: Supabase, Google Auth ve Kapsam Kaymas\u0131yla M\u00fccadele\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-28T20:31:04+00:00\",\"description\":\"G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i yaz\u0131l\u0131m d\u00fcnyas\u0131nda, bir fikri h\u0131zla hayata ge\u00e7irme yetene\u011fi, inovasyonun ve ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. \u00d6zellikle bir hackathon s\u0131ras\u0131nda veya h\u0131zl\u0131 bir prototipleme ihtiyac\u0131nda, \\\"48 saatlik buton\\\" gibi projelerle kar\u015f\u0131la\u015fmak ka\u00e7\u0131n\u0131lmazd\u0131r. Bu makale, bir butona t\u0131klayarak basit bir veritaban\u0131 etkile\u015fimi sa\u011flayan, kullan\u0131c\u0131 kimlik do\u011frulamas\u0131 i\u00e7in Google Auth kullanan ve t\u00fcm bunlar\u0131 Supabase backend'iyle destekleyen bir web uygulamas\u0131n\u0131 48 saat i\u00e7inde geli\u015ftirme senaryosunu ele al\u0131yor. Ancak, bu t\u00fcr k\u0131s\u0131tl\u0131 zamanl\u0131 projeler, ba\u015flang\u0131\u00e7ta cazip g\u00f6r\u00fcnse de, kapsam kaymas\u0131 (scope creep), entegrasyon karma\u015f\u0131kl\u0131klar\u0131 ve beklenmedik sorunlar gibi gizli tehlikeler bar\u0131nd\u0131r\u0131r. Bu yaz\u0131da, bu zorluklarla nas\u0131l ba\u015fa \u00e7\u0131kaca\u011f\u0131n\u0131z\u0131, ak\u0131ll\u0131 ara\u00e7 se\u00e7imleri ve stratejik planlama ile ba\u015far\u0131ya nas\u0131l ula\u015faca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. \u0130lk paragraf, projenin \u00f6z\u00fcn\u00fc a\u00e7\u0131klarken ayn\u0131 zamanda anahtar kelimeleri do\u011fal bir \u015fekilde bar\u0131nd\u0131rarak okuyucunun ilgisini \u00e7ekmeyi hedefler.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"48 Saatlik Buton: Supabase, Google Auth ve Kapsam Kaymas\u0131yla M\u00fccadele\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"48 Saatlik Buton: Supabase, Google Auth ve Kapsam Kaymas\u0131yla M\u00fccadele","description":"G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i yaz\u0131l\u0131m d\u00fcnyas\u0131nda, bir fikri h\u0131zla hayata ge\u00e7irme yetene\u011fi, inovasyonun ve ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. \u00d6zellikle bir hackathon s\u0131ras\u0131nda veya h\u0131zl\u0131 bir prototipleme ihtiyac\u0131nda, \"48 saatlik buton\" gibi projelerle kar\u015f\u0131la\u015fmak ka\u00e7\u0131n\u0131lmazd\u0131r. Bu makale, bir butona t\u0131klayarak basit bir veritaban\u0131 etkile\u015fimi sa\u011flayan, kullan\u0131c\u0131 kimlik do\u011frulamas\u0131 i\u00e7in Google Auth kullanan ve t\u00fcm bunlar\u0131 Supabase backend'iyle destekleyen bir web uygulamas\u0131n\u0131 48 saat i\u00e7inde geli\u015ftirme senaryosunu ele al\u0131yor. Ancak, bu t\u00fcr k\u0131s\u0131tl\u0131 zamanl\u0131 projeler, ba\u015flang\u0131\u00e7ta cazip g\u00f6r\u00fcnse de, kapsam kaymas\u0131 (scope creep), entegrasyon karma\u015f\u0131kl\u0131klar\u0131 ve beklenmedik sorunlar gibi gizli tehlikeler bar\u0131nd\u0131r\u0131r. Bu yaz\u0131da, bu zorluklarla nas\u0131l ba\u015fa \u00e7\u0131kaca\u011f\u0131n\u0131z\u0131, ak\u0131ll\u0131 ara\u00e7 se\u00e7imleri ve stratejik planlama ile ba\u015far\u0131ya nas\u0131l ula\u015faca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. \u0130lk paragraf, projenin \u00f6z\u00fcn\u00fc a\u00e7\u0131klarken ayn\u0131 zamanda anahtar kelimeleri do\u011fal bir \u015fekilde bar\u0131nd\u0131rarak okuyucunun ilgisini \u00e7ekmeyi hedefler.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/","og_locale":"tr_TR","og_type":"article","og_title":"48 Saatlik Buton: Supabase, Google Auth ve Kapsam Kaymas\u0131yla M\u00fccadele","og_description":"G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i yaz\u0131l\u0131m d\u00fcnyas\u0131nda, bir fikri h\u0131zla hayata ge\u00e7irme yetene\u011fi, inovasyonun ve ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. \u00d6zellikle bir hackathon s\u0131ras\u0131nda veya h\u0131zl\u0131 bir prototipleme ihtiyac\u0131nda, \"48 saatlik buton\" gibi projelerle kar\u015f\u0131la\u015fmak ka\u00e7\u0131n\u0131lmazd\u0131r. Bu makale, bir butona t\u0131klayarak basit bir veritaban\u0131 etkile\u015fimi sa\u011flayan, kullan\u0131c\u0131 kimlik do\u011frulamas\u0131 i\u00e7in Google Auth kullanan ve t\u00fcm bunlar\u0131 Supabase backend'iyle destekleyen bir web uygulamas\u0131n\u0131 48 saat i\u00e7inde geli\u015ftirme senaryosunu ele al\u0131yor. Ancak, bu t\u00fcr k\u0131s\u0131tl\u0131 zamanl\u0131 projeler, ba\u015flang\u0131\u00e7ta cazip g\u00f6r\u00fcnse de, kapsam kaymas\u0131 (scope creep), entegrasyon karma\u015f\u0131kl\u0131klar\u0131 ve beklenmedik sorunlar gibi gizli tehlikeler bar\u0131nd\u0131r\u0131r. Bu yaz\u0131da, bu zorluklarla nas\u0131l ba\u015fa \u00e7\u0131kaca\u011f\u0131n\u0131z\u0131, ak\u0131ll\u0131 ara\u00e7 se\u00e7imleri ve stratejik planlama ile ba\u015far\u0131ya nas\u0131l ula\u015faca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. \u0130lk paragraf, projenin \u00f6z\u00fcn\u00fc a\u00e7\u0131klarken ayn\u0131 zamanda anahtar kelimeleri do\u011fal bir \u015fekilde bar\u0131nd\u0131rarak okuyucunun ilgisini \u00e7ekmeyi hedefler.","og_url":"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-28T20:31:04+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"20 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"48 Saatlik Buton: Supabase, Google Auth ve Kapsam Kaymas\u0131yla M\u00fccadele","datePublished":"2025-11-28T20:31:04+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/"},"wordCount":3847,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/","url":"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/","name":"48 Saatlik Buton: Supabase, Google Auth ve Kapsam Kaymas\u0131yla M\u00fccadele","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-28T20:31:04+00:00","description":"G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i yaz\u0131l\u0131m d\u00fcnyas\u0131nda, bir fikri h\u0131zla hayata ge\u00e7irme yetene\u011fi, inovasyonun ve ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. \u00d6zellikle bir hackathon s\u0131ras\u0131nda veya h\u0131zl\u0131 bir prototipleme ihtiyac\u0131nda, \"48 saatlik buton\" gibi projelerle kar\u015f\u0131la\u015fmak ka\u00e7\u0131n\u0131lmazd\u0131r. Bu makale, bir butona t\u0131klayarak basit bir veritaban\u0131 etkile\u015fimi sa\u011flayan, kullan\u0131c\u0131 kimlik do\u011frulamas\u0131 i\u00e7in Google Auth kullanan ve t\u00fcm bunlar\u0131 Supabase backend'iyle destekleyen bir web uygulamas\u0131n\u0131 48 saat i\u00e7inde geli\u015ftirme senaryosunu ele al\u0131yor. Ancak, bu t\u00fcr k\u0131s\u0131tl\u0131 zamanl\u0131 projeler, ba\u015flang\u0131\u00e7ta cazip g\u00f6r\u00fcnse de, kapsam kaymas\u0131 (scope creep), entegrasyon karma\u015f\u0131kl\u0131klar\u0131 ve beklenmedik sorunlar gibi gizli tehlikeler bar\u0131nd\u0131r\u0131r. Bu yaz\u0131da, bu zorluklarla nas\u0131l ba\u015fa \u00e7\u0131kaca\u011f\u0131n\u0131z\u0131, ak\u0131ll\u0131 ara\u00e7 se\u00e7imleri ve stratejik planlama ile ba\u015far\u0131ya nas\u0131l ula\u015faca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. \u0130lk paragraf, projenin \u00f6z\u00fcn\u00fc a\u00e7\u0131klarken ayn\u0131 zamanda anahtar kelimeleri do\u011fal bir \u015fekilde bar\u0131nd\u0131rarak okuyucunun ilgisini \u00e7ekmeyi hedefler.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/48-saatlik-buton-supabase-google-auth-ve-kapsam-kaymasiyla-mucadele\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"48 Saatlik Buton: Supabase, Google Auth ve Kapsam Kaymas\u0131yla M\u00fccadele"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35371","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=35371"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35371\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35371"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35371"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}