This commit is contained in:
Şahan Hasret
2025-12-14 00:42:43 +03:00
parent a2c4fcc91a
commit 8957eb276e
13 changed files with 924 additions and 67 deletions

View File

@@ -1,7 +1,7 @@
{
"name": "ZeroSixLab",
"short_name": "ZSL",
"description": "Ankara merkezli, global vizyonlu yeni nesil yazılım ve Ar-Ge laboratuvarı.",
"description": "Ankara merkezli, global vizyonlu yeni nesil yazilim ve Ar-Ge laboratuvari.",
"start_url": "/",
"display": "standalone",
"background_color": "#0A0E17",
@@ -11,69 +11,17 @@
"lang": "tr",
"icons": [
{
"src": "/icons/icon-72x72.png",
"sizes": "72x72",
"type": "image/png",
"purpose": "maskable any"
"src": "/icon",
"sizes": "32x32",
"type": "image/png"
},
{
"src": "/icons/icon-96x96.png",
"sizes": "96x96",
"type": "image/png",
"purpose": "maskable any"
},
{
"src": "/icons/icon-128x128.png",
"sizes": "128x128",
"type": "image/png",
"purpose": "maskable any"
},
{
"src": "/icons/icon-144x144.png",
"sizes": "144x144",
"type": "image/png",
"purpose": "maskable any"
},
{
"src": "/icons/icon-152x152.png",
"sizes": "152x152",
"type": "image/png",
"purpose": "maskable any"
},
{
"src": "/icons/icon-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable any"
},
{
"src": "/icons/icon-384x384.png",
"sizes": "384x384",
"type": "image/png",
"purpose": "maskable any"
},
{
"src": "/icons/icon-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable any"
"src": "/apple-icon",
"sizes": "180x180",
"type": "image/png"
}
],
"categories": ["business", "productivity", "utilities"],
"screenshots": [
{
"src": "/screenshots/desktop.png",
"sizes": "1920x1080",
"type": "image/png",
"form_factor": "wide"
},
{
"src": "/screenshots/mobile.png",
"sizes": "390x844",
"type": "image/png",
"form_factor": "narrow"
}
],
"related_applications": [],
"prefer_related_applications": false
}

26
src/app/apple-icon.tsx Normal file
View File

@@ -0,0 +1,26 @@
import { ImageResponse } from 'next/og';
export const runtime = 'edge';
export const size = { width: 180, height: 180 };
export const contentType = 'image/png';
export default function Icon() {
return new ImageResponse(
(
<div
style={{
width: '100%',
height: '100%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
background: 'linear-gradient(135deg, #00D4FF 0%, #0891b2 100%)',
borderRadius: '36px',
}}
>
<div style={{ fontSize: '100px' }}>🐱</div>
</div>
),
{ ...size }
);
}

26
src/app/icon.tsx Normal file
View File

@@ -0,0 +1,26 @@
import { ImageResponse } from 'next/og';
export const runtime = 'edge';
export const size = { width: 32, height: 32 };
export const contentType = 'image/png';
export default function Icon() {
return new ImageResponse(
(
<div
style={{
width: '100%',
height: '100%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
background: 'linear-gradient(135deg, #00D4FF 0%, #0891b2 100%)',
borderRadius: '6px',
}}
>
<div style={{ fontSize: '20px' }}>🐱</div>
</div>
),
{ ...size }
);
}

View File

