· Proje  · 5 min read

BodrumAdvisor.com Yeniden Ayağa Kalktı: Bodrum'un Dijital Rehberi Geri Döndü

Next.js, Tailwind CSS ve modern web teknolojileri ile BodrumAdvisor.com'u baştan yarattık. Bodrum'un en kapsamlı dijital rehberinin yeniden doğuş hikayesi ve teknik detayları.

Next.js, Tailwind CSS ve modern web teknolojileri ile BodrumAdvisor.com'u baştan yarattık. Bodrum'un en kapsamlı dijital rehberinin yeniden doğuş hikayesi ve teknik detayları.

BodrumAdvisor.com Yeniden Ayağa Kalktı

Bodrum’un en kapsamlı dijital rehberi olan BodrumAdvisor.com, uzun bir aradan sonra modern web teknolojileri ile yeniden hayata döndü. Bu yazıda, platformun yeniden inşa sürecini, kullanılan teknolojileri ve Vibe Coding yaklaşımıyla geliştirdiğimiz yeni özellikleri detaylı olarak paylaşacağım.

Proje Hikayesi ve Motivasyon

BodrumAdvisor, yıllarca Bodrum’u ziyaret eden turistlere ve yerel halka değerli bilgiler sunan bir platform olarak hizmet verdi. Ancak teknolojik altyapısının eskimesi ve bakım eksikliği nedeniyle bir süre erişilemez durumdaydı. Bodrum’un turizm potansiyelini ve dijital varlığının önemini göz önünde bulundurarak, bu değerli platformu modern teknolojilerle yeniden ayağa kaldırma kararı aldık.

Vibe Coding ile Yeniden Doğuş

BodrumAdvisor’ın yeniden geliştirilmesi sürecinde Vibe Coding metodolojisini benimsedik. Bu yaklaşım sayesinde:

  • Yaratıcı enerjinin yüksek olduğu anlarda kod yazarak daha inovatif çözümler ürettik
  • Kullanıcı deneyimi ve teknik mükemmellik arasında mükemmel denge kurduk
  • Kod kalitesi ve sürdürülebilirliğe odaklanarak uzun vadeli bir yapı oluşturduk
  • Pozitif ve üretken bir geliştirme ortamı yaratarak projeye olan bağlılığı artırdık

Yeni BodrumAdvisor’ın Özellikleri

Kapsamlı İşletme Rehberi

Platform, Bodrum’daki tüm işletmeleri kategorize ederek kullanıcılara sunuyor:

  • Restoranlar ve kafeler
  • Oteller ve pansiyonlar
  • Plajlar ve beach club’lar
  • Gece hayatı mekanları
  • Alışveriş noktaları
  • Su sporları ve aktiviteler
  • Sağlık ve wellness merkezleri
  • Transfer ve ulaşım hizmetleri

Gelişmiş Arama ve Filtreleme

Kullanıcılar, ihtiyaçlarına göre işletmeleri kolayca bulabiliyor:

  • Konum bazlı arama
  • Kategori filtreleme
  • Fiyat aralığı seçimi
  • Puan ve yorumlara göre sıralama
  • Özel kampanya ve indirimler

Kullanıcı Yorumları ve Puanlama Sistemi

Gerçek deneyimlere dayalı güvenilir bilgi sunmak için:

  • Doğrulanmış kullanıcı yorumları
  • 5 yıldızlı puanlama sistemi
  • Fotoğraf ve video paylaşımı
  • Faydalı yorum oylama

Teknik Altyapı ve Modernizasyon

Next.js ile Performans Odaklı Mimari

BodrumAdvisor’ın yeni versiyonu Next.js 14 ile geliştirildi:

// app/isletmeler/[slug]/page.tsx
import { Metadata } from 'next'
import { getIsletmeBySlug } from '@/lib/isletme'
import { IsletmeDetay } from '@/components/isletme/IsletmeDetay'
import { YorumlarBolumu } from '@/components/isletme/YorumlarBolumu'
import { BenzerIsletmeler } from '@/components/isletme/BenzerIsletmeler'

