From 0ddfa583cb8011024642a226c525a2f3c3b77560 Mon Sep 17 00:00:00 2001 From: Amirhossein Khalili Date: Wed, 9 Sep 2026 23:21:21 +0330 Subject: [PATCH] feat: expand case study gallery data --- src/data/projects.ts | 113 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 95 insertions(+), 18 deletions(-) diff --git a/src/data/projects.ts b/src/data/projects.ts index 8e9babc..9acdd9f 100644 --- a/src/data/projects.ts +++ b/src/data/projects.ts @@ -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: 'تجربه مشاهده جزئیات و دانلود زیرنویس در حالت روشن.' }, }, }, ],