@@ -1,6 +1,7 @@
import type { Metadata, Viewport } from "next";
import { Inter, Orbitron } from "next/font/google";
import { Analytics } from '@vercel/analytics/next';
import { LocaleProvider } from '@/context/LocaleContext';
import React from 'react';
import "./globals.css";
@@ -92,14 +93,16 @@ export default function RootLayout({
<link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />
</head>
<body className={`${inter.variable} ${orbitron.variable} font-sans bg-zsl-bg text-zsl-text`}>
<a href="#main-content" className="skip-link">
Ana içeriğe atla
</a>
<main id="main-content">
{children}
</main>
<Analytics />
<div className="scanlines"></div>
<LocaleProvider>
<a href="#main-content" className="skip-link">
Ana i\u00e7eri\u011fe atla
</a>
<main id="main-content">
{children}
</main>
<Analytics />
<div className="scanlines"></div>
</LocaleProvider>
</body>
</html>
);

168
src/app/opengraph-image.tsx Normal file
View File

@@ -0,0 +1,168 @@
import { ImageResponse } from 'next/og';
export const runtime = 'edge';
export const alt = 'ZeroSixLab - Geleceği Kodlayan Laboratuvar';
export const size = {
width: 1200,
height: 630,
};
export const contentType = 'image/png';
export default async function Image() {
return new ImageResponse(
(
<div
style={{
height: '100%',
width: '100%',
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
backgroundColor: '#050B14',
backgroundImage: 'radial-gradient(circle at 25% 25%, #0a192f 0%, #050B14 50%)',
position: 'relative',
}}
>
{/* Grid Pattern */}
<div
style={{
position: 'absolute',
top: 0,
left: 0,
right: 0,
bottom: 0,
backgroundImage: 'linear-gradient(rgba(0,212,255,0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(0,212,255,0.03) 1px, transparent 1px)',
backgroundSize: '50px 50px',
}}
/>
{/* Glow Effect */}
<div
style={{
position: 'absolute',
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
width: '600px',
height: '600px',
background: 'radial-gradient(circle, rgba(0,212,255,0.15) 0%, transparent 70%)',
borderRadius: '50%',
}}
/>
{/* Logo/Brand */}
<div
style={{
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
marginBottom: '30px',
}}
>
{/* Cat Icon */}
<div
style={{
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
width: '120px',
height: '120px',
borderRadius: '24px',
background: 'linear-gradient(135deg, #00D4FF 0%, #0891b2 100%)',
marginRight: '24px',
fontSize: '60px',
}}
>
🐱
</div>
{/* Text */}
<div
style={{
display: 'flex',
flexDirection: 'column',
}}
>
<span
style={{
fontSize: '72px',
fontWeight: 'bold',
color: 'white',
letterSpacing: '-2px',
lineHeight: 1,
}}
>
ZeroSixLab
</span>
<span
style={{
fontSize: '24px',
color: '#00D4FF',
letterSpacing: '8px',
textTransform: 'uppercase',
marginTop: '8px',
}}
>
SOFTWARE LAB
</span>
</div>
</div>
{/* Tagline */}
<div
style={{
fontSize: '32px',
color: '#94A3B8',
marginTop: '20px',
textAlign: 'center',
}}
>
Geleceği Kodlayan Laboratuvar
</div>
{/* Tech Tags */}
<div
style={{
display: 'flex',
gap: '16px',
marginTop: '40px',
}}
>
{['Web', 'Mobil', 'AI', 'Blockchain'].map((tag) => (
<div
key={tag}
style={{
padding: '8px 20px',
borderRadius: '20px',
border: '1px solid rgba(0,212,255,0.3)',
color: '#00D4FF',
fontSize: '18px',
background: 'rgba(0,212,255,0.1)',
}}
>
{tag}
</div>
))}
</div>
{/* Bottom URL */}
<div
style={{
position: 'absolute',
bottom: '40px',
fontSize: '20px',
color: '#64748b',
letterSpacing: '2px',
}}
>
zerosixlab.com
</div>
</div>
),
{
...size,
}
);
}

View File

@@ -15,6 +15,7 @@ import { PartnerLogos } from '@/components/PartnerLogos';
import { ScrollAnimation } from '@/components/ScrollAnimation';
import { CookieBanner } from '@/components/CookieBanner';
import { ProjectModal } from '@/components/ProjectModal';
import { LanguageSwitcher } from '@/components/LanguageSwitcher';
import { NavPage } from '@/types';
// Social Links
@@ -207,6 +208,54 @@ export default function Home() {
color: "primary",
desc: "Temiz kod prensipleriyle çalışan güçlü algoritma geliştiricisi.",
stats: { java: 90, backend: 95, bugs: 0 }
},
{
name: "Mert Karadeniz",
handle: "PIXEL_MASTER",
role: "UI/UX Designer",
color: "accent",
desc: "Kullanıcı deneyimini piksel piksel mükemmelleştiren tasarımcı.",
stats: { design: 98, ux: 96, creativity: 100 }
},
{
name: "Ege Yılmaz",
handle: "DATA_WIZARD",
role: "Data Engineer",
color: "primary",
desc: "Büyük veriyi anlamlı içgörülere dönüştüren veri büyücüsü.",
stats: { sql: 97, python: 95, ml: 92 }
},
{
name: "Emre Çelik",
handle: "CLOUD_RUNNER",
role: "DevOps Engineer",
color: "accent",
desc: "CI/CD pipeline'larını ve bulut altyapısını yöneten uzman.",
stats: { docker: 98, kubernetes: 96, aws: 94 }
},
{
name: "Bedirhan Demirhan",
handle: "FRONT_LINE",
role: "Web Developer",
color: "primary",
desc: "Modern web teknolojileriyle dinamik arayüzleri inşa eden uzman.",
stats: { react: 95, css: 100, speed: 90 }
},
{
name: "Murat Dursun",
handle: "PIXEL_FLOW",
role: "Web Developer",
color: "accent",
desc: "Kullanıcı deneyimini kusursuz koda döken web geliştirici.",
stats: { ux: 95, code: 92, coffee: 80 }
},
{
name: "Mustafa Çoban",
handle: "NET_DEFENDER",
role: "Cyber Security Expert",
color: "primary",
desc: "Ağ güvenliği ve sızma testlerinde uzmanlaşmış siber güvenlik kalkanı.",
stats: { defense: 99, pentest: 98, firewall: 100 }
}
];
@@ -872,6 +921,11 @@ export default function Home() {
))}
</div>
{/* Language Switcher */}
<div className="hidden md:block">
<LanguageSwitcher />
</div>
{/* Mobile Menu Button */}
<div className="md:hidden z-50">
<button onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)} className="text-white p-2">

