refactor(landing): align public navigation

This commit is contained in:
2026-06-06 23:43:22 +03:30
parent 549f6aff86
commit 3645d60730
3 changed files with 59 additions and 47 deletions

View File

@@ -301,6 +301,8 @@ export const en = {
createdSuccess: "Workspace created successfully", createdSuccess: "Workspace created successfully",
updatedSuccess: "Workspace updated successfully", updatedSuccess: "Workspace updated successfully",
fetchError: "Failed to load workspace data", fetchError: "Failed to load workspace data",
loadErrorDescription: "The backend service may be unavailable. Please try again in a moment.",
retry: "Try again",
remove: "Remove", remove: "Remove",
noUsersFound: "No user found", noUsersFound: "No user found",
selectRole: "Select Role", selectRole: "Select Role",
@@ -401,6 +403,7 @@ export const en = {
demo: "Product demo", demo: "Product demo",
features: "Core capabilities", features: "Core capabilities",
workflow: "How it works", workflow: "How it works",
about: "About us",
}, },
actions: { actions: {
switchToEnglish: "English", switchToEnglish: "English",
@@ -411,6 +414,7 @@ export const en = {
startNow: "Start tracking with control", startNow: "Start tracking with control",
watchDemo: "See the product demo", watchDemo: "See the product demo",
readTerms: "Read terms", readTerms: "Read terms",
readAbout: "About Qlockify",
}, },
hero: { hero: {
titleTop: "Turn every working hour into a reliable operating signal.", titleTop: "Turn every working hour into a reliable operating signal.",

View File

@@ -302,6 +302,8 @@ export const fa = {
createdSuccess: "ورک‌اسپیس با موفقیت ایجاد شد", createdSuccess: "ورک‌اسپیس با موفقیت ایجاد شد",
updatedSuccess: "ورک‌اسپیس با موفقیت ویرایش شد", updatedSuccess: "ورک‌اسپیس با موفقیت ویرایش شد",
fetchError: "خطا در دریافت اطلاعات ورک‌اسپیس", fetchError: "خطا در دریافت اطلاعات ورک‌اسپیس",
loadErrorDescription: "ممکن است سرویس بک‌اند در دسترس نباشد. لطفاً چند لحظه بعد دوباره تلاش کنید.",
retry: "تلاش دوباره",
remove: "حذف", remove: "حذف",
noUsersFound: "کاربری یافت نشد", noUsersFound: "کاربری یافت نشد",
selectRole: "انتخاب نقش", selectRole: "انتخاب نقش",
@@ -398,6 +400,7 @@ export const fa = {
demo: "دموی محصول", demo: "دموی محصول",
features: "قابلیت‌ها", features: "قابلیت‌ها",
workflow: "فرآیند کار", workflow: "فرآیند کار",
about: "درباره ما",
}, },
actions: { actions: {
switchToEnglish: "English", switchToEnglish: "English",
@@ -408,6 +411,7 @@ export const fa = {
startNow: "شروع با کنترل کامل", startNow: "شروع با کنترل کامل",
watchDemo: "مشاهده دموی محصول", watchDemo: "مشاهده دموی محصول",
readTerms: "مطالعه قوانین", readTerms: "مطالعه قوانین",
readAbout: "درباره Qlockify",
}, },
hero: { hero: {
titleTop: "هر ساعت کاری را به یک سیگنال عملیاتی قابل اعتماد تبدیل کنید.", titleTop: "هر ساعت کاری را به یک سیگنال عملیاتی قابل اعتماد تبدیل کنید.",

View File

@@ -110,15 +110,12 @@ export default function Landing() {
</button> </button>
<div className="hidden items-center gap-2 md:flex"> <div className="hidden items-center gap-2 md:flex">
<a href="#demo" className="rounded-full px-4 py-2 text-sm font-medium text-slate-600 transition hover:bg-slate-100 hover:text-slate-950 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-white"> <Link to="/" className="rounded-full bg-slate-950 px-4 py-2 text-sm font-medium text-white shadow-sm dark:bg-white dark:text-slate-950">
{t.landing.nav.demo} {lang === "fa" ? "خانه" : "Home"}
</a> </Link>
<a href="#features" className="rounded-full px-4 py-2 text-sm font-medium text-slate-600 transition hover:bg-slate-100 hover:text-slate-950 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-white"> <Link to="/about" className="rounded-full px-4 py-2 text-sm font-medium text-slate-600 transition hover:bg-slate-100 hover:text-slate-950 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-white">
{t.landing.nav.features} {t.landing.nav.about}
</a> </Link>
<a href="#workflow" className="rounded-full px-4 py-2 text-sm font-medium text-slate-600 transition hover:bg-slate-100 hover:text-slate-950 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-white">
{t.landing.nav.workflow}
</a>
</div> </div>
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
@@ -385,31 +382,38 @@ export default function Landing() {
<section className="py-8"> <section className="py-8">
<div className="relative overflow-hidden rounded-[2.5rem] border border-slate-950/5 bg-slate-950 px-6 py-10 text-white shadow-[0_40px_100px_-40px_rgba(15,23,42,0.8)] dark:border-white/10 sm:px-10"> <div className="relative overflow-hidden rounded-[2.5rem] border border-slate-950/5 bg-slate-950 px-6 py-10 text-white shadow-[0_40px_100px_-40px_rgba(15,23,42,0.8)] dark:border-white/10 sm:px-10">
<div className="pointer-events-none absolute inset-y-0 right-0 w-[45%] bg-[radial-gradient(circle_at_top_right,rgba(34,211,238,0.35),transparent_55%),radial-gradient(circle_at_bottom_right,rgba(245,158,11,0.22),transparent_45%)]" /> <div className="flex flex-row pointer-events-none absolute inset-y-0 right-0 w-[45%] bg-[radial-gradient(circle_at_top_right,rgba(34,211,238,0.35),transparent_55%),radial-gradient(circle_at_bottom_right,rgba(245,158,11,0.22),transparent_45%)]" />
<div className="relative flex flex-col gap-6 lg:flex-row lg:items-end lg:justify-between"> <div className="relative flex flex-col lg:flex-row gap-6 justify-between">
<div className="max-w-3xl"> <div className="max-w-4xl">
<div className="text-sm font-semibold uppercase tracking-[0.2em] text-cyan-300">{t.landing.finalCtaTag}</div> <div className="text-sm font-semibold uppercase tracking-[0.2em] text-cyan-300">{t.landing.finalCtaTag}</div>
<h2 className="mt-4 text-4xl font-semibold leading-[1.1] tracking-[-0.05em] sm:text-5xl"> <h2 className="mt-4 text-4xl font-semibold leading-[1.1] tracking-[-0.05em] sm:text-5xl">
{t.landing.finalCtaTitle} {t.landing.finalCtaTitle}
</h2> </h2>
<p className="mt-4 text-lg leading-8 text-slate-300">{t.landing.finalCtaDescription}</p> <p className="mt-4 text-lg leading-8 text-slate-300">{t.landing.finalCtaDescription}</p>
</div>
<div className="flex flex-row lg:flex-col gap-3">
<Button
onClick={() => navigate(ctaTarget)}
className="h-14 rounded-full bg-white px-7 text-base font-semibold text-slate-950 hover:bg-slate-100"
>
{isAuthenticated ? t.landing.actions.openWorkspace : t.landing.actions.startNow}
</Button>
<Button
variant="outline"
asChild
className="h-14 rounded-full border-white/20 bg-white/5 px-7 text-base text-white hover:bg-white/10 dark:border-white/20 dark:bg-white/5 dark:text-white dark:hover:bg-white/10"
>
<Link to="/terms">{t.landing.actions.readTerms}</Link>
</Button>
<Button
variant="outline"
asChild
className="h-14 rounded-full border-white/20 bg-white/5 px-7 text-base text-white hover:bg-white/10 dark:border-white/20 dark:bg-white/5 dark:text-white dark:hover:bg-white/10"
>
<Link to="/about">{t.landing.actions.readAbout}</Link>
</Button>
</div>
</div> </div>
<div className="flex flex-col gap-3 sm:flex-row">
<Button
onClick={() => navigate(ctaTarget)}
className="h-14 rounded-full bg-white px-7 text-base font-semibold text-slate-950 hover:bg-slate-100"
>
{isAuthenticated ? t.landing.actions.openWorkspace : t.landing.actions.startNow}
</Button>
<Button
variant="outline"
asChild
className="h-14 rounded-full border-white/20 bg-white/5 px-7 text-base text-white hover:bg-white/10 dark:border-white/20 dark:bg-white/5 dark:text-white dark:hover:bg-white/10"
>
<Link to="/terms">{t.landing.actions.readTerms}</Link>
</Button>
</div>
</div>
</div> </div>
</section> </section>
</div> </div>