diff --git a/index.html b/index.html
index d751e30..7b39d07 100644
--- a/index.html
+++ b/index.html
@@ -2,9 +2,9 @@
-
+
- atakan-portal
+ Atakan
diff --git a/public/logo.png b/public/logo.png
new file mode 100644
index 0000000..cd060cc
Binary files /dev/null and b/public/logo.png differ
diff --git a/src/pages/Home.jsx b/src/pages/Home.jsx
index 834725d..32a6c71 100644
--- a/src/pages/Home.jsx
+++ b/src/pages/Home.jsx
@@ -4,16 +4,10 @@ import { useNavigate } from 'react-router-dom';
import {
Terminal, Globe, Shield, Database,
Github, Twitter, Linkedin, Mail, Lock, X, ChevronRight, ExternalLink,
- Coffee, Zap, Smartphone, Layers, Box, Server
+ Coffee, Zap, Smartphone, Layers, Box, Server, Loader2 // Loader2 eklendi
} from 'lucide-react';
-// --- KULLANICI ADI VE ŞİFRE AYARLARI ---
-const AUTH_CONFIG = {
- username: "atakanzgn",
- password: "atakanc123"
-};
-
-// --- YETENEKLER (Güncellendi) ---
+// --- YETENEKLER ---
const skills = [
{ name: "Java", icon: , desc: "Core & Enterprise" },
{ name: "Spring Boot", icon: , desc: "Microservices" },
@@ -50,16 +44,49 @@ export default function Home() {
const [isModalOpen, setIsModalOpen] = useState(false);
const [username, setUsername] = useState("");
const [password, setPassword] = useState("");
+
+ // Yeni State'ler
const [error, setError] = useState("");
+ const [isLoading, setIsLoading] = useState(false);
+
const navigate = useNavigate();
- const handleLogin = (e) => {
+ const API_URL = "https://api.atakanzgn.com.tr/login";
+
+ const handleLogin = async (e) => {
e.preventDefault();
- if (username === AUTH_CONFIG.username && password === AUTH_CONFIG.password) {
- sessionStorage.setItem('isAuthenticated', 'true');
- navigate('/portal');
- } else {
- setError("Hatalı kullanıcı adı veya şifre!");
+ setError("");
+ setIsLoading(true);
+
+ try {
+ const response = await fetch(API_URL, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ username: username,
+ password: password
+ }),
+ });
+
+ const data = await response.json();
+
+ if (response.ok) {
+ // Başarılı giriş: Token'ı sakla
+ // Backend'den { token: "..." } veya { accessToken: "..." } döndüğünü varsayıyoruz.
+ sessionStorage.setItem('authToken', data.token || data.accessToken);
+ sessionStorage.setItem('user', JSON.stringify(data.user)); // Opsiyonel: Kullanıcı bilgisini sakla
+ navigate('/portal');
+ } else {
+ // Backend'den gelen hata mesajını göster
+ setError(data.message || "Giriş başarısız. Bilgileri kontrol edin.");
+ }
+ } catch (err) {
+ console.error("Login hatası:", err);
+ setError("Sunucuya bağlanılamadı. Lütfen daha sonra tekrar deneyin.");
+ } finally {
+ setIsLoading(false);
}
};
@@ -99,7 +126,6 @@ export default function Home() {
{/* --- HERO BÖLÜMÜ --- */}
- {/* Renkleri Java/Backend temasına uygun (Turuncu/Kırmızı) güncelledim */}
@@ -124,7 +150,7 @@ export default function Home() {
- {/* --- HAKKIMDA (Güncellendi) --- */}
+ {/* --- HAKKIMDA --- */}
@@ -144,7 +170,7 @@ export default function Home() {
- {/* --- YETENEKLER (Güncellendi) --- */}
+ {/* --- YETENEKLER --- */}
Teknik Yetkinlikler
@@ -240,25 +266,35 @@ export default function Home() {
setUsername(e.target.value)}
+ disabled={isLoading}
/>
setPassword(e.target.value)}
+ disabled={isLoading}
/>
{error && {error}
}
-