168
src/app/twitter-image.tsx Normal file
View File

@@ -0,0 +1,168 @@
import { ImageResponse } from 'next/og';
export const runtime = 'edge';
export const alt = 'ZeroSixLab - Geleceği Kodlayan Laboratuvar';
export const size = {
width: 1200,
height: 630,
};
export const contentType = 'image/png';
export default async function Image() {
return new ImageResponse(
(
<div
style={{
height: '100%',
width: '100%',
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
backgroundColor: '#050B14',
backgroundImage: 'radial-gradient(circle at 25% 25%, #0a192f 0%, #050B14 50%)',
position: 'relative',
}}
>
{/* Grid Pattern */}
<div
style={{
position: 'absolute',
top: 0,
left: 0,
right: 0,
bottom: 0,
backgroundImage: 'linear-gradient(rgba(0,212,255,0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(0,212,255,0.03) 1px, transparent 1px)',
backgroundSize: '50px 50px',
}}
/>
{/* Glow Effect */}
<div
style={{
position: 'absolute',
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
width: '600px',
height: '600px',
background: 'radial-gradient(circle, rgba(0,212,255,0.15) 0%, transparent 70%)',
borderRadius: '50%',
}}
/>
{/* Logo/Brand */}
<div
style={{
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
marginBottom: '30px',
}}
>
{/* Cat Icon */}
<div
style={{
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
width: '120px',
height: '120px',
borderRadius: '24px',
background: 'linear-gradient(135deg, #00D4FF 0%, #0891b2 100%)',
marginRight: '24px',
fontSize: '60px',
}}
>
🐱
</div>
{/* Text */}
<div
style={{
display: 'flex',
flexDirection: 'column',
}}
>
<span
style={{
fontSize: '72px',
fontWeight: 'bold',
color: 'white',
letterSpacing: '-2px',
lineHeight: 1,
}}
>
ZeroSixLab
</span>
<span
style={{
fontSize: '24px',
color: '#00D4FF',
letterSpacing: '8px',
textTransform: 'uppercase',
marginTop: '8px',
}}
>
SOFTWARE LAB
</span>
</div>
</div>
{/* Tagline */}
<div
style={{
fontSize: '32px',
color: '#94A3B8',
marginTop: '20px',
textAlign: 'center',
}}
>
Geleceği Kodlayan Laboratuvar
</div>
{/* Tech Tags */}
<div
style={{
display: 'flex',
gap: '16px',
marginTop: '40px',
}}
>
{['Web', 'Mobil', 'AI', 'Blockchain'].map((tag) => (
<div
key={tag}
style={{
padding: '8px 20px',
borderRadius: '20px',
border: '1px solid rgba(0,212,255,0.3)',
color: '#00D4FF',
fontSize: '18px',
background: 'rgba(0,212,255,0.1)',
}}
>
{tag}
</div>
))}
</div>
{/* Bottom URL */}
<div
style={{
position: 'absolute',
bottom: '40px',
fontSize: '20px',
color: '#64748b',
letterSpacing: '2px',
}}
>
zerosixlab.com
</div>
</div>
),
{
...size,
}
);
}

