@extends('layouts.dash') @section('title', 'Settings') @section('content')

Settings & Customization

লোগো থেকে ফুটার পর্যন্ত — সবকিছু এখান থেকে কাস্টমাইজ করুন। Live preview সহ।

Preview Site Fresh UI • {{ ucfirst($tab) }}
@php function s_field($key, $label, $hint = '', $type = 'text', $def = '') { $isEncrypted = is_encrypted_setting($key); $rawVal = setting($key, $def); $v = old('s.'.$key, $rawVal); $isSecret = $isEncrypted; $masked = $isSecret && $rawVal !== '' ? mask_secret($rawVal) : ''; $h = '
'; if ($type === 'textarea') { $rows = str_contains($key,'footer_col') ? 5 : 3; $h .= ''; if($hint) $h .= '
'.e($hint).'
'; } elseif ($type === 'color') { $h .= ''; if($hint) $h .= '
'.e($hint).'
'; } else { $inputType = $isSecret ? 'password' : $type; $placeholder = $masked ?: $hint; $val = $isSecret ? '' : $v; $h .= ''; if ($hint) $h .= '
'.e($hint).'
'; if ($isSecret && $rawVal !== '') $h .= '
খালি রাখলে আগের মান বহাল থাকবে। Clear
'; } return $h.'
'; } function s_select($key, $label, $options, $hint = '', $def = '') { $v = old('s.'.$key, setting($key, $def)); $h = '
'; if ($hint) $h .= '
'.e($hint).'
'; return $h.'
'; } @endphp
@php $tabs = ['general'=>'General','branding'=>'Branding','theme'=>'Theme','hero'=>'Hero','footer'=>'Footer','payment'=>'Payments','api'=>'API & Limits','social'=>'Social','seo'=>'SEO','security'=>'Security','system'=>'System']; @endphp @foreach($tabs as $k=>$label) @if($k==='general') @elseif($k==='branding') @elseif($k==='theme') @elseif($k==='hero') @elseif($k==='footer') @elseif($k==='payment') @elseif($k==='api') @elseif($k==='social') @elseif($k==='seo') @elseif($k==='security') @else @endif {{ $label }} @if($k==='payment'){!! \App\Services\NagorikPayGateway::testModeBadge() !!}@endif @endforeach
@if($tab === 'general')
Site Identity — নাম ও পরিচয়

এই নাম, ট্যাগলাইন সব জায়গায় দেখাবে — হেডার, ফুটার, টাইটেল, SEO।

@csrf @method('PATCH') {!! s_field('site_name', 'Website Name', 'যেমন: INFINITY API HUB', 'text', 'INFINITY API HUB') !!} {!! s_field('site_tagline', 'Tagline', 'ছোট বর্ণনা — হিরোর নিচে', 'text', 'Premium API Platform') !!} {!! s_field('announcement', 'Top Announcement Bar', 'খালি রাখলে হাইড হবে — যেমন: ঈদ অফার চলছে!', 'text') !!}
Quick Customize

প্রায়ই পরিবর্তন করেন? এখান থেকে ১ ক্লিকে।

Pro tip: যেকোনো ট্যাবে Save করলে পুরো সাইটে instantly আপডেট হয় — কোনো কোড লাগে না।
Brand Kit — Logo, Icon & Name

এই তিনটি এক জায়গা থেকে পরিবর্তন করলে header, browser tab, footer, dashboard, invoice, email ও page title-এ নতুন branding ব্যবহার হবে।

@if(setting('logo',''))Logo@else∞@endif
LogoHeader ও site branding
@csrf
@if(setting('site_icon',''))Icon@else@endif
Icon / FaviconBrowser tab ও link icon
@csrf
{{ setting('site_name','INFINITY API HUB') }}
Brand Nameসব title, footer ও system text
@csrf @method('PATCH')
File guidance: Logo PNG/WebP/JPG max 2MB; Icon PNG/WebP/ICO/JPG max 1MB. Uploading a new file automatically replaces the previous one.
@elseif($tab === 'branding')
Header Logo — হেডার লোগো

PNG / SVG / WebP — সাদা ব্যাকগ্রাউন্ডে ভালো দেখায় এমন লোগো দিন।

@if(setting('logo','')) logo
{{ setting('logo') }}
@else
∞

ডিফল্ট ∞ আইকন ব্যবহার হচ্ছে

@endif
@csrf
@if(setting('logo',''))
@csrf @method('DELETE')
@else@endif
Brand Text & Header Links
@csrf @method('PATCH') {!! s_field('header_brand_text', 'Header Brand Text (logo এর পাশে)', 'খালি রাখলে site_name দেখাবে', 'text') !!} {!! s_field('header_tagline_small', 'Header এর ছোট ট্যাগলাইন', 'যেমন: Premium API Platform', 'text') !!}
Header Links: Docs, Status ইত্যাদি অটো — কাস্টম লিংক ফুটারে যোগ করুন। হেডার সব পেজে একই থাকে।
{!! s_field('header_cta_text', 'Header CTA Text', 'যেমন: Get Started', 'text', 'Get Started') !!} {!! s_field('header_cta_link', 'Header CTA Link', 'যেমন: /register', 'text', '/register') !!}
Live Header Preview
@if(setting('logo',''))@else∞@endif {{ setting('site_name','INFINITY API HUB') }} Preview
@elseif($tab === 'theme')
Theme — রঙ, রাউন্ডনেস, স্টাইল

এক ক্লিকে পুরো সাইটের লুক বদলান — primary রঙ সব বাটন, কার্ড, হেডারে প্রভাব ফেলে।

@csrf @method('PATCH')
{!! s_field('primary_color', 'Primary Color', 'মূল রঙ — বাটন, লিংক', 'color', '#2563eb') !!} {!! s_field('secondary_color', 'Secondary Color', 'হোভার, ডার্ক শেড', 'color', '#1d4ed8') !!} {!! s_field('accent_color', 'Accent Color', 'হাইলাইট', 'color', '#38bdf8') !!} {!! s_field('ui_radius', 'Corner Radius (px)', 'কার্ড ও বাটনের গোল', 'number', '16') !!}
{!! s_field('footer_bg', 'Footer Background', 'ফুটারের ব্যাকগ্রাউন্ড — ডার্ক সুন্দর', 'color', '#0b1526') !!} {!! s_field('footer_text', 'Footer Text Color', 'ফুটারের লেখার রঙ', 'color', '#cbd5e1') !!}
{!! s_field('custom_css', 'Custom CSS (advanced)', 'যেকোনো CSS — পুরো সাইটে যোগ হবে', 'textarea') !!}
Preview Home
Fresh & Cleantip: Primary #2563eb + Radius 16 + Footer #0b1526 = সবচেয়ে প্রিমিয়াম লুক।
@elseif($tab === 'hero')
Hero — হোমপেজের ব্যানার
@csrf @method('PATCH') {!! s_field('hero_badge', 'Hero Badge Text', 'ছোট pill — যেমন: Trusted API Platform', 'text') !!} {!! s_field('hero_title', 'Hero Title', '{hl}...{/hl} দিলে গ্রেডিয়েন্ট হবে', 'text') !!} {!! s_field('hero_subtitle', 'Hero Subtitle', '', 'textarea') !!}
{!! s_field('feat1_title', 'Feature 1 Title') !!}{!! s_field('feat1_desc', 'Feature 1 Text') !!}
{!! s_field('feat2_title', 'Feature 2 Title') !!}{!! s_field('feat2_desc', 'Feature 2 Text') !!}
{!! s_field('feat3_title', 'Feature 3 Title') !!}{!! s_field('feat3_desc', 'Feature 3 Text') !!}
{!! s_field('feat4_title', 'Feature 4 Title') !!}{!! s_field('feat4_desc', 'Feature 4 Text') !!}
@elseif($tab === 'footer')
Footer Brand — লোগো ও পরিচয়

ফুটারের বাম পাশে image-only branding, বর্ণনা ও সোশ্যাল লিংক। Footer-এ আর আলাদা text brand দেখানো হবে না।

@if(setting('footer_logo','')) @elseif(setting('logo',''))
Header লোগো ব্যবহার হচ্ছে (footer logo আলাদা দিতে পারেন)
@else ∞
Default ∞
@endif
@csrf
@if(setting('footer_logo',''))
@csrf @method('DELETE')
@else@endif
@csrf @method('PATCH') {!! s_field('footer_brand_text', 'Footer Image Alt Text', 'ছবির accessibility label — footer-এ দৃশ্যমান text নয়', 'text') !!} {!! s_field('footer_about', 'Footer About Text', '১-২ লাইন — কোম্পানি সম্পর্কে', 'textarea', 'Fast, reliable & developer-friendly APIs.') !!} {!! s_field('footer_text', 'Footer Short Note (legacy)', 'পুরনো ফিল্ড — footer_about প্রাধান্য পাবে', 'text') !!}
Footer Links — ৩ কলাম কাস্টম

প্রতি লাইনে Label|URL — যেমন: Home|/ । খালি রাখলে ডিফল্ট দেখাবে।

@csrf @method('PATCH')
Column 1 — Quick Links
{!! s_field('footer_col1_title', 'Title', '', 'text', 'Quick Links') !!} {!! s_field('footer_col1_links', 'Links ( Label|URL per line )', "Home|/\nPricing|/#pricing\nAPI Documentation|/docs\nCheck Key|/check-key\nSystem Status|/status", 'textarea') !!}
Column 2 — APIs
{!! s_field('footer_col2_title', 'Title', '', 'text', 'APIs') !!}
APIs কলাম অটো — আপনার Active APIs থেকে ৫টা দেখায়। কাস্টম করতে নিচে লিখুন (খালি রাখলে অটো)।
{!! s_field('footer_col2_links', 'Custom Links (optional, Label|URL)', 'খালি = অটো APIs', 'textarea') !!}
Column 3 — Support
{!! s_field('footer_col3_title', 'Title', '', 'text', 'Support') !!} {!! s_field('footer_col3_links', 'Links ( Label|URL )', "Integration Help|/docs\nFAQ|/#faq\nClient Login|/login", 'textarea') !!}
Footer Bottom — কপিরাইট ও ডেভেলপার

নিচের বার — কপিরাইট + Developed by।

@csrf @method('PATCH')
{!! s_field('footer_copyright', 'Copyright Text', 'যেমন: © 2025 INFINITY API HUB. All rights reserved.', 'text') !!} {!! s_field('footer_developer_name', 'Developer Name', 'যেমন: Infinity Codex', 'text', 'Infinity Codex') !!}
{!! s_field('footer_developer_link', 'Developer Link', 'https://t.me/...', 'url', 'https://t.me/INFINITY_codex') !!}
{!! s_field('footer_bg', 'Footer Background', '', 'color', '#0b1526') !!} {!! s_field('footer_extra_class', 'Extra Footer Class (optional)', 'যেমন: dark', 'text') !!}
View Footer
Fresh tip: Footer BG #0b1526 + প্রাইমারি #2563eb = সবচেয়ে প্রিমিয়াম ফুটার।
@elseif($tab === 'payment') @php $isSandbox = \App\Services\NagorikPayGateway::isSandbox(); $enabled = \App\Services\NagorikPayGateway::enabled(); @endphp @if($isSandbox && $enabled)
TEST MODE ACTIVE — Sandbox — No real money moves. Use sandbox API key (sk_test_…).
@elseif(!$isSandbox && $enabled)
LIVE MODE — Real payments processing.
@endif
Automatic Payment — NagorikPay {!! \App\Services\NagorikPayGateway::testModeBadge() !!}

Sandbox ও Live আলাদা কী — টেস্টের পর Live অন করুন। Hosted checkout বা Direct Payment (payment number + TrxID) flow admin থেকেই বেছে নিন।

@csrf @method('PATCH')
{!! s_select('nagorikpay_enabled', 'Enable NagorikPay', ['0'=>'Disabled — Manual (bKash/Nagad)', '1'=>'Enabled — Auto-verify'], '', '0') !!} {!! s_select('nagorikpay_mode', 'Mode', ['sandbox'=>'🧪 Sandbox (Test)', 'live'=>'✅ Live (Production)'], '', 'sandbox') !!}
{!! s_select('nagorikpay_payment_flow', 'Payment Flow', ['hosted'=>'Hosted checkout page', 'direct'=>'Direct Payment — number + TrxID'], 'Choose how customers pay', 'hosted') !!} {!! s_select('nagorikpay_payment_method', 'Direct Payment Method', ['auto'=>'Auto / gateway choice', 'bkash'=>'bKash', 'nagad'=>'Nagad', 'rocket'=>'Rocket', 'upay'=>'Upay', 'card'=>'Card', 'bank'=>'Bank / QR'], 'Used in Direct Payment mode', 'auto') !!}
{!! s_select('nagorikpay_account_type', 'Account Type', ['personal'=>'Personal', 'agent'=>'Agent', 'merchant'=>'Merchant'], 'Used by Direct Payment request', 'personal') !!}
Direct mode shows the gateway’s exact pay_amount, not only the requested amount.
{!! s_field('nagorikpay_base_url', 'Gateway Base URL', 'Auto per mode — override if docs differ', 'url', $isSandbox ? \App\Services\NagorikPayGateway::SANDBOX_BASE : \App\Services\NagorikPayGateway::LIVE_BASE) !!} {!! s_field('nagorikpay_brand_id', 'Brand ID', 'Optional from Brands page', 'text') !!}
{!! s_field('nagorikpay_create_path', 'Create Path', 'Default: api/payment/create', 'text', 'api/payment/create') !!} {!! s_field('nagorikpay_verify_path', 'Verify Path', 'Default: api/payment/verify', 'text', 'api/payment/verify') !!}
{!! s_field('nagorikpay_create_request_path', 'Direct Create Path', 'Default: api/payment/create-request', 'text', 'api/payment/create-request') !!} {!! s_field('nagorikpay_submit_transaction_path', 'Direct TrxID Submit Path', 'Default: api/payment-submit-transaction', 'text', 'api/payment-submit-transaction') !!}
{!! s_field('nagorikpay_callback_base_url', 'Public Callback / Subdomain URL', 'Optional. Example: https://pay.example.com — leave empty to use this site URL.', 'url') !!}

Sandbox Credentials TEST

{!! s_field('nagorikpay_api_key_sandbox', 'Sandbox API Key', 'sk_test_…', 'password') !!} {!! s_field('nagorikpay_webhook_secret_sandbox', 'Sandbox Webhook Secret', '', 'password') !!}

Live Credentials PROD

{!! s_field('nagorikpay_api_key_live', 'Live API Key', '', 'password') !!} {!! s_field('nagorikpay_webhook_secret_live', 'Live Webhook Secret', '', 'password') !!}

Legacy Fallback

{!! s_field('nagorikpay_api_key', 'Fallback API Key', '', 'password') !!} {!! s_field('nagorikpay_webhook_secret', 'Fallback Webhook Secret', '', 'password') !!}
{!! s_field('nagorikpay_expire_minutes', 'Auto-Expire (min)', '', 'number', '30') !!} {!! s_field('nagorikpay_recheck_minutes', 'Auto-Recheck (min)', '', 'number', '5') !!}

Wallet & Custom Credits

{!! s_field('wallet_min_topup', 'Minimum wallet top-up', 'Users cannot add less than this amount.', 'number', '10') !!} {!! s_field('wallet_max_topup', 'Maximum wallet top-up', 'Maximum amount per top-up.', 'number', '100000') !!}
{!! s_field('credit_price_default', 'Default price per credit', 'Used when an API does not have its own price. Per-API price is managed from Services.', 'number', '1') !!}
NagorikPay Logs Docs
@foreach(['nagorikpay_api_key_sandbox','nagorikpay_webhook_secret_sandbox','nagorikpay_api_key_live','nagorikpay_webhook_secret_live','nagorikpay_api_key','nagorikpay_webhook_secret'] as $k) @endforeach
Manual Fallback
@csrf @method('PATCH')
{!! s_field('pay_bkash', 'bKash Number') !!}{!! s_field('pay_nagad', 'Nagad Number') !!}
{!! s_field('pay_rocket', 'Rocket Number') !!} {!! s_field('pay_instruction', 'Instruction', '', 'textarea') !!}
@elseif($tab === 'api')
API Defaults & Limits
@csrf @method('PATCH') {!! s_field('global_provider_key', 'Global Provider Key') !!}
{!! s_field('key_prefix', 'Key Prefix', '', 'text', 'INF-') !!}{!! s_field('api_rate_limit', 'Rate Limit /min per key', '', 'number', '60') !!}
{!! s_field('api_ip_rate_limit', 'IP Rate Limit /min', '', 'number', '120') !!}{!! s_field('signup_bonus', 'Signup Bonus', '', 'number', '50') !!}
{!! s_field('signup_validity', 'Key Validity days', '', 'number', '30') !!}{!! s_field('service_free_quota', 'Free Quota', '', 'number', '25') !!}
{!! s_field('status_threshold', 'Status Operational %', '', 'number', '50') !!}
@elseif($tab === 'social')
Support & Social — ফুটার + হেডার
@csrf @method('PATCH') {!! s_field('support_telegram', 'Telegram URL', 'https://t.me/...') !!} {!! s_field('support_whatsapp', 'WhatsApp URL', 'https://wa.me/...') !!} {!! s_field('support_facebook', 'Facebook Page URL') !!} {!! s_field('support_youtube', 'YouTube Channel URL') !!}
এই লিংকগুলো ফুটারের সোশ্যাল আইকন + Support কলামে অটো দেখায়। খালি রাখলে আইকন হাইড।
@elseif($tab === 'seo')
SEO & Analytics
@csrf @method('PATCH') {!! s_field('seo_title', 'SEO Title') !!} {!! s_field('seo_description', 'Meta Description', '120–160 chars', 'textarea') !!} {!! s_field('seo_keywords', 'Keywords', 'comma separated') !!}
{!! s_field('seo_robots', 'Robots', 'index,follow', 'text', 'index,follow') !!}{!! s_field('seo_canonical_url', 'Canonical URL', '', 'url') !!}
{!! s_field('analytics_id', 'Google Analytics ID', 'G-XXXXXXXXXX') !!}
@elseif($tab === 'security')
Google Login
@csrf @method('PATCH') {!! s_field('google_oauth_enabled', 'Enable Google Login', '1 = on', 'number', '0') !!}
{!! s_field('google_client_id', 'Google Client ID') !!}{!! s_field('google_client_secret', 'Google Client Secret', 'encrypted', 'password') !!}
{!! s_field('google_redirect_url', 'Callback URL', 'Must match Google Cloud', 'url') !!}
Default: {{ route('google.callback') }}
API Provider Security
{!! s_select('api_allow_http', 'Allow insecure HTTP provider URLs', ['0'=>'Disabled — HTTPS only (recommended)','1'=>'Allow HTTP — only for trusted legacy providers'], 'Private/reserved hosts remain blocked.') !!}
Password Security

ডিফল্ট admin123 বদলাতে হবে — না বদলালে প্রোফাইলে redirect হবে।

@csrf @method('PATCH')
@elseif($tab === 'system')
Maintenance Mode
@csrf @method('PATCH') {!! s_field('maintenance_msg', 'Message', '', 'textarea') !!}
Backup & Cron
Download Backup (.sql)
Scheduler
* * * * * cd /path/to/project && php artisan schedule:run >> /dev/null 2>&1
@endif @endsection