feat: expand case study gallery data

This commit is contained in:
2026-09-09 23:21:21 +03:30
parent b0a470f219
commit 0ddfa583cb

View File

@@ -69,17 +69,59 @@ const projectDefinitions: ProjectDefinition[] = [
image: portfolioImage('/images/project-qlockify.png', 359, 200),
gallery: [
{
image: portfolioImage('/images/project-qlockify.png', 359, 200),
image: portfolioImage('/images/screenshots/qlockify/qlockify-landing.png', 2560, 1440),
content: {
en: { alt: 'Qlockify time tracking product in light mode', caption: 'The public Qlockify experience in light mode.' },
fa: { alt: 'محصول ثبت زمان Qlockify در حالت روشن', caption: 'نمای عمومی Qlockify در حالت روشن.' },
en: { alt: 'Qlockify landing page introducing the time-tracking product', caption: 'The public landing experience introduces Qlockify and its core value.' },
fa: { alt: 'صفحه اصلی Qlockify برای معرفی محصول ثبت زمان', caption: 'صفحه اصلی، Qlockify و ارزش اصلی آن را معرفی می‌کند.' },
},
},
{
image: portfolioImage('/images/project-qlockify-dark.png', 358, 199),
image: portfolioImage('/images/screenshots/qlockify/qlockify-auth-mobile.png', 1440, 900),
content: {
en: { alt: 'Qlockify time tracking product in dark mode', caption: 'The same product experience in dark mode.' },
fa: { alt: 'محصول ثبت زمان Qlockify در حالت تیره', caption: 'همان تجربه محصول در حالت تیره.' },
en: { alt: 'Qlockify authentication experience shown on mobile devices', caption: 'Responsive account access designed for mobile use.' },
fa: { alt: 'تجربه ورود به حساب Qlockify روی دستگاه‌های موبایل', caption: 'دسترسی واکنش‌گرا به حساب کاربری برای استفاده در موبایل.' },
},
},
{
image: portfolioImage('/images/screenshots/qlockify/qlockify-timesheet.png', 2560, 1440),
content: {
en: { alt: 'Qlockify timesheet with tracked work entries', caption: 'The timesheet keeps tracked work visible and organized by context.' },
fa: { alt: 'برگه زمانی Qlockify با فعالیت‌های ثبت‌شده', caption: 'برگه زمانی، فعالیت‌های ثبت‌شده را بر اساس زمینه کاری مرتب و قابل‌مشاهده نگه می‌دارد.' },
},
},
{
image: portfolioImage('/images/screenshots/qlockify/qlockify-report-table.png', 2560, 1440),
content: {
en: { alt: 'Qlockify report displayed as a detailed data table', caption: 'A detailed report view supports review and export workflows.' },
fa: { alt: 'گزارش Qlockify در قالب جدول جزئیات', caption: 'نمای جزئیات گزارش، بررسی داده‌ها و دریافت خروجی را پشتیبانی می‌کند.' },
},
},
{
image: portfolioImage('/images/screenshots/qlockify/qlockify-report-chart.png', 2560, 1440),
content: {
en: { alt: 'Qlockify report visualized with charts', caption: 'Chart-based reporting makes time distribution easier to compare.' },
fa: { alt: 'گزارش Qlockify با نمایش نموداری', caption: 'گزارش نموداری، مقایسه توزیع زمان را ساده‌تر می‌کند.' },
},
},
{
image: portfolioImage('/images/screenshots/qlockify/qlockify-workspaces.png', 2560, 1440),
content: {
en: { alt: 'Qlockify workspace management interface', caption: 'Workspaces connect members, projects, tracked time, and reporting.' },
fa: { alt: 'رابط مدیریت فضای کاری Qlockify', caption: 'فضاهای کاری، اعضا، پروژه‌ها، زمان‌های ثبت‌شده و گزارش‌ها را به هم متصل می‌کنند.' },
},
},
{
image: portfolioImage('/images/screenshots/qlockify/qlockify-about.png', 2560, 1440),
content: {
en: { alt: 'Qlockify about page explaining the product', caption: 'The product story and principles behind Qlockify.' },
fa: { alt: 'صفحه درباره Qlockify با توضیح محصول', caption: 'داستان محصول و اصولی که Qlockify بر اساس آن‌ها ساخته شده است.' },
},
},
{
image: portfolioImage('/images/screenshots/qlockify/qlockify-loading.png', 2560, 1440),
content: {
en: { alt: 'Qlockify branded loading experience', caption: 'A restrained loading state maintains continuity while data is prepared.' },
fa: { alt: 'نمای بارگذاری با هویت بصری Qlockify', caption: 'نمای بارگذاری ساده، هنگام آماده‌شدن داده‌ها پیوستگی تجربه را حفظ می‌کند.' },
},
},
],
@@ -151,17 +193,24 @@ const projectDefinitions: ProjectDefinition[] = [
image: portfolioImage('/images/project-guilan-ace.png', 359, 200),
gallery: [
{
image: portfolioImage('/images/project-guilan-ace.png', 359, 200),
image: portfolioImage('/images/screenshots/guilan-ace/guilan-ace-landing-dark.png', 2560, 1440),
content: {
en: { alt: 'Guilan ACE website in light mode', caption: 'The association website in light mode.' },
fa: { alt: 'وب‌سایت انجمن علمی مهندسی کامپیوتر گیلان در حالت روشن', caption: 'نمای وب‌سایت انجمن در حالت روشن.' },
en: { alt: 'Guilan ACE landing page in dark mode', caption: 'The association landing experience in dark mode.' },
fa: { alt: 'صفحه اصلی انجمن علمی مهندسی کامپیوتر گیلان در حالت تیره', caption: 'تجربه صفحه اصلی انجمن در حالت تیره.' },
},
},
{
image: portfolioImage('/images/project-guilan-ace-dark.png', 358, 199),
image: portfolioImage('/images/screenshots/guilan-ace/guilan-ace-landing-light.png', 2560, 1440),
content: {
en: { alt: 'Guilan ACE website in dark mode', caption: 'The association website in dark mode.' },
fa: { alt: 'وب‌سایت انجمن علمی مهندسی کامپیوتر گیلان در حالت تیره', caption: 'نمای وب‌سایت انجمن در حالت تیره.' },
en: { alt: 'Guilan ACE landing page in light mode', caption: 'The same association landing experience in light mode.' },
fa: { alt: 'صفحه اصلی انجمن علمی مهندسی کامپیوتر گیلان در حالت روشن', caption: 'همان تجربه صفحه اصلی انجمن در حالت روشن.' },
},
},
{
image: portfolioImage('/images/screenshots/guilan-ace/guilan-ace-events.png', 2560, 1440),
content: {
en: { alt: 'Guilan ACE events listing with event cards and filters', caption: 'The events experience helps visitors discover and review association activities.' },
fa: { alt: 'فهرست رویدادهای انجمن علمی مهندسی کامپیوتر گیلان با کارت‌ها و فیلترها', caption: 'بخش رویدادها به بازدیدکنندگان کمک می‌کند فعالیت‌های انجمن را پیدا و بررسی کنند.' },
},
},
],
@@ -463,17 +512,45 @@ const projectDefinitions: ProjectDefinition[] = [
image: portfolioImage('/images/project-subsource.png', 2560, 1440),
gallery: [
{
image: portfolioImage('/images/project-subsource.png', 2560, 1440),
image: portfolioImage('/images/screenshots/subsource/landing-dark.png', 2560, 1440),
content: {
en: { alt: 'Subsource subtitle discovery product in light mode', caption: 'The subtitle discovery experience in light mode.' },
fa: { alt: 'محصول جست‌وجوی زیرنویس ساب‌سورس در حالت روشن', caption: 'نمای تجربه جست‌وجوی زیرنویس در حالت روشن.' },
en: { alt: 'Subsource landing page in dark mode', caption: 'The subtitle discovery landing experience in dark mode.' },
fa: { alt: 'صفحه اصلی ساب‌سورس در حالت تیره', caption: 'تجربه صفحه اصلی جست‌وجوی زیرنویس در حالت تیره.' },
},
},
{
image: portfolioImage('/images/project-subsource-dark.png', 2560, 1440),
image: portfolioImage('/images/screenshots/subsource/landing-light.png', 2560, 1440),
content: {
en: { alt: 'Subsource subtitle discovery product in dark mode', caption: 'The subtitle discovery experience in dark mode.' },
fa: { alt: 'محصول جست‌وجوی زیرنویس ساب‌سورس در حالت تیره', caption: 'نمای تجربه جست‌وجوی زیرنویس در حالت تیره.' },
en: { alt: 'Subsource landing page in light mode', caption: 'The subtitle discovery landing experience in light mode.' },
fa: { alt: 'صفحه اصلی ساب‌سورس در حالت روشن', caption: 'تجربه صفحه اصلی جست‌وجوی زیرنویس در حالت روشن.' },
},
},
{
image: portfolioImage('/images/screenshots/subsource/search-dark.png', 2560, 1440),
content: {
en: { alt: 'Subsource search results in dark mode', caption: 'Search results organize titles and subtitle choices in dark mode.' },
fa: { alt: 'نتایج جست‌وجوی ساب‌سورس در حالت تیره', caption: 'نتایج جست‌وجو، عنوان‌ها و گزینه‌های زیرنویس را در حالت تیره مرتب می‌کند.' },
},
},
{
image: portfolioImage('/images/screenshots/subsource/search-light.png', 2560, 1440),
content: {
en: { alt: 'Subsource search results in light mode', caption: 'The same search workflow in light mode.' },
fa: { alt: 'نتایج جست‌وجوی ساب‌سورس در حالت روشن', caption: 'همان مسیر جست‌وجو در حالت روشن.' },
},
},
{
image: portfolioImage('/images/screenshots/subsource/subtitle-detail-dark.png', 2560, 1440),
content: {
en: { alt: 'Subsource subtitle detail page in dark mode', caption: 'Subtitle details bring metadata and the download decision together.' },
fa: { alt: 'صفحه جزئیات زیرنویس ساب‌سورس در حالت تیره', caption: 'صفحه جزئیات، فراداده و تصمیم دانلود زیرنویس را کنار هم قرار می‌دهد.' },
},
},
{
image: portfolioImage('/images/screenshots/subsource/subtitle-detail-light.png', 2560, 1440),
content: {
en: { alt: 'Subsource subtitle detail page in light mode', caption: 'The subtitle detail and download experience in light mode.' },
fa: { alt: 'صفحه جزئیات زیرنویس ساب‌سورس در حالت روشن', caption: 'تجربه مشاهده جزئیات و دانلود زیرنویس در حالت روشن.' },
},
},
],