View File

@@ -0,0 +1,74 @@
'use client';
import { useState, useRef, useEffect } from 'react';
import { useLocale } from '@/context/LocaleContext';
import { locales, localeNames, localeFlags, Locale } from '@/i18n/config';
export function LanguageSwitcher() {
const { locale, setLocale } = useLocale();
const [isOpen, setIsOpen] = useState(false);
const dropdownRef = useRef<HTMLDivElement>(null);
// Close dropdown when clicking outside
useEffect(() => {
function handleClickOutside(event: MouseEvent) {
if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {
setIsOpen(false);
}
}
document.addEventListener('mousedown', handleClickOutside);
return () => document.removeEventListener('mousedown', handleClickOutside);
}, []);
const handleSelect = (newLocale: Locale) => {
setLocale(newLocale);
setIsOpen(false);
};
return (
<div className="relative" ref={dropdownRef}>
<button
onClick={() => setIsOpen(!isOpen)}
className="flex items-center gap-2 px-3 py-2 bg-white/5 border border-white/10 rounded-lg hover:border-zsl-primary/50 transition-all font-mono text-sm"
aria-label="Dil seçin"
aria-expanded={isOpen}
>
<span className="text-lg">{localeFlags[locale]}</span>
<span className="text-white hidden sm:inline">{localeNames[locale]}</span>
<svg
className={`w-4 h-4 text-slate-400 transition-transform duration-200 ${isOpen ? 'rotate-180' : ''}`}
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
</svg>
</button>
{isOpen && (
<div className="absolute right-0 mt-2 w-40 bg-[#0a0f1a] border border-white/10 rounded-lg shadow-xl overflow-hidden z-50 animate-in fade-in slide-in-from-top-2 duration-200">
{locales.map((loc) => (
<button
key={loc}
onClick={() => handleSelect(loc)}
className={`w-full flex items-center gap-3 px-4 py-3 font-mono text-sm transition-colors ${
locale === loc
? 'bg-zsl-primary/20 text-zsl-primary'
: 'text-slate-300 hover:bg-white/5 hover:text-white'
}`}
>
<span className="text-lg">{localeFlags[loc]}</span>
<span>{localeNames[loc]}</span>
{locale === loc && (
<svg className="w-4 h-4 ml-auto" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" />
</svg>
)}
</button>
))}
</div>
)}
</div>
);
}

View File

