Skip to content

Commit bc0d97c

Browse files
committed
güncelleme ve yeni projeyi ekleme
1 parent aff9e34 commit bc0d97c

File tree

17 files changed

+807
-290
lines changed

17 files changed

+807
-290
lines changed

package-lock.json

Lines changed: 499 additions & 140 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,40 +14,41 @@
1414
"dependencies": {
1515
"@emotion/react": "^11.14.0",
1616
"@emotion/styled": "^11.14.0",
17-
"@mui/icons-material": "^7.0.2",
18-
"@mui/material": "^7.0.2",
19-
"@mui/system": "^7.0.2",
17+
"@mui/icons-material": "^7.1.0",
18+
"@mui/material": "^7.1.0",
19+
"@mui/system": "^7.1.0",
2020
"@tsparticles/engine": "^3.8.1",
2121
"@tsparticles/react": "^3.0.0",
2222
"ajv": "^8.17.1",
2323
"ajv-keywords": "^5.1.0",
2424
"canvas": "^3.1.0",
2525
"cra-template": "^1.3.0",
2626
"date-fns": "^4.1.0",
27-
"framer-motion": "^12.7.4",
27+
"framer-motion": "^12.15.0",
2828
"fs": "^0.0.1-security",
29-
"i18next": "^25.0.1",
30-
"i18next-browser-languagedetector": "^8.0.5",
29+
"i18next": "^25.2.1",
30+
"i18next-browser-languagedetector": "^8.1.0",
3131
"i18next-http-backend": "^3.0.2",
32-
"next": "15.3.1",
32+
"next": "15.3.3",
3333
"next-i18next": "^15.4.2",
3434
"next-sitemap": "^4.2.3",
3535
"path": "^0.12.7",
3636
"react": "^19.1.0",
3737
"react-dom": "^19.1.0",
3838
"react-helmet": "^6.1.0",
39-
"react-i18next": "^15.4.1",
39+
"react-i18next": "^15.5.2",
4040
"react-tsparticles": "^2.12.2",
41+
"sass": "^1.89.0",
4142
"tsparticles": "^3.8.1",
4243
"url": "^0.11.4"
4344
},
4445
"devDependencies": {
4546
"@eslint/eslintrc": "^3",
46-
"@types/node": "^22.14.1",
47+
"@types/node": "^22.15.27",
4748
"@types/react": "^19",
4849
"@types/react-dom": "^19",
4950
"eslint": "^9",
50-
"eslint-config-next": "15.3.1",
51+
"eslint-config-next": "15.3.3",
5152
"ts-node": "^10.9.2",
5253
"typescript": "^5"
5354
}

public/sitemap.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,5 +250,11 @@
250250
<priority>0.7</priority>
251251
</url>
252252

253+
<url>
254+
<loc>https://espeeebne.github.io/projects/mp3basinanumarakoymavesilme</loc>
255+
<lastmod>2025-05-30T00:00:00.000Z</lastmod>
256+
<changefreq>weekly</changefreq>
257+
<priority>0.7</priority>
258+
</url>
253259
</urlset>
254260

58.1 KB
Loading
275 KB
Loading

