diff --git a/README.md b/README.md
index 0d8c03f..23c77ff 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# Moy Group
-Modern, şık ve çift dilli (TR/EN) kurumsal web sitesi projesi. Moy Group çatısı altında yer alan Moy Beach, Kite Beach Hotel ve Volkswagen Kite (Surfing) mekanlarının tanıtımı, hizmet detayları, galeri ve iletişim/rezervasyon bilgilerini içerir.
+Modern, şık ve çift dilli (TR/EN) kurumsal web sitesi projesi. Moy Group çatısı altında yer alan Moy Beach, Kite Beach Hotel ve Kite Beach (Surfing) mekanlarının tanıtımı, hizmet detayları, galeri ve iletişim/rezervasyon bilgilerini içerir.
## Teknolojiler
diff --git a/app/[lang]/HomeClient.tsx b/app/[lang]/HomeClient.tsx
index ef82332..2816cfa 100644
--- a/app/[lang]/HomeClient.tsx
+++ b/app/[lang]/HomeClient.tsx
@@ -111,7 +111,7 @@ const fadeUp: Variants = {
export default function HomeClient({ lang, dict }: { lang: string; dict: any }) {
const [activeMap, setActiveMap] = useState(0);
- const VENUES: { id: string; title: string; tag: string; desc: string; img: string; color: string }[] = dict.venuesList;
+ const VENUES: { id: string; title: string; tag: string; desc: string; img: string; color: string; link: string }[] = dict.venuesList;
const LOCATIONS_MAP: { place: string; addr: string; embed: string }[] = dict.locationsMap;
return (
@@ -321,7 +321,7 @@ export default function HomeClient({ lang, dict }: { lang: string; dict: any })
{venue.desc}
{dict.cta.exploreBtn}
diff --git a/app/[lang]/iletisim/page.tsx b/app/[lang]/iletisim/page.tsx
index 8a5d75c..cb198a5 100644
--- a/app/[lang]/iletisim/page.tsx
+++ b/app/[lang]/iletisim/page.tsx
@@ -23,7 +23,7 @@ const LOCATIONS = [
variant: "blue" as const,
},
{
- name: "Volkswagen Kite (Surfing)",
+ name: "Kite Beach (Surfing)",
tag: "Kite Surf",
address: "Akçapınar kite sahili, Ula, Turkey 48640",
phones: ["+90 537 882 31 37", "+90 505 204 98 56"],
@@ -183,10 +183,10 @@ export default async function IletisimPage({
{t.social}
diff --git a/dictionaries/en.json b/dictionaries/en.json
index ecb505b..9612062 100644
--- a/dictionaries/en.json
+++ b/dictionaries/en.json
@@ -42,24 +42,27 @@
"title": "Moy Beach",
"tag": "Beach & Bar",
"desc": "An exclusive beach and gastronomy experience amidst the unique nature and azure waters of Akyaka. The point where local aromas meet international flavors.",
- "img": "/moy-beach.jpg",
- "color": "from-amber-900/60"
+ "img": "https://res.cloudinary.com/du7xohbct/image/upload/v1780592404/moygrup/moy-beach.jpg",
+ "color": "from-amber-900/60",
+ "link": "http://moybeachakyaka.com"
},
{
"id": "kite-beach-hotel",
"title": "Kite Beach Hotel",
"tag": "Hotel",
"desc": "A boutique hotel right on the clear waters of Akyaka, offering the perfect balance of both sports and relaxation. Swim in the sea in the mornings, enjoy the restaurant in the evenings.",
- "img": "/kite-beach-hotel.jpg",
- "color": "from-blue-900/60"
+ "img": "https://res.cloudinary.com/du7xohbct/image/upload/v1780592402/moygrup/kite-beach-hotel.jpg",
+ "color": "from-blue-900/60",
+ "link": "http://moybeachakyaka.com"
},
{
"id": "volkswagen-kite",
- "title": "Volkswagen Kite (Surfing)",
+ "title": "Kite Beach (Surfing)",
"tag": "Kite & Surf",
"desc": "Professional training and equipment rental at Akçapınar Kite Beach, Turkey's best kitesurf spot. Discover freedom in the diamond waters of the Gulf of Gökova.",
- "img": "/volkswagen-kite.png",
- "color": "from-green-900/60"
+ "img": "https://res.cloudinary.com/du7xohbct/image/upload/v1780592405/moygrup/volkswagen-kite.png",
+ "color": "from-green-900/60",
+ "link": "/"
}
],
"locationsMap": [
@@ -74,7 +77,7 @@
"embed": "https://maps.google.com/maps?q=Kite+Beach+Hotel+Muğla&t=&z=15&ie=UTF8&iwloc=&output=embed"
},
{
- "place": "Volkswagen Kite (Surfing)",
+ "place": "Kite Beach (Surfing)",
"addr": "Akçapınar Kite Sahili, Ula/Muğla",
"embed": "https://maps.google.com/maps?q=Volkswagen+Kite+Surfing+Muğla&t=&z=15&ie=UTF8&iwloc=&output=embed"
}
diff --git a/dictionaries/tr.json b/dictionaries/tr.json
index 653fe2f..fb03b90 100644
--- a/dictionaries/tr.json
+++ b/dictionaries/tr.json
@@ -42,24 +42,27 @@
"title": "Moy Beach",
"tag": "Beach & Bar",
"desc": "Akyaka'nın eşsiz doğası ve masmavi suları arasında, seçkin bir plaj ve gastronomi deneyimi. Yerel aromalar ile uluslararası lezzetlerin buluştuğu nokta.",
- "img": "/moy-beach.jpg",
- "color": "from-amber-900/60"
+ "img": "https://res.cloudinary.com/du7xohbct/image/upload/v1780592404/moygrup/moy-beach.jpg",
+ "color": "from-amber-900/60",
+ "link": "http://moybeachakyaka.com"
},
{
"id": "kite-beach-hotel",
"title": "Kite Beach Hotel",
"tag": "Hotel",
"desc": "Akyaka'nın berrak sularına sıfır, hem sporun hem de dinlenmenin mükemmel dengesini sunan butik otel. Sabahları denizde yüzün, akşamları restoranda keyif yapın.",
- "img": "/kite-beach-hotel.jpg",
- "color": "from-blue-900/60"
+ "img": "https://res.cloudinary.com/du7xohbct/image/upload/v1780592402/moygrup/kite-beach-hotel.jpg",
+ "color": "from-blue-900/60",
+ "link": "http://moybeachakyaka.com"
},
{
"id": "volkswagen-kite",
- "title": "Volkswagen Kite (Surfing)",
+ "title": "Kite Beach (Surfing)",
"tag": "Kite & Surf",
"desc": "Akçapınar Kite Sahili'nde, Türkiye'nin en iyi kitesurf noktasında profesyonel eğitim ve ekipman kiralama. Gökova Körfezi'nin pırlanta sularında özgürlüğü keşfedin.",
- "img": "/volkswagen-kite.png",
- "color": "from-green-900/60"
+ "img": "https://res.cloudinary.com/du7xohbct/image/upload/v1780592405/moygrup/volkswagen-kite.png",
+ "color": "from-green-900/60",
+ "link": "/"
}
],
"locationsMap": [
@@ -74,7 +77,7 @@
"embed": "https://maps.google.com/maps?q=Kite+Beach+Hotel+Muğla&t=&z=15&ie=UTF8&iwloc=&output=embed"
},
{
- "place": "Volkswagen Kite (Surfing)",
+ "place": "Kite Beach (Surfing)",
"addr": "Akçapınar Kite Sahili, Ula/Muğla",
"embed": "https://maps.google.com/maps?q=Volkswagen+Kite+Surfing+Muğla&t=&z=15&ie=UTF8&iwloc=&output=embed"
}
diff --git a/next.config.ts b/next.config.ts
index 4ff14d0..b994eab 100644
--- a/next.config.ts
+++ b/next.config.ts
@@ -4,6 +4,10 @@ const nextConfig: NextConfig = {
output: "standalone",
images: {
remotePatterns: [
+ {
+ protocol: "https",
+ hostname: "res.cloudinary.com",
+ },
{
protocol: "https",
hostname: "images.unsplash.com",
diff --git a/package-lock.json b/package-lock.json
index ea97040..966b318 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -19,6 +19,7 @@
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
+ "cloudinary": "^2.10.0",
"eslint": "^9",
"eslint-config-next": "16.2.7",
"tailwindcss": "^4",
@@ -2773,6 +2774,19 @@
"integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
"license": "MIT"
},
+ "node_modules/cloudinary": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/cloudinary/-/cloudinary-2.10.0.tgz",
+ "integrity": "sha512-sY09kYg7wprkndAOjZBAYqFZqwL+SxnEGcAvksOvFA+5upnFn949UjkEkHKNSwkBtW/xRDd0p6NgbSXZcxkI3w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lodash": "^4.17.23"
+ },
+ "engines": {
+ "node": ">=9"
+ }
+ },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -5031,6 +5045,13 @@
"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==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
diff --git a/package.json b/package.json
index d95c998..dd90e9e 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,7 @@
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
+ "cloudinary": "^2.10.0",
"eslint": "^9",
"eslint-config-next": "16.2.7",
"tailwindcss": "^4",
diff --git a/public/kitebeach/A1_0177-scaled.jpg b/public/kitebeach/A1_0177-scaled.jpg
new file mode 100644
index 0000000..078f4de
Binary files /dev/null and b/public/kitebeach/A1_0177-scaled.jpg differ
diff --git a/public/kitebeach/A1_7609-scaled.jpg b/public/kitebeach/A1_7609-scaled.jpg
new file mode 100644
index 0000000..af2ca32
Binary files /dev/null and b/public/kitebeach/A1_7609-scaled.jpg differ
diff --git a/public/kitebeach/A1_7612-scaled.jpg b/public/kitebeach/A1_7612-scaled.jpg
new file mode 100644
index 0000000..c0d7dc1
Binary files /dev/null and b/public/kitebeach/A1_7612-scaled.jpg differ
diff --git a/public/kitebeach/A1_7630-scaled.jpg b/public/kitebeach/A1_7630-scaled.jpg
new file mode 100644
index 0000000..21cdbf1
Binary files /dev/null and b/public/kitebeach/A1_7630-scaled.jpg differ
diff --git a/public/kitebeach/A1_7684-scaled.jpg b/public/kitebeach/A1_7684-scaled.jpg
new file mode 100644
index 0000000..1d1f281
Binary files /dev/null and b/public/kitebeach/A1_7684-scaled.jpg differ
diff --git a/public/kitebeach/images.jpeg b/public/kitebeach/images.jpeg
new file mode 100644
index 0000000..6c742d6
Binary files /dev/null and b/public/kitebeach/images.jpeg differ
diff --git a/public/kitebeach/moyheader-scaled.jpg b/public/kitebeach/moyheader-scaled.jpg
new file mode 100644
index 0000000..7dea1e7
Binary files /dev/null and b/public/kitebeach/moyheader-scaled.jpg differ
diff --git a/scripts/upload-to-cloudinary.js b/scripts/upload-to-cloudinary.js
new file mode 100644
index 0000000..75a95e9
--- /dev/null
+++ b/scripts/upload-to-cloudinary.js
@@ -0,0 +1,39 @@
+const cloudinary = require('cloudinary').v2;
+const fs = require('fs');
+const path = require('path');
+
+cloudinary.config({
+ cloud_name: 'du7xohbct',
+ api_key: '525922573613433',
+ api_secret: 'cJ0NDcaoQhSTAxBMv6jNMFupt3k'
+});
+
+const uploadImages = async () => {
+ const publicDir = path.join(__dirname, '..', 'public');
+ const files = fs.readdirSync(publicDir);
+
+ const images = files.filter(file => file.endsWith('.jpg') || file.endsWith('.png'));
+
+ const results = {};
+
+ for (const file of images) {
+ console.log(`Uploading ${file}...`);
+ try {
+ const filePath = path.join(publicDir, file);
+ const result = await cloudinary.uploader.upload(filePath, {
+ folder: 'moygrup',
+ use_filename: true,
+ unique_filename: false
+ });
+ console.log(`Uploaded ${file} -> ${result.secure_url}`);
+ results[file] = result.secure_url;
+ } catch (error) {
+ console.error(`Error uploading ${file}:`, error);
+ }
+ }
+
+ console.log('\n--- Upload Results ---');
+ console.log(JSON.stringify(results, null, 2));
+};
+
+uploadImages();