================================================================================
MODERN PORTFOLIO WEBSITE GELİŞTİRME REHBERİ
Berat Efe Karabaş Portfolio Projesi
================================================================================
🚀 SIFIRDAN PROFESYONel PORTFOLIO WEBSITE OLUŞTURMA KILAVUZU
Bu detaylı rehber, modern web teknolojilerini kullanarak profesyonel bir
portfolio website'inin nasıl oluşturulacağını adım adım anlatmaktadır.
📅 Son Güncelleme: Ocak 2024
👨💻 Hazırlayan: Berat Efe Karabaş
🌐 Demo: https://efekrbs.github.io
================================================================================
İÇİNDEKİLER
================================================================================
1. Giriş ve Proje Özeti
2. Kullanılan Teknolojiler
3. Proje Planlama
4. Geliştirme Ortamı Kurulumu
5. HTML Yapısının Oluşturulması
6. CSS ile Tasarım
7. JavaScript İnteraktifliği
8. Responsive Tasarım
9. Performans Optimizasyonu
10. GitHub Pages ile Yayınlama
11. Bakım ve Güncelleme
12. Sonuç ve İpuçları
================================================================================
1. GİRİŞ VE PROJE ÖZETİ
================================================================================
Bu rehber, modern web teknolojilerini kullanarak profesyonel bir portfolio
website'inin nasıl oluşturulacağını adım adım anlatmaktadır.
🎯 PROJE HEDEFLERİ:
• Modern ve profesyonel tasarım
• Responsive (mobil uyumlu) yapı
• Hızlı yüklenme ve performans
• SEO optimizasyonu
• Accessibility (erişilebilirlik) desteği
• Dark/Light mode özelliği
🎨 TASARIM ÖZELLİKLERİ:
• Glassmorphism efektleri (cam görünümü)
• Smooth animasyonlar ve geçişler
• Modern tipografi ve renk paleti
• Interactive hover efektleri
• Typing animation
• Progress bar animasyonları
🔧 TEKNİK ÖZELLİKLER:
• Semantic HTML5
• CSS Grid ve Flexbox
• JavaScript ES6+
• CSS Custom Properties (değişkenler)
• Mobile-first responsive design
• Performance optimizasyonu
================================================================================
2. KULLANILAN TEKNOLOJİLER
================================================================================
🌐 FRONTEND TEKNOLOJİLERİ:
├── HTML5: Semantic markup ve modern HTML özellikler
├── CSS3: Grid, Flexbox, Custom Properties, Animasyonlar
└── JavaScript ES6+: Modern JavaScript özellikleri
🛠️ ARAÇLAR VE PLATFORMLAR:
├── Visual Studio Code: Ana kod editörü
├── Git: Versiyon kontrol sistemi
├── GitHub: Kod repository ve collaboration
└── GitHub Pages: Ücretsiz web hosting
🎨 TASARIM PRENSİPLERİ:
├── Mobile-First: Önce mobil, sonra masaüstü
├── Progressive Enhancement: Aşamalı iyileştirme
├── Accessibility: Erişilebilirlik standartları
└── Performance: Yükleme hızı optimizasyonu
📚 REFERANS KAYNAKLAR:
├── MDN Web Docs (developer.mozilla.org)
├── CSS-Tricks (css-tricks.com)
├── W3Schools (w3schools.com)
└── Can I Use (caniuse.com)
================================================================================
3. PROJE PLANLAMA
================================================================================
📋 SAYFA YAPISI PLANLAMASI:
Portfolio Website Yapısı:
├── Ana Sayfa (index.html)
│ ├── Header (Profil bilgileri, sosyal linkler)
│ ├── Hakkımda bölümü (kişisel bilgiler)
│ ├── Yetenekler (programming skills)
│ ├── Projeler showcase (portfolio örnekleri)
│ ├── Blog yazıları preview (latest posts)
│ ├── İletişim bilgileri (contact form)
│ └── Footer (copyright, links)
├── Blog bölümü (/blog/)
│ ├── Blog ana sayfa (post listesi)
│ └── Tekil blog yazıları (individual posts)
├── CV dosyası (/assets/)
└── Statik dosyalar (images/, styles.css)
🎨 TASARIM SİSTEMİ:
Renk Paleti:
Dark Theme:
- Primary Background: #0f172a (Koyu lacivert)
- Secondary Background: #1e293b (Orta lacivert)
- Tertiary Background: #334155 (Açık gri)
- Primary Text: #e2e8f0 (Açık gri)
- Secondary Text: #cbd5e1 (Orta gri)
- Accent Blue: #3b82f6 (Mavi)
- Accent Purple: #8b5cf6 (Mor)
- Accent Pink: #ec4899 (Pembe)
Light Theme:
- Primary Background: #f8fafc (Açık beyaz)
- Secondary Background: #e2e8f0 (Açık gri)
- Tertiary Background: #cbd5e1 (Orta gri)
- Primary Text: #1e293b (Koyu gri)
- Secondary Text: #475569 (Orta koyu gri)
Typography:
Font Family: 'Inter', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif
Font Sizes:
- h1: 3em (48px) - Ana başlık
- h2: 2em (32px) - Bölüm başlıkları
- h3: 1.5em (24px) - Alt başlıklar
- Body: 1em (16px) - Normal metin
- Small: 0.9em (14px) - Küçük metin
Font Weights:
- Light: 300 (subtitle'lar için)
- Regular: 400 (normal metin)
- Medium: 500 (emphasis)
- Semibold: 600 (önemli metinler)
- Bold: 700 (başlıklar)
================================================================================
4. GELİŞTİRME ORTAMI KURULUMU
================================================================================
🔧 ADIM 1: GITHUB REPOSITORY OLUŞTURMA
1. GitHub.com'a giriş yapın
2. "New repository" butonuna tıklayın
3. Repository adını "username.github.io" şeklinde yazın
Örnek: efekrbs.github.io
4. "Public" seçeneğini işaretleyin
5. "Initialize with README" seçeneğini işaretleyin
6. "Create repository" butonuna tıklayın
⚠️ ÖNEMLİ: Repository adının "username.github.io" formatında olması,
GitHub Pages'in otomatik olarak bu domain'de yayınlamasını sağlar.
🔧 ADIM 2: LOCAL GELİŞTİRME ORTAMI
Terminal veya Command Prompt'ta şu komutları çalıştırın:
# Repository'yi bilgisayarınıza klonlayın
git clone https://github.com/username/username.github.io.git
cd username.github.io
# İlk dosyaları oluşturun
touch index.html
touch styles.css
touch README.md
# İlk commit'i yapın
git add .
git commit -m "🎉 İlk commit: Proje başlatıldı"
git push origin main
🔧 ADIM 3: VS CODE KURULUMU VE EXTENSİONS
Önerilen VS Code Extensions:
├── Live Server (Canlı preview için)
├── Prettier (Kod formatlama)
├── Auto Rename Tag (HTML tag editleme)
├── Bracket Pair Colorizer (Parantez renklendirme)
├── CSS Peek (CSS sınıf navigasyonu)
├── HTML CSS Support (IntelliSense desteği)
├── GitLens (Git özellikleri)
├── Emmet (HTML/CSS hızlı yazım)
└── Color Highlight (Renk kodlarını gösterme)
🔧 ADIM 4: PROJE KLASÖR YAPISI
Proje klasör yapısını şu şekilde organize edin:
efekrbs.github.io/
├── index.html # Ana sayfa
├── styles.css # Ana CSS dosyası
├── README.md # Proje dokümantasyonu
├── images/ # Resim dosyaları
│ └── pp.jpg # Profil fotoğrafı
├── assets/ # Diğer dosyalar
│ └── cv.pdf # CV dosyası
├── blog/ # Blog bölümü
│ ├── index.html # Blog ana sayfa
│ ├── blog.css # Blog özel CSS'i
│ └── posts/ # Blog yazıları
└── .gitignore # Git ignore dosyası
================================================================================
5. HTML YAPISININ OLUŞTURULMASI
================================================================================
🏗️ TEMEL HTML YAPıSı:
Berat Efe Karabaş - Portfolio
🏗️ HEADER BÖLÜMÜ DETAYI:
🏗️ SKILLS BÖLÜMÜ:
🛠️ Yeteneklerim
🧮
Algorithm Development
80%
🏗️ PROJECTS BÖLÜMÜ:
🚀 Projelerim
🚀
Proje Adı
Proje açıklaması burada yer alacak...
Python
Algorithm
================================================================================
6. CSS İLE TASARIM
================================================================================
🎨 CSS CUSTOM PROPERTIES (DEĞİŞKENLER):
/* Temel CSS reset ve değişkenler */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
:root {
/* Dark Theme Colors */
--primary-bg: #0f172a;
--secondary-bg: #1e293b;
--tertiary-bg: #334155;
--primary-text: #e2e8f0;
--secondary-text: #cbd5e1;
--accent-blue: #3b82f6;
--accent-purple: #8b5cf6;
--accent-pink: #ec4899;
--border-color: rgba(59, 130, 246, 0.2);
--card-bg: rgba(15, 23, 42, 0.6);
}
/* Light Theme Variables */
[data-theme="light"] {
--primary-bg: #f8fafc;
--secondary-bg: #e2e8f0;
--tertiary-bg: #cbd5e1;
--primary-text: #1e293b;
--secondary-text: #475569;
--card-bg: rgba(255, 255, 255, 0.8);
--border-color: rgba(59, 130, 246, 0.3);
}
🎨 TEMEL BODY STİLLERİ:
body {
font-family: 'Inter', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: var(--primary-text);
background: linear-gradient(135deg,
var(--primary-bg) 0%,
var(--secondary-bg) 50%,
var(--tertiary-bg) 100%);
min-height: 100vh;
transition: all 0.3s ease;
}
/* Animated background particles */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image:
radial-gradient(circle at 20% 50%, rgba(59, 130, 246, 0.1) 0%, transparent 50%),
radial-gradient(circle at 80% 20%, rgba(147, 51, 234, 0.1) 0%, transparent 50%),
radial-gradient(circle at 40% 80%, rgba(236, 72, 153, 0.05) 0%, transparent 50%);
pointer-events: none;
z-index: -1;
animation: float 20s ease-in-out infinite;
}
@keyframes float {
0%, 100% { transform: translateY(0px) rotate(0deg); }
50% { transform: translateY(-20px) rotate(180deg); }
}
🎨 GLASSMORPHISM EFEKTLERİ:
.section {
background: var(--card-bg);
backdrop-filter: blur(20px);
border: 1px solid var(--border-color);
border-radius: 20px;
padding: 40px;
margin-bottom: 30px;
box-shadow:
0 20px 40px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.05);
transition: all 0.4s ease;
}
.section:hover {
transform: translateY(-5px);
box-shadow:
0 30px 60px rgba(0, 0, 0, 0.3),
0 0 0 1px var(--border-color);
border-color: var(--accent-blue);
}
🎨 CSS GRID VE FLEXBOX LAYOUTS:
/* Container Layout */
.container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
/* Skills Grid Layout */
.skills {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 25px;
margin-top: 30px;
}
/* Projects Grid Layout */
.projects-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 30px;
margin-top: 30px;
}
/* Flexbox for Social Links */
.social-links {
display: flex;
justify-content: center;
gap: 20px;
margin: 20px 0;
}
🎨 ANIMASYONLAR VE TRANSİTİONS:
/* Smooth Transitions */
.skill-item {
background: linear-gradient(135deg, var(--secondary-bg), var(--tertiary-bg));
border: 1px solid var(--border-color);
color: var(--primary-text);
padding: 30px 25px;
border-radius: 15px;
text-align: center;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
cursor: pointer;
}
.skill-item::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(59, 130, 246, 0.1), transparent);
transition: left 0.6s ease;
}
.skill-item:hover::before {
left: 100%;
}
.skill-item:hover {
transform: translateY(-5px) scale(1.03);
border-color: rgba(59, 130, 246, 0.5);
box-shadow:
0 12px 25px rgba(59, 130, 246, 0.2),
0 5px 10px rgba(0, 0, 0, 0.1);
color: white;
}
/* Typing Animation */
@keyframes blink {
0%, 50% { opacity: 1; }
51%, 100% { opacity: 0; }
}
.cursor {
animation: blink 1s infinite;
color: var(--accent-blue);
}
/* Progress Bar Animation */
.skill-progress {
height: 100%;
background: linear-gradient(90deg, var(--accent-blue), var(--accent-purple));
border-radius: 10px;
width: 0%;
transition: width 2s ease-in-out;
position: relative;
}
.skill-progress::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
animation: shimmerBar 2s infinite;
}
@keyframes shimmerBar {
0% { transform: translateX(-100%); }
100% { transform: translateX(100%); }
}
================================================================================
7. JAVASCRIPT İNTERAKTİFLİĞİ
================================================================================
⚡ THEME TOGGLE FONKSİYONU:
// Theme Toggle Function
function toggleTheme() {
const currentTheme = document.documentElement.getAttribute('data-theme');
const newTheme = currentTheme === 'light' ? 'dark' : 'light';
document.documentElement.setAttribute('data-theme', newTheme);
localStorage.setItem('theme', newTheme);
// Update button icon
const themeBtn = document.querySelector('.theme-btn');
themeBtn.textContent = newTheme === 'light' ? '🌙' : '☀️';
}
// Load saved theme on page load
document.addEventListener('DOMContentLoaded', function() {
const savedTheme = localStorage.getItem('theme') || 'dark';
document.documentElement.setAttribute('data-theme', savedTheme);
const themeBtn = document.querySelector('.theme-btn');
if (themeBtn) {
themeBtn.textContent = savedTheme === 'light' ? '🌙' : '☀️';
}
});
⚡ TYPING ANIMATION:
// Typing Animation
const titles = [
"Bilgisayar Mühendisliği Öğrencisi",
"Python Developer",
"Algorithm Enthusiast",
"Problem Solver"
];
let currentTitle = 0;
let currentChar = 0;
let isDeleting = false;
function typeWriter() {
const typingElement = document.getElementById('typing-text');
if (!typingElement) return;
const currentText = titles[currentTitle];
if (isDeleting) {
typingElement.textContent = currentText.substring(0, currentChar - 1);
currentChar--;
} else {
typingElement.textContent = currentText.substring(0, currentChar + 1);
currentChar++;
}
if (!isDeleting && currentChar === currentText.length) {
setTimeout(() => isDeleting = true, 2000);
} else if (isDeleting && currentChar === 0) {
isDeleting = false;
currentTitle = (currentTitle + 1) % titles.length;
}
const typingSpeed = isDeleting ? 50 : 100;
setTimeout(typeWriter, typingSpeed);
}
// Start typing animation on page load
document.addEventListener('DOMContentLoaded', typeWriter);
⚡ SKILL PROGRESS ANIMATION:
// Skill Progress Animation
function animateSkillBars() {
const skillBars = document.querySelectorAll('.skill-progress');
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const progressBar = entry.target;
const width = progressBar.getAttribute('data-width');
progressBar.style.width = width + '%';
}
});
}, {
threshold: 0.5,
rootMargin: '0px 0px -100px 0px'
});
skillBars.forEach(bar => observer.observe(bar));
}
⚡ SMOOTH SCROLLING:
// Smooth scrolling for anchor links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});
⚡ FORM VALİDATİON (İletişim formu için):
// Contact Form Validation
function validateContactForm() {
const form = document.getElementById('contact-form');
if (!form) return;
form.addEventListener('submit', function(e) {
e.preventDefault();
const name = document.getElementById('name').value.trim();
const email = document.getElementById('email').value.trim();
const message = document.getElementById('message').value.trim();
let isValid = true;
// Name validation
if (name.length < 2) {
showError('name', 'İsim en az 2 karakter olmalıdır');
isValid = false;
} else {
clearError('name');
}
// Email validation
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
showError('email', 'Geçerli bir email adresi giriniz');
isValid = false;
} else {
clearError('email');
}
// Message validation
if (message.length < 10) {
showError('message', 'Mesaj en az 10 karakter olmalıdır');
isValid = false;
} else {
clearError('message');
}
if (isValid) {
// Form is valid, you can submit it
showSuccessMessage('Mesajınız başarıyla gönderildi!');
form.reset();
}
});
}
function showError(fieldId, message) {
const field = document.getElementById(fieldId);
const formGroup = field.closest('.form-group');
formGroup.classList.add('error');
let errorElement = formGroup.querySelector('.form-error');
if (!errorElement) {
errorElement = document.createElement('span');
errorElement.className = 'form-error';
formGroup.appendChild(errorElement);
}
errorElement.textContent = message;
errorElement.classList.add('show');
}
function clearError(fieldId) {
const field = document.getElementById(fieldId);
const formGroup = field.closest('.form-group');
formGroup.classList.remove('error');
const errorElement = formGroup.querySelector('.form-error');
if (errorElement) {
errorElement.classList.remove('show');
}
}
⚡ INITIALIZE ALL FEATURES:
// Initialize all features when DOM is loaded
document.addEventListener('DOMContentLoaded', function() {
// Initialize all animations and interactions
animateSkillBars();
validateContactForm();
// Add loading animation
document.body.classList.add('loaded');
// Initialize any other features
console.log('Portfolio website loaded successfully!');
});
================================================================================
8. RESPONSIVE TASARIM
================================================================================
📱 MOBILE-FIRST APPROACH:
/* Base Mobile Styles (320px+) */
.container {
padding: 15px;
}
h1 {
font-size: 2.2em;
}
.profile-img {
width: 150px;
height: 150px;
font-size: 60px;
}
.skills {
grid-template-columns: 1fr;
}
.projects-grid {
grid-template-columns: 1fr;
}
.blog-grid {
grid-template-columns: 1fr;
}
.section {
padding: 25px 20px;
}
header {
padding: 30px 20px;
}
.social-links {
flex-wrap: wrap;
}
.theme-toggle {
position: relative;
top: auto;
right: auto;
text-align: center;
margin-bottom: 20px;
}
📱 TABLET STYLES (768px+):
@media (min-width: 768px) {
.container {
padding: 20px;
}
h1 {
font-size: 2.8em;
}
.profile-img {
width: 180px;
height: 180px;
font-size: 70px;
}
.skills {
grid-template-columns: repeat(2, 1fr);
}
.projects-grid {
grid-template-columns: repeat(2, 1fr);
}
.section {
padding: 35px 30px;
}
header {
padding: 40px 30px;
}
.theme-toggle {
position: absolute;
top: 20px;
right: 20px;
}
}
🖥️ DESKTOP STYLES (1024px+):
@media (min-width: 1024px) {
.container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
h1 {
font-size: 3em;
}
.skills {
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
}
.projects-grid {
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
}
.blog-grid {
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
}
.section {
padding: 40px;
}
header {
padding: 50px 40px;
}
}
🖥️ LARGE DESKTOP (1440px+):
@media (min-width: 1440px) {
.container {
max-width: 1400px;
}
.skills {
grid-template-columns: repeat(4, 1fr);
}
.projects-grid {
grid-template-columns: repeat(3, 1fr);
}
}
📱 MOBILE UX İYİLEŞTİRMELERİ:
/* Touch-friendly button sizes */
@media (max-width: 768px) {
.btn {
padding: 18px 30px;
font-size: 1.1em;
min-height: 48px;
}
.social-link {
width: 60px;
height: 60px;
font-size: 1.5em;
}
.theme-btn {
width: 60px;
height: 60px;
font-size: 24px;
}
/* Improved form inputs */
input, textarea, select {
padding: 18px 20px;
font-size: 16px; /* Prevents zoom on iOS */
min-height: 48px;
}
/* Better spacing for mobile */
.skill-item {
padding: 25px 20px;
}
.project-card {
margin-bottom: 20px;
}
/* Mobile navigation improvements */
.contact-info {
flex-direction: column;
text-align: center;
gap: 15px;
}
.contact-item {
flex-direction: column;
text-align: center;
gap: 15px;
}
}
================================================================================
9. PERFORMANS OPTİMİZASYONU
================================================================================
⚡ CSS PERFORMANCE:
/* Performance Optimizations */
.skill-progress,
.typing-animation,
.profile-img {
will-change: transform;
}
/* Use transform instead of changing layout properties */
.skill-item:hover {
transform: translateY(-5px) scale(1.03);
/* Instead of changing margin or padding */
}
/* Use opacity for fade effects */
.loading-element {
opacity: 0;
transition: opacity 0.3s ease;
}
.loading-element.loaded {
opacity: 1;
}
/* Efficient animations */
@keyframes efficientFloat {
0%, 100% { transform: translate3d(0, 0, 0); }
50% { transform: translate3d(0, -10px, 0); }
}
/* Use GPU acceleration */
.hardware-accelerated {
transform: translateZ(0);
backface-visibility: hidden;
perspective: 1000px;
}
⚡ JAVASCRIPT PERFORMANCE:
// Debounced scroll handler
function debounce(func, wait) {
let timeout;
return function executedFunction(...args) {
const later = () => {
clearTimeout(timeout);
func(...args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}
// Optimized scroll event
const handleScroll = debounce(() => {
// Scroll handling code here
updateScrollProgress();
}, 16); // ~60fps
window.addEventListener('scroll', handleScroll);
// Intersection Observer for better performance
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const fadeInObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('fade-in');
fadeInObserver.unobserve(entry.target);
}
});
}, observerOptions);
// Observe elements for fade-in animation
document.querySelectorAll('.section').forEach(section => {
fadeInObserver.observe(section);
});
⚡ IMAGE OPTIMIZATION:
⚡ ACCESSIBILITY İYİLEŞTİRMELERİ:
/* Focus improvements */
button:focus,
a:focus,
input:focus,
textarea:focus {
outline: 2px solid var(--accent-blue);
outline-offset: 2px;
}
/* Focus visible (modern browsers) */
button:focus-visible,
a:focus-visible {
outline: 2px solid var(--accent-blue);
outline-offset: 2px;
}
/* Reduced motion support */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
/* High contrast mode support */
@media (prefers-contrast: high) {
:root {
--border-color: #ffffff;
--primary-text: #ffffff;
--secondary-text: #ffffff;
}
}
/* Dark mode preference */
@media (prefers-color-scheme: dark) {
:root {
/* Use dark theme by default */
}
}
⚡ SEO OPTİMİZASYONU:
Berat Efe Karabaş - Bilgisayar Mühendisliği Öğrencisi Portfolio
================================================================================
10. GITHUB PAGES İLE YAYINLAMA
================================================================================
🚀 GITHUB PAGES KURULUMU:
Adım 1: Repository Ayarları
1. GitHub repository'nizde "Settings" sekmesine gidin
2. Sol menüden "Pages" seçeneğini bulun
3. "Source" kısmında "Deploy from a branch" seçin
4. "Branch" kısmında "main" seçin
5. Folder olarak "/ (root)" seçin
6. "Save" butonuna tıklayın
Otomatik deployment özellikleri:
- Her push sonrası site otomatik güncellenir
- Deployment süreci 1-2 dakika sürer
- Actions sekmesinden deployment durumunu takip edebilirsiniz
- Hata durumunda email bildirimi gelir
🚀 CUSTOM DOMAIN (Opsiyonel):
Custom Domain Kurulumu:
1. Repository root'unda CNAME dosyası oluşturun:
echo "yourdomain.com" > CNAME
2. Domain sağlayıcınızda DNS ayarları:
A Records:
- 185.199.108.153
- 185.199.109.153
- 185.199.110.153
- 185.199.111.153
VEYA
CNAME Record: username.github.io
3. GitHub Pages settings'de "Custom domain" kısmına
domain'inizi yazın ve "Save" edin
4. "Enforce HTTPS" seçeneğini aktifleştirin
5. DNS propagation için 24-48 saat bekleyin
🚀 GIT WORKFLOW:
# Günlük development workflow
git status # Değişiklikleri kontrol et
git add . # Tüm değişiklikleri stage'e al
git commit -m "🎨 Feature açıklaması" # Commit yap
git push origin main # GitHub'a gönder
# Faydalı git komutları
git log --oneline # Commit geçmişini gör
git diff # Değişiklikleri karşılaştır
git checkout -- filename # Dosyayı eski haline getir
git reset HEAD filename # Stage'den dosyayı çıkar
# Branch ile çalışma (advanced)
git checkout -b feature-name # Yeni branch oluştur
git checkout main # Ana branch'e geç
git merge feature-name # Branch'i merge et
git branch -d feature-name # Branch'i sil
# Git commit message conventions
git commit -m "🎉 feat: Yeni özellik eklendi"
git commit -m "🐛 fix: Bug düzeltildi"
git commit -m "📚 docs: Dokümantasyon güncellendi"
git commit -m "🎨 style: CSS düzenlemeleri"
git commit -m "♻️ refactor: Kod refactor edildi"
git commit -m "⚡ perf: Performans iyileştirmesi"
git commit -m "✅ test: Test eklendi"
🚀 DEPLOYMENT OTOMATİK TEST:
# GitHub Actions workflow (.github/workflows/deploy.yml)
name: Deploy to GitHub Pages
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '16'
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist
================================================================================
11. BAKIM VE GÜNCELLEME
================================================================================
🔧 İÇERİK GÜNCELLEME:
Portfolio'nuzu güncel tutmak için düzenli bakım:
📝 Blog Yazıları:
- Yeni projelerinizi blog yazıları olarak ekleyin
- Öğrendiğiniz teknolojileri paylaşın
- Problem çözme süreçlerinizi anlatın
- Tutorial ve rehberler yazın
🛠️ Projeler:
- Yeni projelerinizi showcase bölümüne ekleyin
- Proje açıklamalarını güncelleyin
- Screenshot'ları yenileyin
- GitHub linklerini kontrol edin
📄 CV Güncellемesi:
- CV'nizi düzenli olarak güncelleyin
- Yeni deneyimleri ekleyin
- Yeni becerileri listeleyin
- PDF versiyonunu upload edin
🎯 Skills:
- Yeni öğrendiğiniz teknolojileri ekleyin
- Skill seviyelerini güncelleyin
- Kullanılmayan teknolojileri kaldırın
- Progress bar yüzdelerini düzenleyin
🔧 PERFORMANS MONİTORİNG:
Performans Kontrol Araçları:
1. Google PageSpeed Insights
URL: https://pagespeed.web.dev/
- Site hızını ölçer
- Optimizasyon önerileri sunar
- Core Web Vitals skorları
- Mobile ve desktop ayrı testler
2. GTmetrix
URL: https://gtmetrix.com/
- Detaylı performans analizi
- Waterfall chart
- Video kayıt
- Geçmiş karşılaştırmaları
3. Google Lighthouse (Chrome DevTools)
- F12 > Lighthouse sekmesi
- Performance, Accessibility, SEO skorları
- Best practices kontrolü
- PWA uyumluluğu
4. WebPageTest
URL: https://www.webpagetest.org/
- Farklı lokasyonlardan test
- Multiple browser desteği
- Advanced metrikleri
- Filmstrip view
Hedef Metrikler:
- First Contentful Paint: < 1.5s
- Largest Contentful Paint: < 2.5s
- Cumulative Layout Shift: < 0.1
- First Input Delay: < 100ms
- Speed Index: < 3.0s
- Total Blocking Time: < 200ms
🔧 GÜVENLİK BEST PRACTİCES:
Güvenlik Kontrol Listesi:
✅ Kişisel Bilgi Güvenliği:
- Telefon numarasını direkt paylaşmayın
- Ev adresini belirtmeyin
- Email obfuscation kullanın
- Social media privacy ayarlarını kontrol edin
✅ Technical Security:
- HTTPS kullanın (GitHub Pages otomatik sağlar)
- External linkler için rel="noopener" ekleyin
- XSS saldırılarına karşı input validation
- Sensitive data'yı repository'de saklamayın
✅ Privacy:
- Analytics için cookie policy
- GDPR compliance (Avrupa kullanıcıları için)
- Contact form data protection
- Third-party service privacy policies
Örnek Email Obfuscation Teknikleri:
// JavaScript ile
const email = "berat" + "@" + "example.com";
document.getElementById('email-link').href = "mailto:" + email;
// HTML entity ile
berat@example.com
// CSS ile
.email::before { content: "berat"; }
.email::after { content: "@example.com"; }
🔧 BACKUP STRATEJİSİ:
Git otomatik backup sağlar, ancak ek güvenlik için:
1. Local Backup:
- Proje klasörünü düzenli zip'leyin
- External drive'a kopyalayın
- Cloud storage sync edin
2. Remote Backup:
- Multiple git remotes kullanın
- GitLab mirror oluşturun
- Bitbucket backup repository
3. Content Backup:
- Blog yazılarını Markdown olarak saklayın
- Image dosyalarını organize edin
- Database export (eğer kullanıyorsanız)
# Multiple remotes setup
git remote add gitlab https://gitlab.com/username/repo.git
git remote add bitbucket https://bitbucket.org/username/repo.git
# Push to all remotes
git push origin main
git push gitlab main
git push bitbucket main
================================================================================
12. SONUÇ VE İPUÇLARI
================================================================================
🎯 PROJE BAŞARI METRİKLERİ:
Bu proje sonunda elde ettiğimiz sonuçlar:
🚀 Performans Metrikleri:
- Google Lighthouse Performance: 90+ skor
- First Contentful Paint: < 1.5s
- Largest Contentful Paint: < 2.5s
- Cumulative Layout Shift: < 0.1
- Search Console'da 0 hata
📱 Responsive Design:
- 320px'den 4K'ya kadar tüm ekran boyutları
- Touch-friendly mobile interface
- Tablet optimized layout
- Desktop enhanced experience
🎨 Modern UI/UX:
- 2024 tasarım trendlerine uygun
- Glassmorphism ve modern effects
- Smooth animations ve micro-interactions
- Dark/Light mode support
♿ Accessibility:
- WCAG 2.1 AA standardına uygun
- Keyboard navigation support
- Screen reader friendly
- Color contrast compliance
🔧 GELİŞTİRİCİLER İÇİN İPUÇLARI:
🎯 Frontend Development Best Practices:
• Mobile-First Design:
- Her zaman küçük ekrandan başlayın
- Touch-friendly interface tasarlayın
- Performance'ı mobile'da test edin
• Progressive Enhancement:
- Temel işlevselliği önce sağlayın
- JavaScript olmadan da çalışsın
- CSS olmadan da okunabilir olsun
• Performance First:
- Gereksiz animasyonlardan kaçının
- Image optimization yapın
- Critical CSS inline edin
- JavaScript'i defer/async edin
• Accessibility:
- Keyboard navigation test edin
- Screen reader'da test edin
- Color contrast'ı kontrol edin
- Focus management yapın
• SEO Optimization:
- Semantic HTML kullanın
- Meta tags'i unutmayın
- Structured data ekleyin
- Page speed'i optimize edin
🔧 CSS Best Practices:
• CSS Custom Properties:
- Tutarlı design system oluşturun
- Theme switching için kullanın
- Maintainability arttırın
• Modern Layout:
- CSS Grid ana layout için
- Flexbox component layout için
- Floats kullanmayın
• Animation Performance:
- Transform ve opacity kullanın
- Will-change property'sini dikkatli kullanın
- 60fps'i hedefleyin
- Reduced motion'ı destekleyin
• Code Organization:
- BEM methodology kullanın
- Modular CSS yazın
- Specificity'yi kontrol edin
⚡ JavaScript Optimizations:
• Event Handling:
- Event delegation kullanın
- Debouncing/throttling uygulayın
- Memory leak'leri önleyin
• Modern JavaScript:
- ES6+ features kullanın
- Async/await tercih edin
- Modules ile organize edin
• Performance:
- Intersection Observer kullanın
- Lazy loading implement edin
- Bundle size'ı optimize edin
• Error Handling:
- Try-catch blocks kullanın
- Graceful degradation sağlayın
- User feedback verin
🚀 GELECEK GELİŞTİRMELER:
Roadmap v3.0 Planları:
🔄 Backend Integration:
├── Contact form email gönderimi
├── Blog CMS integration
├── Analytics ve visitor tracking
├── Comment sistemi
└── Newsletter subscription
🎨 Advanced Features:
├── PWA (Progressive Web App) desteği
├── Dark/Light/Auto mode seçenekleri
├── Multi-language support (EN/TR)
├── Advanced animations (GSAP)
├── Image lazy loading
├── Infinite scroll
└── Search functionality
🔧 Technical Improvements:
├── TypeScript migration
├── CSS-in-JS (Styled Components)
├── Build process (Webpack/Vite)
├── Testing (Jest, Cypress)
├── CI/CD pipeline
├── Code splitting
└── Service Worker
📊 Analytics & SEO:
├── Google Analytics 4
├── Search Console integration
├── Core Web Vitals monitoring
├── A/B testing setup
└── Conversion tracking
🚀 KAYNAKLAR VE REFERANSLAR:
📚 Documentation ve Learning:
├── MDN Web Docs: https://developer.mozilla.org/
├── CSS-Tricks: https://css-tricks.com/
├── W3Schools: https://www.w3schools.com/
├── Can I Use: https://caniuse.com/
├── Web.dev: https://web.dev/
└── JavaScript.info: https://javascript.info/
🎨 Design Inspiration:
├── Dribbble: https://dribbble.com/
├── Behance: https://www.behance.net/
├── Awwwards: https://www.awwwards.com/
├── CodePen: https://codepen.io/
├── Collect UI: https://collectui.com/
└── UI Movement: https://uimovement.com/
🛠️ Development Tools:
├── VS Code: https://code.visualstudio.com/
├── GitHub Desktop: https://desktop.github.com/
├── Chrome DevTools: Built-in
├── Figma: https://www.figma.com/
├── Photoshop: Adobe Creative Suite
└── Postman: API testing
🚀 Hosting & Deployment:
├── GitHub Pages: https://pages.github.com/
├── Netlify: https://www.netlify.com/
├── Vercel: https://vercel.com/
├── Surge.sh: https://surge.sh/
├── Firebase Hosting: https://firebase.google.com/
└── Cloudflare Pages: https://pages.cloudflare.com/
🔧 Performance Testing:
├── PageSpeed Insights: https://pagespeed.web.dev/
├── GTmetrix: https://gtmetrix.com/
├── WebPageTest: https://www.webpagetest.org/
├── Lighthouse: Chrome DevTools
└── Pingdom: https://www.pingdom.com/
⚠️ ÖNEMLİ NOTLAR:
• Bu rehber 2024 itibariyle güncel teknolojileri kapsamaktadır
• Web teknolojileri hızla değişir, düzenli güncellemeleri takip edin
• Production'a geçmeden önce mutlaka test edin
• Backup almayı unutmayın (Git otomatik backup sağlar)
• Community'den yardım almaktan çekinmeyin
• Accessibility ve performance'ı asla ihmal etmeyin
• User feedback'ini düzenli olarak alın ve değerlendirin
🎉 SON SÖZ:
Bu rehber, modern web development pratiklerini kullanarak profesyonel bir
portfolio website'i oluşturma sürecini kapsamlı bir şekilde anlatmaktadır.
Her adımda BEST PRACTICES ve MODERN TEKNOLOJİLER kullanılarak, hem görsel
hem de teknik açıdan kaliteli bir sonuç elde edilmiştir.
UNUTMAYIN: Web development bir öğrenme süreci ve sürekli gelişim gerektirir.
Bu rehberdeki teknikleri temel alarak kendi projelerinizi geliştirirken,
yeni teknolojileri de öğrenmeye devam edin.
Sürekli öğrenin, deneyimleyin ve geliştirin. Portfolio'nuz sizin dijital
kimliğinizdir - onu her zaman güncel ve profesyonel tutun.
🎉 TEBRİKLER!
Bu rehberi tamamladıysanız, artık modern bir portfolio website'ine sahipsiniz.
Projenizi arkadaşlarınızla paylaşın, feedback alın ve sürekli geliştirmeye
devam edin!
================================================================================
BİTİŞ
================================================================================
📚 Bu rehber Berat Efe Karabaş tarafından hazırlanmıştır.
🔗 Portfolio: https://efekrbs.github.io
🐙 GitHub: https://github.com/efekrbs
📅 Son güncelleme: Ocak 2024
Bu dokümantasyonu yararlı bulduysanız, lütfen GitHub'da ⭐ vermeyi unutmayın!
================================================================================