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>
</Typography>
</div>
<Typography variant="small" className="text-muted-foreground">
{t("role")}
<Typography variant="small" className="text-xs leading-relaxed text-muted-foreground sm:text-sm">
{t.rich("role", {
strong: (chunks) => (
<strong className="font-semibold text-foreground">{chunks}</strong>
),
})}
</Typography>
</div>
+3 -2
View File
@@ -14,6 +14,7 @@ import {
} from "poyraz-ui/atoms";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "poyraz-ui/molecules";
import {
getResumeHref,
LINK_DIRECTORY,
LINK_DIRECTORY_CATEGORIES,
SOCIAL_LINKS,
@@ -158,7 +159,7 @@ export function LinksContent() {
<div className="grid gap-2 sm:grid-cols-2">
{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 (
<a
key={item.id}
@@ -228,7 +229,7 @@ export function LinksContent() {
<div className="grid gap-2">
{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 CardContent = (
<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) {
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 (
<div className={className}>
{REFERENCES.map((item) => {
const quoteText = getLocalizedValue(item.quote, locale);
const quoteContent = lineClamp ? (
<span className="line-clamp-3">{quoteText}</span>
) : (
quoteText
);
const card = (
<TestimonialCard
quote={quoteContent as any}
quote={quoteText}
author={item.author}
role={getLocalizedValue(item.role, locale)}
avatar={item.avatar}
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"
rel="noreferrer"
aria-label={`${item.author} bağlantısı`}
className="block h-full transition-transform hover:scale-[1.02]"
className="group block h-full"
>
{card}
</a>
+1 -1
View File
@@ -6,7 +6,7 @@ export function ReferencesDetailContent() {
const t = useTranslations("About");
return (
<section className="flex h-full flex-col gap-4 overflow-y-auto">
<section className="flex flex-col gap-4 overflow-x-hidden">
<Link
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"
+2 -2
View File
@@ -26,7 +26,7 @@ import {
SheetTrigger,
} from "poyraz-ui/molecules";
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(
() => import("@/components/search-command").then((mod) => mod.SearchCommand),
@@ -58,7 +58,7 @@ export function SiteNavbar() {
<div className="space-y-3">
<div className="flex items-center justify-end gap-2 border-b border-border pb-3">
{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 (
<a
key={item.id}
+4
View File
@@ -101,6 +101,10 @@ export const TOP_ICON_LINKS = [
},
] as const;
export function getResumeHref(locale: string) {
return `/${locale === "en" ? "en" : "tr"}/resume.pdf`;
}
export type LinkDirectoryCategory = "navigation" | "social" | "resources";
export type LinkDirectoryItem = {
+1 -1
View File
@@ -14,7 +14,7 @@
"resume": "Resume"
},
"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": {
"recentPosts": "Recent Posts",
"references": "References",
+1 -1
View File
@@ -14,7 +14,7 @@
"resume": "Özgeçmiş"
},
"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": {
"recentPosts": "Son Yazılar",
"references": "Referanslar",
+2 -2
View File
@@ -4,6 +4,6 @@ import {routing} from "./i18n/routing";
export default createMiddleware(routing);
export const config = {
// Match only internationalized pathnames
matcher: ["/", "/(tr|en)/:path*", "/((?!_next|_vercel|.*\\..*).*)"]
// Match pages, but skip API/internal/static files like `/tr/resume.pdf`.
matcher: ["/((?!api|trpc|_next|_vercel|.*\\..*).*)"],
};
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.