export async function generateMetadata({ params }): Promise<Metadata> {
  const isletme = await getIsletmeBySlug(params.slug)
  
  return {
    title: `${isletme.ad} - BodrumAdvisor`,
    description: isletme.kisaAciklama,
    openGraph: {
      title: isletme.ad,
      description: isletme.kisaAciklama,
      images: [isletme.kapakFoto],
    },
  }
}

export default async function IsletmeSayfasi({ params }) {
  const isletme = await getIsletmeBySlug(params.slug)
  
  return (
    <div className="container mx-auto px-4 py-8">
      <IsletmeDetay isletme={isletme} />
      <YorumlarBolumu isletmeId={isletme.id} />
      <BenzerIsletmeler kategori={isletme.kategori} />
    </div>
  )
}

Tailwind CSS ile Modern ve Responsive Tasarım

Kullanıcı arayüzü Tailwind CSS ile oluşturuldu:

// components/isletme/IsletmeKarti.tsx
interface IsletmeKartiProps {
  isletme: Isletme
}

export const IsletmeKarti = ({ isletme }: IsletmeKartiProps) => {
  return (
    <div className="bg-white rounded-xl shadow-lg overflow-hidden hover:shadow-2xl transition-all duration-300 transform hover:-translate-y-1">
      <div className="relative h-56">
        <Image 
          src={isletme.kapakFoto} 
          alt={isletme.ad} 
          fill
          className="object-cover"
        />
        {isletme.ozelTeklif && (
          <span className="absolute top-4 right-4 bg-red-500 text-white px-3 py-1 rounded-full text-sm font-semibold">
            Özel Teklif
          </span>
        )}
      </div>
      <div className="p-6">
        <div className="flex justify-between items-start mb-3">
          <h3 className="text-xl font-bold text-gray-800">{isletme.ad}</h3>
          <div className="flex items-center">
            <Star className="w-5 h-5 text-yellow-400 fill-current" />
            <span className="ml-1 text-gray-600">{isletme.ortalamaPuan}</span>
          </div>
        </div>
        <p className="text-gray-600 mb-4 line-clamp-2">{isletme.kisaAciklama}</p>
        <div className="flex items-center justify-between">
          <span className="text-sm text-gray-500">{isletme.kategori}</span>
          <Link 
            href={`/isletmeler/${isletme.slug}`}
            className="text-blue-600 hover:text-blue-800 font-medium flex items-center"
          >
            Detaylar
            <ChevronRight className="w-4 h-4 ml-1" />
          </Link>
        </div>
      </div>
    </div>
  )
}

MongoDB ve Prisma ile Esnek Veri Yönetimi

Veritabanı olarak MongoDB kullanıldı ve Prisma ORM ile yönetildi:

// prisma/schema.prisma
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mongodb"
  url      = env("DATABASE_URL")
}

model Isletme {
  id              String   @id @default(auto()) @map("_id") @db.ObjectId
  ad              String
  slug            String   @unique
  kategori        String
  kisaAciklama    String
  uzunAciklama    String
  adres           String
  telefon         String
  email           String?
  website         String?
  kapakFoto       String
  galeriFotolar   String[]
  koordinatlar    Koordinat
  calismaaSaatleri Json
  ozellikler      String[]
  ortalamaPuan    Float    @default(0)
  yorumSayisi     Int      @default(0)
  ozelTeklif      Boolean  @default(false)
  yorumlar        Yorum[]
  createdAt       DateTime @default(now())
  updatedAt       DateTime @updatedAt
}

model Yorum {
  id          String   @id @default(auto()) @map("_id") @db.ObjectId
  isletmeId   String   @db.ObjectId
  isletme     Isletme  @relation(fields: [isletmeId], references: [id])
  kullaniciAdi String
  kullaniciEmail String
  puan        Int
  baslik      String
  icerik      String
  fotograflar String[]
  onaylandi   Boolean  @default(false)
  createdAt   DateTime @default(now())
  updatedAt   DateTime @updatedAt
}

