Merge branch 'master' of https://github.com/poyrazavsever/poyraz-portfolio-new
This commit is contained in:
@@ -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>
|
||||
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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.
Reference in New Issue
Block a user