@@ -0,0 +1,61 @@
'use client';
import { createContext, useContext, useState, useCallback, useEffect, ReactNode } from 'react';
import { Locale, defaultLocale, locales } from '@/i18n/config';
import { getTranslations } from '@/i18n';
import { TranslationKeys } from '@/i18n/locales/tr';
interface LocaleContextType {
locale: Locale;
setLocale: (locale: Locale) => void;
t: TranslationKeys;
}
const LocaleContext = createContext<LocaleContextType | undefined>(undefined);
const LOCALE_STORAGE_KEY = 'zsl-locale';
export function LocaleProvider({ children }: { children: ReactNode }) {
const [locale, setLocaleState] = useState<Locale>(defaultLocale);
const [translations, setTranslations] = useState<TranslationKeys>(getTranslations(defaultLocale));
// Load locale from localStorage on mount
useEffect(() => {
const savedLocale = localStorage.getItem(LOCALE_STORAGE_KEY) as Locale | null;
if (savedLocale && locales.includes(savedLocale)) {
setLocaleState(savedLocale);
setTranslations(getTranslations(savedLocale));
} else {
// Try to detect browser language
const browserLang = navigator.language.split('-')[0] as Locale;
if (locales.includes(browserLang)) {
setLocaleState(browserLang);
setTranslations(getTranslations(browserLang));
}
}
}, []);
const setLocale = useCallback((newLocale: Locale) => {
if (locales.includes(newLocale)) {
setLocaleState(newLocale);
setTranslations(getTranslations(newLocale));
localStorage.setItem(LOCALE_STORAGE_KEY, newLocale);
// Update html lang attribute
document.documentElement.lang = newLocale;
}
}, []);
return (
<LocaleContext.Provider value={{ locale, setLocale, t: translations }}>
{children}
</LocaleContext.Provider>
);
}
export function useLocale() {
const context = useContext(LocaleContext);
if (context === undefined) {
throw new Error('useLocale must be used within a LocaleProvider');
}
return context;
}

14
src/i18n/config.ts Normal file
View File

@@ -0,0 +1,14 @@
export const locales = ['tr', 'en'] as const;
export const defaultLocale = 'tr' as const;
export type Locale = (typeof locales)[number];
export const localeNames: Record<Locale, string> = {
tr: 'Türkçe',
en: 'English',
};
export const localeFlags: Record<Locale, string> = {
tr: '🇹🇷',
en: '🇬🇧',
};

31
src/i18n/index.ts Normal file
View File

@@ -0,0 +1,31 @@
import { tr } from './locales/tr';
import { en } from './locales/en';
import { Locale, defaultLocale } from './config';
const translations = {
tr,
en,
} as const;
export function getTranslations(locale: Locale = defaultLocale) {
return translations[locale] || translations[defaultLocale];
}
export function t(locale: Locale, key: string): string {
const keys = key.split('.');
let value: unknown = translations[locale] || translations[defaultLocale];
for (const k of keys) {
if (value && typeof value === 'object' && k in value) {
value = (value as Record<string, unknown>)[k];
} else {
return key; // Return key if translation not found
}
}
return typeof value === 'string' ? value : key;
}
export * from './config';
export * from './locales/tr';
export * from './locales/en';

142
src/i18n/locales/en.ts Normal file
View File