src/components/Header/Header.tsx

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useContext, useState } from 'react';
1+
import React, { FC, useContext, useState } from 'react';
22
import NextLink from 'next/link';
33
import {
44
Box,
@@ -22,6 +22,7 @@ import { useTheme } from '@mui/material/styles';
2222
import { useTranslation } from 'react-i18next';
2323
import { useRouter } from 'next/router';
2424
import { motion, AnimatePresence } from 'framer-motion';
25+
import SettingsContext from "../../contexts/SettingsContext";
2526

2627
import {
2728
StyledAppBar,
@@ -34,13 +35,14 @@ StyledIconButton,
3435

3536
import { ThemeToggleContext } from '../../pages/_app';
3637

37-
const Header: React.FC = () => {
38+
const Header: FC = () => {
3839
const theme = useTheme();
40+
const { settings } = useContext(SettingsContext);
3941
const { t, i18n } = useTranslation();
4042
const router = useRouter();
4143
const isMobile = useMediaQuery(theme.breakpoints.down('sm'));
4244
const { darkMode, toggleTheme } = useContext(ThemeToggleContext);
43-
45+
const isDark = settings.theme === 'dark';
4446
const [isDrawerOpen, setIsDrawerOpen] = useState(false);
4547
const [languageModalOpen, setLanguageModalOpen] = useState(false);
4648

@@ -83,11 +85,8 @@ return (
8385
<AnimatePresence>
8486
<motion.div initial="hidden" animate="visible" exit="hidden">
8587
<StyledAppBar
88+
elevation={isDark ? 0 : 4}
8689
position="fixed"
87-
sx={{
88-
backgroundColor: theme.palette.background.default,
89-
color: theme.palette.text.primary,
90-
}}
9190
>
9291
<StyledToolbar>
9392
<StyledMenuButton
@@ -165,7 +164,7 @@ return (
165164
variants={listItemVariants}
166165
whileHover="hover"
167166
whileTap="tap"
168-
style={{ cursor: 'pointer' }}
167+
style={{ cursor: 'pointer', borderRadius:16, }}
169168
>
170169
<ListItem component="a" sx={{ textDecoration: 'none' }}>
171170
<ListItemText

src/components/Hero/Hero.tsx

Lines changed: 52 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,63 @@
11
import { FC } from 'react';
2-
import { Box, Typography, Button, Stack, Skeleton } from '@mui/material';
3-
import { heroStyles } from '../../styles/Hero.styles';
42
import { useTranslation } from 'react-i18next';
53
import NextLink from 'next/link';
6-
import { motion } from 'framer-motion';
4+
import {
5+
Container,
6+
Title,
7+
Subtitle,
8+
HeroStack,
9+
HeroButton,
10+
HeroSkeleton
11+
} from '../../styles/Hero.styles';
712

813
const Hero: FC = () => {
9-
const { t, ready } = useTranslation();
10-
if (!ready) {
11-
return (
12-
<Box
13-
component={motion.div}
14-
initial={{ opacity: 0, y: -50 }}
15-
animate={{ opacity: 1, y: 0 }}
16-
transition={{ duration: 1 }}
17-
sx={heroStyles.container}
18-
>
19-
<Skeleton variant="text" width="60%" height={64} />
20-
<Skeleton variant="text" width="40%" height={40} />
21-
<Stack direction="row" spacing={2} sx={{ mt: 3, zIndex: 2 }}>
22-
<Skeleton variant="rectangular" width={120} height={48} />
23-
<Skeleton variant="rectangular" width={120} height={48} />
24-
</Stack>
25-
</Box>
26-
);
27-
}
14+
const { t, ready } = useTranslation();
2815

16+
const animProps = {
17+
initial: { opacity: 0, y: -50 },
18+
animate: { opacity: 1, y: 0 },
19+
transition: { duration: 1 }
20+
};
21+
22+
if (!ready) {
2923
return (
30-
<Box
31-
component={motion.div}
32-
initial={{ opacity: 0, y: -50 }}
33-
animate={{ opacity: 1, y: 0 }}
34-
transition={{ duration: 1 }}
35-
sx={heroStyles.container}
36-
>
37-
<Typography variant="h2" sx={heroStyles.title}>
38-
{t('hero.title', 'Welcome to My Portfolio')}
39-
</Typography>
40-
<Typography variant="h5" sx={heroStyles.subtitle}>
41-
{t('hero.subtitle', 'Tayfur Furkan Hayat a.k.a. Espe, EspeeeBne, Sora, Rika')}
42-
</Typography>
43-
<Stack direction="row" spacing={2} sx={{ mt: 3, zIndex: 2 }}>
44-
<NextLink href="/about" passHref legacyBehavior>
45-
<Button variant="contained" color="primary" sx={{ textTransform: 'none' }}>
46-
{t('hero.about', 'Hakkımda')}
47-
</Button>
48-
</NextLink>
49-
<NextLink href="/projects" passHref legacyBehavior>
50-
<Button variant="contained" color="primary" sx={{ textTransform: 'none' }}>
51-
{t('hero.projects', 'Projelerim')}
52-
</Button>
53-
</NextLink>
54-
</Stack>
55-
</Box>
24+
<Container {...animProps}>
25+
<HeroSkeleton.line variant="text" width="60%" height={64} />
26+
<HeroSkeleton.line variant="text" width="40%" height={40} />
27+
<HeroStack>
28+
<HeroSkeleton.rect variant="rectangular" width={120} height={48} />
29+
<HeroSkeleton.rect variant="rectangular" width={120} height={48} />
30+
</HeroStack>
31+
</Container>
5632
);
33+
}
34+
35+
return (
36+
<Container {...animProps}>
37+
<Title variant="h2">
38+
{t('hero.title', 'Welcome to My Portfolio')}
39+
</Title>
40+
<Subtitle variant="h5">
41+
{t(
42+
'hero.subtitle',
43+
'Tayfur Furkan Hayat a.k.a. Espe, EspeeeBne, Sora, Rika'
44+
)}
45+
</Subtitle>
46+
47+
<HeroStack>
48+
<NextLink href="/about" passHref legacyBehavior>
49+
<HeroButton variant="outlined">
50+
{t('hero.about', 'Hakkımda')}
51+
</HeroButton>
52+
</NextLink>
53+
<NextLink href="/projects" passHref legacyBehavior>
54+
<HeroButton variant="outlined">
55+
{t('hero.projects', 'Projelerim')}
56+
</HeroButton>
57+
</NextLink>
58+
</HeroStack>
59+
</Container>
60+
);
5761
};
5862

5963
export default Hero;

src/config/settings.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
export type ThemeMode = 'light' | 'dark';
2+
export interface Settings { theme: ThemeMode; }
3+
4+
const STORAGE_KEY = 'app-settings';
5+
6+
function readStoredSettings(): Settings {
7+
try {
8+
const raw = localStorage.getItem(STORAGE_KEY);
9+
if (raw) {
10+
const parsed = JSON.parse(raw) as Partial<Settings>;
11+
if (parsed.theme === 'light' || parsed.theme === 'dark') {
12+
return { theme: parsed.theme };
13+
}
14+
}
15+
} catch {
16+
localStorage.removeItem(STORAGE_KEY);
17+
}
18+
return {
19+
theme: window.matchMedia('(prefers-color-scheme: dark)').matches
20+
? 'dark'
21+
: 'light'
22+
};
23+
}
24+
25+
export const defaultSettings: Settings = { theme: 'light' };
26+
27+
export function saveSettings(s: Settings) {
28+
if (typeof window === 'undefined') return;
29+
localStorage.setItem(STORAGE_KEY, JSON.stringify(s));
30+
}
31+
32+
export const initialSettings: Settings = defaultSettings;
33+
34+
export function getInitialSettings(): Settings {
35+
return typeof window === 'undefined'
36+
? defaultSettings
37+
: readStoredSettings();
38+
}

src/config/theme.d.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import '@mui/material/styles'
2+
3+
declare module '@mui/material/styles' {
4+
interface TypeBackground {
5+
level1: string
6+
level2: string
7+
level3: string
8+
}
9+
10+
interface PaletteOptions {
11+
background?: Partial<TypeBackground>
12+
}
13+
}

src/config/theming/dark/index.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,18 @@
44
const baseTheme = createTheme({
55
palette: {
66
mode: 'dark',
7+
contrastThreshold: 4.5,
78
primary: {
89
main: "#7038F8",
910
contrastText: '#ffffff',
1011
},
11-
background: {
12-
default: '#000000',
13-
paper: '#121212',
14-
},
12+
background: {
13+
default: "#000000",
14+
level1: "#121212",
15+
level2: "#2E2E2E",
16+
level3: "#3E3E3E",
17+
paper: "#1E1E1E",
18+
},
1519
error: {
1620
main: '#f44336',
1721
},

0 commit comments

Comments
 (0)