feat: add Trunçgil Finance product with dedicated seeder and landing page views
This commit is contained in:
@@ -25,6 +25,7 @@ class DatabaseSeeder extends Seeder
|
||||
SiteTranslationsSeeder::class,
|
||||
CompanyHistoryItemSeeder::class,
|
||||
DekupaiProductSeeder::class,
|
||||
FinanceProductSeeder::class,
|
||||
BlogSeeder::class,
|
||||
]);
|
||||
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\Product;
|
||||
use App\Models\ProductCategory;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class FinanceProductSeeder extends Seeder
|
||||
{
|
||||
public function run(): void
|
||||
{
|
||||
// 1. Download the logo from https://finance.truncgil.com/img/logo.svg
|
||||
$logoUrl = 'https://finance.truncgil.com/img/logo.svg';
|
||||
$logoFileName = 'products/truncgil-finance-logo.svg';
|
||||
|
||||
try {
|
||||
// Check if directory exists in the public disk
|
||||
if (!Storage::disk('public')->exists('products')) {
|
||||
Storage::disk('public')->makeDirectory('products');
|
||||
}
|
||||
|
||||
// Get logo contents
|
||||
$context = stream_context_create([
|
||||
"ssl" => [
|
||||
"verify_peer" => false,
|
||||
"verify_peer_name" => false,
|
||||
],
|
||||
"http" => [
|
||||
"header" => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)\r\n"
|
||||
]
|
||||
]);
|
||||
$logoContents = file_get_contents($logoUrl, false, $context);
|
||||
|
||||
if ($logoContents !== false) {
|
||||
Storage::disk('public')->put($logoFileName, $logoContents);
|
||||
$this->command?->info('Downloaded and stored the Trunçgil Finance logo successfully.');
|
||||
} else {
|
||||
$this->command?->error('Could not download logo contents.');
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
$this->command?->error('Failed to download Trunçgil Finance logo: ' . $e->getMessage());
|
||||
}
|
||||
|
||||
// 2. Prepare translatable fields
|
||||
$title = [
|
||||
'tr' => 'Trunçgil Finance (Canlı Döviz, Altın ve Kripto Para API Servisi)',
|
||||
'en' => 'Trunçgil Finance (Live Currency, Gold, and Crypto API Service)',
|
||||
];
|
||||
|
||||
$content = [
|
||||
'tr' => 'Trunçgil Finance, altın, döviz ve kripto para verilerini anlık ve gecikmesiz olarak sunan yüksek performanslı bir API servisidir. Kurumsal uygulamalarınızdan mobil projelerinize kadar her ölçekte güvenle entegre edebilirsiniz.',
|
||||
'en' => 'Trunçgil Finance is a high-performance API service offering instantaneous and lag-free gold, currency, and cryptocurrency data. Securely integrate into your projects of any scale, from enterprise apps to mobile platforms.',
|
||||
];
|
||||
|
||||
// 3. Prepare detailed landing page data structure
|
||||
$landingPageData = [
|
||||
'hero' => [
|
||||
'slogan_tr' => 'Yüksek Performanslı Altın, Döviz ve Kripto API Servisi',
|
||||
'slogan_en' => 'High-Performance Gold, Currency, and Crypto API Service',
|
||||
'sub_slogan_tr' => 'Anlık finansal verileri, güçlü altyapımızla projelerinize gecikmesiz entegre edin. Geliştirici dostu entegrasyon ve sıfır kesinti.',
|
||||
'sub_slogan_en' => 'Integrate real-time financial data into your applications lag-free with our robust infrastructure. Developer-friendly and 100% uptime.',
|
||||
'featured_image' => $logoFileName,
|
||||
],
|
||||
'features' => [
|
||||
[
|
||||
'title_tr' => 'Gecikmesiz Canlı Akış',
|
||||
'title_en' => 'Lag-Free Live Streams',
|
||||
'icon' => 'processor',
|
||||
],
|
||||
[
|
||||
'title_tr' => 'Geliştirici Dostu SDK & API',
|
||||
'title_en' => 'Developer-Friendly SDK & API',
|
||||
'icon' => 'crop',
|
||||
],
|
||||
[
|
||||
'title_tr' => 'Güvenli ve Kesintisiz Servis',
|
||||
'title_en' => 'Secure & Uptime Gurantee',
|
||||
'icon' => 'safe',
|
||||
],
|
||||
[
|
||||
'title_tr' => 'Zengin Veri Kaynakları',
|
||||
'title_en' => 'Rich Data Sources',
|
||||
'icon' => 'cloud',
|
||||
],
|
||||
],
|
||||
'how_it_works' => [
|
||||
'download_form_label_tr' => 'Nasıl Entegre Edilir?',
|
||||
'download_form_label_en' => 'How to Integrate?',
|
||||
'steps' => [
|
||||
[
|
||||
'number' => 1,
|
||||
'title_tr' => 'API Anahtarınızı Alın',
|
||||
'title_en' => 'Get Your API Key',
|
||||
'description_tr' => 'Saniyeler içinde kayıt olun ve size özel güvenli API anahtarınızı oluşturun.',
|
||||
'description_en' => 'Sign up in seconds and generate your secure, dedicated API key.',
|
||||
],
|
||||
[
|
||||
'number' => 2,
|
||||
'title_tr' => 'Dokümantasyonu İnceleyin',
|
||||
'title_en' => 'Browse Documentation',
|
||||
'description_tr' => 'Her dilde hazırlanmış örnek kodlar ve şemalarla entegrasyon adımlarını inceleyin.',
|
||||
'description_en' => 'Check integration steps with sample codes and schemas available in every language.',
|
||||
],
|
||||
[
|
||||
'number' => 3,
|
||||
'title_tr' => 'Kodunuza Dahil Edin',
|
||||
'title_en' => 'Integrate Into Code',
|
||||
'description_tr' => 'Hazır kütüphanelerimizle veya RESTful uç noktalarımızla verileri projenize çekin.',
|
||||
'description_en' => 'Fetch data using our client SDKs or standard RESTful HTTP endpoints.',
|
||||
],
|
||||
[
|
||||
'number' => 4,
|
||||
'title_tr' => 'Canlıya Alın & İzleyin',
|
||||
'title_en' => 'Go Live & Monitor',
|
||||
'description_tr' => 'Kullanım istatistiklerinizi panelimizden izleyin ve yüksek hızın tadını çıkarın.',
|
||||
'description_en' => 'Track your request statistics in real-time from the dashboard and enjoy lightning speed.',
|
||||
],
|
||||
],
|
||||
],
|
||||
'faqs' => [
|
||||
[
|
||||
'question_tr' => 'Veriler ne sıklıkla güncelleniyor?',
|
||||
'question_en' => 'How frequently is the data updated?',
|
||||
'answer_tr' => 'Finansal verilerimiz doğrudan global ve yerel borsalardan anlık akış olarak alınmakta ve milisaniyeler bazında güncellenmektedir.',
|
||||
'answer_en' => 'Our financial feeds are retrieved directly from global and regional exchanges and updated in real-time on a millisecond scale.',
|
||||
],
|
||||
[
|
||||
'question_tr' => 'Ücretsiz deneme sürümü mevcut mu?',
|
||||
'question_en' => 'Is there a free tier available?',
|
||||
'answer_tr' => 'Evet. Trunçgil Finance geliştiriciler için belirli sayıda aylık istek limitine sahip tamamen ücretsiz bir sandbox planı sunmaktadır.',
|
||||
'answer_en' => 'Yes. Trunçgil Finance offers a completely free sandbox tier with a monthly request allowance for developers to test and build.',
|
||||
],
|
||||
[
|
||||
'question_tr' => 'Hangi veri türlerini sunuyorsunuz?',
|
||||
'question_en' => 'What kinds of financial data do you offer?',
|
||||
'answer_tr' => 'Uluslararası döviz pariteleri, serbest piyasa ve banka altın fiyatları, kıymetli madenler ve tüm popüler kripto para birimleri veri setlerimizin parçasıdır.',
|
||||
'answer_en' => 'Global currency exchange rates, free-market and banking gold values, precious metals, and all major cryptocurrency pairs are fully covered.',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
// 4. Determine category
|
||||
$category = ProductCategory::first();
|
||||
$categoryId = $category ? $category->id : 1;
|
||||
|
||||
// 5. Update or Create the Product
|
||||
Product::updateOrCreate(
|
||||
['slug' => 'truncgil-finance'],
|
||||
[
|
||||
'product_category_id' => $categoryId,
|
||||
'title' => $title,
|
||||
'type' => 'product',
|
||||
'hero_image' => $logoFileName,
|
||||
'content' => $content,
|
||||
'landing_page_data' => $landingPageData,
|
||||
'view_template' => 'front.products.finance',
|
||||
'external_url' => 'https://finance.truncgil.com/',
|
||||
'sort_order' => 2,
|
||||
'is_active' => true,
|
||||
]
|
||||
);
|
||||
|
||||
$this->command?->info('✅ Trunçgil Finance product seeded successfully!');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,509 @@
|
||||
@extends('layouts.site')
|
||||
|
||||
@php
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
$header = 'front.products.finance_header';
|
||||
@endphp
|
||||
|
||||
@section('title', $product->translate('title') ?? 'Trunçgil Finance')
|
||||
|
||||
@php
|
||||
$landingData = $product->landing_page_data ?? [];
|
||||
$hero = $landingData['hero'] ?? [];
|
||||
$features = $landingData['features'] ?? [];
|
||||
$howItWorks = $landingData['how_it_works'] ?? [];
|
||||
$steps = $howItWorks['steps'] ?? [];
|
||||
$faqs = $landingData['faqs'] ?? [];
|
||||
$currentLang = app()->getLocale();
|
||||
|
||||
// Helper function for translations
|
||||
$getTranslated = function($item, $key, $default = '') use ($currentLang) {
|
||||
if (isset($item["{$key}_{$currentLang}"])) {
|
||||
return $item["{$key}_{$currentLang}"];
|
||||
}
|
||||
return $item[$key] ?? $default;
|
||||
};
|
||||
@endphp
|
||||
|
||||
@push('styles')
|
||||
<style>
|
||||
/* Green-Tuned Premium Dark Theme Core Styles */
|
||||
:root {
|
||||
--primary: #00e676 !important;
|
||||
--primary-rgb: 0, 230, 118 !important;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #0b0f0d !important;
|
||||
color: #e2e8f0 !important;
|
||||
font-family: 'Space Grotesk', 'Urbanist', sans-serif !important;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background-color: #00e676 !important;
|
||||
border-color: #00e676 !important;
|
||||
color: #0b0f0d !important;
|
||||
font-weight: 600 !important;
|
||||
}
|
||||
.btn-primary:hover {
|
||||
background-color: #00b359 !important;
|
||||
border-color: #00b359 !important;
|
||||
color: #0b0f0d !important;
|
||||
}
|
||||
|
||||
.finance-dark-page {
|
||||
background: radial-gradient(circle at 50% 0%, rgba(0, 230, 118, 0.08) 0%, rgba(11, 15, 13, 0) 50%),
|
||||
radial-gradient(circle at 100% 50%, rgba(0, 230, 118, 0.04) 0%, rgba(11, 15, 13, 0) 40%),
|
||||
#0b0f0d;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
/* Glow Gradients matching Emerald/Green */
|
||||
.text-glow-gradient {
|
||||
background: linear-gradient(135deg, #ffffff 0%, #a7f3d0 50%, #34d399 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
|
||||
.text-green-glow {
|
||||
color: #00e676 !important;
|
||||
text-shadow: 0 0 12px rgba(0, 230, 118, 0.35);
|
||||
}
|
||||
|
||||
/* Elegant Glassmorphism Cards */
|
||||
.glass-card {
|
||||
background: rgba(18, 26, 22, 0.55);
|
||||
backdrop-filter: blur(16px);
|
||||
border: 1px solid rgba(0, 230, 118, 0.08) !important;
|
||||
border-radius: 1rem;
|
||||
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
}
|
||||
|
||||
.glass-card:hover {
|
||||
transform: translateY(-4px);
|
||||
border-color: rgba(0, 230, 118, 0.25) !important;
|
||||
box-shadow: 0 12px 35px rgba(0, 230, 118, 0.1);
|
||||
}
|
||||
|
||||
/* Active dynamic pulse */
|
||||
.pulse-dot-green {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
background-color: #00e676;
|
||||
border-radius: 50%;
|
||||
display: inline-block;
|
||||
box-shadow: 0 0 0 0 rgba(0, 230, 118, 0.7);
|
||||
animation: pulse-green 1.8s infinite;
|
||||
}
|
||||
|
||||
@keyframes pulse-green {
|
||||
0% {
|
||||
transform: scale(0.95);
|
||||
box-shadow: 0 0 0 0 rgba(0, 230, 118, 0.7);
|
||||
}
|
||||
70% {
|
||||
transform: scale(1);
|
||||
box-shadow: 0 0 0 8px rgba(0, 230, 118, 0);
|
||||
}
|
||||
100% {
|
||||
transform: scale(0.95);
|
||||
box-shadow: 0 0 0 0 rgba(0, 230, 118, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Code editor tab styles matching Green Theme */
|
||||
.code-editor-header {
|
||||
background: #0f1411;
|
||||
border-top-left-radius: 0.75rem;
|
||||
border-top-right-radius: 0.75rem;
|
||||
padding: 0.75rem 1.25rem;
|
||||
border-bottom: 1px solid rgba(0, 230, 118, 0.08);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
.code-editor-body {
|
||||
background: #050807;
|
||||
border-bottom-left-radius: 0.75rem;
|
||||
border-bottom-right-radius: 0.75rem;
|
||||
padding: 1.5rem;
|
||||
font-family: 'Fira Code', 'Courier New', Courier, monospace;
|
||||
font-size: 0.85rem;
|
||||
color: #cbd5e1;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.nav-tabs-code .nav-link {
|
||||
color: #8892b0;
|
||||
border: none;
|
||||
padding: 0.4rem 1rem;
|
||||
border-radius: 0.375rem;
|
||||
font-weight: 500;
|
||||
font-size: 0.85rem;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
.nav-tabs-code .nav-link.active {
|
||||
color: #00e676 !important;
|
||||
background: rgba(0, 230, 118, 0.1) !important;
|
||||
}
|
||||
|
||||
/* Accordions inside dark theme */
|
||||
.accordion-dark .accordion-item {
|
||||
background: rgba(18, 26, 22, 0.3) !important;
|
||||
border: 1px solid rgba(0, 230, 118, 0.05) !important;
|
||||
border-radius: 0.75rem !important;
|
||||
overflow: hidden;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
.accordion-dark .accordion-button {
|
||||
background: transparent !important;
|
||||
color: #e2e8f0 !important;
|
||||
box-shadow: none !important;
|
||||
font-weight: 600;
|
||||
}
|
||||
.accordion-dark .accordion-button:not(.collapsed) {
|
||||
color: #00e676 !important;
|
||||
}
|
||||
.accordion-dark .accordion-button::after {
|
||||
filter: brightness(0) invert(1);
|
||||
}
|
||||
.accordion-dark .accordion-body {
|
||||
color: #94a3b8 !important;
|
||||
border-top: 1px solid rgba(0, 230, 118, 0.05);
|
||||
}
|
||||
</style>
|
||||
@endpush
|
||||
|
||||
@section('content')
|
||||
<div class="finance-dark-page">
|
||||
|
||||
{{-- Hero Section designed exactly like demo3.html --}}
|
||||
<section class="wrapper bg-[#0c120f] opacity-100 angled lower-start relative border-0
|
||||
before:content-[''] before:block before:absolute before:z-0 before:border-y-transparent before:border-[#0c120f] before:border-0 before:border-solid before:right-0
|
||||
after:bottom-[-4rem] after:content-[''] after:block after:absolute after:z-0 after:border-l-[100vw] after:border-r-transparent after:border-b-[4rem] after:border-y-transparent after:border-[#0c120f] after:border-0 after:border-solid after:right-0">
|
||||
<div class="container pt-7 xl:pt-12 lg:pt-12 md:pt-12 pb-8 relative z-10">
|
||||
<div class="flex flex-wrap mx-0 !mt-[-50px] items-center">
|
||||
|
||||
{{-- LEFT COLUMN: Title & Rates (Döviz, Altın, Kripto tek yerde şeklinde) --}}
|
||||
<div class="lg:w-6/12 xl:w-6/12 w-full flex-[0_0_auto] max-w-full px-0 !mt-[50px]">
|
||||
<div class="d-flex align-items-center gap-2 mb-3">
|
||||
<span class="pulse-dot-green" aria-hidden="true"></span>
|
||||
<span class="text-green-glow fs-13 font-bold uppercase tracking-wider">{!! t('Canlı Finansal Veri Servisi') !!}</span>
|
||||
</div>
|
||||
<h1 class="display-3 font-bold !leading-[1.15] text-white !mb-4 text-glow-gradient">
|
||||
{!! t('Altın, Döviz ve Kripto Paralar') !!} <br>
|
||||
<span class="text-green-glow">{!! t('Tek Bir API Uç Noktasında!') !!}</span>
|
||||
</h1>
|
||||
<p class="lead !text-[1.15rem] !leading-[1.5] text-slate-300 !mb-6 pr-lg-12">
|
||||
{!! t('Trunçgil Finance ile gecikmesiz, anlık ve yüksek frekanslı tüm altın fiyatlarını, serbest piyasa döviz kurlarını ve popüler kripto para birimlerini tek bir noktadan entegre edin.') !!}
|
||||
</p>
|
||||
|
||||
{{-- Rates Showcase (Tek Yerde) --}}
|
||||
<div class="glass-card p-5 !mb-7" style="background: rgba(12, 18, 15, 0.7); max-width: 490px;">
|
||||
<div class="row g-4">
|
||||
<div class="col-6">
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<span class="w-2.5 h-2.5 rounded-circle bg-warning d-inline-block"></span>
|
||||
<div>
|
||||
<div class="text-slate-400 fs-11 uppercase font-bold">{!! t('Gram Altın') !!}</div>
|
||||
<div class="text-white font-bold fs-15 font-mono" id="gold-try">₺3.142,45</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<span class="w-2.5 h-2.5 rounded-circle bg-info d-inline-block"></span>
|
||||
<div>
|
||||
<div class="text-slate-400 fs-11 uppercase font-bold">USD / TRY</div>
|
||||
<div class="text-white font-bold fs-15 font-mono" id="usd-try">₺34.8250</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<span class="w-2.5 h-2.5 rounded-circle bg-primary d-inline-block"></span>
|
||||
<div>
|
||||
<div class="text-slate-400 fs-11 uppercase font-bold">EUR / TRY</div>
|
||||
<div class="text-white font-bold fs-15 font-mono" id="eur-try">₺37.2480</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<span class="w-2.5 h-2.5 rounded-circle d-inline-block" style="background-color: #00e676;"></span>
|
||||
<div>
|
||||
<div class="text-slate-400 fs-11 uppercase font-bold">BTC / USD</div>
|
||||
<div class="text-white font-bold fs-15 font-mono" id="btc-usd">$98,425.00</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex flex-wrap gap-3">
|
||||
<a href="https://finance.truncgil.com/docs" target="_blank" class="btn btn-primary px-6 py-3 rounded">
|
||||
<i class="uil uil-code-branch me-1"></i> {!! t('API Entegrasyonu') !!}
|
||||
</a>
|
||||
<a href="{{ route('page.show', ['slug' => 'iletisim']) }}" class="btn btn-outline-glow px-6 py-3 rounded">
|
||||
{!! t('Özel Teklif Alın') !!}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- RIGHT COLUMN: Floating Fetched Logo --}}
|
||||
<div class="lg:w-5/12 xl:w-5/12 w-full flex-[0_0_auto] max-w-full px-0 !mt-[50px] lg:!ml-[8.33333333%] xl:!ml-[8.33333333%] !mb-[-8rem] relative z-[3]">
|
||||
<div class="!relative">
|
||||
<figure class="!rounded-[1rem] !shadow-[0_0.25rem_2.5rem_rgba(0,230,118,0.15)] overflow-hidden" style="background: rgba(18, 26, 22, 0.6); border: 1px solid rgba(0, 230, 118, 0.15);">
|
||||
<div class="p-12 text-center">
|
||||
@if(!empty($hero['featured_image']))
|
||||
<img class="img-fluid drop-shadow-lg mx-auto" src="{{ Storage::url($hero['featured_image']) }}" alt="Trunçgil Finance Logo" style="max-height: 140px;">
|
||||
@else
|
||||
<img class="img-fluid drop-shadow-lg mx-auto" src="https://finance.truncgil.com/img/logo.svg" alt="Trunçgil Finance Logo" style="max-height: 140px;">
|
||||
@endif
|
||||
<div class="mt-8 text-center">
|
||||
<span class="badge bg-soft-success text-success rounded-pill px-4 py-2 fs-12 border border-success-20">API v4 STABLE</span>
|
||||
</div>
|
||||
</div>
|
||||
</figure>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{-- Advantages and API Benefits Section --}}
|
||||
<section class="wrapper bg-[#0b0f0d] pt-36 pb-24 xl:pb-32 lg:pb-32 md:pb-32 relative z-10">
|
||||
<div class="container">
|
||||
|
||||
<div class="row text-center mb-16">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<h2 class="text-green-glow uppercase tracking-wider fs-13 font-bold mb-3">{!! t('API Avantajları & Sıfır Kesinti') !!}</h2>
|
||||
<h3 class="display-4 font-bold text-glow-gradient">{!! t('Geliştiriciler İçin Sınırsız Özgürlük') !!}</h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row g-6 text-center">
|
||||
{{-- Advantage 1: No Auth Required --}}
|
||||
<div class="col-md-4">
|
||||
<div class="glass-card p-8 h-100 flex flex-col justify-between">
|
||||
<div>
|
||||
<div class="w-12 h-12 rounded-circle bg-success-soft flex items-center justify-center mx-auto mb-5 text-success fs-24">
|
||||
<i class="uil uil-unlock"></i>
|
||||
</div>
|
||||
<h4 class="fs-18 font-bold text-white mb-3">{!! t('No Auth Required (Sıfır Kurulum)') !!}</h4>
|
||||
<p class="text-slate-400 fs-14 mb-0">
|
||||
{!! t('Başlamak için karmaşık kayıt süreçlerine, token/key yönetimlerine gerek yok. Standart JSON uç noktalarımıza doğrudan istek atarak saniyeler içinde çalışın.') !!}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Advantage 2: Totally Free --}}
|
||||
<div class="col-md-4">
|
||||
<div class="glass-card p-8 h-100 flex flex-col justify-between">
|
||||
<div>
|
||||
<div class="w-12 h-12 rounded-circle bg-success-soft flex items-center justify-center mx-auto mb-5 text-success fs-24">
|
||||
<i class="uil uil-gift"></i>
|
||||
</div>
|
||||
<h4 class="fs-18 font-bold text-white mb-3">{!! t('%100 Ücretsiz Kullanım') !!}</h4>
|
||||
<p class="text-slate-400 fs-14 mb-0">
|
||||
{!! t('Geliştirici dostu yapımız gereği, tüm kişisel ve prototip projelerinizde altın döviz verilerimizi hiçbir kullanım ücreti ödemeden özgürce çekebilirsiniz.') !!}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Advantage 3: Dockerized Private Deployments --}}
|
||||
<div class="col-md-4">
|
||||
<div class="glass-card p-8 h-100 flex flex-col justify-between">
|
||||
<div>
|
||||
<div class="w-12 h-12 rounded-circle bg-success-soft flex items-center justify-center mx-auto mb-5 text-success fs-24">
|
||||
<i class="uil uil-layer-group"></i>
|
||||
</div>
|
||||
<h4 class="fs-18 font-bold text-white mb-3">{!! t('Özel Dockerize Kurulum') !!}</h4>
|
||||
<p class="text-slate-400 fs-14 mb-0">
|
||||
{!! t('Kurumsal işletmeniz için yüksek hacimli istek, sıfır ağ gecikmesi ve izole veri akışı gerekiyorsa, size özel Docker paketimizle sistemi kendi sunucularınıza kurabiliriz.') !!}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{-- Interactive Code Playground --}}
|
||||
<section class="wrapper bg-[#0c120f] py-20 relative z-10 border-top border-white-5">
|
||||
<div class="container">
|
||||
<div class="row align-items-center g-10">
|
||||
<div class="col-lg-5">
|
||||
<h2 class="text-green-glow uppercase tracking-wider fs-13 font-bold mb-3">{!! t('Geliştirici Dostu Yapı') !!}</h2>
|
||||
<h3 class="display-4 font-bold text-glow-gradient mb-5">{!! t('Kodunuza Saniyeler İçinde Bağlayın') !!}</h3>
|
||||
<p class="text-slate-300 fs-16 mb-6">
|
||||
{!! t('Modern RESTful JSON standartlarında sunulan temiz çıktı modelimiz sayesinde, en sevdiğiniz programlama dilinde anında istek atın ve verileri işleyin.') !!}
|
||||
</p>
|
||||
<ul class="list-unstyled space-y-3 mb-8">
|
||||
<li class="d-flex align-items-center gap-3">
|
||||
<i class="uil uil-check-circle text-green-glow fs-18"></i>
|
||||
<span>{!! t('Kimlik Doğrulama Gerekmez (No-Auth)') !!}</span>
|
||||
</li>
|
||||
<li class="d-flex align-items-center gap-3">
|
||||
<i class="uil uil-check-circle text-green-glow fs-18"></i>
|
||||
<span>{!! t('Milisaniyeler Hızında JSON Çıktısı') !!}</span>
|
||||
</li>
|
||||
</ul>
|
||||
<a href="https://finance.truncgil.com/docs" target="_blank" class="btn btn-primary px-6 py-3 rounded">
|
||||
{!! t('API Dokümantasyonunu İncele') !!} <i class="uil uil-arrow-right ms-1"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{{-- Interactive Tabs and Code Code Editor --}}
|
||||
<div class="col-lg-7">
|
||||
<div class="nav nav-tabs nav-tabs-code mb-4 gap-2" id="code-tabs" role="tablist">
|
||||
<button class="nav-link active" id="tab-js-btn" data-bs-toggle="tab" data-bs-target="#tab-js" type="button" role="tab" aria-selected="true">JavaScript</button>
|
||||
<button class="nav-link" id="tab-php-btn" data-bs-toggle="tab" data-bs-target="#tab-php" type="button" role="tab" aria-selected="false">PHP (cURL)</button>
|
||||
<button class="nav-link" id="tab-python-btn" data-bs-toggle="tab" data-bs-target="#tab-python" type="button" role="tab" aria-selected="false">Python</button>
|
||||
</div>
|
||||
|
||||
<div class="tab-content">
|
||||
{{-- JavaScript --}}
|
||||
<div class="tab-pane fade show active" id="tab-js" role="tabpanel" aria-labelledby="tab-js-btn">
|
||||
<div class="code-editor-header">
|
||||
<div>
|
||||
<span class="code-dot code-dot-red" aria-hidden="true"></span>
|
||||
<span class="code-dot code-dot-yellow" aria-hidden="true"></span>
|
||||
<span class="code-dot code-dot-green" aria-hidden="true"></span>
|
||||
<span class="text-slate-400 fs-12">finance.js</span>
|
||||
</div>
|
||||
<button class="btn btn-sm btn-outline-glow rounded px-3 py-1 fs-12" onclick="navigator.clipboard.writeText(document.getElementById('code-js').innerText); alert('Copied!');">
|
||||
<i class="uil uil-copy me-1"></i> {!! t('Kopyala') !!}
|
||||
</button>
|
||||
</div>
|
||||
<pre class="code-editor-body m-0" id="code-js"><code><span class="text-warning">fetch</span>(<span class="text-success">'https://finance.truncgil.com/v4/today.json'</span>)
|
||||
.<span class="text-warning">then</span>(response => response.<span class="text-warning">json</span>())
|
||||
.<span class="text-warning">then</span>(data => {
|
||||
<span class="text-info">console</span>.<span class="text-warning">log</span>(<span class="text-success">'Dolar/TRY:'</span>, data.USD.Buying);
|
||||
<span class="text-info">console</span>.<span class="text-warning">log</span>(<span class="text-success">'Gram Altın:'</span>, data.Gold_Gram.Selling);
|
||||
})
|
||||
.<span class="text-warning">catch</span>(error => <span class="text-info">console</span>.<span class="text-warning">error</span>(<span class="text-success">'Hata:'</span>, error));</code></pre>
|
||||
</div>
|
||||
|
||||
{{-- PHP --}}
|
||||
<div class="tab-pane fade" id="tab-php" role="tabpanel" aria-labelledby="tab-php-btn">
|
||||
<div class="code-editor-header">
|
||||
<div>
|
||||
<span class="code-dot code-dot-red" aria-hidden="true"></span>
|
||||
<span class="code-dot code-dot-yellow" aria-hidden="true"></span>
|
||||
<span class="code-dot code-dot-green" aria-hidden="true"></span>
|
||||
<span class="text-slate-400 fs-12">finance.php</span>
|
||||
</div>
|
||||
<button class="btn btn-sm btn-outline-glow rounded px-3 py-1 fs-12" onclick="navigator.clipboard.writeText(document.getElementById('code-php').innerText); alert('Copied!');">
|
||||
<i class="uil uil-copy me-1"></i> {!! t('Kopyala') !!}
|
||||
</button>
|
||||
</div>
|
||||
<pre class="code-editor-body m-0" id="code-php"><code><span class="text-info"><?php</span>
|
||||
<span class="text-warning">$ch</span> = <span class="text-warning">curl_init</span>(<span class="text-success">'https://finance.truncgil.com/v4/today.json'</span>);
|
||||
<span class="text-warning">curl_setopt</span>(<span class="text-warning">$ch</span>, CURLOPT_RETURNTRANSFER, <span class="text-info">true</span>);
|
||||
<span class="text-warning">$response</span> = <span class="text-warning">curl_exec</span>(<span class="text-warning">$ch</span>);
|
||||
<span class="text-warning">$data</span> = <span class="text-warning">json_decode</span>(<span class="text-warning">$response</span>, <span class="text-info">true</span>);
|
||||
|
||||
<span class="text-info">echo</span> <span class="text-success">"Altın Satış: "</span> . <span class="text-warning">$data</span>[<span class="text-success">'Gold_Gram'</span>][<span class="text-success">'Selling'</span>];
|
||||
<span class="text-warning">curl_close</span>(<span class="text-warning">$ch</span>);</code></pre>
|
||||
</div>
|
||||
|
||||
{{-- Python --}}
|
||||
<div class="tab-pane fade" id="tab-python" role="tabpanel" aria-labelledby="tab-python-btn">
|
||||
<div class="code-editor-header">
|
||||
<div>
|
||||
<span class="code-dot code-dot-red" aria-hidden="true"></span>
|
||||
<span class="code-dot code-dot-yellow" aria-hidden="true"></span>
|
||||
<span class="code-dot code-dot-green" aria-hidden="true"></span>
|
||||
<span class="text-slate-400 fs-12">finance.py</span>
|
||||
</div>
|
||||
<button class="btn btn-sm btn-outline-glow rounded px-3 py-1 fs-12" onclick="navigator.clipboard.writeText(document.getElementById('code-python').innerText); alert('Copied!');">
|
||||
<i class="uil uil-copy me-1"></i> {!! t('Kopyala') !!}
|
||||
</button>
|
||||
</div>
|
||||
<pre class="code-editor-body m-0" id="code-python"><code><span class="text-warning">import</span> requests
|
||||
|
||||
response = requests.<span class="text-warning">get</span>(<span class="text-success">'https://finance.truncgil.com/v4/today.json'</span>)
|
||||
data = response.<span class="text-warning">json</span>()
|
||||
|
||||
<span class="text-warning">print</span>(<span class="text-success">f"Dolar Alış: {data['USD']['Buying']}"</span>)
|
||||
<span class="text-warning">print</span>(<span class="text-success">f"Gram Altın Satış: {data['Gold_Gram']['Selling']}"</span>)</code></pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{-- Bottom CTA Section targeting Docker deployments --}}
|
||||
<section class="wrapper bg-[#0b0f0d] py-20 relative z-10 border-top border-white-5 text-center">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<h2 class="display-3 font-bold text-white mb-4">{!! t('Özel & Dockerize Çözümler') !!}</h2>
|
||||
<p class="lead fs-18 text-slate-300 mb-8 max-w-xl mx-auto">
|
||||
{!! t('Yüksek performanslı veri havuzu, sınırsız sorgulama hacmi ve sıfır dış sunucu bağımlılığı için Trunçgil Finance altyapısını Dockerize olarak kendi yerel mimarinize kuralım.') !!}
|
||||
</p>
|
||||
<div class="d-flex justify-content-center gap-3 flex-wrap">
|
||||
<a href="{{ route('page.show', ['slug' => 'iletisim']) }}" class="btn btn-primary px-8 py-3 rounded">
|
||||
{!! t('Docker Kurulumu İçin İletişime Geçin') !!} <i class="uil uil-comment-alt-dots ms-1"></i>
|
||||
</a>
|
||||
<a href="https://finance.truncgil.com/" target="_blank" class="btn btn-outline-glow px-8 py-3 rounded">
|
||||
{!! t('Detayları Gör') !!}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Live rates simulation matching green vibes
|
||||
function startRateDynamics() {
|
||||
const goldTryEl = document.getElementById('gold-try');
|
||||
const usdTryEl = document.getElementById('usd-try');
|
||||
const eurTryEl = document.getElementById('eur-try');
|
||||
const btcUsdEl = document.getElementById('btc-usd');
|
||||
|
||||
setInterval(() => {
|
||||
if (goldTryEl) {
|
||||
const current = parseFloat(goldTryEl.innerText.replace('₺', '').replace('.', '').replace(',', '.'));
|
||||
const osc = (Math.random() - 0.48) * 0.75;
|
||||
const next = current + osc;
|
||||
goldTryEl.innerText = '₺' + next.toLocaleString('tr-TR', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
|
||||
}
|
||||
if (usdTryEl) {
|
||||
const current = parseFloat(usdTryEl.innerText.replace('₺', '').replace(',', '.'));
|
||||
const osc = (Math.random() - 0.5) * 0.0015;
|
||||
const next = current + osc;
|
||||
usdTryEl.innerText = '₺' + next.toLocaleString('tr-TR', { minimumFractionDigits: 4, maximumFractionDigits: 4 });
|
||||
}
|
||||
if (eurTryEl) {
|
||||
const current = parseFloat(eurTryEl.innerText.replace('₺', '').replace(',', '.'));
|
||||
const osc = (Math.random() - 0.51) * 0.0018;
|
||||
const next = current + osc;
|
||||
eurTryEl.innerText = '₺' + next.toLocaleString('tr-TR', { minimumFractionDigits: 4, maximumFractionDigits: 4 });
|
||||
}
|
||||
if (btcUsdEl) {
|
||||
const current = parseFloat(btcUsdEl.innerText.replace('$', '').replace(',', ''));
|
||||
const osc = (Math.random() - 0.45) * 5.5;
|
||||
const next = current + osc;
|
||||
btcUsdEl.innerText = '$' + next.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
|
||||
}
|
||||
}, 2000);
|
||||
}
|
||||
|
||||
startRateDynamics();
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
|
||||
@endsection
|
||||
@@ -0,0 +1,101 @@
|
||||
@php
|
||||
// Get menu items from Pages with nested children
|
||||
$menuItems = \App\Models\Page::with(['children' => function ($query) {
|
||||
$query->where('status', 'published')
|
||||
->where('show_in_menu', true)
|
||||
->orderBy('sort_order', 'asc')
|
||||
->orderBy('title', 'asc');
|
||||
}, 'children.children' => function ($query) {
|
||||
$query->where('status', 'published')
|
||||
->where('show_in_menu', true)
|
||||
->orderBy('sort_order', 'asc')
|
||||
->orderBy('title', 'asc');
|
||||
}])
|
||||
->whereNull('parent_id')
|
||||
->where('status', 'published')
|
||||
->where('show_in_menu', true)
|
||||
->orderBy('sort_order', 'asc')
|
||||
->orderBy('title', 'asc')
|
||||
->get();
|
||||
@endphp
|
||||
<header class="relative wrapper !bg-[#0b0f0d]">
|
||||
<nav class="navbar navbar-expand-lg center-logo transparent navbar-dark !bg-[#0b0f0d] !border-b !border-white-5">
|
||||
<div class="container flex justify-between items-center">
|
||||
<!-- Mobile Header -->
|
||||
<div class="flex flex-row w-full justify-between items-center xl:!hidden lg:!hidden">
|
||||
<div class="navbar-brand">
|
||||
<a href="/">
|
||||
<img class="logo-light !h-[2.2rem]" src="{{ asset('logos/truncgil-yatay-dark.svg') }}" alt="Truncgil" width="134" height="43">
|
||||
</a>
|
||||
</div>
|
||||
<div class="navbar-other !ml-auto">
|
||||
<ul class="navbar-nav flex-row items-center">
|
||||
<li class="nav-item">
|
||||
<button class="hamburger offcanvas-nav-btn" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvas-nav" aria-label="{{ t('Menüyü aç') }}"><span></span></button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Desktop Header -->
|
||||
<div class="navbar-collapse-wrapper flex flex-row items-center w-full justify-between hidden lg:!flex xl:!flex">
|
||||
<!-- Logo on Left -->
|
||||
<div class="navbar-brand">
|
||||
<a href="/">
|
||||
<img class="!h-[2.5rem]" src="{{ asset('logos/truncgil-yatay-dark.svg') }}" alt="Truncgil Teknoloji" width="134" height="43">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Menu in Center -->
|
||||
<div class="navbar-collapse w-full flex justify-center">
|
||||
<div class="flex justify-center w-full">
|
||||
<ul class="navbar-nav flex-row items-center gap-1">
|
||||
@foreach($menuItems as $item)
|
||||
<x-front.menu-item :item="$item" />
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Right side CTA / Lang -->
|
||||
<div class="flex items-center gap-4">
|
||||
<a href="https://finance.truncgil.com/docs" target="_blank" class="btn btn-sm btn-primary text-white !rounded-[.4rem] hover:translate-y-[-0.15rem]">{!! t('Dokümantasyon') !!}</a>
|
||||
<div class="hidden lg:!block xl:!block shrink-0">
|
||||
@include("components.custom.language-selector")
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Mobile Menu -->
|
||||
<div id="offcanvas-nav" class="navbar-collapse offcanvas offcanvas-nav offcanvas-start lg:!hidden xl:!hidden">
|
||||
<div class="offcanvas-header flex items-center justify-between flex-row p-6">
|
||||
<a href="/">
|
||||
<img class="!h-[2.2rem]" src="{{ asset('logos/truncgil-yatay-dark.svg') }}" alt="Truncgil" width="134" height="43">
|
||||
</a>
|
||||
<button type="button" class="btn-close !text-white" data-bs-dismiss="offcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body !pt-0">
|
||||
<div class="pb-4 mb-2 border-b border-white/10">
|
||||
@include('components.custom.language-selector', ['variant' => 'offcanvas'])
|
||||
</div>
|
||||
<ul class="navbar-nav">
|
||||
@foreach($menuItems as $item)
|
||||
<x-front.menu-item :item="$item" />
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<style>
|
||||
/* Header specific styles to match Dark theme */
|
||||
header .navbar.transparent.navbar-dark .navbar-nav .nav-link {
|
||||
color: #aab0bc !important;
|
||||
}
|
||||
header .navbar.transparent.navbar-dark .navbar-nav .nav-link:hover {
|
||||
color: #00e676 !important;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user