@@ -0,0 +1,142 @@
import { TranslationKeys } from './tr';
export const en: TranslationKeys = {
// Navigation
nav: {
home: 'Home',
services: 'Services',
projects: 'Projects',
about: 'About',
blog: 'Lab Notes',
contact: 'Contact',
},
// Hero Section
hero: {
badge: 'NEXT-GEN SOFTWARE LABORATORY',
title: 'Coding the',
titleHighlight: 'Future',
description: 'Ankara-based R&D laboratory with global vision. We accelerate your digital transformation with web, mobile, AI, and blockchain technologies.',
cta: 'Start Your Project',
ctaSecondary: 'Explore Our Solutions',
},
// Services Section
services: {
badge: 'OUR EXPERTISE',
title: 'Technology Solutions',
description: 'We build the digital future of your business with cutting-edge tools and methodologies.',
items: {
web: {
title: 'Web Development',
description: 'High-performance, SEO-friendly web applications with Next.js, React, and modern technologies.',
},
mobile: {
title: 'Mobile Apps',
description: 'Native-performance cross-platform applications for iOS and Android with React Native and Flutter.',
},
ai: {
title: 'Artificial Intelligence',
description: 'Machine learning, natural language processing, and computer vision solutions.',
},
blockchain: {
title: 'Blockchain',
description: 'Smart contracts, DeFi protocols, and Web3 integrations.',
},
cloud: {
title: 'Cloud & DevOps',
description: 'Scalable infrastructure and CI/CD pipelines on AWS, Azure, and GCP.',
},
security: {
title: 'Cybersecurity',
description: 'Penetration testing, security audits, and secure software development.',
},
},
},
// Projects Section
projects: {
badge: 'PORTFOLIO',
title: 'Featured Projects',
viewAll: 'View All Projects',
viewProject: 'View Project',
},
// Stats Section
stats: {
projects: 'Completed Projects',
partners: 'Business Partners',
experience: 'Years Experience',
success: 'Project Success Rate',
},
// Testimonials Section
testimonials: {
badge: 'TESTIMONIALS',
title: 'What Our Partners Say?',
},
// FAQ Section
faq: {
badge: 'FAQ',
title: 'Frequently Asked Questions',
},
// About Section
about: {
badge: 'ABOUT US',
title: 'Who is ZeroSixLab?',
description: 'We are an Ankara-based software and R&D laboratory with a global vision. We lead digital transformation for businesses using modern technologies.',
mission: 'Our Mission',
missionText: 'To democratize technology and unlock the digital potential of businesses of all sizes.',
vision: 'Our Vision',
visionText: 'To contribute to Turkey\'s presence on the global technology stage.',
},
// Contact Section
contact: {
badge: 'CONTACT',
title: 'Let\'s Discuss Your Project',
description: 'Planning a new project? We\'re excited to hear your ideas and discuss how we can help.',
form: {
name: 'Name',
email: 'Email',
subject: 'Subject',
message: 'Message',
send: 'Send Message',
sending: 'Sending...',
success: 'Your message has been sent successfully!',
error: 'Failed to send message. Please try again.',
},
},
// Footer
footer: {
description: 'Ankara-based, globally-minded next-generation software and R&D laboratory.',
explore: 'Explore',
services: 'Services',
contact: 'Contact Us',
rights: 'All Rights Reserved.',
systemStatus: 'System Status',
operational: 'All Systems Operational',
},
// Common
common: {
learnMore: 'Learn More',
getStarted: 'Get Started',
viewDetails: 'View Details',
backToHome: 'Back to Home',
loading: 'Loading...',
error: 'Error',
success: 'Success',
},
// 404 Page
notFound: {
title: 'Page Not Found',
description: 'The page you\'re looking for may have been moved, deleted, or never existed.',
backHome: 'Back to Home',
goBack: 'Go Back',
},
};

142
src/i18n/locales/tr.ts Normal file
View File