type Koordinat {
  lat Float
  lng Float
}

SEO Optimizasyonu ve Performans

BodrumAdvisor’ın arama motorlarında üst sıralarda yer alması için:

  • Server-side rendering ile hızlı sayfa yüklemeleri
  • Dinamik meta tag’ler ve structured data
  • Sitemap ve robots.txt optimizasyonu
  • Core Web Vitals skorlarının iyileştirilmesi
  • Cloudflare CDN entegrasyonu

Gelişmiş Özellikler ve Entegrasyonlar

Harita Entegrasyonu

İşletmelerin konumlarını görsel olarak sunmak için Google Maps API entegrasyonu:

// components/harita/IsletmeHaritasi.tsx
import { GoogleMap, Marker, InfoWindow } from '@react-google-maps/api'

export const IsletmeHaritasi = ({ isletmeler }) => {
  const [selectedIsletme, setSelectedIsletme] = useState(null)
  
  return (
    <GoogleMap
      mapContainerStyle={mapContainerStyle}
      zoom={12}
      center={bodrumMerkez}
    >
      {isletmeler.map((isletme) => (
        <Marker
          key={isletme.id}
          position={{
            lat: isletme.koordinatlar.lat,
            lng: isletme.koordinatlar.lng
          }}
          onClick={() => setSelectedIsletme(isletme)}
        />
      ))}
      
      {selectedIsletme && (
        <InfoWindow
          position={{
            lat: selectedIsletme.koordinatlar.lat,
            lng: selectedIsletme.koordinatlar.lng
          }}
          onCloseClick={() => setSelectedIsletme(null)}
        >
          <div className="p-2">
            <h3 className="font-bold">{selectedIsletme.ad}</h3>
            <p className="text-sm">{selectedIsletme.kategori}</p>
            <Link href={`/isletmeler/${selectedIsletme.slug}`}>
              Detayları Gör
            </Link>
          </div>
        </InfoWindow>
      )}
    </GoogleMap>
  )
}

Çok Dilli Destek

Uluslararası ziyaretçiler için çok dilli altyapı:

  • Türkçe
  • İngilizce
  • Almanca
  • Rusça

Mobil Uygulama Hazırlığı

Progressive Web App (PWA) özellikleri ile mobil deneyim:

  • Offline çalışma kapasitesi
  • Push bildirimler
  • Ana ekrana ekleme
  • Hızlı yükleme süreleri

Sonuç ve Gelecek Vizyonu

BodrumAdvisor.com’un yeniden hayata dönmesi, Bodrum’un dijital turizm ekosistemi için önemli bir kazanım oldu. Modern teknolojiler ve kullanıcı odaklı tasarım anlayışıyla geliştirilen platform, hem yerli hem de yabancı ziyaretçilere değerli bir rehber olma misyonunu sürdürüyor.

Gelecek Planları

  • Yapay zeka destekli kişiselleştirilmiş öneriler
  • Sanal tur ve 360° görüntüleme özellikleri
  • Online rezervasyon ve ödeme sistemi entegrasyonu
  • Sosyal medya entegrasyonları
  • Bodrum etkinlik takvimi
  • Turist rehberi ve blog bölümü

BodrumAdvisor, Bodrum’un dijital vitrini olma yolunda emin adımlarla ilerliyor. Platform, sürekli gelişen teknoloji ve değişen kullanıcı ihtiyaçlarına paralel olarak kendini yenilemeye devam edecek.


Eğer siz de benzer bir dijital dönüşüm projesi hayata geçirmek istiyorsanız veya BodrumAdvisor’da işletmenizin yer almasını istiyorsanız, benimle iletişime geçebilirsiniz. Bodrum’un dijital geleceğini birlikte inşa edelim.

Back to Blog

Related Posts

View All Posts »