feat: integrate Cloudinary, add new fleet items and image gallery
BIN
app/favicon.ico
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 15 KiB |
@@ -7,13 +7,15 @@ import Image from "next/image";
|
||||
import { Metadata } from "next";
|
||||
import { FLEET_ITEMS } from "@/lib/data";
|
||||
import { FleetList } from "@/components/FleetList";
|
||||
import { FleetGallery } from "@/components/FleetGallery";
|
||||
import { ALL_CLOUDINARY_IMAGES } from "@/lib/gallery_data";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Vinç Filosu ve İş Makinelerimiz | Dalaman Muğla",
|
||||
description: "Mobil vinçler, sepetli platformlar ve hiyap vinçlerden oluşan geniş araç parkurumuz hakkında detaylı bilgi alın. Her tonajda profesyonel çözüm.",
|
||||
};
|
||||
|
||||
const FLEET_CATEGORIES = ["Hepsi", "Mobil Vinç", "Sepetli Platform", "Hiyap", "Kule Vinç"];
|
||||
const FLEET_CATEGORIES = ["Hepsi", "Mobil Vinç", "Sepetli Platform", "Hiyap", "Forklift", "Nakliyat", "İş Makinesi"];
|
||||
|
||||
export default function FleetPage() {
|
||||
return (
|
||||
@@ -47,6 +49,8 @@ export default function FleetPage() {
|
||||
|
||||
<FleetList items={FLEET_ITEMS} categories={FLEET_CATEGORIES} />
|
||||
|
||||
<FleetGallery images={ALL_CLOUDINARY_IMAGES} />
|
||||
|
||||
<LoadMeterSection />
|
||||
<CTASection />
|
||||
<Footer />
|
||||
|
||||
140
components/FleetGallery.tsx
Normal file
@@ -0,0 +1,140 @@
|
||||
"use client";
|
||||
|
||||
import { useState } from "react";
|
||||
import Image from "next/image";
|
||||
import { motion, AnimatePresence } from "framer-motion";
|
||||
import { X, ChevronLeft, ChevronRight } from "lucide-react";
|
||||
|
||||
interface FleetGalleryProps {
|
||||
images: string[];
|
||||
}
|
||||
|
||||
export function FleetGallery({ images }: FleetGalleryProps) {
|
||||
const [selectedImage, setSelectedImage] = useState<number | null>(null);
|
||||
|
||||
const nextImage = () => {
|
||||
if (selectedImage !== null) {
|
||||
setSelectedImage((selectedImage + 1) % images.length);
|
||||
}
|
||||
};
|
||||
|
||||
const prevImage = () => {
|
||||
if (selectedImage !== null) {
|
||||
setSelectedImage((selectedImage - 1 + images.length) % images.length);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<section className="py-24 bg-background px-6 md:px-12">
|
||||
<div className="max-w-7xl mx-auto">
|
||||
<motion.div
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
whileInView={{ opacity: 1, y: 0 }}
|
||||
viewport={{ once: true }}
|
||||
className="mb-12"
|
||||
>
|
||||
<span className="text-primary font-headline font-bold text-xs tracking-[0.3em] uppercase mb-2 block">
|
||||
SAHADAN KARELER
|
||||
</span>
|
||||
<h2 className="text-4xl md:text-5xl font-black text-on-surface uppercase tracking-tighter leading-none">
|
||||
FİLOMUZ <span className="text-primary">AKSİYONDA</span>
|
||||
</h2>
|
||||
</motion.div>
|
||||
|
||||
<div className="grid grid-cols-2 md:grid-cols-4 gap-4">
|
||||
{images.map((src, index) => (
|
||||
<motion.div
|
||||
key={src}
|
||||
initial={{ opacity: 0, scale: 0.9 }}
|
||||
whileInView={{ opacity: 1, scale: 1 }}
|
||||
viewport={{ once: true }}
|
||||
transition={{ delay: index * 0.1 }}
|
||||
whileHover={{ scale: 0.98 }}
|
||||
className="relative aspect-square cursor-pointer overflow-hidden group bg-surface-container-low"
|
||||
onClick={() => setSelectedImage(index)}
|
||||
>
|
||||
<Image
|
||||
src={src}
|
||||
alt={`Fleet image ${index + 1}`}
|
||||
fill
|
||||
sizes="(max-width: 768px) 50vw, 25vw"
|
||||
className="object-cover transition-transform duration-500 group-hover:scale-110 grayscale group-hover:grayscale-0"
|
||||
/>
|
||||
<div className="absolute inset-0 bg-primary/20 opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex items-center justify-center">
|
||||
<div className="w-12 h-12 rounded-full bg-white/10 backdrop-blur-md flex items-center justify-center border border-white/20">
|
||||
<div className="w-1 h-4 bg-white rounded-full"></div>
|
||||
<div className="w-4 h-1 bg-white rounded-full absolute"></div>
|
||||
</div>
|
||||
</div>
|
||||
</motion.div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<AnimatePresence>
|
||||
{selectedImage !== null && (
|
||||
<motion.div
|
||||
initial={{ opacity: 0 }}
|
||||
animate={{ opacity: 1 }}
|
||||
exit={{ opacity: 0 }}
|
||||
className="fixed inset-0 z-[100] flex items-center justify-center bg-black/95 backdrop-blur-sm p-4 md:p-12"
|
||||
onClick={() => setSelectedImage(null)}
|
||||
>
|
||||
<motion.button
|
||||
initial={{ opacity: 0, scale: 0.5 }}
|
||||
animate={{ opacity: 1, scale: 1 }}
|
||||
className="absolute top-8 right-8 text-white hover:text-primary transition-colors z-[110]"
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
setSelectedImage(null);
|
||||
}}
|
||||
>
|
||||
<X size={40} strokeWidth={1} />
|
||||
</motion.button>
|
||||
|
||||
<button
|
||||
className="absolute left-4 md:left-8 text-white hover:text-primary transition-colors z-[110]"
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
prevImage();
|
||||
}}
|
||||
>
|
||||
<ChevronLeft size={60} strokeWidth={1} />
|
||||
</button>
|
||||
|
||||
<button
|
||||
className="absolute right-4 md:right-8 text-white hover:text-primary transition-colors z-[110]"
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
nextImage();
|
||||
}}
|
||||
>
|
||||
<ChevronRight size={60} strokeWidth={1} />
|
||||
</button>
|
||||
|
||||
<motion.div
|
||||
layoutId={images[selectedImage]}
|
||||
className="relative w-full h-full flex items-center justify-center"
|
||||
onClick={(e) => e.stopPropagation()}
|
||||
>
|
||||
<div className="relative w-full h-full max-w-5xl max-h-[80vh]">
|
||||
<Image
|
||||
src={images[selectedImage]}
|
||||
alt="Full size fleet image"
|
||||
fill
|
||||
className="object-contain"
|
||||
sizes="100vw"
|
||||
priority
|
||||
/>
|
||||
</div>
|
||||
</motion.div>
|
||||
|
||||
<div className="absolute bottom-10 left-1/2 -translate-x-1/2 text-white/50 font-label text-xs tracking-widest uppercase">
|
||||
{selectedImage + 1} / {images.length}
|
||||
</div>
|
||||
</motion.div>
|
||||
)}
|
||||
</AnimatePresence>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
import { ArrowRight, Phone, MessageCircle } from "lucide-react";
|
||||
import { siteConfig } from "@/lib/data";
|
||||
import { cloudinaryUrl } from "@/lib/cloudinary";
|
||||
|
||||
export function Hero() {
|
||||
const handleWhatsApp = () => {
|
||||
@@ -18,7 +19,7 @@ export function Hero() {
|
||||
<div className="absolute inset-0 z-0">
|
||||
<div className="absolute inset-0 bg-background/40 backdrop-blur-sm z-10" />
|
||||
<Image
|
||||
src="/images/Vinç hizmetleri/Ekran görüntüsü 2026-04-16 005221.png"
|
||||
src={cloudinaryUrl("/images/Vinç hizmetleri/Ekran görüntüsü 2026-04-16 005221.png")}
|
||||
alt="Industrial crane"
|
||||
fill
|
||||
priority
|
||||
|
||||
@@ -4,22 +4,23 @@ import { motion } from "framer-motion";
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
import { ArrowRight } from "lucide-react";
|
||||
import { cloudinaryUrl } from "@/lib/cloudinary";
|
||||
|
||||
const SERVICES = [
|
||||
{
|
||||
title: "Ağır Nakliyat",
|
||||
description: "Gabari dışı yüklerin özel low-bed araçlarla taşınması.",
|
||||
image: "/images/Nakliyat-Taşımacılık/Ekran görüntüsü 2026-04-16 005533.png"
|
||||
image: cloudinaryUrl("/images/Nakliyat-Taşımacılık/Ekran görüntüsü 2026-04-16 005533.png")
|
||||
},
|
||||
{
|
||||
title: "Mobil Vinç",
|
||||
description: "Yüksek tonajlı her türlü yük için teleskopik vinç çözümleri.",
|
||||
image: "/images/Vinç hizmetleri/Ekran görüntüsü 2026-04-16 005221.png"
|
||||
image: cloudinaryUrl("/images/Vinç hizmetleri/Ekran görüntüsü 2026-04-16 005221.png")
|
||||
},
|
||||
{
|
||||
title: "Sepetli Platform",
|
||||
description: "75 metreye kadar yüksek irtifa çalışma alanları.",
|
||||
image: "/images/Sepetli platform hizmetleri/Ekran görüntüsü 2026-04-16 005332.png"
|
||||
image: cloudinaryUrl("/images/Sepetli platform hizmetleri/Ekran görüntüsü 2026-04-16 005332.png")
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
8
lib/cloudinary.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
const CLOUDINARY_BASE = "https://res.cloudinary.com/du7xohbct/image/upload/aydogan";
|
||||
|
||||
export const cloudinaryUrl = (path: string) => {
|
||||
if (!path || !path.startsWith("/images/")) return path;
|
||||
const parts = path.replace("/images/", "").split("/");
|
||||
const encodedParts = parts.map(part => encodeURIComponent(part));
|
||||
return `${CLOUDINARY_BASE}/${encodedParts.join("/")}`;
|
||||
};
|
||||
78
lib/data.ts
@@ -1,4 +1,5 @@
|
||||
import { Settings, ArrowUp, Truck, Compass, Shield, Zap, Clock, MapPin, Phone, Mail } from "lucide-react";
|
||||
import { cloudinaryUrl } from "./cloudinary";
|
||||
|
||||
export const siteConfig = {
|
||||
name: "Aydoğan Nakliyat Vinç",
|
||||
@@ -21,37 +22,37 @@ export const SERVICES = [
|
||||
{
|
||||
title: "Sandiviç Panel İndirme Kaldırma",
|
||||
description: "En hassas ve en güvenli çözümler ile sandiviç panel indirme ve montaj operasyonları.",
|
||||
image: "/images/sandiviçpanelindirmekaldırma/1.png"
|
||||
image: cloudinaryUrl("/images/sandiviçpanelindirmekaldırma/1.png")
|
||||
},
|
||||
{
|
||||
title: "Konteyner Nakliyesi & Tiny House Kaldırma",
|
||||
description: "Her türlü konteyner kaldırma, taşıma ve tiny house konumlandırma işleri için profesyonel destek.",
|
||||
image: "/images/Konteyner nakliyesi Tiny house kaldırma/Ekran görüntüsü 2026-04-16 004957.png"
|
||||
image: cloudinaryUrl("/images/Konteyner nakliyesi Tiny house kaldırma/Ekran görüntüsü 2026-04-16 004957.png")
|
||||
},
|
||||
{
|
||||
title: "Jet Ground Kaldırma Taşıma",
|
||||
description: "Yüksek tonaj kaldırma kabiliyeti ile en zorlu yük taşıma ve zemin operasyonları.",
|
||||
image: "/images/Jet ground kaldırma taşıma/Ekran görüntüsü 2026-04-16 005119.png"
|
||||
image: cloudinaryUrl("/images/Jet ground kaldırma taşıma/Ekran görüntüsü 2026-04-16 005119.png")
|
||||
},
|
||||
{
|
||||
title: "Vinç Hizmetleri",
|
||||
description: "Sahalarda hız, yüksekte güven ve her türlü kaldırma operasyonu için modern vinç çözümleri.",
|
||||
image: "/images/Vinç hizmetleri/Ekran görüntüsü 2026-04-16 005221.png"
|
||||
image: cloudinaryUrl("/images/Vinç hizmetleri/Ekran görüntüsü 2026-04-16 005221.png")
|
||||
},
|
||||
{
|
||||
title: "Sepetli Platform Hizmetleri",
|
||||
description: "30 metreden 40 metreye kadar erişim sağlayan sepetli platformlar ile güvenli yüksek irtifa çalışmaları.",
|
||||
image: "/images/Sepetli platform hizmetleri/Ekran görüntüsü 2026-04-16 005332.png"
|
||||
image: cloudinaryUrl("/images/Sepetli platform hizmetleri/Ekran görüntüsü 2026-04-16 005332.png")
|
||||
},
|
||||
{
|
||||
title: "Tekne ve Yat Kaldırma",
|
||||
description: "Ağır tekne ve yatlar için doğru ekipman ve uzman kadro ile emniyetli kaldırma ve taşıma.",
|
||||
image: "/images/Tekne yat kaldırma/Ekran görüntüsü 2026-04-16 005426.png"
|
||||
image: cloudinaryUrl("/images/Tekne yat kaldırma/Ekran görüntüsü 2026-04-16 005426.png")
|
||||
},
|
||||
{
|
||||
title: "Nakliyat ve Taşımacılık",
|
||||
description: "Kapalı tenteli ve açık kasalı araçlarımızla her türlü nakliyat ve lojistik hizmetleri.",
|
||||
image: "/images/Nakliyat-Taşımacılık/Ekran görüntüsü 2026-04-16 005533.png"
|
||||
image: cloudinaryUrl("/images/Nakliyat-Taşımacılık/Ekran görüntüsü 2026-04-16 005533.png")
|
||||
}
|
||||
];
|
||||
|
||||
@@ -61,7 +62,7 @@ export const FLEET_ITEMS = [
|
||||
description: "Endüstriyel ağır kaldırma operasyonları için maksimum stabilite ve erişim gücü.",
|
||||
capacity: "300 Ton",
|
||||
reach: "78 Metre",
|
||||
image: "https://images.unsplash.com/photo-1504307651254-35680f356dfd?q=80&w=2070&auto=format&fit=crop",
|
||||
image: cloudinaryUrl("/images/Vinç hizmetleri/Ekran görüntüsü 2026-04-16 005221.png"),
|
||||
status: "Müsait",
|
||||
category: "Mobil Vinç"
|
||||
},
|
||||
@@ -70,18 +71,54 @@ export const FLEET_ITEMS = [
|
||||
description: "Şehir içi dar alanlarda yüksek manevra kabiliyeti ve pratik yükleme çözümü.",
|
||||
capacity: "75 Ton",
|
||||
reach: "32 Metre",
|
||||
image: "https://images.unsplash.com/photo-1578319439584-104c94d37305?q=80&w=2070&auto=format&fit=crop",
|
||||
image: cloudinaryUrl("/images/Jet ground kaldırma taşıma/Ekran görüntüsü 2026-04-16 005119.png"),
|
||||
status: "Bakımda",
|
||||
category: "Hiyap"
|
||||
},
|
||||
{
|
||||
name: "Sepetli Platform 45M",
|
||||
description: "Yüksek irtifa montaj ve bakım çalışmaları için güvenli çalışma sahası.",
|
||||
capacity: "450 Kg",
|
||||
reach: "45 Metre",
|
||||
image: "https://images.unsplash.com/photo-1581092918056-0c4c3acd3789?q=80&w=2070&auto=format&fit=crop",
|
||||
name: "30M Sepetli Platform (Tam Oransal)",
|
||||
description: "30M dikey erişim, 22M yatay erişim ve tam oransal uzaktan kumanda sistemi ile ultra hassas çalışma alanı.",
|
||||
capacity: "300 Kg",
|
||||
reach: "30M / 22M",
|
||||
image: cloudinaryUrl("/images/Sepetli platform hizmetleri/Ekran görüntüsü 2026-04-16 005336.png"),
|
||||
status: "Müsait",
|
||||
category: "Sepetli Platform"
|
||||
},
|
||||
{
|
||||
name: "38 Ton Çift Kırma (Uzaktan Kumandalı)",
|
||||
description: "38 Ton çift kırma kapasitesi, 40 Metre dikey ve 34 Metre yatay erişim ile sahadaki en presizyonel gücünüz.",
|
||||
capacity: "20 Ton",
|
||||
reach: "40M / 34M",
|
||||
image: cloudinaryUrl("/images/Vinç hizmetleri/Ekran görüntüsü 2026-04-16 005229.png"),
|
||||
status: "Müsait",
|
||||
category: "Hiyap"
|
||||
},
|
||||
{
|
||||
name: "3.5 Ton Forklift",
|
||||
description: "Depo içi ve şantiye alanı yükleme/boşaltma işleri için yüksek manevra kabiliyetli 3.5 tonluk forklift.",
|
||||
capacity: "3.5 Ton",
|
||||
reach: "4.5 Metre",
|
||||
image: cloudinaryUrl("/images/WhatsApp Image 2026-04-16 at 13.02.19.jpeg"),
|
||||
status: "Müsait",
|
||||
category: "Forklift"
|
||||
},
|
||||
{
|
||||
name: "Tır & Kırkayak (Nakliyat)",
|
||||
description: "Şehirler arası ve yerel nakliyat operasyonları için ağır vasıta lojistik desteği.",
|
||||
capacity: "25-40 Ton",
|
||||
reach: "Lojistik",
|
||||
image: cloudinaryUrl("/images/Nakliyat-Taşımacılık/Ekran görüntüsü 2026-04-16 005538.png"),
|
||||
status: "Müsait",
|
||||
category: "Nakliyat"
|
||||
},
|
||||
{
|
||||
name: "Kovalı Vinç (Kum & Toprak)",
|
||||
description: "Kum, toprak ve inşaat malzemesi nakli için kovalı ekipman ile hızlı boşaltma ve atma.",
|
||||
capacity: "1.5 m³ Kova",
|
||||
reach: "Hiyap Destekli",
|
||||
image: cloudinaryUrl("/images/Jet ground kaldırma taşıma/Ekran görüntüsü 2026-04-16 005124.png"),
|
||||
status: "Müsait",
|
||||
category: "İş Makinesi"
|
||||
}
|
||||
];
|
||||
|
||||
@@ -91,3 +128,16 @@ export const ABOUT_STATS = [
|
||||
{ label: "Modern Araç Filosu", value: "25+" },
|
||||
{ label: "Maksimum Kapasite", value: "SINIRSIZ" }
|
||||
];
|
||||
|
||||
export const GALLERY_IMAGES = [
|
||||
cloudinaryUrl("/images/Vinç hizmetleri/Ekran görüntüsü 2026-04-16 005221.png"),
|
||||
cloudinaryUrl("/images/Vinç hizmetleri/Ekran görüntüsü 2026-04-16 005225.png"),
|
||||
cloudinaryUrl("/images/Sepetli platform hizmetleri/Ekran görüntüsü 2026-04-16 005332.png"),
|
||||
cloudinaryUrl("/images/Sepetli platform hizmetleri/Ekran görüntüsü 2026-04-16 005336.png"),
|
||||
cloudinaryUrl("/images/Tekne yat kaldırma/Ekran görüntüsü 2026-04-16 005426.png"),
|
||||
cloudinaryUrl("/images/Tekne yat kaldırma/Ekran görüntüsü 2026-04-16 005432.png"),
|
||||
cloudinaryUrl("/images/Konteyner nakliyesi Tiny house kaldırma/Ekran görüntüsü 2026-04-16 004957.png"),
|
||||
cloudinaryUrl("/images/Konteyner nakliyesi Tiny house kaldırma/Ekran görüntüsü 2026-04-16 005004.png"),
|
||||
cloudinaryUrl("/images/sandiviçpanelindirmekaldırma/1.png"),
|
||||
cloudinaryUrl("/images/sandiviçpanelindirmekaldırma/2.png"),
|
||||
];
|
||||
|
||||
129
lib/gallery_data.ts
Normal file
@@ -0,0 +1,129 @@
|
||||
export const ALL_CLOUDINARY_IMAGES = [
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361325/aydogan/Jet%20ground%20kald%C4%B1rma%20ta%C5%9F%C4%B1ma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005119.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361326/aydogan/Jet%20ground%20kald%C4%B1rma%20ta%C5%9F%C4%B1ma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005124.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361328/aydogan/Jet%20ground%20kald%C4%B1rma%20ta%C5%9F%C4%B1ma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005128.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361329/aydogan/Jet%20ground%20kald%C4%B1rma%20ta%C5%9F%C4%B1ma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005132.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361330/aydogan/Jet%20ground%20kald%C4%B1rma%20ta%C5%9F%C4%B1ma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005137.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361332/aydogan/Jet%20ground%20kald%C4%B1rma%20ta%C5%9F%C4%B1ma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005141.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361333/aydogan/Jet%20ground%20kald%C4%B1rma%20ta%C5%9F%C4%B1ma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005147.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361334/aydogan/Jet%20ground%20kald%C4%B1rma%20ta%C5%9F%C4%B1ma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005152.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361336/aydogan/Konteyner%20nakliyesi%20Tiny%20house%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20004957.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361337/aydogan/Konteyner%20nakliyesi%20Tiny%20house%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005004.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361338/aydogan/Konteyner%20nakliyesi%20Tiny%20house%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005009.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361340/aydogan/Konteyner%20nakliyesi%20Tiny%20house%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005014.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361341/aydogan/Konteyner%20nakliyesi%20Tiny%20house%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005020.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361342/aydogan/Konteyner%20nakliyesi%20Tiny%20house%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005025.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361343/aydogan/Konteyner%20nakliyesi%20Tiny%20house%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005030.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361345/aydogan/Konteyner%20nakliyesi%20Tiny%20house%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005035.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361346/aydogan/Konteyner%20nakliyesi%20Tiny%20house%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005040.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361347/aydogan/Konteyner%20nakliyesi%20Tiny%20house%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005044.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361349/aydogan/Nakliyat-Ta%C5%9F%C4%B1mac%C4%B1l%C4%B1k/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005533.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361350/aydogan/Nakliyat-Ta%C5%9F%C4%B1mac%C4%B1l%C4%B1k/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005538.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361352/aydogan/sandivi%C3%A7panelindirmekald%C4%B1rma/1.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361355/aydogan/sandivi%C3%A7panelindirmekald%C4%B1rma/2.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361357/aydogan/sandivi%C3%A7panelindirmekald%C4%B1rma/4.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361360/aydogan/sandivi%C3%A7panelindirmekald%C4%B1rma/Ads%C4%B1z.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361362/aydogan/Sepetli%20platform%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005332.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361363/aydogan/Sepetli%20platform%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005336.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361364/aydogan/Sepetli%20platform%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005341.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361366/aydogan/Sepetli%20platform%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005345.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361367/aydogan/Sepetli%20platform%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005350.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361368/aydogan/Sepetli%20platform%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005354.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361370/aydogan/Sepetli%20platform%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005358.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361371/aydogan/Tekne%20yat%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005426.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361372/aydogan/Tekne%20yat%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005432.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361373/aydogan/Tekne%20yat%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005438.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361374/aydogan/Tekne%20yat%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005442.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361376/aydogan/Tekne%20yat%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005447.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361378/aydogan/Tekne%20yat%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005451.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361379/aydogan/Tekne%20yat%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005456.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361381/aydogan/Tekne%20yat%20kald%C4%B1rma/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005501.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361382/aydogan/Vin%C3%A7%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005221.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361384/aydogan/Vin%C3%A7%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005225.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361385/aydogan/Vin%C3%A7%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005229.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361386/aydogan/Vin%C3%A7%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005233.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361389/aydogan/Vin%C3%A7%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005237.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361390/aydogan/Vin%C3%A7%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005240.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361392/aydogan/Vin%C3%A7%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005245.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361393/aydogan/Vin%C3%A7%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005250.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361394/aydogan/Vin%C3%A7%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005254.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361395/aydogan/Vin%C3%A7%20hizmetleri/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202026-04-16%20005258.png",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361397/aydogan/WhatsApp%20Image%202026-04-16%20at%2012.54.06.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361396/aydogan/WhatsApp%20Image%202026-04-16%20at%2012.54.06%20%281%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361398/aydogan/WhatsApp%20Image%202026-04-16%20at%2012.54.35.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361401/aydogan/WhatsApp%20Image%202026-04-16%20at%2012.54.56.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361400/aydogan/WhatsApp%20Image%202026-04-16%20at%2012.54.56%20%281%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361404/aydogan/WhatsApp%20Image%202026-04-16%20at%2012.55.21.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361402/aydogan/WhatsApp%20Image%202026-04-16%20at%2012.55.21%20%281%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361403/aydogan/WhatsApp%20Image%202026-04-16%20at%2012.55.21%20%282%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361405/aydogan/WhatsApp%20Image%202026-04-16%20at%2012.55.41.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361407/aydogan/WhatsApp%20Image%202026-04-16%20at%2012.55.42.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361406/aydogan/WhatsApp%20Image%202026-04-16%20at%2012.55.42%20%281%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361409/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.19.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361408/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.19%20%281%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361412/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.20.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361410/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.20%20%281%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361411/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.20%20%282%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361416/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.21.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361413/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.21%20%281%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361414/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.21%20%282%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361415/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.21%20%283%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361415/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.21%20%284%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361417/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.22.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361418/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.23.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361421/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.26.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361419/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.26%20%281%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361423/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.27.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361422/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.27%20%281%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361425/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.28.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361424/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.02.28%20%281%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361426/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.42.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361430/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.48.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361427/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.48%20%281%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361428/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.48%20%282%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361429/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.48%20%283%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361459/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361430/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%281%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361431/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2810%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361432/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2811%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361433/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2812%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361434/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2813%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361435/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2814%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361436/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2815%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361437/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2816%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361437/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2817%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361438/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2818%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361439/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2819%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361440/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%282%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361441/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2820%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361442/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2821%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361442/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2822%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361443/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2823%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361444/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2824%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361445/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2825%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361446/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2826%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361446/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2827%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361447/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2828%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361448/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2829%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361449/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%283%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361450/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2830%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361452/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%2831%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361453/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%284%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361453/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%285%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361455/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%286%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361456/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%287%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361457/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%288%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361458/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.53%20%289%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361465/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.54.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361459/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.54%20%281%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361460/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.54%20%282%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361461/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.54%20%283%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361462/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.54%20%284%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361462/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.54%20%285%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361463/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.54%20%286%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361464/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.54%20%287%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361467/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.55.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361466/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.55%20%281%29.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361468/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.56.jpg",
|
||||
"https://res.cloudinary.com/du7xohbct/image/upload/v1776361467/aydogan/WhatsApp%20Image%202026-04-16%20at%2013.35.56%20%281%29.jpg",
|
||||
];
|
||||
@@ -12,6 +12,10 @@ const nextConfig: NextConfig = {
|
||||
protocol: 'https',
|
||||
hostname: 'lh3.googleusercontent.com',
|
||||
},
|
||||
{
|
||||
protocol: 'https',
|
||||
hostname: 'res.cloudinary.com',
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
19
package-lock.json
generated
@@ -8,6 +8,7 @@
|
||||
"name": "aydogan",
|
||||
"version": "0.1.0",
|
||||
"dependencies": {
|
||||
"cloudinary": "^2.9.0",
|
||||
"clsx": "^2.1.1",
|
||||
"framer-motion": "^12.38.0",
|
||||
"lucide-react": "^1.8.0",
|
||||
@@ -2705,6 +2706,18 @@
|
||||
"integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/cloudinary": {
|
||||
"version": "2.9.0",
|
||||
"resolved": "https://registry.npmjs.org/cloudinary/-/cloudinary-2.9.0.tgz",
|
||||
"integrity": "sha512-F3iKMOy4y0zy0bi5JBp94SC7HY7i/ImfTPSUV07iJmRzH1Iz8WavFfOlJTR1zvYM/xKGoiGZ3my/zy64In0IQQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"lodash": "^4.17.21"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=9"
|
||||
}
|
||||
},
|
||||
"node_modules/clsx": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
|
||||
@@ -4962,6 +4975,12 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/lodash": {
|
||||
"version": "4.18.1",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
|
||||
"integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash.merge": {
|
||||
"version": "4.6.2",
|
||||
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
"lint": "eslint"
|
||||
},
|
||||
"dependencies": {
|
||||
"cloudinary": "^2.9.0",
|
||||
"clsx": "^2.1.1",
|
||||
"framer-motion": "^12.38.0",
|
||||
"lucide-react": "^1.8.0",
|
||||
|
||||
BIN
public/images/WhatsApp Image 2026-04-16 at 12.54.06 (1).jpeg
Normal file
|
After Width: | Height: | Size: 494 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 12.54.06.jpeg
Normal file
|
After Width: | Height: | Size: 490 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 12.54.35.jpeg
Normal file
|
After Width: | Height: | Size: 549 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 12.54.56 (1).jpeg
Normal file
|
After Width: | Height: | Size: 399 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 12.54.56.jpeg
Normal file
|
After Width: | Height: | Size: 500 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 12.55.21 (1).jpeg
Normal file
|
After Width: | Height: | Size: 808 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 12.55.21 (2).jpeg
Normal file
|
After Width: | Height: | Size: 324 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 12.55.21.jpeg
Normal file
|
After Width: | Height: | Size: 843 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 12.55.41.jpeg
Normal file
|
After Width: | Height: | Size: 502 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 12.55.42 (1).jpeg
Normal file
|
After Width: | Height: | Size: 483 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 12.55.42.jpeg
Normal file
|
After Width: | Height: | Size: 591 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.19 (1).jpeg
Normal file
|
After Width: | Height: | Size: 374 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.19.jpeg
Normal file
|
After Width: | Height: | Size: 468 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.20 (1).jpeg
Normal file
|
After Width: | Height: | Size: 480 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.20 (2).jpeg
Normal file
|
After Width: | Height: | Size: 542 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.20.jpeg
Normal file
|
After Width: | Height: | Size: 515 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.21 (1).jpeg
Normal file
|
After Width: | Height: | Size: 510 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.21 (2).jpeg
Normal file
|
After Width: | Height: | Size: 205 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.21 (3).jpeg
Normal file
|
After Width: | Height: | Size: 387 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.21 (4).jpeg
Normal file
|
After Width: | Height: | Size: 326 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.21.jpeg
Normal file
|
After Width: | Height: | Size: 337 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.22.jpeg
Normal file
|
After Width: | Height: | Size: 464 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.23.jpeg
Normal file
|
After Width: | Height: | Size: 726 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.26 (1).jpeg
Normal file
|
After Width: | Height: | Size: 449 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.26.jpeg
Normal file
|
After Width: | Height: | Size: 623 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.27 (1).jpeg
Normal file
|
After Width: | Height: | Size: 562 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.27.jpeg
Normal file
|
After Width: | Height: | Size: 676 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.28 (1).jpeg
Normal file
|
After Width: | Height: | Size: 399 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.02.28.jpeg
Normal file
|
After Width: | Height: | Size: 385 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.42.jpeg
Normal file
|
After Width: | Height: | Size: 487 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.48 (1).jpeg
Normal file
|
After Width: | Height: | Size: 294 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.48 (2).jpeg
Normal file
|
After Width: | Height: | Size: 191 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.48 (3).jpeg
Normal file
|
After Width: | Height: | Size: 441 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.48.jpeg
Normal file
|
After Width: | Height: | Size: 275 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (1).jpeg
Normal file
|
After Width: | Height: | Size: 230 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (10).jpeg
Normal file
|
After Width: | Height: | Size: 300 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (11).jpeg
Normal file
|
After Width: | Height: | Size: 302 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (12).jpeg
Normal file
|
After Width: | Height: | Size: 355 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (13).jpeg
Normal file
|
After Width: | Height: | Size: 254 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (14).jpeg
Normal file
|
After Width: | Height: | Size: 236 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (15).jpeg
Normal file
|
After Width: | Height: | Size: 313 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (16).jpeg
Normal file
|
After Width: | Height: | Size: 318 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (17).jpeg
Normal file
|
After Width: | Height: | Size: 251 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (18).jpeg
Normal file
|
After Width: | Height: | Size: 209 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (19).jpeg
Normal file
|
After Width: | Height: | Size: 235 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (2).jpeg
Normal file
|
After Width: | Height: | Size: 277 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (20).jpeg
Normal file
|
After Width: | Height: | Size: 180 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (21).jpeg
Normal file
|
After Width: | Height: | Size: 368 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (22).jpeg
Normal file
|
After Width: | Height: | Size: 284 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (23).jpeg
Normal file
|
After Width: | Height: | Size: 247 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (24).jpeg
Normal file
|
After Width: | Height: | Size: 205 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (25).jpeg
Normal file
|
After Width: | Height: | Size: 321 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (26).jpeg
Normal file
|
After Width: | Height: | Size: 196 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (27).jpeg
Normal file
|
After Width: | Height: | Size: 187 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (28).jpeg
Normal file
|
After Width: | Height: | Size: 186 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (29).jpeg
Normal file
|
After Width: | Height: | Size: 377 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (3).jpeg
Normal file
|
After Width: | Height: | Size: 217 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (30).jpeg
Normal file
|
After Width: | Height: | Size: 313 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (31).jpeg
Normal file
|
After Width: | Height: | Size: 267 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (4).jpeg
Normal file
|
After Width: | Height: | Size: 204 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (5).jpeg
Normal file
|
After Width: | Height: | Size: 241 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (6).jpeg
Normal file
|
After Width: | Height: | Size: 327 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (7).jpeg
Normal file
|
After Width: | Height: | Size: 260 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (8).jpeg
Normal file
|
After Width: | Height: | Size: 227 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53 (9).jpeg
Normal file
|
After Width: | Height: | Size: 177 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.53.jpeg
Normal file
|
After Width: | Height: | Size: 289 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.54 (1).jpeg
Normal file
|
After Width: | Height: | Size: 161 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.54 (2).jpeg
Normal file
|
After Width: | Height: | Size: 291 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.54 (3).jpeg
Normal file
|
After Width: | Height: | Size: 136 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.54 (4).jpeg
Normal file
|
After Width: | Height: | Size: 287 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.54 (5).jpeg
Normal file
|
After Width: | Height: | Size: 320 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.54 (6).jpeg
Normal file
|
After Width: | Height: | Size: 178 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.54 (7).jpeg
Normal file
|
After Width: | Height: | Size: 259 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.54.jpeg
Normal file
|
After Width: | Height: | Size: 249 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.55 (1).jpeg
Normal file
|
After Width: | Height: | Size: 366 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.55.jpeg
Normal file
|
After Width: | Height: | Size: 215 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.56 (1).jpeg
Normal file
|
After Width: | Height: | Size: 307 KiB |
BIN
public/images/WhatsApp Image 2026-04-16 at 13.35.56.jpeg
Normal file
|
After Width: | Height: | Size: 188 KiB |
BIN
public/images/WhatsApp Video 2026-04-16 at .mp4
Normal file
BIN
public/images/WhatsApp Video 2026-04-16 at 13.35.56.mp4
Normal file
BIN
public/images/WhatsApp Video 202gh6-04-16 at 13.35.56.mp4
Normal file
56
scripts/generate_gallery_list.mjs
Normal file
@@ -0,0 +1,56 @@
|
||||
import { v2 as cloudinary } from 'cloudinary';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const envPath = path.resolve(__dirname, '../.env.local');
|
||||
const envContent = fs.readFileSync(envPath, 'utf8');
|
||||
|
||||
const env = {};
|
||||
envContent.split('\n').forEach(line => {
|
||||
const [key, ...valueParts] = line.split('=');
|
||||
if (key && valueParts.length > 0) {
|
||||
let value = valueParts.join('=').trim();
|
||||
if (value.startsWith('"') && value.endsWith('"')) {
|
||||
value = value.substring(1, value.length - 1);
|
||||
}
|
||||
env[key] = value;
|
||||
}
|
||||
});
|
||||
|
||||
cloudinary.config({
|
||||
cloud_name: env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME,
|
||||
api_key: env.CLOUDINARY_API_KEY,
|
||||
api_secret: env.CLOUDINARY_API_SECRET
|
||||
});
|
||||
|
||||
async function listAllImages() {
|
||||
let allImages = [];
|
||||
let nextCursor = null;
|
||||
|
||||
console.log('Fetching image list from Cloudinary...');
|
||||
|
||||
do {
|
||||
const result = await cloudinary.api.resources({
|
||||
type: 'upload',
|
||||
prefix: 'aydogan/',
|
||||
max_results: 500,
|
||||
next_cursor: nextCursor
|
||||
});
|
||||
|
||||
allImages = allImages.concat(result.resources.map(res => res.secure_url));
|
||||
nextCursor = result.next_cursor;
|
||||
} while (nextCursor);
|
||||
|
||||
console.log(`Found ${allImages.length} images.`);
|
||||
|
||||
// Format the output for data.ts
|
||||
const formattedList = allImages.map(url => ` "${url}",`).join('\n');
|
||||
const fileContent = `export const ALL_CLOUDINARY_IMAGES = [\n${formattedList}\n];`;
|
||||
|
||||
fs.writeFileSync(path.resolve(__dirname, '../lib/gallery_data.ts'), fileContent);
|
||||
console.log('Gallery data saved to lib/gallery_data.ts');
|
||||
}
|
||||
|
||||
listAllImages().catch(err => console.error(err));
|
||||
62
scripts/upload_cloudinary.mjs
Normal file
@@ -0,0 +1,62 @@
|
||||
import { v2 as cloudinary } from 'cloudinary';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
// Setup environment variables manually from .env.local
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const envPath = path.resolve(__dirname, '../.env.local');
|
||||
const envContent = fs.readFileSync(envPath, 'utf8');
|
||||
|
||||
const env = {};
|
||||
envContent.split('\n').forEach(line => {
|
||||
const [key, ...valueParts] = line.split('=');
|
||||
if (key && valueParts.length > 0) {
|
||||
let value = valueParts.join('=').trim();
|
||||
if (value.startsWith('"') && value.endsWith('"')) {
|
||||
value = value.substring(1, value.length - 1);
|
||||
}
|
||||
env[key] = value;
|
||||
}
|
||||
});
|
||||
|
||||
cloudinary.config({
|
||||
cloud_name: env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME,
|
||||
api_key: env.CLOUDINARY_API_KEY,
|
||||
api_secret: env.CLOUDINARY_API_SECRET
|
||||
});
|
||||
|
||||
const IMAGES_DIR = path.resolve(__dirname, '../public/images');
|
||||
|
||||
async function uploadFiles(dir) {
|
||||
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
||||
|
||||
for (const entry of entries) {
|
||||
const fullPath = path.join(dir, entry.name);
|
||||
if (entry.isDirectory()) {
|
||||
await uploadFiles(fullPath);
|
||||
} else if (entry.isFile() && /\.(png|jpg|jpeg|webp)$/i.test(entry.name)) {
|
||||
const relativePath = path.relative(IMAGES_DIR, fullPath);
|
||||
const folder = path.join('aydogan', path.dirname(relativePath)).replace(/\\/g, '/');
|
||||
const publicId = path.basename(entry.name, path.extname(entry.name));
|
||||
|
||||
console.log(`Uploading: ${relativePath} to folder: ${folder}`);
|
||||
try {
|
||||
const result = await cloudinary.uploader.upload(fullPath, {
|
||||
folder: folder,
|
||||
public_id: publicId,
|
||||
overwrite: true,
|
||||
resource_type: 'image'
|
||||
});
|
||||
console.log(`Successfully uploaded: ${result.secure_url}`);
|
||||
} catch (error) {
|
||||
console.error(`Failed to upload ${relativePath}:`, error.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log('Starting upload to Cloudinary...');
|
||||
uploadFiles(IMAGES_DIR)
|
||||
.then(() => console.log('Upload finished!'))
|
||||
.catch(err => console.error('Upload failed:', err));
|
||||