This commit is contained in:
Poyraz
2026-07-01 18:52:00 +03:00
13 changed files with 25 additions and 19 deletions
+6 -2
View File
@@ -63,8 +63,12 @@ export function HomeHero({ news }: HomeHeroProps) {
<span className="font-secondary text-red-600">Avsever</span> <span className="font-secondary text-red-600">Avsever</span>
</Typography> </Typography>
</div> </div>
<Typography variant="small" className="text-muted-foreground"> <Typography variant="small" className="text-xs leading-relaxed text-muted-foreground sm:text-sm">
{t("role")} {t.rich("role", {
strong: (chunks) => (
<strong className="font-semibold text-foreground">{chunks}</strong>
),
})}
</Typography> </Typography>
</div> </div>
+3 -2
View File
@@ -14,6 +14,7 @@ import {
} from "poyraz-ui/atoms"; } from "poyraz-ui/atoms";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "poyraz-ui/molecules"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "poyraz-ui/molecules";
import { import {
getResumeHref,
LINK_DIRECTORY, LINK_DIRECTORY,
LINK_DIRECTORY_CATEGORIES, LINK_DIRECTORY_CATEGORIES,
SOCIAL_LINKS, SOCIAL_LINKS,
@@ -158,7 +159,7 @@ export function LinksContent() {
<div className="grid gap-2 sm:grid-cols-2"> <div className="grid gap-2 sm:grid-cols-2">
{TOP_ICON_LINKS.map((item) => { {TOP_ICON_LINKS.map((item) => {
const href = item.id === "cv" ? `/resume-${locale}.pdf` : item.href; const href = item.id === "cv" ? getResumeHref(locale) : item.href;
return ( return (
<a <a
key={item.id} key={item.id}
@@ -228,7 +229,7 @@ export function LinksContent() {
<div className="grid gap-2"> <div className="grid gap-2">
{filteredItems.map((item) => { {filteredItems.map((item) => {
const href = item.id === "cv" ? `/resume-${locale}.pdf` : item.href; const href = item.id === "cv" ? getResumeHref(locale) : item.href;
const isStaticOrExternal = item.external || item.id === "rss" || item.id === "cv" || href.endsWith(".xml") || href.endsWith(".pdf"); const isStaticOrExternal = item.external || item.id === "rss" || item.id === "cv" || href.endsWith(".xml") || href.endsWith(".pdf");
const CardContent = ( const CardContent = (
<Card className="rounded-2xl border-border p-3 transition-all hover:-translate-y-0.5 hover:border-red-600/40"> <Card className="rounded-2xl border-border p-3 transition-all hover:-translate-y-0.5 hover:border-red-600/40">
+5 -8
View File
@@ -12,25 +12,22 @@ type ReferenceCardsProps = {
export function ReferenceCards({ className, cardClassName, lineClamp }: ReferenceCardsProps) { export function ReferenceCards({ className, cardClassName, lineClamp }: ReferenceCardsProps) {
const locale = useLocale(); const locale = useLocale();
const hoverClassName =
"transition-colors duration-200 group-hover:border-red-600/40 group-hover:bg-muted/30 group-hover:shadow-sm";
return ( return (
<div className={className}> <div className={className}>
{REFERENCES.map((item) => { {REFERENCES.map((item) => {
const quoteText = getLocalizedValue(item.quote, locale); const quoteText = getLocalizedValue(item.quote, locale);
const quoteContent = lineClamp ? (
<span className="line-clamp-3">{quoteText}</span>
) : (
quoteText
);
const card = ( const card = (
<TestimonialCard <TestimonialCard
quote={quoteContent as any} quote={quoteText}
author={item.author} author={item.author}
role={getLocalizedValue(item.role, locale)} role={getLocalizedValue(item.role, locale)}
avatar={item.avatar} avatar={item.avatar}
rating={item.rating} rating={item.rating}
className={`flex flex-col rounded-sm ${cardClassName || "w-70 shrink-0"}`} className={`flex flex-col rounded-sm ${lineClamp ? "[&_p]:line-clamp-3" : ""} ${hoverClassName} ${cardClassName || "w-70 shrink-0"}`}
/> />
); );
@@ -47,7 +44,7 @@ export function ReferenceCards({ className, cardClassName, lineClamp }: Referenc
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
aria-label={`${item.author} bağlantısı`} aria-label={`${item.author} bağlantısı`}
className="block h-full transition-transform hover:scale-[1.02]" className="group block h-full"
> >
{card} {card}
</a> </a>
+1 -1
View File
@@ -6,7 +6,7 @@ export function ReferencesDetailContent() {
const t = useTranslations("About"); const t = useTranslations("About");
return ( return (
<section className="flex h-full flex-col gap-4 overflow-y-auto"> <section className="flex flex-col gap-4 overflow-x-hidden">
<Link <Link
href="/about" href="/about"
className="inline-flex w-fit items-center rounded-sm border border-border px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground" className="inline-flex w-fit items-center rounded-sm border border-border px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground"
+2 -2
View File
@@ -26,7 +26,7 @@ import {
SheetTrigger, SheetTrigger,
} from "poyraz-ui/molecules"; } from "poyraz-ui/molecules";
import { useKeyboardShortcutLabel } from "@/lib/use-keyboard-shortcut-label"; import { useKeyboardShortcutLabel } from "@/lib/use-keyboard-shortcut-label";
import { NAV_LINKS, SOCIAL_LINKS, TOP_ICON_LINKS } from "@/lib/links"; import { getResumeHref, NAV_LINKS, SOCIAL_LINKS, TOP_ICON_LINKS } from "@/lib/links";
const SearchCommand = dynamic( const SearchCommand = dynamic(
() => import("@/components/search-command").then((mod) => mod.SearchCommand), () => import("@/components/search-command").then((mod) => mod.SearchCommand),
@@ -58,7 +58,7 @@ export function SiteNavbar() {
<div className="space-y-3"> <div className="space-y-3">
<div className="flex items-center justify-end gap-2 border-b border-border pb-3"> <div className="flex items-center justify-end gap-2 border-b border-border pb-3">
{TOP_ICON_LINKS.map((item) => { {TOP_ICON_LINKS.map((item) => {
const href = item.id === "cv" ? `/resume-${locale}.pdf` : item.href; const href = item.id === "cv" ? getResumeHref(locale) : item.href;
return ( return (
<a <a
key={item.id} key={item.id}
+4
View File
@@ -101,6 +101,10 @@ export const TOP_ICON_LINKS = [
}, },
] as const; ] as const;
export function getResumeHref(locale: string) {
return `/${locale === "en" ? "en" : "tr"}/resume.pdf`;
}
export type LinkDirectoryCategory = "navigation" | "social" | "resources"; export type LinkDirectoryCategory = "navigation" | "social" | "resources";
export type LinkDirectoryItem = { export type LinkDirectoryItem = {
+1 -1
View File
@@ -14,7 +14,7 @@
"resume": "Resume" "resume": "Resume"
}, },
"Home": { "Home": {
"role": "A young mind curious about technology. Following developments in software development, AI, and the tech world.", "role": "I build <strong>full-stack products</strong>, shape experiences with <strong>AI systems</strong>, and explain <strong>technology-design-software</strong> through practical content.",
"sections": { "sections": {
"recentPosts": "Recent Posts", "recentPosts": "Recent Posts",
"references": "References", "references": "References",
+1 -1
View File
@@ -14,7 +14,7 @@
"resume": "Özgeçmiş" "resume": "Özgeçmiş"
}, },
"Home": { "Home": {
"role": "Teknolojiyi merak eden bir genç. Yazılım geliştirme, yapay zeka ve teknoloji dünyasındaki gelişmeleri takip ediyor.", "role": "<strong>Full-stack ürünler</strong> geliştiriyor, <strong>yapay zeka sistemleriyle</strong> deneyimler kuruyor ve <strong>teknoloji-tasarım-yazılımı</strong> uygulanabilir içeriklerle anlatıyorum.",
"sections": { "sections": {
"recentPosts": "Son Yazılar", "recentPosts": "Son Yazılar",
"references": "Referanslar", "references": "Referanslar",
+2 -2
View File
@@ -4,6 +4,6 @@ import {routing} from "./i18n/routing";
export default createMiddleware(routing); export default createMiddleware(routing);
export const config = { export const config = {
// Match only internationalized pathnames // Match pages, but skip API/internal/static files like `/tr/resume.pdf`.
matcher: ["/", "/(tr|en)/:path*", "/((?!_next|_vercel|.*\\..*).*)"] matcher: ["/((?!api|trpc|_next|_vercel|.*\\..*).*)"],
}; };
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.