From 7cbd59367934df402cda3038db10b04a630a95f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96ZT=C3=9CRK?= <76204082+iamsedatozturk@users.noreply.github.com> Date: Tue, 20 May 2025 15:47:11 +0300 Subject: [PATCH] =?UTF-8?q?Products=20ve=20Services=20sayfalar=C4=B1=20tra?= =?UTF-8?q?nslation=20d=C3=BCzenlemesi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- My_workflow.json | 198 ++++++------- company/index.html | 2 +- company/src/components/home/Hero.tsx | 2 +- company/src/components/layout/Header.tsx | 4 +- company/src/context/LanguageContext.tsx | 266 ++++++++++++++---- company/src/pages/Products.tsx | 251 ++++++++++++----- company/src/pages/Services.tsx | 246 +++++++++++----- ui/dev-dist/sw.js | 2 +- ui/src/components/template/SideNav.tsx | 2 +- .../StackedSideNav/StackedSideNavMini.tsx | 2 +- ui/src/constants/theme.constant.ts | 2 +- 11 files changed, 668 insertions(+), 309 deletions(-) diff --git a/My_workflow.json b/My_workflow.json index 3ee20af6..c77ccb7c 100644 --- a/My_workflow.json +++ b/My_workflow.json @@ -1,5 +1,5 @@ { - "name": "My workflow", + "name": "Kadifeteks Workflow", "nodes": [ { "parameters": { @@ -21,7 +21,7 @@ }, { "parameters": { - "jsCode": "const q = $('Webhook').item.json.body.question.toLowerCase();\n\nif (q.includes(\"tahmin\") || q.includes(\"gelecek\") || q.includes(\"trend\")) {\n return [{ json: { type: \"analyze\", question: q } }];\n}\n\nif (q.includes(\"getir\") || q.includes(\"liste\") || q.includes(\"kaç\")) {\n return [{ json: { type: \"query\", question: q } }];\n}\n\nreturn [{ json: { type: \"chat\", question: q } }];" + "jsCode": "const q = $('Webhook').item.json.body.question.toLowerCase();\n\nif (q.includes(\"tahmin\") || q.includes(\"gelecek\") || q.includes(\"trend\")) {\n return [{ json: { type: \"analyze\", question: q } }];\n}\n\nif (q.includes(\"getir\") || q.includes(\"liste\") || q.includes(\"kaç\") || q.includes(\"göster\")) {\n return [{ json: { type: \"query\", question: q } }];\n}\n\nreturn [{ json: { type: \"chat\", question: q } }];" }, "type": "n8n-nodes-base.code", "typeVersion": 2, @@ -211,26 +211,6 @@ "id": "0f14a81e-5f75-4093-ab93-a24a3315ebda", "name": "AI Query" }, - { - "parameters": { - "modelName": "models/gemini-2.0-flash", - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", - "typeVersion": 1, - "position": [ - 80, - 40 - ], - "id": "3b370555-d453-4eaf-8cf7-c04722350774", - "name": "Google Gemini Chat Model2", - "credentials": { - "googlePalmApi": { - "id": "g7Ev8dkuHaLU7JbG", - "name": "Google Gemini(PaLM) Api account" - } - } - }, { "parameters": { "options": {} @@ -253,32 +233,12 @@ "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow", "typeVersion": 1.3, "position": [ - -700, - 340 + -660, + 260 ], "id": "72d1f63a-4385-4892-a37c-396b07a7e40c", "name": "Simple Memory" }, - { - "parameters": { - "modelName": "models/gemini-2.0-flash", - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", - "typeVersion": 1, - "position": [ - 100, - 480 - ], - "id": "922eb62e-090d-4bee-80e4-a6c82a155922", - "name": "Google Gemini Chat Model4", - "credentials": { - "googlePalmApi": { - "id": "g7Ev8dkuHaLU7JbG", - "name": "Google Gemini(PaLM) Api account" - } - } - }, { "parameters": { "promptType": "define", @@ -343,26 +303,6 @@ "alwaysOutputData": true, "onError": "continueRegularOutput" }, - { - "parameters": { - "modelName": "models/gemini-2.0-flash", - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", - "typeVersion": 1, - "position": [ - 100, - -260 - ], - "id": "0cddf53c-45c8-4bbb-89e2-41f08ed25999", - "name": "Google Gemini Chat Model1", - "credentials": { - "googlePalmApi": { - "id": "g7Ev8dkuHaLU7JbG", - "name": "Google Gemini(PaLM) Api account" - } - } - }, { "parameters": { "assignments": { @@ -410,7 +350,7 @@ }, { "parameters": { - "functionCode": "import matplotlib.pyplot as plt\nimport io\nimport base64\nimport json\n\n# items listesindeki verilere ulaşırken hata kontrolü ekleyelim\nif len(items) > 0:\n question = items[0].get('question', 'Soru sağlanmadı') # Webhook'tan gelen soru\n sql = items[0].get('sql', 'SQL Sorgusu sağlanmadı') # AI Query'den gelen SQL sorgusu\nelse:\n question = \"Soru sağlanmadı\"\n sql = \"SQL Sorgusu sağlanmadı\"\n\n# SQL Query node'undan alınan sonuçlar\nresultItems = [\n {key: item[key] for key in item if key not in [\"question\", \"sql\"]}\n for item in items\n]\n\n# Dinamik sütun isimlerini almak için ilk öğeyi kullanıyoruz\nif resultItems and isinstance(resultItems[0], dict):\n columns = list(resultItems[0].keys()) # İlk öğedeki tüm sütunları alıyoruz\n\n # Dinamik olarak etiket ve veri sütunlarını belirliyoruz\n labels_column = None\n data_column = None\n\n # Etiket sütunu genellikle metin türünde (string) olacak, veri sütunu ise sayısal türde (int, float) olacak\n for col in columns:\n # Etiket sütunu olarak metin (string) türünde olan sütunu seçiyoruz\n if isinstance(resultItems[0].get(col), str):\n labels_column = col\n\n # Veri sütunu olarak sayısal (int veya float) türünde olan sütunu seçiyoruz\n elif isinstance(resultItems[0].get(col), (int, float)):\n data_column = col\n\n # Etiket ve veri sütunları bulunursa, verileri çekiyoruz\n labels = [item.get(labels_column, \"Bilinmeyen\") for item in resultItems if item.get(labels_column) is not None]\n data = [item.get(data_column, 0) for item in resultItems if item.get(data_column) is not None]\n\nelse:\n labels, data = [], [] # Eğer veri boşsa, etiketsiz ve veri içermeyen bir liste döneriz\n\n# **Önemli**: labels ve data uzunluklarını kontrol etme\nif len(labels) != len(data):\n print(f\"Veri uyumsuzluğu: labels uzunluğu: {len(labels)}, data uzunluğu: {len(data)}\")\n # Aynı uzunluktaki verilere göre filtreleme yapabilirsiniz\n min_length = min(len(labels), len(data))\n labels = labels[:min_length]\n data = data[:min_length]\n\n# Eğer etiketsiz veya veri boşsa, görsel oluşturma\nif not labels or not data:\n print(\"Etiketler veya veri listesi boş. Grafik oluşturulamaz.\")\n base64_image = None\nelse:\n # Grafik oluşturucu fonksiyonu\n def generate_base64_image(labels, data):\n # Grafik boyutunu ve başlıkları ayarlama\n fig, ax = plt.subplots(figsize=(10, 6)) # Grafik boyutunu ayarlama\n bars = ax.bar(labels, data, width=0.6) # Bar grafiği çizme\n\n # Etiketleri döndürme ve sıkışıklığı engelleme\n plt.xticks(rotation=45, ha='right')\n plt.tight_layout()\n\n # Verileri çubukların üstüne yerleştirme (değerlerin büyük olmasını engellemek için formatlama)\n for bar in bars:\n height = bar.get_height() # Her çubuğun yüksekliği\n # Burada sayıları doğru bir formatta gösteriyoruz\n formatted_height = f\"{height:,.0f}\" # Sayıyı binlik ayraçlarla biçimlendiriyoruz\n ax.text(bar.get_x() + bar.get_width() / 2, height, formatted_height, \n ha='center', va='bottom', fontsize=10, color='black')\n\n # Base64 olarak görseli kaydetme\n buf = io.BytesIO()\n plt.savefig(buf, format='png', dpi=72) # Görseli base64'e dönüştürmek için\n buf.seek(0)\n base64_image = base64.b64encode(buf.read()).decode('utf-8')\n buf.close()\n plt.close()\n\n return base64_image\n\n # Grafik görselini base64 formatında almak\n base64_image = generate_base64_image(labels, data)\n\n# Sonuçları döndür\nreturn [{\n \"type\": \"query\",\n \"question\": question,\n \"sql\": sql,\n \"answer\": resultItems,\n \"chart\": base64_image, # Grafik base64 formatında dönüyor\n}]\n" + "functionCode": "import matplotlib.pyplot as plt\nimport io\nimport base64\nimport json\n\n# items listesindeki verilere ulaşırken hata kontrolü ekleyelim\nif len(items) > 0:\n question = items[0].get('question', 'Soru sağlanmadı') # Webhook'tan gelen soru\n sql = items[0].get('sql', 'SQL Sorgusu sağlanmadı') # AI Query'den gelen SQL sorgusu\nelse:\n question = \"Soru sağlanmadı\"\n sql = \"SQL Sorgusu sağlanmadı\"\n\n# SQL Query node'undan alınan sonuçlar\nresultItems = [\n {key: item[key] for key in item if key not in [\"question\", \"sql\"]}\n for item in items\n]\n\n# Dinamik sütun isimlerini almak için ilk öğeyi kullanıyoruz\nif resultItems and isinstance(resultItems[0], dict):\n columns = list(resultItems[0].keys()) # İlk öğedeki tüm sütunları alıyoruz\n\n # Dinamik olarak etiket ve veri sütunlarını belirliyoruz\n labels_column = None\n data_column = None\n\n # Etiket sütunu genellikle metin türünde (string) olacak, veri sütunu ise sayısal türde (int, float) olacak\n for col in columns:\n # Etiket sütunu olarak metin (string) türünde olan sütunu seçiyoruz\n if isinstance(resultItems[0].get(col), str):\n labels_column = col\n\n # Veri sütunu olarak sayısal (int veya float) türünde olan sütunu seçiyoruz\n elif isinstance(resultItems[0].get(col), (int, float)):\n data_column = col\n\n # Etiket ve veri sütunları bulunursa, verileri çekiyoruz\n labels = [item.get(labels_column, \"Bilinmeyen\") for item in resultItems if item.get(labels_column) is not None]\n data = [item.get(data_column, 0) for item in resultItems if item.get(data_column) is not None]\n\nelse:\n labels, data = [], [] # Eğer veri boşsa, etiketsiz ve veri içermeyen bir liste döneriz\n\n# **Önemli**: labels ve data uzunluklarını kontrol etme\nif len(labels) != len(data):\n print(f\"Veri uyumsuzluğu: labels uzunluğu: {len(labels)}, data uzunluğu: {len(data)}\")\n # Aynı uzunluktaki verilere göre filtreleme yapabilirsiniz\n min_length = min(len(labels), len(data))\n labels = labels[:min_length]\n data = data[:min_length]\n\nbase64_image = None\n\n# Eğer etiketsiz veya veri boşsa, görsel oluşturma\nif not labels or not data:\n print(\"Etiketler veya veri listesi boş. Grafik oluşturulamaz.\")\nelse:\n # Grafik oluşturucu fonksiyonu\n def generate_base64_image(labels, data):\n # Grafik boyutunu ve başlıkları ayarlama\n fig, ax = plt.subplots(figsize=(10, 6)) # Grafik boyutunu ayarlama\n bars = ax.bar(labels, data, width=0.6) # Bar grafiği çizme\n\n # Etiketleri döndürme ve sıkışıklığı engelleme\n plt.xticks(rotation=45, ha='right')\n plt.tight_layout()\n\n # Verileri çubukların üstüne yerleştirme (değerlerin büyük olmasını engellemek için formatlama)\n for bar in bars:\n height = bar.get_height() # Her çubuğun yüksekliği\n # Burada sayıları doğru bir formatta gösteriyoruz\n formatted_height = f\"{height:,.0f}\" # Sayıyı binlik ayraçlarla biçimlendiriyoruz\n ax.text(bar.get_x() + bar.get_width() / 2, height, formatted_height, \n ha='center', va='bottom', fontsize=10, color='black')\n\n # Base64 olarak görseli kaydetme\n buf = io.BytesIO()\n plt.savefig(buf, format='png', dpi=72) # Görseli base64'e dönüştürmek için\n buf.seek(0)\n base64_image = base64.b64encode(buf.read()).decode('utf-8')\n buf.close()\n plt.close()\n\n return base64_image\n\n # Grafik görselini base64 formatında almak\n if len(resultItems[0].keys()) <= 3:\n base64_image = generate_base64_image(labels, data)\n\n# Sonuçları döndür\nreturn [{\n \"type\": \"query\",\n \"question\": question,\n \"sql\": sql,\n \"answer\": resultItems,\n \"chart\": base64_image, # Grafik base64 formatında dönüyor\n}]\n" }, "type": "n8n-nodes-python.pythonFunction", "typeVersion": 1, @@ -433,6 +373,66 @@ ], "id": "b9c551d0-5011-492a-9ae1-9a585b059073", "name": "Analyze Python" + }, + { + "parameters": { + "modelName": "models/gemini-2.0-flash", + "options": {} + }, + "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", + "typeVersion": 1, + "position": [ + 60, + -320 + ], + "id": "5ca631b2-0132-4cd3-b8c2-40408600f798", + "name": "Google Gemini Chat Model", + "credentials": { + "googlePalmApi": { + "id": "g7Ev8dkuHaLU7JbG", + "name": "Google Gemini(PaLM) Api account" + } + } + }, + { + "parameters": { + "modelName": "models/gemini-2.0-flash", + "options": {} + }, + "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", + "typeVersion": 1, + "position": [ + 100, + 100 + ], + "id": "61fa96f5-e48c-41ea-ad41-a721810f9512", + "name": "Google Gemini Chat Model1", + "credentials": { + "googlePalmApi": { + "id": "g7Ev8dkuHaLU7JbG", + "name": "Google Gemini(PaLM) Api account" + } + } + }, + { + "parameters": { + "modelName": "models/gemini-2.0-flash", + "options": {} + }, + "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", + "typeVersion": 1, + "position": [ + 40, + 480 + ], + "id": "479edfdb-252e-42a4-8292-7b35119a492d", + "name": "Google Gemini Chat Model2", + "credentials": { + "googlePalmApi": { + "id": "g7Ev8dkuHaLU7JbG", + "name": "Google Gemini(PaLM) Api account" + } + } } ], "pinData": {}, @@ -538,17 +538,6 @@ ] ] }, - "Google Gemini Chat Model2": { - "ai_languageModel": [ - [ - { - "node": "AI Query", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, "AI Query": { "main": [ [ @@ -602,17 +591,6 @@ ] ] }, - "Google Gemini Chat Model4": { - "ai_languageModel": [ - [ - { - "node": "AI Analyze", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, "AI Analyze": { "main": [ [ @@ -651,17 +629,6 @@ ] ] }, - "Google Gemini Chat Model1": { - "ai_languageModel": [ - [ - { - "node": "AI Chat", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, "Edit Fields1": { "main": [ [ @@ -684,13 +651,46 @@ ], [] ] + }, + "Google Gemini Chat Model": { + "ai_languageModel": [ + [ + { + "node": "AI Chat", + "type": "ai_languageModel", + "index": 0 + } + ] + ] + }, + "Google Gemini Chat Model1": { + "ai_languageModel": [ + [ + { + "node": "AI Query", + "type": "ai_languageModel", + "index": 0 + } + ] + ] + }, + "Google Gemini Chat Model2": { + "ai_languageModel": [ + [ + { + "node": "AI Analyze", + "type": "ai_languageModel", + "index": 0 + } + ] + ] } }, "active": true, "settings": { "executionOrder": "v1" }, - "versionId": "8231e31d-59e4-488a-b55f-b7b23209223d", + "versionId": "3ad2edbb-1c87-4819-a5ed-6cf4c542b4aa", "meta": { "templateCredsSetupCompleted": true, "instanceId": "98a3b71e44c71f7839b97fa3055c6c36b0c5f88cbb523bd18d164bd856e39632" diff --git a/company/index.html b/company/index.html index 79bf206a..dc4c67de 100644 --- a/company/index.html +++ b/company/index.html @@ -4,7 +4,7 @@ - Sözsoft Bilişim Hizmetleri + Sözsoft
diff --git a/company/src/components/home/Hero.tsx b/company/src/components/home/Hero.tsx index 60828a35..4b5a1e32 100644 --- a/company/src/components/home/Hero.tsx +++ b/company/src/components/home/Hero.tsx @@ -17,7 +17,7 @@ const Hero: React.FC = () => {
-

+

{t('hero.title')}

diff --git a/company/src/components/layout/Header.tsx b/company/src/components/layout/Header.tsx index 87f7f306..7a0b661b 100644 --- a/company/src/components/layout/Header.tsx +++ b/company/src/components/layout/Header.tsx @@ -54,7 +54,7 @@ const Header: React.FC = () => { key={link.path} to={link.path} className={`font-medium text-sm text-white hover:text-blue-400 transition-colors ${ - link.name === "Demo" ? "bg-blue-600 rounded px-2 py-1" : "" + link.name === "Giriş" || link.name === "Login" ? "bg-blue-600 rounded px-2 py-1" : "" }`} > {link.name} @@ -90,7 +90,7 @@ const Header: React.FC = () => { key={link.path} to={link.path} className={`font-medium text-white hover:text-blue-400 transition-colors ${ - link.name === "Demo" ? "bg-blue-600 rounded px-2 py-1" : "" + link.name === "Giriş" || link.name === "Login" ? "bg-blue-600 rounded px-2 py-1" : "" }`} onClick={toggleMenu} > diff --git a/company/src/context/LanguageContext.tsx b/company/src/context/LanguageContext.tsx index 49bf8907..ecd0b85e 100644 --- a/company/src/context/LanguageContext.tsx +++ b/company/src/context/LanguageContext.tsx @@ -15,12 +15,12 @@ const translations = { "nav.about": "Hakkımızda", "nav.products": "Ürünler", "nav.services": "Hizmetler", - "nav.demo": "Demo", + "nav.demo": "Giriş", "nav.blog": "Blog", "nav.contact": "İletişim", // Hero Section - "hero.title": "Dünyanın Lider Dil Kursu Yazılımı", + "hero.title": "Türkiye'nin Lider Dil Kursu Yazılımı", "hero.subtitle": "20 yılı aşkın tecrübemizle, yabancı dil okulları ve kurslar için özel olarak geliştirdiğimiz yazılım çözümlerimizle işletmenizi dijital dünyada bir adım öne taşıyoruz.", "hero.cta.consultation": "Ücretsiz Demo İsteyin", @@ -130,57 +130,51 @@ const translations = { "services.title": "Hizmetlerimiz", "services.subtitle": "İşletmenizin dijital dönüşüm yolculuğunda ihtiyaç duyduğu tüm teknoloji çözümleri", - "services.software.title": "Özel Yazılım Geliştirme", + "services.software.title": "Yazılım Kurulum ve Entegrasyon", "services.software.desc": - "İşletmenizin ihtiyaçlarına özel yazılım çözümleri", - "services.web.title": "Web Uygulamaları", - "services.web.desc": "Modern ve kullanıcı dostu web uygulamaları", - "services.mobile.title": "Mobil Uygulamalar", - "services.mobile.desc": "iOS ve Android için native uygulamalar", - "services.database.title": "Veritabanı Çözümleri", - "services.database.desc": "Güvenli ve ölçeklenebilir veritabanı sistemleri", - "services.software.features.analysis": "Analiz ve Planlama", - "services.software.features.design": "Tasarım ve Mimari", - "services.software.features.development": "Yazılım Geliştirme", - "services.software.features.testing": "Test ve Kalite Güvencesi", - "services.software.features.maintenance": "Bakım ve Destek", - "services.web.features.frontend": "Frontend Geliştirme", - "services.web.features.backend": "Backend Geliştirme", - "services.web.features.api": "API Geliştirme", - "services.web.features.seo": "SEO Optimizasyonu", + "Kurumunuza özel kurulum ve entegrasyon hizmetleri", + "services.web.title": "Kullanıcı Eğitimi", + "services.web.desc": "Kapsamlı eğitim ve destek hizmetleri", + "services.mobile.title": "Güvenlik Hizmetleri", + "services.mobile.desc": "Verilerinizin güvenliği için kapsamlı çözümler", + "services.database.title": "Hosting ve Barındırma", + "services.database.desc": "Güvenilir hosting ve barındırma hizmetleri", + "services.software.features.analysis": "Sistem kurulumu ve yapılandırma", + "services.software.features.design": "Mevcut verilerinizin aktarımı", + "services.software.features.development": "Özel raporlama ayarları", + "services.software.features.testing": "Kullanıcı yetkilendirme", + "services.software.features.maintenance": "Şube entegrasyonları", + "services.web.features.frontend": "Uzaktan eğitim (5 saat)", + "services.web.features.backend": "Yerinde eğitim seçeneği", + "services.web.features.api": "Kullanım kılavuzları", + "services.web.features.seo": "Sürekli teknik destek", "services.web.features.performance": "Performans Optimizasyonu", - "services.mobile.features.design": "Mobil Uygulama Tasarımı", - "services.mobile.features.native": "Native Mobil Uygulama Geliştirme", - "services.mobile.features.cross": - "Cross-Platform Mobil Uygulama Geliştirme", - "services.mobile.features.push": "Push Bildirim Entegrasyonu", - "services.mobile.features.store": "App Store ve Google Play Yayınlama", - "services.database.features.design": "Veritabanı Tasarımı", - "services.database.features.optimization": "Veritabanı Optimizasyonu", - "services.database.features.migration": "Veritabanı Taşıma", - "services.database.features.backup": "Veritabanı Yedekleme", - "services.database.features.recovery": "Veritabanı Kurtarma", - "services.integration.title": "Sistem Entegrasyonu", - "services.integration.desc": - "Farklı sistemler arasında veri akışı ve entegrasyon çözümleri", - "services.integration.features.api": "API Entegrasyonu", - "services.integration.features.middleware": "Middleware Geliştirme", - "services.integration.features.legacy": "Legacy Sistem Entegrasyonu", - "services.integration.features.realtime": - "Gerçek Zamanlı Veri Entegrasyonu", - "services.integration.features.monitoring": - "Entegrasyon İzleme ve Yönetimi", - "services.consulting.title": "Teknoloji Danışmanlığı", - "services.consulting.desc": - "İşletmenizin teknoloji stratejisi ve yol haritası için uzman danışmanlık", - "services.consulting.features.tech": "Teknoloji Stratejisi", - "services.consulting.features.project": "Proje Yönetimi Danışmanlığı", - "services.consulting.features.digital": "Dijital Dönüşüm Danışmanlığı", - "services.consulting.features.risk": "Risk Yönetimi Danışmanlığı", - "services.consulting.features.training": "Teknoloji Eğitimleri", + "services.mobile.features.design": "Veri yedekleme hizmeti", + "services.mobile.features.native": "IP kısıtlama ayarları", + "services.mobile.features.cross": "Kullanıcı erişim kontrolü", + "services.mobile.features.push": "SSL sertifika yönetimi", + "services.mobile.features.store": "Güvenlik duvarı yapılandırması", + "services.database.features.design": "Yüksek performanslı sunucular", + "services.database.features.optimization": "7/24 sunucu izleme", + "services.database.features.migration": "Otomatik yedekleme", + "services.database.features.backup": "DDoS koruması", + "services.database.features.recovery": "Teknik destek", + "services.integration.title": "SMS ve İletişim Hizmetleri", + "services.integration.desc": "Toplu iletişim çözümleri", + "services.integration.features.api": "Toplu SMS paketleri", + "services.integration.features.middleware": "E-posta entegrasyonu", + "services.integration.features.legacy": "Otomatik bildirimler", + "services.integration.features.realtime": "Veli bilgilendirme sistemi", + "services.integration.features.monitoring": "SMS şablonları", + "services.consulting.title": "Bakım ve Destek", + "services.consulting.desc": "Sürekli teknik destek ve bakım hizmetleri", + "services.consulting.features.tech": "7/24 teknik destek", + "services.consulting.features.project": "Periyodik bakım", + "services.consulting.features.digital": "Sistem güncellemeleri", + "services.consulting.features.risk": "Sorun giderme", + "services.consulting.features.training": "Performans optimizasyonu", "services.security.title": "Siber Güvenlik", - "services.security.desc": - "İşletmenizin dijital varlıklarını siber tehditlere karşı koruma", + "services.security.desc": "İşletmenizin dijital varlıklarını siber tehditlere karşı koruma", "services.security.features.analysis": "Güvenlik Açığı Analizi", "services.security.features.penetration": "Sızma Testleri", "services.security.features.firewall": "Güvenlik Duvarı Yönetimi", @@ -195,6 +189,88 @@ const translations = { "services.maintenance.features.updates": "Güncelleme Yönetimi", "services.maintenance.features.support": "Teknik Destek", + // Services Page - Support Plans + "services.support.title": "Destek Paketleri", + "services.support.branchRemote.title": "Şube Uzaktan Destek", + "services.support.branchRemote.price": "4,200 ₺", + "services.support.branchRemote.period": "/ Ay", + "services.support.branchRemote.features.priority": "7/24 öncelikli destek", + "services.support.branchRemote.features.remote": "Uzaktan sorun çözümü", + "services.support.branchRemote.features.optimization": "Sistem optimizasyonu", + "services.support.branchRemote.features.maintenance": "Düzenli bakım", + "services.support.branchRemote.features.consulting": "Özel danışmanlık", + "services.support.backup.title": "Veri Yedekleme", + "services.support.backup.price": "1,700 ₺", + "services.support.backup.period": "/ Yıl", + "services.support.backup.features.daily": "Günlük yedekleme", + "services.support.backup.features.encrypted": "Şifreli depolama", + "services.support.backup.features.recovery": "Hızlı veri kurtarma", + "services.support.backup.features.verification": "Yedek doğrulama", + "services.support.backup.features.access": "7/24 erişim", + "services.support.sms.title": "SMS Paketleri", + "services.support.sms.price": "750 ₺", + "services.support.sms.period": "'den başlayan", + "services.support.sms.features.packages": "5.000 SMS'den başlayan paketler", + "services.support.sms.features.bulk": "Toplu gönderim", + "services.support.sms.features.template": "Şablon yönetimi", + "services.support.sms.features.reporting": "Raporlama", + "services.support.sms.features.api": "API desteği", + "services.support.contactButton": "İletişime Geçin", + + + // Products Page - Modules + "products.modules.sales.title": "Satış ve Reklam Yönetimi", + "products.modules.sales.features.appointment": "Randevu takibi", + "products.modules.sales.features.meeting": "Görüşme takibi", + "products.modules.sales.features.campaign": "Kampanya yönetimi", + "products.modules.sales.features.adStats": "Reklam geri dönüş istatistikleri", + "products.modules.sales.features.applicant": "Aday başvuru takibi", + "products.modules.sales.features.corporate": "Kurumsal satış yönetimi", + "products.modules.sales.features.consultant": "Danışman performans takibi", + "products.modules.student.title": "Öğrenci Yönetimi", + "products.modules.student.features.sales": "Program satışları ve takibi", + "products.modules.student.features.contract": "Kayıt sözleşmesi ve evrak yönetimi", + "products.modules.student.features.installment": "Taksit ve ödeme planı", + "products.modules.student.features.level": "Seviye takibi", + "products.modules.student.features.attendance": "Yoklama takibi", + "products.modules.student.features.exam": "Sınav sonuçları", + "products.modules.student.features.homework": "Ödev takibi", + "products.modules.accounting.title": "Muhasebe Yönetimi", + "products.modules.accounting.features.cash": "Anlık kasa takibi", + "products.modules.accounting.features.bank": "Banka hesap takibi", + "products.modules.accounting.features.current": "Cari hesap yönetimi", + "products.modules.accounting.features.teacherFee": "Öğretmen ücretleri hesaplama", + "products.modules.accounting.features.consultantCommission": "Danışman prim hesaplama", + "products.modules.accounting.features.personnelSalary": "Personel maaş yönetimi", + "products.modules.accounting.features.incomeExpense": "Gelir/gider tablosu", + "products.modules.reporting.title": "Raporlama ve Analiz", + "products.modules.reporting.features.dynamic": "Dinamik raporlama", + "products.modules.reporting.features.ready": "İstatistiki hazır raporlar", + "products.modules.reporting.features.periodic": "Periyodik mail bildirimleri", + "products.modules.reporting.features.performance": "Performans analizleri", + "products.modules.reporting.features.branch": "Şube bazlı raporlar", + "products.modules.reporting.features.financial": "Finansal analizler", + "products.modules.reporting.features.studentSuccess": "Öğrenci başarı takibi", + + // Products Page - Pricing + "products.pricing.title": "Lisans Seçenekleri", + "products.pricing.user.title": "Kullanıcı Lisansı", + "products.pricing.user.price": "750 ₺", + "products.pricing.user.period": "/ Ay", + "products.pricing.user.yearlyPrice": "2,900 ₺ / Yıl", + "products.pricing.user.description": "Şube personelleri için temel kullanıcı lisansı", + "products.pricing.teacher.title": "Öğretmen Lisansı", + "products.pricing.teacher.price": "350 ₺", + "products.pricing.teacher.period": "/ Ay", + "products.pricing.teacher.yearlyPrice": "1,400 ₺ / Yıl", + "products.pricing.teacher.description": "Öğretmenler için özel yetkilendirilmiş lisans", + "products.pricing.founder.title": "Kurucu Lisansı", + "products.pricing.founder.price": "300 ₺", + "products.pricing.founder.period": "/ Ay", + "products.pricing.founder.yearlyPrice": "1,100 ₺ / Yıl", + "products.pricing.founder.description": "iOS ve Android üzerinden yönetim imkanı", + + // Contact Page "contact.title": "İletişim", "contact.subtitle": "Sorularınız için bizimle iletişime geçin", @@ -223,7 +299,7 @@ const translations = { "about.stats.support": "7/24 Destek", "about.stats.countries": "Ülke", "about.description.part1": - "Sözsoft Bilişim Hizmetleri, eğitim sektörünün dijital dönüşümüne katkı sağlamak amacıyla 2012 yılında kursyazilimi.com markasıyla kurulmuştur. Kuruluşumuzun temelinde, 15 yılı aşkın yazılım tecrübesi ve farklı sektörlerde edinilen güçlü bir birikim yatmaktadır. Uzun yıllar boyunca tekstil sektörünün önde gelen markalarına büyük ölçekli yazılım çözümleri sunan uzman kadromuz, bu tecrübesini eğitim sektörünün dinamik ihtiyaçlarıyla harmanlayarak yenilikçi projelere imza atmaktadır. Sözsoft, sadece yazılım geliştirmekle kalmaz; kurumlara özel, sürdürülebilir ve kullanıcı dostu sistemler geliştirerek gerçek iş değeri yaratmayı hedefler. “Alışılagelmişin dışında ayrıcalıklı hizmet ve her an ulaşılabilirlik” ilkesiyle hareket eden ekibimiz, eğitim kurumlarının operasyonel süreçlerini dijitalleştirerek, verimliliklerini artırmalarına ve çağın gerekliliklerine uyum sağlamalarına destek olmaktadır. Bugün Sözsoft, Türkiye’nin dört bir yanındaki eğitim kurumlarının güvenilir teknoloji çözüm ortağı olmanın gururunu taşımaktadır.", + "Sözsoft Bilişim Hizmetleri, eğitim sektörünün dijital dönüşümüne katkı sağlamak amacıyla 2012 yılında sozsoft.com markasıyla kurulmuştur. Kuruluşumuzun temelinde, 15 yılı aşkın yazılım tecrübesi ve farklı sektörlerde edinilen güçlü bir birikim yatmaktadır. Uzun yıllar boyunca tekstil sektörünün önde gelen markalarına büyük ölçekli yazılım çözümleri sunan uzman kadromuz, bu tecrübesini eğitim sektörünün dinamik ihtiyaçlarıyla harmanlayarak yenilikçi projelere imza atmaktadır. Sözsoft, sadece yazılım geliştirmekle kalmaz; kurumlara özel, sürdürülebilir ve kullanıcı dostu sistemler geliştirerek gerçek iş değeri yaratmayı hedefler. “Alışılagelmişin dışında ayrıcalıklı hizmet ve her an ulaşılabilirlik” ilkesiyle hareket eden ekibimiz, eğitim kurumlarının operasyonel süreçlerini dijitalleştirerek, verimliliklerini artırmalarına ve çağın gerekliliklerine uyum sağlamalarına destek olmaktadır. Bugün Sözsoft, Türkiye’nin dört bir yanındaki eğitim kurumlarının güvenilir teknoloji çözüm ortağı olmanın gururunu taşımaktadır.", "about.description.motto": '"Tutkumuz teknoloji, hedefimiz sürdürülebilir verimliliktir."', "about.description.part2": @@ -318,7 +394,7 @@ const translations = { "nav.about": "About Us", "nav.products": "Products", "nav.services": "Services", - "nav.demo": "Demo", + "nav.demo": "Login", "nav.blog": "Blog", "nav.contact": "Contact", @@ -388,7 +464,7 @@ const translations = { "products.title": "Our Products", "products.subtitle": "Software solutions developed specifically for your business needs", - "products.kurs.title": "ERP Solution", + "products.kurs.title": "Course Management Automation", "products.kurs.desc": "Manage all your business processes from a single platform.", "products.crm.title": "CRM System", @@ -500,6 +576,88 @@ const translations = { "services.maintenance.features.updates": "Update Management", "services.maintenance.features.support": "Technical Support", + // Services Page - Support Plans + "services.support.title": "Support Packages", + "services.support.branchRemote.title": "Branch Remote Support", + "services.support.branchRemote.price": "₺4,200", + "services.support.branchRemote.period": "/ Month", + "services.support.branchRemote.features.priority": "24/7 priority support", + "services.support.branchRemote.features.remote": "Remote troubleshooting", + "services.support.branchRemote.features.optimization": "System optimization", + "services.support.branchRemote.features.maintenance": "Regular maintenance", + "services.support.branchRemote.features.consulting": "Specialized consulting", + "services.support.backup.title": "Data Backup", + "services.support.backup.price": "₺1,700", + "services.support.backup.period": "/ Year", + "services.support.backup.features.daily": "Daily backup", + "services.support.backup.features.encrypted": "Encrypted storage", + "services.support.backup.features.recovery": "Fast data recovery", + "services.support.backup.features.verification": "Backup verification", + "services.support.backup.features.access": "24/7 access", + "services.support.sms.title": "SMS Packages", + "services.support.sms.price": "₺750", + "services.support.sms.period": "starting from", + "services.support.sms.features.packages": "Packages starting from 5,000 SMS", + "services.support.sms.features.bulk": "Bulk sending", + "services.support.sms.features.template": "Template management", + "services.support.sms.features.reporting": "Reporting", + "services.support.sms.features.api": "API support", + "services.support.contactButton": "Get in Touch", + + + // Products Page - Modules + "products.modules.sales.title": "Sales and Advertising Management", + "products.modules.sales.features.appointment": "Appointment tracking", + "products.modules.sales.features.meeting": "Meeting tracking", + "products.modules.sales.features.campaign": "Campaign management", + "products.modules.sales.features.adStats": "Advertising return statistics", + "products.modules.sales.features.applicant": "Applicant tracking", + "products.modules.sales.features.corporate": "Corporate sales management", + "products.modules.sales.features.consultant": "Consultant performance tracking", + "products.modules.student.title": "Student Management", + "products.modules.student.features.sales": "Program sales and tracking", + "products.modules.student.features.contract": "Registration contract and document management", + "products.modules.student.features.installment": "Installment and payment plan", + "products.modules.student.features.level": "Level tracking", + "products.modules.student.features.attendance": "Attendance tracking", + "products.modules.student.features.exam": "Exam results", + "products.modules.student.features.homework": "Homework tracking", + "products.modules.accounting.title": "Accounting Management", + "products.modules.accounting.features.cash": "Instant cash tracking", + "products.modules.accounting.features.bank": "Bank account tracking", + "products.modules.accounting.features.current": "Current account management", + "products.modules.accounting.features.teacherFee": "Teacher fee calculation", + "products.modules.accounting.features.consultantCommission": "Consultant commission calculation", + "products.modules.accounting.features.personnelSalary": "Personnel salary management", + "products.modules.accounting.features.incomeExpense": "Income/expense statement", + "products.modules.reporting.title": "Reporting and Analysis", + "products.modules.reporting.features.dynamic": "Dynamic reporting", + "products.modules.reporting.features.ready": "Ready statistical reports", + "products.modules.reporting.features.periodic": "Periodic email notifications", + "products.modules.reporting.features.performance": "Performance analysis", + "products.modules.reporting.features.branch": "Branch-based reports", + "products.modules.reporting.features.financial": "Financial analysis", + "products.modules.reporting.features.studentSuccess": "Student success tracking", + + // Products Page - Pricing + "products.pricing.title": "License Options", + "products.pricing.user.title": "User License", + "products.pricing.user.price": "₺750", + "products.pricing.user.period": "/ Month", + "products.pricing.user.yearlyPrice": "₺2,900 / Year", + "products.pricing.user.description": "Basic user license for branch personnel", + "products.pricing.teacher.title": "Teacher License", + "products.pricing.teacher.price": "₺350", + "products.pricing.teacher.period": "/ Month", + "products.pricing.teacher.yearlyPrice": "₺1,400 / Year", + "products.pricing.teacher.description": "Special authorized license for teachers", + "products.pricing.founder.title": "Founder License", + "products.pricing.founder.price": "₺300", + "products.pricing.founder.period": "/ Month", + "products.pricing.founder.yearlyPrice": "₺1,100 / Year", + "products.pricing.founder.description": "Management capability via iOS and Android", + + // Contact Page "contact.title": "Contact", "contact.subtitle": "Get in touch with us for any inquiries", @@ -528,7 +686,7 @@ const translations = { "about.stats.support": "24/7 Support", "about.stats.countries": "Countries", "about.description.part1": - "Sözsoft Information Technologies was founded in 2012 under the brand kursyazilimi.com to contribute to the digital transformation of the education sector. Our foundation is built on over 15 years of software experience and a strong background gained across various industries. Our expert team, which has developed large-scale software solutions for leading textile companies for many years, now channels its experience into the dynamic needs of the education sector by delivering innovative projects. At Sözsoft, we don’t just develop software; we aim to create real business value by building sustainable and user-friendly systems tailored to institutions. Guided by the principle of 'exclusive service beyond the ordinary and constant accessibility', our team supports educational institutions in digitizing their operational processes to enhance efficiency and adapt to the demands of the modern age. Today, Sözsoft proudly serves as a trusted technology partner for educational institutions across Turkey.", + "Sözsoft Information Technologies was founded in 2012 under the brand sozsoft.com to contribute to the digital transformation of the education sector. Our foundation is built on over 15 years of software experience and a strong background gained across various industries. Our expert team, which has developed large-scale software solutions for leading textile companies for many years, now channels its experience into the dynamic needs of the education sector by delivering innovative projects. At Sözsoft, we don’t just develop software; we aim to create real business value by building sustainable and user-friendly systems tailored to institutions. Guided by the principle of 'exclusive service beyond the ordinary and constant accessibility', our team supports educational institutions in digitizing their operational processes to enhance efficiency and adapt to the demands of the modern age. Today, Sözsoft proudly serves as a trusted technology partner for educational institutions across Turkey.", "about.description.motto": '"Our passion is technology, our goal is sustainable efficiency."', "about.description.part2": diff --git a/company/src/pages/Products.tsx b/company/src/pages/Products.tsx index 66001074..93b19e43 100644 --- a/company/src/pages/Products.tsx +++ b/company/src/pages/Products.tsx @@ -1,98 +1,168 @@ -import React from 'react'; -import { ArrowRight, CheckCircle } from 'lucide-react'; -import { Link } from 'react-router-dom'; -import { useLanguage } from '../context/LanguageContext'; +import React from "react"; +import { + ArrowRight, + BarChart, + BookOpen, + CheckCircle, + CreditCard, + Users, +} from "lucide-react"; +import { Link } from "react-router-dom"; +import { useLanguage } from "../context/LanguageContext"; const Products: React.FC = () => { const { t } = useLanguage(); const products = [ { - title: t('products.kurs.title'), - description: t('products.kurs.desc'), - image: 'https://images.pexels.com/photos/3183183/pexels-photo-3183183.jpeg?auto=compress&cs=tinysrgb&w=1920', + title: t("products.kurs.title"), + description: t("products.kurs.desc"), + image: + "https://images.pexels.com/photos/3183183/pexels-photo-3183183.jpeg?auto=compress&cs=tinysrgb&w=1920", features: [ - t('products.kurs.features.inventory'), - t('products.kurs.features.purchasing'), - t('products.kurs.features.sales'), - t('products.kurs.features.accounting'), - t('products.kurs.features.reporting'), - t('products.kurs.features.mobile') - ] + t("products.kurs.features.inventory"), + t("products.kurs.features.purchasing"), + t("products.kurs.features.sales"), + t("products.kurs.features.accounting"), + t("products.kurs.features.reporting"), + t("products.kurs.features.mobile"), + ], + }, + ]; + + const modules = [ + { + image: + "https://images.pexels.com/photos/3183183/pexels-photo-3183183.jpeg?auto=compress&cs=tinysrgb&w=1920", + title: t("products.modules.sales.title"), + icon: , + features: [ + t("products.modules.sales.features.appointment"), + t("products.modules.sales.features.meeting"), + t("products.modules.sales.features.campaign"), + t("products.modules.sales.features.adStats"), + t("products.modules.sales.features.applicant"), + t("products.modules.sales.features.corporate"), + t("products.modules.sales.features.consultant"), + ], + color: "bg-blue-600", }, { - title: t('products.crm.title'), - description: t('products.crm.desc'), - image: 'https://images.pexels.com/photos/3184291/pexels-photo-3184291.jpeg?auto=compress&cs=tinysrgb&w=1920', + description: t("products.crm.desc"), + image: + "https://images.pexels.com/photos/3184291/pexels-photo-3184291.jpeg?auto=compress&cs=tinysrgb&w=1920", + title: t("products.modules.student.title"), + icon: , features: [ - t('products.crm.features.tracking'), - t('products.crm.features.opportunities'), - t('products.crm.features.email'), - t('products.crm.features.tasks'), - t('products.crm.features.calendar'), - t('products.crm.features.analytics') - ] + t("products.modules.student.features.sales"), + t("products.modules.student.features.contract"), + t("products.modules.student.features.installment"), + t("products.modules.student.features.level"), + t("products.modules.student.features.attendance"), + t("products.modules.student.features.exam"), + t("products.modules.student.features.homework"), + ], + color: "bg-purple-600", }, { - title: t('products.ecommerce.title'), - description: t('products.ecommerce.desc'), - image: 'https://images.pexels.com/photos/3183132/pexels-photo-3183132.jpeg?auto=compress&cs=tinysrgb&w=1920', + description: t("products.ecommerce.desc"), + image: + "https://images.pexels.com/photos/3183132/pexels-photo-3183132.jpeg?auto=compress&cs=tinysrgb&w=1920", + title: t("products.modules.accounting.title"), + icon: , features: [ - t('products.ecommerce.features.responsive'), - t('products.ecommerce.features.payment'), - t('products.ecommerce.features.inventory'), - t('products.ecommerce.features.seo'), - t('products.ecommerce.features.analytics'), - t('products.ecommerce.features.marketplace') - ] + t("products.modules.accounting.features.cash"), + t("products.modules.accounting.features.bank"), + t("products.modules.accounting.features.current"), + t("products.modules.accounting.features.teacherFee"), + t("products.modules.accounting.features.consultantCommission"), + t("products.modules.accounting.features.personnelSalary"), + t("products.modules.accounting.features.incomeExpense"), + ], + color: "bg-green-600", }, { - title: t('products.hr.title'), - description: t('products.hr.desc'), - image: 'https://images.pexels.com/photos/3184292/pexels-photo-3184292.jpeg?auto=compress&cs=tinysrgb&w=1920', + description: t("products.hr.desc"), + image: + "https://images.pexels.com/photos/3184292/pexels-photo-3184292.jpeg?auto=compress&cs=tinysrgb&w=1920", + title: t("products.modules.reporting.title"), + icon: , features: [ - t('products.hr.features.personnel'), - t('products.hr.features.leave'), - t('products.hr.features.performance'), - t('products.hr.features.payroll'), - t('products.hr.features.training'), - t('products.hr.features.digital') - ] - } + t("products.modules.reporting.features.dynamic"), + t("products.modules.reporting.features.ready"), + t("products.modules.reporting.features.periodic"), + t("products.modules.reporting.features.performance"), + t("products.modules.reporting.features.branch"), + t("products.modules.reporting.features.financial"), + t("products.modules.reporting.features.studentSuccess"), + ], + color: "bg-red-600", + }, + ]; + + const pricing = [ + { + title: t("products.pricing.user.title"), + price: t("products.pricing.user.price"), + period: t("products.pricing.user.period"), + yearlyPrice: t("products.pricing.user.yearlyPrice"), + description: t("products.pricing.user.description"), + }, + { + title: t("products.pricing.teacher.title"), + price: t("products.pricing.teacher.price"), + period: t("products.pricing.teacher.period"), + yearlyPrice: t("products.pricing.teacher.yearlyPrice"), + description: t("products.pricing.teacher.description"), + }, + { + title: t("products.pricing.founder.title"), + price: t("products.pricing.founder.price"), + period: t("products.pricing.founder.period"), + yearlyPrice: t("products.pricing.founder.yearlyPrice"), + description: t("products.pricing.founder.description"), + }, ]; return (
{/* Hero Section */}
-
+
-

{t('products.title')}

-

- {t('products.subtitle')} -

+

{t("products.title")}

+

{t("products.subtitle")}

{/* Products Grid */} -
+
-
+
{products.map((product, index) => ( -
+
- {product.title}
-

{product.title}

+

+ {product.title} +

{product.description}

{product.features.map((feature, fIndex) => ( @@ -102,13 +172,6 @@ const Products: React.FC = () => {
))}
- - {t('common.learnMore')} - -
))} @@ -116,18 +179,60 @@ const Products: React.FC = () => {
+ {/* Modules Grid */} +
+
+
+ {modules.map((module, index) => ( +
+
{module.icon}
+

{module.title}

+
    + {module.features.map((feature, fIndex) => ( +
  • + + {feature} +
  • + ))} +
+
+ ))} +
+
+
+ + {/* Pricing Section */} +
+
+

+ {t("products.pricing.title")} +

+
+ {pricing.map((plan, index) => ( +
+

{plan.title}

+

{plan.description}

+
+ ))} +
+
+
+ {/* Call to Action */}
-

{t('products.cta.title')}

+

{t("products.cta.title")}

- {t('products.cta.description')} + {t("products.cta.description")}

- - {t('products.cta.demo')} + {t("products.cta.demo")}
@@ -135,4 +240,4 @@ const Products: React.FC = () => { ); }; -export default Products; \ No newline at end of file +export default Products; diff --git a/company/src/pages/Services.tsx b/company/src/pages/Services.tsx index 4dfd953a..d4f80206 100644 --- a/company/src/pages/Services.tsx +++ b/company/src/pages/Services.tsx @@ -1,7 +1,17 @@ -import React from 'react'; -import { Code2, Database, Globe2, Smartphone, Server, Users, Shield, Settings } from 'lucide-react'; -import { Link } from 'react-router-dom'; -import { useLanguage } from '../context/LanguageContext'; +import React from "react"; +import { + Code2, + Database, + Globe2, + Smartphone, + Server, + Users, + Shield, + Settings, + CheckCircle, +} from "lucide-react"; +import { Link } from "react-router-dom"; +import { useLanguage } from "../context/LanguageContext"; const Services: React.FC = () => { const { t } = useLanguage(); @@ -9,92 +19,133 @@ const Services: React.FC = () => { const services = [ { icon: , - title: t('services.software.title'), - description: t('services.software.desc'), + title: t("services.software.title"), + description: t("services.software.desc"), features: [ - t('services.software.features.analysis'), - t('services.software.features.design'), - t('services.software.features.development'), - t('services.software.features.testing'), - t('services.software.features.maintenance') - ] + t("services.software.features.analysis"), + t("services.software.features.design"), + t("services.software.features.development"), + t("services.software.features.testing"), + t("services.software.features.maintenance"), + ], }, { - icon: , - title: t('services.web.title'), - description: t('services.web.desc'), + icon: , + title: t("services.web.title"), + description: t("services.web.desc"), features: [ - t('services.web.features.frontend'), - t('services.web.features.backend'), - t('services.web.features.api'), - t('services.web.features.seo'), - t('services.web.features.performance') - ] + t("services.web.features.frontend"), + t("services.web.features.backend"), + t("services.web.features.api"), + t("services.web.features.seo"), + t("services.web.features.performance"), + ], }, { - icon: , - title: t('services.mobile.title'), - description: t('services.mobile.desc'), + icon: , + title: t("services.mobile.title"), + description: t("services.mobile.desc"), features: [ - t('services.mobile.features.design'), - t('services.mobile.features.native'), - t('services.mobile.features.cross'), - t('services.mobile.features.push'), - t('services.mobile.features.store') - ] + t("services.mobile.features.design"), + t("services.mobile.features.native"), + t("services.mobile.features.cross"), + t("services.mobile.features.push"), + t("services.mobile.features.store"), + ], }, { - icon: , - title: t('services.database.title'), - description: t('services.database.desc'), + icon: , + title: t("services.database.title"), + description: t("services.database.desc"), features: [ - t('services.database.features.design'), - t('services.database.features.optimization'), - t('services.database.features.migration'), - t('services.database.features.backup'), - t('services.database.features.recovery') - ] + t("services.database.features.design"), + t("services.database.features.optimization"), + t("services.database.features.migration"), + t("services.database.features.backup"), + t("services.database.features.recovery"), + ], }, { - icon: , - title: t('services.integration.title'), - description: t('services.integration.desc'), + icon: , + title: t("services.integration.title"), + description: t("services.integration.desc"), features: [ - t('services.integration.features.api'), - t('services.integration.features.middleware'), - t('services.integration.features.legacy'), - t('services.integration.features.realtime'), - t('services.integration.features.monitoring') - ] + t("services.integration.features.api"), + t("services.integration.features.middleware"), + t("services.integration.features.legacy"), + t("services.integration.features.realtime"), + t("services.integration.features.monitoring"), + ], }, { - icon: , - title: t('services.consulting.title'), - description: t('services.consulting.desc'), + icon: , + title: t("services.consulting.title"), + description: t("services.consulting.desc"), features: [ - t('services.consulting.features.tech'), - t('services.consulting.features.project'), - t('services.consulting.features.digital'), - t('services.consulting.features.risk'), - t('services.consulting.features.training') - ] - } + t("services.consulting.features.tech"), + t("services.consulting.features.project"), + t("services.consulting.features.digital"), + t("services.consulting.features.risk"), + t("services.consulting.features.training"), + ], + }, + ]; + + const supportPlans = [ + { + title: t("services.support.branchRemote.title"), + price: t("services.support.branchRemote.price"), + period: t("services.support.branchRemote.period"), + features: [ + t("services.support.branchRemote.features.priority"), + t("services.support.branchRemote.features.remote"), + t("services.support.branchRemote.features.optimization"), + t("services.support.branchRemote.features.maintenance"), + t("services.support.branchRemote.features.consulting"), + ], + }, + { + title: t("services.support.backup.title"), + price: t("services.support.backup.price"), + period: t("services.support.backup.period"), + features: [ + t("services.support.backup.features.daily"), + t("services.support.backup.features.encrypted"), + t("services.support.backup.features.recovery"), + t("services.support.backup.features.verification"), + t("services.support.backup.features.access"), + ], + }, + { + title: t("services.support.sms.title"), + price: t("services.support.sms.price"), + period: t("services.support.sms.period"), + features: [ + t("services.support.sms.features.packages"), + t("services.support.sms.features.bulk"), + t("services.support.sms.features.template"), + t("services.support.sms.features.reporting"), + t("services.support.sms.features.api"), + ], + }, ]; return (
{/* Hero Section */}
-
+
-

{t('services.title')}

-

- {t('services.subtitle')} -

+

{t("services.title")}

+

{t("services.subtitle")}

@@ -103,13 +154,21 @@ const Services: React.FC = () => {
{services.map((service, index) => ( -
+
{service.icon}
-

{service.title}

+

+ {service.title} +

{service.description}

    {service.features.map((feature, fIndex) => ( -
  • +
  • {feature}
  • @@ -121,18 +180,55 @@ const Services: React.FC = () => {
+ {/* Support Plans */} +
+
+

+ {t("services.support.title")} +

+
+ {supportPlans.map((plan, index) => ( +
+

{plan.title}

+ +
    + {plan.features.map((feature, fIndex) => ( +
  • + + {feature} +
  • + ))} +
+ + {t("services.support.contactButton")} + +
+ ))} +
+
+
+ {/* Call to Action */}
-

{t('services.cta.title')}

+

{t("services.cta.title")}

- {t('services.cta.description')} + {t("services.cta.description")}

- - {t('services.cta.contact')} + {t("services.cta.contact")}
@@ -140,4 +236,4 @@ const Services: React.FC = () => { ); }; -export default Services; \ No newline at end of file +export default Services; diff --git a/ui/dev-dist/sw.js b/ui/dev-dist/sw.js index 2f731121..fad85f78 100644 --- a/ui/dev-dist/sw.js +++ b/ui/dev-dist/sw.js @@ -82,7 +82,7 @@ define(['./workbox-54d0af47'], (function (workbox) { 'use strict'; "revision": "3ca0b8505b4bec776b69afdba2768812" }, { "url": "index.html", - "revision": "0.v26qf4kt408" + "revision": "0.8un1j0slu5o" }], {}); workbox.cleanupOutdatedCaches(); workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), { diff --git a/ui/src/components/template/SideNav.tsx b/ui/src/components/template/SideNav.tsx index 6b7b48f3..40c4e8f3 100644 --- a/ui/src/components/template/SideNav.tsx +++ b/ui/src/components/template/SideNav.tsx @@ -75,7 +75,7 @@ const SideNav = () => { style={sideNavCollapse ? sideNavCollapseStyle : sideNavStyle} className={classNames('side-nav', sideNavColor(), !sideNavCollapse && 'side-nav-expand')} > -
+
{ diff --git a/ui/src/constants/theme.constant.ts b/ui/src/constants/theme.constant.ts index ca4ddd47..8dc414d1 100644 --- a/ui/src/constants/theme.constant.ts +++ b/ui/src/constants/theme.constant.ts @@ -13,7 +13,7 @@ export const NAV_MODE_DARK = 'dark' export const NAV_MODE_THEMED = 'themed' export const NAV_MODE_TRANSPARENT = 'transparent' -export const SIDE_NAV_WIDTH = 290 +export const SIDE_NAV_WIDTH = 330 export const SIDE_NAV_COLLAPSED_WIDTH = 80 export const SPLITTED_SIDE_NAV_MINI_WIDTH = 80 export const SPLITTED_SIDE_NAV_SECONDARY_WIDTH = 250