@@ -0,0 +1,142 @@
export const tr = {
// Navigation
nav: {
home: 'Ana Sayfa',
services: 'Çözümler',
projects: 'Projeler',
about: 'Hakkımızda',
blog: 'Lab Notları',
contact: 'İletişim',
},
// Hero Section
hero: {
badge: 'YENİ NESİL YAZILIM LABORATUVARI',
title: 'Geleceği',
titleHighlight: 'Kodluyoruz',
description: 'Ankara merkezli, global vizyonlu Ar-Ge laboratuvarı. Web, mobil, yapay zeka ve blockchain teknolojileriyle dijital dönüşümünüzü hızlandırıyoruz.',
cta: 'Projeni Başlat',
ctaSecondary: 'Çözümlerimizi Keşfet',
},
// Services Section
services: {
badge: 'UZMANLIK ALANLARIMIZ',
title: 'Teknoloji Çözümlerimiz',
description: 'Son teknoloji araçlar ve metodolojilerle işletmenizin dijital geleceğini inşa ediyoruz.',
items: {
web: {
title: 'Web Geliştirme',
description: 'Next.js, React ve modern teknolojilerle yüksek performanslı, SEO uyumlu web uygulamaları.',
},
mobile: {
title: 'Mobil Uygulama',
description: 'React Native ve Flutter ile iOS ve Android için native performanslı cross-platform uygulamalar.',
},
ai: {
title: 'Yapay Zeka',
description: 'Makine öğrenimi, doğal dil işleme ve bilgisayarlı görü çözümleri.',
},
blockchain: {
title: 'Blockchain',
description: 'Akıllı sözleşmeler, DeFi protokolleri ve Web3 entegrasyonları.',
},
cloud: {
title: 'Cloud & DevOps',
description: 'AWS, Azure, GCP üzerinde ölçeklenebilir altyapı ve CI/CD pipeline\'ları.',
},
security: {
title: 'Siber Güvenlik',
description: 'Penetrasyon testleri, güvenlik denetimleri ve güvenli yazılım geliştirme.',
},
},
},
// Projects Section
projects: {
badge: 'PORTFÖLYİMİZ',
title: 'Öne Çıkan Projeler',
viewAll: 'Tüm Projeleri Gör',
viewProject: 'Projeyi İncele',
},
// Stats Section
stats: {
projects: 'Tamamlanan Proje',
partners: 'İş Ortağı',
experience: 'Yıllık Deneyim',
success: 'Proje Başarı Oranı',
},
// Testimonials Section
testimonials: {
badge: 'REFERANSLAR',
title: 'İş Ortaklarımız Ne Diyor?',
},
// FAQ Section
faq: {
badge: 'SSS',
title: 'Sıkça Sorulan Sorular',
},
// About Section
about: {
badge: 'HAKKIMIZDA',
title: 'ZeroSixLab Kimdir?',
description: 'Ankara merkezli, global vizyonlu bir yazılım ve Ar-Ge laboratuvarıyız. Modern teknolojilerle işletmelerin dijital dönüşümüne öncülük ediyoruz.',
mission: 'Misyonumuz',
missionText: 'Teknolojiyi demokratikleştirmek ve her ölçekteki işletmenin dijital potansiyelini açığa çıkarmak.',
vision: 'Vizyonumuz',
visionText: 'Türkiye\'nin global teknoloji sahnesinde söz sahibi olmasına katkıda bulunmak.',
},
// Contact Section
contact: {
badge: 'İLETİŞİM',
title: 'Projenizi Konuşalım',
description: 'Yeni bir proje mi planlıyorsunuz? Fikirlerinizi dinlemek ve size nasıl yardımcı olabileceğimizi konuşmak için sabırsızlanıyoruz.',
form: {
name: 'İsim',
email: 'E-posta',
subject: 'Konu',
message: 'Mesaj',
send: 'Mesaj Gönder',
sending: 'Gönderiliyor...',
success: 'Mesajınız başarıyla gönderildi!',
error: 'Mesaj gönderilemedi. Lütfen tekrar deneyin.',
},
},
// Footer
footer: {
description: 'Ankara merkezli, global vizyonlu yeni nesil yazılım ve Ar-Ge laboratuvarı.',
explore: 'Keşfet',
services: 'Hizmetler',
contact: 'Bize Ulaşın',
rights: 'Tüm Hakları Saklıdır.',
systemStatus: 'Sistem Durumu',
operational: 'Tüm Sistemler Çalışıyor',
},
// Common
common: {
learnMore: 'Daha Fazla',
getStarted: 'Başla',
viewDetails: 'Detayları Gör',
backToHome: 'Ana Sayfaya Dön',
loading: 'Yükleniyor...',
error: 'Hata',
success: 'Başarılı',
},
// 404 Page
notFound: {
title: 'Sayfa Bulunamadı',
description: 'Aradığınız sayfa taşınmış, silinmiş veya hiç var olmamış olabilir.',
backHome: 'Ana Sayfaya Dön',
goBack: 'Geri Git',
},
} as const;
export type TranslationKeys = typeof tr;