Hepinize selamlar. Belirli bir süredir kendime deneyimlerimi diğerleriyle paylaşabileceğim, öğrendiklerimin derli toplu dokümanını tutabileceğim bir kişisel blog oluşturmak istiyordum ve çok sevdiğim Next.js frameworküyle bu blogu geliştirdim. Sizinle bu blogu geliştirirken kullandığım teknolojileri ve developer olarak yaşadığım deneyimleri paylaşacağım. Öncelikle kullandığım başlıca teknolojiler şunlar.
- Next.js 13 ve App Router
- Sanity CMS
- Next-auth
- MongoDB
1. Next.js 13 ve App Router #
Bundan önce birkaç projede Next.js 13'ü hali hazırda denemiştim. App Router uygulamanın scalable (ölçeklenebilir) olmasına oldukça olanak sağlıyor. Ayrıca bu projede de hem dinamik hem de statik linklere sahip bir dil select komponentine ihtiyacım vardı çünkü projenin SEO kapsamının çok geniş olmasını istiyordum. Daha önce dinamik oluşturduğum blog postlarım için tr/bir-post-slug
, en/bir-post-slug
ve de/bir-post-slug
olarak aynı urli farklı diller için kullanmıştım ancak daha iyi bir SEO deneyimi için bu projede tr/bir-post-slug
olan bir sayfanın ilgili translated sayfası en/a-post-slug
ve de/eine-post-slug
linklerine sahip yeni statik sayfalar olarak oluşturmayı başardım. BuradauseRouter from 'next/router
işimi çok daha kolaylaştırırdı. Ayrıca, App Router [locale]
dinamik klasörünü kullandığınızda error handling bir nebze karmaşıklaşabiliyor. Bununla ilgili githubdaki şu konuyu
2. Sanity CMS #
CMS araçlarıyla olan serüvenim Gatsby.js ve Netlify CMS ile başladı. Daha sonrasında çalıştığım şirketimde çoklu dil yapısını destekleyen bir Content Management System arayışı içerisindeyken Contentful CMS'i keşfettim ve şirketin 2 büyük landing sayfasını Contentful CMS ile entegre geliştirdim. Contentful CMS hem içerik editörü hem de developer deneyimi açışından çok zengin araçlara sahip ancak rich text editörü custom kod bloklarını desteklemiyor ve ben de bu blogumda code bloklarını kullanmak editlemek istiyordum. Bir diğer sorun şu ki Contentful'un ücretsiz planı sadece 2 dile izin veriyor. Ancak ben blogumda 3 (şimdilik) dil seçeneği istiyordum. Bu gereksinimi karşılayacak ücretsiz bir CMS aracı ararken Sanity'e denk geldim. Sanity'nin en güzel yanı birden fazla dil seçeneğini ücretsiz bir şekilde destekliyor olması. Bunun yanı sıra içeriklerinizin şemalarını kodunuzda tanımlayıp type-safe bir uygulama geliştirmeniz mümkün. Şu an yazmakta olduğum bu post da dahil olmak üzere bu sitedeki bütün postlarımı Sanity'nin admin panelinden atıyorum.
Sanity 2 çeşit çeviri seçeneği sunuyor. Birinci seçenek alan bazlı çeviri. Özetle şu eğer bir dokümanda name diye bir alanınız var ise bunun için n (n burada dil seçeneği sayısını temsil ediyor) dili kadar inputunuz var ve datanıza query atarken bu alanlardan mevcut dilinize göre filtreleme yapmanız gerek. Bu doküman şemanızda birkaç alan var ise çok faydalı ancak şemalarınız büyüdükçe 1 alan için n adet inputu tek bir dokümanda görmek ve düzenlemek biraz zorlaşıyor. Detayları burada
3. Next-Auth #
Next-auth harik bir npm paketi. Bu sitede de okurların yani sizin yorum atabilmeniz için bir alan eklemek istedim. Yorumları atarken google ile giriş yapabilmeniz adına bu kütüphaneyi ve içerisinde sağladığı onlarca auth provider servisinden biri olan GoogleProvider'ı kullandım. Bu paket sayesinde Google hesabınızla güvenli bir şekilde giriş yapıp, gönderilerimin altına yorum yazabilir, soru sorabilir ve benimle etkileşime geçebilirsiniz. Yorum atın :)
4. MongoDB #
MongoDB kolay kurulumu ve cömert ücretsiz paketi sayesinde birçok projede favori databaseim. Bu projede de kullanıcıların yorumlarını saklamak için MongoDB'yi kullanıyorum. Şu sıralar Prisma ve SQL öğrenmeye çalışsam da küçük ölçekte her zaman MongoDB'nin kullanışlı olduğunu düşünüyorum. Yorumlarınızı MongoDB'de saklıyorum. Aşağıda Next.js api route kullanarak yorumlarınızı kaydettiğim fonksiyonu paylaştım. Yorumlarınızı. Yorumlarınızı...
Özetle bu proje aslında basit bir blog olarak başlayan ve her gün üstüne bir şey koyarken bana da çok şey öğreten bir proje oldu. Her gün bu ve daha nice yeni geliştirmelere devam ederken bir yandan da sizinle deneyimlerimi paylaşmaya çalışacağım. Her türlü yorum, eleştiri veya ger dönütlerinizi benimle paylaşırsanız sevinirim. Okuduğunuz için teşekkür ederim :)