From 29459e7942f1ef9399aa4a4015d4bba0f87a00e9 Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:35:56 +0200 Subject: [PATCH 01/29] Improve case study content model and ordering --- lib/case-studies.ts | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/lib/case-studies.ts b/lib/case-studies.ts index c9e3384b..81e0c0ae 100644 --- a/lib/case-studies.ts +++ b/lib/case-studies.ts @@ -10,6 +10,11 @@ export interface CaseStudyBrand { logo?: string; } +export interface CaseStudyCTA { + title: string; + description?: string; +} + export interface CaseStudyHero { image: string; alt: string; @@ -43,6 +48,7 @@ export interface CaseStudyEvidence { title: string; value?: string; description: string; + context?: string; before?: string; after?: string; tone?: 'qualitative' | 'quantitative'; @@ -62,7 +68,10 @@ export interface CaseStudyMeta { platform: string; duration?: string; featured: boolean; + portfolioOrder?: number; siteUrl?: string; + attribution?: string; + cta?: CaseStudyCTA; brand: CaseStudyBrand; hero: CaseStudyHero; overview: CaseStudyOverview; @@ -87,6 +96,8 @@ interface HebrewTranslation { summary?: string; industry?: string; duration?: string; + attribution?: string; + cta?: CaseStudyCTA; hero?: Partial; overview?: Partial; results?: CaseStudyResult[]; @@ -106,7 +117,10 @@ interface CaseStudyFrontmatter { platform?: string; duration?: string; featured?: boolean; + portfolioOrder?: number; siteUrl?: string; + attribution?: string; + cta?: CaseStudyCTA; brand?: Partial; hero?: Partial; overview?: Partial; @@ -129,17 +143,22 @@ function normalizeGalleryWithHero( ): CaseStudyGalleryItem[] { const dedupedGallery = gallery.filter(item => item.image && item.image !== hero.image); - if (!hero.image) { + // When dedicated gallery screens exist, keep the hero out of the gallery. + // The hero is already the dominant visual at the top of the case study. + if (dedupedGallery.length > 0) { return dedupedGallery; } + if (!hero.image) { + return []; + } + return [ { image: hero.image, alt: hero.alt, caption: hero.supportingCopy || fallbackCaption || hero.alt, }, - ...dedupedGallery, ]; } @@ -205,6 +224,8 @@ export function normalizeCaseStudyRecord( const services = (isHebrew && heTranslations.services) || data.services || []; const results = (isHebrew && heTranslations.results) || data.results || []; const testimonial = (isHebrew && heTranslations.testimonial) || data.testimonial; + const attribution = (isHebrew && heTranslations.attribution) || data.attribution || ''; + const cta = (isHebrew && heTranslations.cta) || data.cta; const hero = mergeLocalizedObject( data.hero as CaseStudyHero | undefined, isHebrew ? heTranslations.hero : undefined @@ -243,7 +264,11 @@ export function normalizeCaseStudyRecord( platform: data.platform || '', duration, featured: data.featured || false, + portfolioOrder: + typeof data.portfolioOrder === 'number' ? data.portfolioOrder : undefined, siteUrl: data.siteUrl || '', + attribution, + cta, brand, hero: resolvedHero, overview: resolvedOverview, @@ -307,7 +332,11 @@ export function getAllCaseStudies(locale: string = 'en'): CaseStudyMeta[] { .filter((study): study is CaseStudyMeta => study !== null); return caseStudies.sort( - (a, b) => Number(b.featured) - Number(a.featured) || a.title.localeCompare(b.title, locale) + (a, b) => + (a.portfolioOrder ?? Number.MAX_SAFE_INTEGER) - + (b.portfolioOrder ?? Number.MAX_SAFE_INTEGER) || + Number(b.featured) - Number(a.featured) || + a.title.localeCompare(b.title, locale) ); } From c8d23a6f2847440d7cddc63480327e4e174de333 Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:35:59 +0200 Subject: [PATCH 02/29] Avoid synthetic article dates in structured data --- lib/seo.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/seo.ts b/lib/seo.ts index aeccfa6e..d8b01e20 100644 --- a/lib/seo.ts +++ b/lib/seo.ts @@ -355,7 +355,7 @@ export function generateSoftwareApplicationSchema(config: SoftwareApplicationSch export function generateArticleSchema(post: { title: string; description: string; - date: string; + date?: string; url: string; locale?: 'en' | 'he'; author?: string; @@ -376,8 +376,10 @@ export function generateArticleSchema(post: { '@id': `${articleUrl}/#article`, headline: post.title, description: post.description, - datePublished: post.date, - dateModified: post.modifiedDate || post.date, + ...(post.date && { datePublished: post.date }), + ...((post.modifiedDate || post.date) && { + dateModified: post.modifiedDate || post.date, + }), author: { '@type': 'Organization', '@id': `${siteUrl}/#organization`, @@ -405,7 +407,7 @@ export function generateArticleSchema(post: { '@type': 'Organization', name: 'CartShift Studio', }, - copyrightYear: new Date(post.date).getFullYear(), + ...(post.date && { copyrightYear: new Date(post.date).getFullYear() }), ...(post.category && { articleSection: post.category }), ...(post.wordCount && { wordCount: post.wordCount }), ...(post.readingTime && { timeRequired: `PT${post.readingTime}M` }), From c48463162d743e66a41ac5f9f910ae49db35c013 Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:36:26 +0200 Subject: [PATCH 03/29] Make case studies more specific and evidence-aware --- .../sections/CaseStudyDetailContent.tsx | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/components/sections/CaseStudyDetailContent.tsx b/components/sections/CaseStudyDetailContent.tsx index 170bb1de..c425aa42 100644 --- a/components/sections/CaseStudyDetailContent.tsx +++ b/components/sections/CaseStudyDetailContent.tsx @@ -39,11 +39,17 @@ type WorkDetailTranslations = { getConsultation: string; viewMore: string; projectOverview: string; + overviewEyebrow: string; whatWeShipped: string; + deliveryEyebrow: string; selectedScreens: string; evidenceTitle: string; + evidenceEyebrow: string; + evidenceResultsTitle: string; + whatChangedTitle: string; clientQuote: string; projectNotes: string; + notesEyebrow: string; visitSite: string; galleryHint: string; openImage: string; @@ -83,6 +89,10 @@ export const CaseStudyDetailContent: React.FC = ({ const heroStoryRotate = useTransform(heroProgress, [0, 1], [-6, -2]); const workT = t.raw('work' as never) as WorkDetailTranslations; + const hasMeasuredResults = caseStudy.evidence.some(item => item.tone === 'quantitative'); + const evidenceHeading = hasMeasuredResults + ? workT.detail.evidenceResultsTitle + : workT.detail.whatChangedTitle; const breadcrumbItems = [ { label: t('navigation.home'), href: '/' }, @@ -281,7 +291,7 @@ export const CaseStudyDetailContent: React.FC = ({ >

- {workT.detail.projectOverview} + {workT.detail.overviewEyebrow}

{caseStudy.overview.title} @@ -289,6 +299,11 @@ export const CaseStudyDetailContent: React.FC = ({

{caseStudy.overview.summary}

+ {caseStudy.attribution && ( +

+ {caseStudy.attribution} +

+ )}

= ({

{caseStudy.duration}

-

- {caseStudy.hero.supportingCopy || caseStudy.summary} -

)} @@ -379,7 +391,7 @@ export const CaseStudyDetailContent: React.FC = ({

- {workT.detail.whatWeShipped} + {workT.detail.deliveryEyebrow}

{workT.detail.whatWeShipped} @@ -441,10 +453,10 @@ export const CaseStudyDetailContent: React.FC = ({

- {workT.detail.evidenceTitle} + {workT.detail.evidenceEyebrow}

- {workT.detail.evidenceTitle} + {evidenceHeading}

@@ -465,6 +477,11 @@ export const CaseStudyDetailContent: React.FC = ({

{item.description}

+ {item.context && ( +

+ {item.context} +

+ )} {(item.before || item.after) && (
{item.before && ( @@ -549,7 +566,7 @@ export const CaseStudyDetailContent: React.FC = ({

- {workT.detail.projectNotes} + {workT.detail.notesEyebrow}

{workT.detail.projectNotes} @@ -581,10 +598,10 @@ export const CaseStudyDetailContent: React.FC = ({ {workT.cta.title}

- {workT.detail.wantResults} + {caseStudy.cta?.title || workT.detail.wantResults}

- {workT.detail.wantResultsDesc} + {caseStudy.cta?.description || workT.detail.wantResultsDesc}

From ed7baf1723642f8be60f49df33065459756585aa Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:36:47 +0200 Subject: [PATCH 04/29] Reduce repeated portfolio card metadata --- components/sections/WorkPageContent.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/components/sections/WorkPageContent.tsx b/components/sections/WorkPageContent.tsx index 24a5ee7a..edd281c7 100644 --- a/components/sections/WorkPageContent.tsx +++ b/components/sections/WorkPageContent.tsx @@ -366,9 +366,7 @@ function PortfolioWorkTile({ platformLabel: string; }) { const themeStyle = getCaseStudyThemeStyle(caseStudy.brand); - const metaLine = caseStudy.duration - ? `${caseStudy.client} / ${caseStudy.duration}` - : caseStudy.client; + const metaLine = caseStudy.duration || platformLabel; return ( Date: Sun, 20 Sep 2026 11:36:49 +0200 Subject: [PATCH 05/29] Localize portfolio metadata and schema --- app/[locale]/(website)/work/page.tsx | 53 ++++++++++++++++++---------- 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/app/[locale]/(website)/work/page.tsx b/app/[locale]/(website)/work/page.tsx index 1fe83a1a..f2a6a905 100644 --- a/app/[locale]/(website)/work/page.tsx +++ b/app/[locale]/(website)/work/page.tsx @@ -15,24 +15,37 @@ export async function generateMetadata({ params: Promise<{ locale: string }>; }): Promise { const { locale } = await params; + const isHe = locale === 'he'; const featured = getAllCaseStudies(locale)[0]; + return genMeta( { - title: 'Shopify, WordPress, and Web App Case Studies | CartShift Studio Work', - description: - 'Explore recent CartShift projects across Shopify, WordPress, custom web apps, migrations, and performance optimization. See how we turn technical work into sharper digital products and clearer growth paths.', + title: isHe + ? 'פרויקטים ב-Shopify, WordPress ו-Web Apps | CartShift Studio' + : 'Shopify, WordPress, and Web App Case Studies | CartShift Studio Work', + description: isHe + ? 'פרויקטים נבחרים של CartShift ב-Shopify, WordPress, אפליקציות ווב, מיגרציות ואופטימיזציה, עם מסכים אמיתיים, החלטות פיתוח ותוצאות מדודות כשיש נתונים.' + : 'Explore CartShift projects across Shopify, WordPress, custom web apps, migrations, and performance optimization, with real screens, implementation decisions, and measured results where available.', url: '/work', image: featured?.hero.image, - keywords: [ - 'shopify case studies', - 'wordpress case studies', - 'web app case studies', - 'next.js case studies', - 'ecommerce migration case study', - 'shopify performance optimization', - 'client work', - 'ecommerce project examples', - ], + keywords: isHe + ? [ + 'פרויקטים בשופיפיי', + 'פרויקטים בוורדפרס', + 'פיתוח אפליקציות ווב', + 'מקרי בוחן מסחר אלקטרוני', + 'מיגרציה לשופיפיי', + 'אופטימיזציית ביצועים', + ] + : [ + 'shopify case studies', + 'wordpress case studies', + 'web app case studies', + 'next.js case studies', + 'ecommerce migration case study', + 'shopify performance optimization', + 'ecommerce project examples', + ], }, locale as 'en' | 'he' ); @@ -43,18 +56,22 @@ export default async function WorkPage({ params }: { params: Promise<{ locale: s setRequestLocale(locale as 'en' | 'he'); const caseStudies = getAllCaseStudies(locale); + const isHe = locale === 'he'; const breadcrumbSchema = generateBreadcrumbSchema( [ - { name: 'Home', url: '/' }, - { name: 'Work', url: '/work' }, + { name: isHe ? 'בית' : 'Home', url: '/' }, + { name: isHe ? 'פרויקטים' : 'Work', url: '/work' }, ], locale as 'en' | 'he' ); const collectionSchema = generateCollectionPageSchema({ - name: 'Our Work | Shopify, WordPress & Web App Projects', - description: - 'Recent Shopify, WordPress, web app, migration, and optimization projects from CartShift Studio.', + name: isHe + ? 'הפרויקטים שלנו | Shopify, WordPress ואפליקציות ווב' + : 'Our Work | Shopify, WordPress & Web App Projects', + description: isHe + ? 'פרויקטים נבחרים של CartShift ב-Shopify, WordPress, אפליקציות ווב, מיגרציות ואופטימיזציה.' + : 'Recent Shopify, WordPress, web app, migration, and optimization projects from CartShift Studio.', url: '/work', locale: locale as 'en' | 'he', items: caseStudies.map(cs => ({ From c66987939ad3eb02d2c788b4b436ff4c0bc62d2b Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:36:52 +0200 Subject: [PATCH 06/29] Fix case study metadata and structured data --- app/[locale]/(website)/work/[slug]/page.tsx | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/app/[locale]/(website)/work/[slug]/page.tsx b/app/[locale]/(website)/work/[slug]/page.tsx index 5e99afb7..951338ef 100644 --- a/app/[locale]/(website)/work/[slug]/page.tsx +++ b/app/[locale]/(website)/work/[slug]/page.tsx @@ -23,13 +23,16 @@ export async function generateMetadata({ params: Promise<{ locale: string; slug: string }>; }): Promise { const { locale, slug } = await params; + const isHe = locale === 'he'; const caseStudy = getCaseStudyBySlug(slug, locale); if (!caseStudy) { return genMeta( { - title: 'Case Study Not Found', - description: 'The requested case study could not be found.', + title: isHe ? 'הפרויקט לא נמצא' : 'Case Study Not Found', + description: isHe + ? 'הפרויקט המבוקש לא נמצא.' + : 'The requested case study could not be found.', url: `/work/${slug}`, noindex: true, }, @@ -40,14 +43,14 @@ export async function generateMetadata({ const keywords = [ caseStudy.platform.toLowerCase(), caseStudy.industry.toLowerCase(), - 'case study', - 'e-commerce success', - `${caseStudy.platform} development`, + isHe ? 'מקרה בוחן' : 'case study', + isHe ? 'פיתוח מסחר אלקטרוני' : 'e-commerce development', + `${caseStudy.platform} ${isHe ? 'פיתוח' : 'development'}`, ]; return genMeta( { - title: `${caseStudy.title} | Case Study`, + title: `${caseStudy.title} | ${isHe ? 'מקרה בוחן' : 'Case Study'}`, description: caseStudy.summary, url: `/work/${slug}`, type: 'article', @@ -73,10 +76,11 @@ export default async function CaseStudyPage({ const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://cart-shift.com'; + const isHe = locale === 'he'; const breadcrumbSchema = generateBreadcrumbSchema( [ - { name: 'Home', url: '/' }, - { name: 'Work', url: '/work' }, + { name: isHe ? 'בית' : 'Home', url: '/' }, + { name: isHe ? 'פרויקטים' : 'Work', url: '/work' }, { name: caseStudy.title, url: `/work/${slug}` }, ], locale as 'en' | 'he' @@ -85,7 +89,6 @@ export default async function CaseStudyPage({ const articleSchema = generateArticleSchema({ title: caseStudy.title, description: caseStudy.summary, - date: new Date().toISOString(), url: `${siteUrl}/${locale}/work/${slug}`, locale: locale as 'en' | 'he', category: caseStudy.industry, From 88bbde47545e8edd22fab5378ae180a7db47aa2b Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:37:03 +0200 Subject: [PATCH 07/29] Refine English case study language --- messages/en.json | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/messages/en.json b/messages/en.json index 61b75847..76fb6b6c 100644 --- a/messages/en.json +++ b/messages/en.json @@ -4651,7 +4651,7 @@ "hero": { "title": "Our Work", "subtitle": "Editorial case studies shaped around the brands behind the build.", - "description": "A curated look at the stores and websites we've designed, rebuilt, localized, and organized, using real visuals and verified project outcomes only.", + "description": "A curated look at the stores, platforms, and websites we designed or rebuilt, using real product screens, documented implementation decisions, and measured results where available.", "badge": "Selected Work", "featuredLabel": "Featured Project" }, @@ -4700,7 +4700,7 @@ "projectOverview": "Project Overview", "whatWeShipped": "What We Shipped", "selectedScreens": "Selected Screens", - "evidenceTitle": "Evidence & Outcomes", + "evidenceTitle": "Evidence & Change", "clientQuote": "Client Quote", "projectNotes": "Project Notes", "visitSite": "Visit Live Site", @@ -4714,7 +4714,13 @@ "getConsultation": "Get a Free Consultation", "viewMore": "View More Projects", "noProjects": "No Projects Found", - "noProjectsDesc": "Try changing the filter to see more projects." + "noProjectsDesc": "Try changing the filter to see more projects.", + "overviewEyebrow": "The Brief", + "deliveryEyebrow": "Delivery", + "evidenceEyebrow": "Project Evidence", + "evidenceResultsTitle": "Evidence & Results", + "whatChangedTitle": "What Changed", + "notesEyebrow": "Deeper Context" } }, "testimonials": { @@ -5802,4 +5808,4 @@ "secondaryButton": "Contact Us" } } -} \ No newline at end of file +} From 40d8299487f788bcbaf40cb9017f8203458f4c84 Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:37:05 +0200 Subject: [PATCH 08/29] Refine English case study language --- messages/src/en/website.json | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/messages/src/en/website.json b/messages/src/en/website.json index 56086050..cddcd19d 100644 --- a/messages/src/en/website.json +++ b/messages/src/en/website.json @@ -1255,7 +1255,7 @@ "hero": { "title": "Our Work", "subtitle": "Editorial case studies shaped around the brands behind the build.", - "description": "A curated look at the stores and websites we've designed, rebuilt, localized, and organized, using real visuals and verified project outcomes only.", + "description": "A curated look at the stores, platforms, and websites we designed or rebuilt, using real product screens, documented implementation decisions, and measured results where available.", "badge": "Selected Work", "featuredLabel": "Featured Project" }, @@ -1304,7 +1304,7 @@ "projectOverview": "Project Overview", "whatWeShipped": "What We Shipped", "selectedScreens": "Selected Screens", - "evidenceTitle": "Evidence & Outcomes", + "evidenceTitle": "Evidence & Change", "clientQuote": "Client Quote", "projectNotes": "Project Notes", "visitSite": "Visit Live Site", @@ -1318,7 +1318,13 @@ "getConsultation": "Get a Free Consultation", "viewMore": "View More Projects", "noProjects": "No Projects Found", - "noProjectsDesc": "Try changing the filter to see more projects." + "noProjectsDesc": "Try changing the filter to see more projects.", + "overviewEyebrow": "The Brief", + "deliveryEyebrow": "Delivery", + "evidenceEyebrow": "Project Evidence", + "evidenceResultsTitle": "Evidence & Results", + "whatChangedTitle": "What Changed", + "notesEyebrow": "Deeper Context" } }, "testimonials": { @@ -1398,7 +1404,12 @@ "wordpress": { "title": "Custom Web Design", "description": "A website as unique as your brand. Flexible, easy to manage, and built to stand out.", - "features": ["Custom Design", "Easy to Edit", "Online Store Ready", "SEO Optimized"] + "features": [ + "Custom Design", + "Easy to Edit", + "Online Store Ready", + "SEO Optimized" + ] }, "seo": { "title": "SEO & Organic Growth", @@ -1600,7 +1611,9 @@ "description": "Before spending more on ads, check the cart and checkout path for friction." } }, - "intentPicker": { "label": "Choose an optional analysis focus" }, + "intentPicker": { + "label": "Choose an optional analysis focus" + }, "relatedArticles": "Related store improvement guides", "form": { "title": "Analyze Your Store", From b12f1c5b82a412b8abe7ef471b1f598f33294f6e Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:37:09 +0200 Subject: [PATCH 09/29] Refine Hebrew case study language --- messages/he.json | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/messages/he.json b/messages/he.json index f786c252..42014140 100644 --- a/messages/he.json +++ b/messages/he.json @@ -4651,7 +4651,7 @@ "hero": { "title": "העבודות שלנו", "subtitle": "עמודי פרויקט ויזואליים שמותאמים למותג שמאחורי כל עבודה.", - "description": "מבט אוצרתי על האתרים והחנויות שבנינו, שדרגנו, לוקליזצנו וארגנו מחדש, עם ויזואל אמיתי ותוצאות מבוססות בלבד.", + "description": "מבט ממוקד על החנויות, הפלטפורמות והאתרים שתכננו או בנינו מחדש, עם מסכים אמיתיים, החלטות פיתוח מתועדות ותוצאות מדודות כשיש נתונים.", "badge": "עבודות נבחרות", "featuredLabel": "פרויקט נבחר" }, @@ -4700,7 +4700,7 @@ "projectOverview": "סקירת הפרויקט", "whatWeShipped": "מה בנינו", "selectedScreens": "מסכים נבחרים", - "evidenceTitle": "הוכחות ותוצרים", + "evidenceTitle": "הוכחות ושינוי", "clientQuote": "מה הלקוח אומר", "projectNotes": "הערות פרויקט", "visitSite": "לצפייה באתר", @@ -4714,7 +4714,13 @@ "getConsultation": "קבלו ייעוץ חינם", "viewMore": "עוד פרויקטים", "noProjects": "אין פרויקטים", - "noProjectsDesc": "נסו לשנות את הסינון כדי לראות יותר פרויקטים." + "noProjectsDesc": "נסו לשנות את הסינון כדי לראות יותר פרויקטים.", + "overviewEyebrow": "הבריף", + "deliveryEyebrow": "ביצוע", + "evidenceEyebrow": "הוכחות מהפרויקט", + "evidenceResultsTitle": "הוכחות ותוצאות", + "whatChangedTitle": "מה השתנה", + "notesEyebrow": "הקשר נוסף" } }, "testimonials": { @@ -5802,4 +5808,4 @@ "secondaryButton": "צרו קשר" } } -} \ No newline at end of file +} From 3859d7f5d84a747d0529c35db6c751451a6190fd Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:37:12 +0200 Subject: [PATCH 10/29] Refine Hebrew case study language --- messages/src/he/website.json | 37 +++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/messages/src/he/website.json b/messages/src/he/website.json index 75ba728f..fe646324 100644 --- a/messages/src/he/website.json +++ b/messages/src/he/website.json @@ -1207,7 +1207,12 @@ }, "performance": { "title": "ביצועים", - "items": ["ניטור מהירות", "אופטימיזציית ביצועים", "מעקב Core Web Vitals", "דוחות חודשיים"] + "items": [ + "ניטור מהירות", + "אופטימיזציית ביצועים", + "מעקב Core Web Vitals", + "דוחות חודשיים" + ] } }, "terms": { @@ -1250,7 +1255,7 @@ "hero": { "title": "העבודות שלנו", "subtitle": "עמודי פרויקט ויזואליים שמותאמים למותג שמאחורי כל עבודה.", - "description": "מבט אוצרתי על האתרים והחנויות שבנינו, שדרגנו, לוקליזצנו וארגנו מחדש, עם ויזואל אמיתי ותוצאות מבוססות בלבד.", + "description": "מבט ממוקד על החנויות, הפלטפורמות והאתרים שתכננו או בנינו מחדש, עם מסכים אמיתיים, החלטות פיתוח מתועדות ותוצאות מדודות כשיש נתונים.", "badge": "עבודות נבחרות", "featuredLabel": "פרויקט נבחר" }, @@ -1299,7 +1304,7 @@ "projectOverview": "סקירת הפרויקט", "whatWeShipped": "מה בנינו", "selectedScreens": "מסכים נבחרים", - "evidenceTitle": "הוכחות ותוצרים", + "evidenceTitle": "הוכחות ושינוי", "clientQuote": "מה הלקוח אומר", "projectNotes": "הערות פרויקט", "visitSite": "לצפייה באתר", @@ -1313,7 +1318,13 @@ "getConsultation": "קבלו ייעוץ חינם", "viewMore": "עוד פרויקטים", "noProjects": "אין פרויקטים", - "noProjectsDesc": "נסו לשנות את הסינון כדי לראות יותר פרויקטים." + "noProjectsDesc": "נסו לשנות את הסינון כדי לראות יותר פרויקטים.", + "overviewEyebrow": "הבריף", + "deliveryEyebrow": "ביצוע", + "evidenceEyebrow": "הוכחות מהפרויקט", + "evidenceResultsTitle": "הוכחות ותוצאות", + "whatChangedTitle": "מה השתנה", + "notesEyebrow": "הקשר נוסף" } }, "testimonials": { @@ -1383,12 +1394,22 @@ "shopify": { "title": "צמיחה באונליין", "description": "כל מה שצריך כדי למכור אונליין. אנחנו דואגים לעיצוב, להקמה ולביצועים כדי שתוכלו להתמקד במוצרים.", - "features": ["עיצוב והקמת חנויות", "פיתוחים מותאמים", "אופטימיזציית מהירות", "ליווי לצמיחה"] + "features": [ + "עיצוב והקמת חנויות", + "פיתוחים מותאמים", + "אופטימיזציית מהירות", + "ליווי לצמיחה" + ] }, "wordpress": { "title": "עיצוב אתרים מותאם", "description": "אתר ייחודי כמו המותג שלכם. גמיש, קל לניהול ובנוי לבלוט.", - "features": ["עיצוב ייחודי", "קל לעריכה", "מוכן לחנות", "מוכן ל-SEO"] + "features": [ + "עיצוב ייחודי", + "קל לעריכה", + "מוכן לחנות", + "מוכן ל-SEO" + ] }, "seo": { "title": "SEO וצמיחה אורגנית", @@ -1590,7 +1611,9 @@ "description": "לפני שמוציאים עוד על פרסום, בדקו חיכוך בעגלה ובדרך לתשלום." } }, - "intentPicker": { "label": "בחרו מוקד אופציונלי לבדיקה" }, + "intentPicker": { + "label": "בחרו מוקד אופציונלי לבדיקה" + }, "relatedArticles": "מדריכים קשורים לשיפור החנות", "form": { "title": "נתחו את החנות שלכם", From 0548e4a9ed4d15025a051344ba3324b7832d9791 Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:37:14 +0200 Subject: [PATCH 11/29] Update case study translation test fixtures --- tests/utils/test-utils.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/utils/test-utils.tsx b/tests/utils/test-utils.tsx index 92140a0f..4424ff33 100644 --- a/tests/utils/test-utils.tsx +++ b/tests/utils/test-utils.tsx @@ -48,11 +48,17 @@ const messages = { duration: 'Duration', services: 'Services', projectOverview: 'Project Overview', + overviewEyebrow: 'The Brief', whatWeShipped: 'What We Shipped', + deliveryEyebrow: 'Delivery', selectedScreens: 'Selected Screens', - evidenceTitle: 'Evidence & Outcomes', + evidenceTitle: 'Evidence & Change', + evidenceEyebrow: 'Project Evidence', + evidenceResultsTitle: 'Evidence & Results', + whatChangedTitle: 'What Changed', clientQuote: 'Client Quote', projectNotes: 'Project Notes', + notesEyebrow: 'Deeper Context', visitSite: 'Visit Live Site', galleryHint: 'Real homepage and supporting screens captured from the live site.', openImage: 'Expand Screenshot', From 2cc98c192d0cb68c415eb57b09308061c91d9b1b Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:39:08 +0200 Subject: [PATCH 12/29] Refine curalife-metabolic-wellness-platform case study --- .../curalife-metabolic-wellness-platform.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/content/case-studies/curalife-metabolic-wellness-platform.md b/content/case-studies/curalife-metabolic-wellness-platform.md index 2bf4a7bd..3b04301a 100644 --- a/content/case-studies/curalife-metabolic-wellness-platform.md +++ b/content/case-studies/curalife-metabolic-wellness-platform.md @@ -5,8 +5,10 @@ client: 'CuraLife' industry: 'Health & Wellness' platform: 'Shopify + Next.js' duration: '4 years 5 months' -featured: false +featured: true +portfolioOrder: 1 siteUrl: 'https://curalife.com/' +attribution: 'Work led by Yotam Faraggi during his in-house role as Full Stack Developer & R&D Lead at CuraLife, from July 2021 to November 2025.' brand: primary: '#2f7a57' accent: '#f0c27a' @@ -20,6 +22,9 @@ overview: title: 'Connecting supplements, clinical guidance, and secure intake into one product system' summary: 'This engagement spanned far beyond a typical storefront build. We worked across public acquisition pages, secure patient onboarding, Shopify commerce, HubSpot integrations, and the infrastructure needed to make the whole journey feel reliable for both customers and the internal team.' summary: 'Led digital R&D for CuraLife across Shopify commerce, a HIPAA-compliant telemedicine funnel, digital health experiences, and the integration layer that connected acquisition to care delivery.' +cta: + title: 'Building a complex Shopify or digital health ecosystem?' + description: 'We can connect commerce, product flows, integrations, and infrastructure into one maintainable system.' deliverables: - title: 'HIPAA-compliant patient intake funnel' description: 'Built a secure telemedicine registration flow in Next.js and TypeScript on GCP, designed to support high-trust healthcare onboarding without sacrificing usability.' @@ -48,18 +53,21 @@ evidence: - title: 'Telemedicine funnel reliability' value: '99.9% uptime' description: 'The secure intake flow supported thousands of patient registrations while staying reliable enough for health-related onboarding and follow-up.' + context: 'Production reliability metric from the secure intake flow; underlying operational dashboards are private.' before: 'Fragmented intake' after: 'Unified secure funnel' tone: 'quantitative' - title: 'Integration stability' value: '85% fewer failures' description: 'The new API and integration layer materially reduced brittle failures between Shopify and HubSpot, giving the team a steadier operational backbone.' + context: 'Relative reduction after replacing the legacy Shopify–HubSpot sync path; internal failure logs are not public.' before: 'Frequent sync issues' after: 'Resilient multi-layer client' tone: 'quantitative' - title: 'Page speed modernization' value: '60% faster' description: 'Moving key customer journeys onto a more modern stack improved load times and made the mobile experience feel much less heavy.' + context: 'Relative load-time improvement on modernized customer journeys versus the legacy implementation; raw performance logs are private.' before: 'Legacy bottlenecks' after: 'Faster modern frontend' tone: 'quantitative' @@ -95,6 +103,10 @@ services: - 'Performance Optimization' he: + attribution: 'העבודה הובלה על ידי יותם פרג''י במסגרת תפקידו הפנימי ב-CuraLife כ-Full Stack Developer & R&D Lead, מיולי 2021 עד נובמבר 2025.' + cta: + title: 'בונים מערכת Shopify או דיגיטל הלת׳ מורכבת?' + description: 'אפשר לחבר מסחר, זרימות מוצר, אינטגרציות ותשתיות למערכת אחת שקל יותר לתחזק ולהרחיב.' title: 'פלטפורמת הבריאות המטבולית של CuraLife' summary: 'הובלנו את המו״פ הדיגיטלי של CuraLife לאורך מסחר אלקטרוני בשופיפיי, פאנל טלרפואה תואם HIPAA, חוויות דיגיטל הלת׳, ושכבת האינטגרציה שחיברה בין רכישה לבין קליטת מטופלים.' industry: 'בריאות ואיכות חיים' @@ -133,18 +145,21 @@ he: - title: 'אמינות פאנל הטלרפואה' value: '99.9% זמינות' description: 'זרימת הקליטה המאובטחת תמכה באלפי רישומי מטופלים תוך שמירה על אמינות המתאימה לאונבורדינג בריאותי רגיש.' + context: 'מדד אמינות בסביבת production של זרימת הקליטה המאובטחת; לוחות הבקרה התפעוליים אינם ציבוריים.' before: 'קליטה מפוצלת' after: 'פאנל מאובטח אחוד' tone: 'quantitative' - title: 'יציבות האינטגרציות' value: '85% פחות כשלים' description: 'שכבת ה-API והאינטגרציה החדשה צמצמה בצורה משמעותית תקלות בין Shopify ל-HubSpot ונתנה לצוות תשתית תפעולית יציבה יותר.' + context: 'ירידה יחסית לאחר החלפת נתיב הסנכרון הישן בין Shopify ל-HubSpot; לוגי הכשלים הפנימיים אינם ציבוריים.' before: 'בעיות סנכרון תכופות' after: 'לקוח רב-שכבתי עמיד' tone: 'quantitative' - title: 'מודרניזציית מהירות' value: '60% מהיר יותר' description: 'המעבר לסטאק מודרני יותר שיפר זמני טעינה והפך את חוויית המובייל לקלה ומהירה משמעותית.' + context: 'שיפור יחסי בזמני הטעינה במסעות לקוח שעברו מהיישום הישן לסטאק המודרני; לוגי הביצועים הגולמיים אינם ציבוריים.' before: 'צווארי בקבוק ישנים' after: 'פרונטאנד מודרני מהיר' tone: 'quantitative' From 646ff5c49a84c6f105a01e1471cded907c58b11b Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:39:11 +0200 Subject: [PATCH 13/29] Refine i-love-my-honeypot-eco-ecommerce case study --- .../i-love-my-honeypot-eco-ecommerce.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/content/case-studies/i-love-my-honeypot-eco-ecommerce.md b/content/case-studies/i-love-my-honeypot-eco-ecommerce.md index dcdf156f..236100b9 100644 --- a/content/case-studies/i-love-my-honeypot-eco-ecommerce.md +++ b/content/case-studies/i-love-my-honeypot-eco-ecommerce.md @@ -6,6 +6,7 @@ industry: 'Health & Wellness' platform: 'Shopify' duration: '10 weeks' featured: true +portfolioOrder: 2 siteUrl: 'https://ilovemyhoneypot.com/' brand: primary: '#d338a4' @@ -20,6 +21,9 @@ overview: title: 'Turning a mission-led wellness catalog into a guided buying experience' summary: 'We redesigned the storefront around clarity, trust, and product education so customers could understand unfamiliar products, navigate Hebrew RTL content naturally, and find the right fit without feeling overwhelmed.' summary: 'Complete Shopify store development for an eco-friendly menstrual care brand, featuring product quiz integration, localized Hebrew content, and a cause-driven shopping experience.' +cta: + title: 'Need a Shopify store that helps customers choose with confidence?' + description: 'We can turn product education, localization, and merchandising into a clearer buying journey.' deliverables: - title: 'Guided product matching' description: 'Planned and integrated a product quiz flow that helps shoppers navigate a sensitive, high-consideration product range with more confidence.' @@ -41,7 +45,7 @@ gallery: caption: 'Product pages bring the media gallery, benefits, and buy actions into one tighter layout so fit and trust questions are answered closer to checkout.' evidence: - title: 'Product quiz launched' - value: 'New Capability' + value: 'Guided Quiz' description: 'The store now includes a guided quiz flow that helps customers narrow complex product choices through a more supportive decision journey.' before: 'No guided selection' after: 'Live quiz flow' @@ -59,7 +63,7 @@ evidence: after: 'Guided content across the storefront' tone: 'qualitative' - title: 'Mobile experience was tightened up' - value: 'Refined' + value: 'Mobile-first' description: 'The browsing and product experience was reworked mobile-first so discovery, comparison, and trust cues remain clear on smaller screens.' before: 'Basic mobile handling' after: 'Mobile-first flow' @@ -95,6 +99,9 @@ testimonial: # Hebrew Translations he: + cta: + title: 'צריכים חנות Shopify שעוזרת ללקוחות לבחור בביטחון?' + description: 'אפשר להפוך חינוך מוצרי, לוקליזציה ומרצ׳נדייזינג למסע קנייה ברור ומכוון יותר.' title: 'חנות מסחר אלקטרוני למוצרי מחזור ידידותיים לסביבה' summary: 'פיתוח חנות שופיפיי מלאה למותג מוצרי מחזור ידידותיים לסביבה, כולל שאלון התאמת מוצרים, תוכן בעברית וחוויית קנייה עם ערך חברתי.' industry: 'בריאות ואיכות חיים' @@ -126,7 +133,7 @@ he: caption: 'עמודי המוצר מרכזים גלריה, יתרונות ופעולות רכישה לפריסה אחת מהודקת יותר, שעונה על שאלות התאמה ואמון קרוב יותר לרגע הקנייה.' evidence: - title: 'השאלון עלה לאוויר' - value: 'יכולת חדשה' + value: 'שאלון מונחה' description: 'החנות כוללת כיום זרימת התאמה מונחית שמסייעת ללקוחות לצמצם בחירות מורכבות בדרך תומכת וברורה יותר.' before: 'בלי התאמה מונחית' after: 'שאלון חי' @@ -144,7 +151,7 @@ he: after: 'הדרכה משולבת בחוויה' tone: 'qualitative' - title: 'המובייל עבר הידוק משמעותי' - value: 'משופר' + value: 'Mobile-first' description: 'חוויית הגלישה והקנייה עוצבה מחדש בגישת mobile-first כך שגם במובייל נשמרים בהירות, השוואה וסימני אמון.' before: 'מובייל בסיסי' after: 'זרימה מותאמת מובייל' From 6282b4002d6d9d8ec882abe1ef71e18dff76e08e Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:39:17 +0200 Subject: [PATCH 14/29] Refine stiletto-piercing-disposable-jewelry-supply case study --- .../stiletto-piercing-disposable-jewelry-supply.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/content/case-studies/stiletto-piercing-disposable-jewelry-supply.md b/content/case-studies/stiletto-piercing-disposable-jewelry-supply.md index 47da28cd..f63aa6ce 100644 --- a/content/case-studies/stiletto-piercing-disposable-jewelry-supply.md +++ b/content/case-studies/stiletto-piercing-disposable-jewelry-supply.md @@ -6,6 +6,7 @@ industry: 'Professional Beauty & Piercing' platform: 'Shopify' duration: '' featured: true +portfolioOrder: 3 siteUrl: 'https://stilettopiercing.co.il/' brand: primary: '#8728af' @@ -20,6 +21,9 @@ overview: title: 'Giving a niche B2B catalog a stronger brand voice and clearer buying flow' summary: 'The goal was to make the storefront feel more deliberate than a generic product grid. We organized the experience around category context, cleaner merchandising, and stronger product storytelling so studio owners can understand what they are buying faster and trust the standards behind it.' summary: 'A brand-led Shopify storefront for disposable piercing tools and studio equipment, with clearer category framing, stronger product pages, and a more confident professional-facing experience.' +cta: + title: 'Selling a technical B2B catalog on Shopify?' + description: 'We can make complex products, standards, and purchase policies easier for professional buyers to understand and act on.' deliverables: - title: 'B2B-first storefront framing' description: 'Surfaced the business-only purchasing context early so the commercial model feels clear from the first interaction.' @@ -94,6 +98,9 @@ services: - 'Brand-Led Merchandising' he: + cta: + title: 'מוכרים קטלוג B2B טכני ב-Shopify?' + description: 'אפשר להפוך מוצרים מורכבים, תקנים ומדיניות רכישה לברורים יותר עבור קונים מקצועיים.' title: 'חנות האונליין של Stiletto Piercing Supply' summary: 'חוויית Shopify ממותגת עבור קטלוג ציוד פירסינג וציוד לסטודיו, עם מסגור קטגוריות ברור יותר, עמודי מוצר חזקים יותר, וחוויה מקצועית ובטוחה יותר לקונים עסקיים.' industry: 'ביוטי מקצועי ופירסינג' From 7c0d36ac5f51716ff275f88b91676e0fa1431008 Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:39:20 +0200 Subject: [PATCH 15/29] Refine alondon-community-portal case study --- .../case-studies/alondon-community-portal.md | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/content/case-studies/alondon-community-portal.md b/content/case-studies/alondon-community-portal.md index c8cf872e..77c69003 100644 --- a/content/case-studies/alondon-community-portal.md +++ b/content/case-studies/alondon-community-portal.md @@ -6,6 +6,7 @@ industry: 'Digital Publishing' platform: 'WordPress' duration: '8 weeks' featured: false +portfolioOrder: 4 siteUrl: 'https://alondon.net/' brand: primary: '#b82e2c' @@ -20,6 +21,9 @@ overview: title: 'Refreshing a legacy community portal without losing its voice' summary: 'We approached Alondon as an editorial product rather than a generic website redesign, focusing on hierarchy, readability, navigation, and a stronger structure for the breadth of content the publication carries.' summary: "Strategic redesign of London's premier Hebrew community portal, transforming a legacy magazine into a modern digital content hub focused on engagement and readability." +cta: + title: 'Running a content-heavy WordPress platform that needs clearer structure?' + description: 'We can reorganize navigation, editorial hierarchy, and mobile reading without flattening the character of the publication.' deliverables: - title: 'Editorial-first redesign' description: 'Shifted the visual language away from a generic site shell toward an experience that feels like a living digital magazine built around headlines and reading flow.' @@ -41,25 +45,25 @@ gallery: caption: 'Deeper feed sections now hold together more confidently, helping multiple content types coexist without collapsing into clutter.' evidence: - title: 'The portal moved from dated to editorial' - value: 'Redesign' + value: 'Editorial Redesign' description: 'The interface now presents the publication more like a modern content destination, with stronger hierarchy and improved visual consistency.' before: 'Legacy presentation' after: 'Editorial-led experience' tone: 'qualitative' - title: 'Navigation became easier to scan' - value: 'Reorganized' + value: 'Clearer IA' description: 'Key categories and business pathways were restructured so readers can move between current content, guides, and commercial areas with less friction.' before: 'Dense navigation' after: 'Clearer paths' tone: 'qualitative' - title: 'Content structure feels more intentional' - value: 'Structured' + value: 'Content Hierarchy' description: 'The new page organization gives different content types a clearer role, making the portal feel less fragmented and more readable.' before: 'Mixed content blocks' after: 'Organized editorial system' tone: 'qualitative' - title: 'Mobile reading experience improved' - value: 'Responsive' + value: 'Mobile Reading' description: 'The redesign tightened spacing and layout behavior across breakpoints so headlines, modules, and article entry points remain usable on mobile.' before: 'Basic responsiveness' after: 'Refined mobile flow' @@ -94,6 +98,9 @@ testimonial: # Hebrew Translations he: + cta: + title: 'מנהלים אתר WordPress עשיר בתוכן שצריך מבנה ברור יותר?' + description: 'אפשר לארגן מחדש ניווט, היררכיה עריכתית וקריאה במובייל בלי לאבד את האופי של המגזין.' title: 'Alondon - פורטל קהילה ישראלי בלונדון' summary: 'עיצוב מחדש אסטרטגי של פורטל הקהילה הישראלית המוביל בלונדון, הפיכת מגזין ותיק למרכז תוכן דיגיטלי מודרני המתמקד במעורבות וקריאות.' industry: 'הוצאה לאור ודיגיטל' @@ -125,26 +132,26 @@ he: caption: 'גם החלקים העמוקים יותר בפיד מחזיקים יחד טוב יותר, כך שסוגי תוכן שונים יכולים לחיות זה לצד זה בלי להפוך לעומס.' evidence: - title: 'הפורטל עבר ממראה מיושן לתחושה עריכתית' - value: 'Redesign' + value: 'עיצוב עריכתי' description: 'הממשק מציג כיום את המגזין כיעד תוכן מודרני, עם היררכיה ברורה יותר ועקביות ויזואלית משופרת.' before: 'מראה ישן' after: 'חוויה עריכתית' tone: 'qualitative' - title: 'הניווט נהיה קל יותר לסריקה' - value: 'מאורגן מחדש' + value: 'ארכיטקטורת מידע' description: 'הקטגוריות המרכזיות והמסלולים העסקיים אורגנו מחדש כך שקל יותר לנוע בין תוכן עדכני, מדריכים ואזורים מסחריים.' before: 'ניווט צפוף' after: 'מסלולים ברורים יותר' tone: 'qualitative' - title: 'מבנה התוכן נהיה מכוון יותר' - value: 'מובנה' + value: 'היררכיית תוכן' description: 'הארגון החדש נותן לכל סוג תוכן תפקיד ברור יותר, כך שהפורטל מרגיש פחות מפורק ויותר קריא.' before: 'בלוקים מעורבבים' after: 'מערכת עריכתית מאורגנת' tone: 'qualitative' - title: 'הקריאה במובייל השתפרה' - value: 'רספונסיבי' - description: 'העיצוב tightened את הריווח וההתנהגות של הפריסה בכל breakpoint, כך שכותרות ומודולים נשארים שימושיים גם במובייל.' + value: 'קריאה במובייל' + description: 'העיצוב הידק את הריווח וההתנהגות של הפריסה בכל breakpoint, כך שכותרות ומודולים נשארים שימושיים גם במובייל.' before: 'רספונסיביות בסיסית' after: 'זרימה ניידת משופרת' tone: 'qualitative' From 9eacceb2ae953db362e1ee3621ed39f36ce2bc31 Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:39:23 +0200 Subject: [PATCH 16/29] Refine carmel-faraggi-independent-design-studio case study --- .../carmel-faraggi-independent-design-studio.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/content/case-studies/carmel-faraggi-independent-design-studio.md b/content/case-studies/carmel-faraggi-independent-design-studio.md index bb3a3e63..d707dd2e 100644 --- a/content/case-studies/carmel-faraggi-independent-design-studio.md +++ b/content/case-studies/carmel-faraggi-independent-design-studio.md @@ -5,6 +5,7 @@ client: 'Carmel Faraggi' industry: 'Brand Identity, Art Direction & Graphic Design' platform: 'Next.js + Cloudflare' featured: true +portfolioOrder: 5 siteUrl: 'https://carmel-studio.com/' brand: primary: '#ed1c16' @@ -19,6 +20,9 @@ overview: title: 'Turning a personal design practice into a memorable digital studio' summary: 'Carmel Faraggi needed a portfolio that could carry the confidence of the work without becoming a conventional agency template. The site uses a tightly controlled cream, black, and red system, expressive typography, and editorial compositions to make the studio recognizable while keeping work discovery and project inquiries direct.' summary: 'A bold Next.js portfolio for Carmel Faraggi, combining oversized typography, editorial project layouts, an artist-focused service path, and a clear inquiry flow in one responsive studio experience.' +cta: + title: 'Need a portfolio that feels as distinctive as the work?' + description: 'We can turn a visual identity into a fast, focused website that helps the right clients understand the work and make contact.' deliverables: - title: 'Ownable studio identity' description: 'Translated the Carmel Faraggi name into a high-impact digital wordmark system, supported by a precise cream, black, and signal-red palette that remains consistent across every route.' @@ -94,6 +98,9 @@ services: - 'Cloudflare Deployment' he: + cta: + title: 'צריכים פורטפוליו שמרגיש ייחודי כמו העבודות עצמן?' + description: 'אפשר להפוך זהות ויזואלית לאתר מהיר וממוקד שעוזר ללקוחות הנכונים להבין את העבודה וליצור קשר.' title: 'אתר הסטודיו העצמאי של Carmel Faraggi' summary: 'פורטפוליו Next.js נועז עבור Carmel Faraggi, שמחבר טיפוגרפיה גדולה, פריסות פרויקט עריכתיות, מסלול ייעודי לאמנים ותהליך פנייה ברור לחוויית סטודיו רספונסיבית אחת.' industry: 'זהות מותג, ארט דיירקשן ועיצוב גרפי' From b5162316d444916f340f3875c8951262b8b6ddde Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:39:25 +0200 Subject: [PATCH 17/29] Refine hands-and-vision-artist-collective case study --- content/case-studies/hands-and-vision-artist-collective.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/content/case-studies/hands-and-vision-artist-collective.md b/content/case-studies/hands-and-vision-artist-collective.md index c66e20a7..4676467f 100644 --- a/content/case-studies/hands-and-vision-artist-collective.md +++ b/content/case-studies/hands-and-vision-artist-collective.md @@ -5,6 +5,7 @@ client: 'Hands & Vision Collective' industry: 'Art, Events & Creative Production' platform: 'WordPress + WooCommerce' featured: true +portfolioOrder: 6 siteUrl: 'https://handsandvision.com/' brand: primary: '#254b61' @@ -19,6 +20,9 @@ overview: title: 'Giving a multidisciplinary collective one coherent digital stage' summary: 'Hands & Vision spans live art, murals, digital work, industrial objects, stage design, artist representation, and collectible pieces. The platform turns that range into a navigable system without flattening the energy of the work, balancing strong imagery with clear service, artist, gallery, contact, and shop paths.' summary: 'A bilingual WordPress and WooCommerce platform for Hands & Vision, unifying artist discovery, creative services, gallery work, contact paths, and collectible commerce in a bold visual system.' +cta: + title: 'Building a creative platform for multiple audiences?' + description: 'We can structure services, artists, content, and commerce so each audience gets a clear path without losing the creative identity.' deliverables: - title: 'Collective-first visual identity' description: 'Built the experience around high-impact artwork, a custom Hands & Vision mark, and a petrol, lilac, pink, and warm-yellow palette that lets very different disciplines still feel part of one collective.' @@ -96,6 +100,9 @@ services: - 'Gallery Experience' he: + cta: + title: 'בונים פלטפורמה יצירתית לכמה קהלים שונים?' + description: 'אפשר לחבר שירותים, אמנים, תוכן ומסחר כך שלכל קהל יהיה מסלול ברור בלי לאבד את הזהות היצירתית.' title: 'פלטפורמת קולקטיב האמנים Hands & Vision' summary: 'פלטפורמת WordPress ו-WooCommerce דו-לשונית עבור Hands & Vision, שמחברת גילוי אמנים, שירותי קריאייטיב, גלריה, יצירת קשר ומסחר ביצירות למערכת ויזואלית אחת.' industry: 'אמנות, אירועים והפקה יצירתית' From bfc45be8469e569d812bbab290a2685e773afc9a Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:39:28 +0200 Subject: [PATCH 18/29] Refine colbotekk-label-collective-platform case study --- .../case-studies/colbotekk-label-collective-platform.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/content/case-studies/colbotekk-label-collective-platform.md b/content/case-studies/colbotekk-label-collective-platform.md index 34b168f2..2c0eac97 100644 --- a/content/case-studies/colbotekk-label-collective-platform.md +++ b/content/case-studies/colbotekk-label-collective-platform.md @@ -5,6 +5,7 @@ client: 'Colbo-Tekk TLV' industry: 'Music, Events & Community' platform: 'WordPress + WooCommerce' featured: false +portfolioOrder: 7 siteUrl: 'https://colbotekk.com/' brand: primary: '#1ecfd0' @@ -19,6 +20,9 @@ overview: title: 'Turning a scene identity into a connected digital platform' summary: 'Colbo-Tekk is not just a music page. The live site acts as a release archive, an event calendar, a radio surface, a merch storefront, and a community funnel. The work focused on making those worlds feel like one sharp experience instead of separate disconnected pages.' summary: 'A WordPress and WooCommerce platform for Colbo-Tekk that unifies music releases, artist discovery, events, radio, merch, and crew/community touchpoints under one rave-led visual system.' +cta: + title: 'Need one platform for releases, events, community, and commerce?' + description: 'We can connect different audience journeys into one coherent site without forcing them into a generic template.' deliverables: - title: 'Unified release and commerce flow' description: 'Structured the music store around preview-first release cards and direct purchase paths so tracks can be discovered and supported without leaving the brand world.' @@ -94,6 +98,9 @@ services: - 'Community Form Flows' he: + cta: + title: 'צריכים פלטפורמה אחת לריליסים, אירועים, קהילה ומסחר?' + description: 'אפשר לחבר מסעות קהל שונים לאתר אחד קוהרנטי בלי לדחוס אותם לתבנית גנרית.' title: 'פלטפורמת הלייבל והקולקטיב של Colbo-Tekk' summary: 'פלטפורמת WordPress ו-WooCommerce עבור Colbo-Tekk שמחברת בין ריליסים, גילוי אמנים, אירועים, רדיו, מרץ׳ ונקודות כניסה לקהילה תחת שפה ויזואלית אחת ומדויקת.' industry: 'מוזיקה, אירועים וקהילה' From 86b61b3da7bd438b8aa558aaf60ab935d89233d9 Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:39:30 +0200 Subject: [PATCH 19/29] Refine atlas-irwin-music-identity case study --- content/case-studies/atlas-irwin-music-identity.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/content/case-studies/atlas-irwin-music-identity.md b/content/case-studies/atlas-irwin-music-identity.md index d1d4ef22..33b11962 100644 --- a/content/case-studies/atlas-irwin-music-identity.md +++ b/content/case-studies/atlas-irwin-music-identity.md @@ -18,6 +18,9 @@ overview: title: 'Turning an artist identity into a release-ready digital home' summary: 'Atlas Irwin needed a website that felt less like a generic link hub and more like a branded listening environment. The experience centers the artist name, visual world, release momentum, and clear paths into music, story, contact, and fan conversion.' summary: 'A Next.js artist website for Atlas Irwin, pairing bold music branding, release-led navigation, platform links, contact paths, and newsletter capture in a fast Vercel-hosted experience.' +cta: + title: 'Need an artist site that turns identity into a release-ready digital home?' + description: 'We can connect music, story, contact, and audience capture in one focused experience built around the artist.' deliverables: - title: 'Immersive homepage identity' description: 'Built the first viewport around large artist typography, cosmic artwork, a direct music CTA, and a strong visual rhythm so the brand lands immediately.' @@ -93,6 +96,9 @@ services: - 'Newsletter Capture' he: + cta: + title: 'צריכים אתר אמן שהופך זהות לבית דיגיטלי מוכן לריליס?' + description: 'אפשר לחבר מוזיקה, סיפור, יצירת קשר ואיסוף קהל לחוויה אחת ממוקדת סביב האמן.' title: 'אתר האמן של Atlas Irwin' summary: 'אתר אמן ב-Next.js עבור Atlas Irwin, שמחבר מיתוג מוזיקלי חזק, ניווט סביב ריליס, לינקים לפלטפורמות, יצירת קשר והרשמה לעדכונים לחוויה מהירה על Vercel.' industry: 'מוזיקה ומיתוג אמן' From b8e030933e1236d8de7365fd778e74b7a6bfffbc Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:39:33 +0200 Subject: [PATCH 20/29] Refine pedro-music-digital-release-store case study --- content/case-studies/pedro-music-digital-release-store.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/content/case-studies/pedro-music-digital-release-store.md b/content/case-studies/pedro-music-digital-release-store.md index aa191f43..ebdf4409 100644 --- a/content/case-studies/pedro-music-digital-release-store.md +++ b/content/case-studies/pedro-music-digital-release-store.md @@ -18,6 +18,9 @@ overview: title: 'Building a release page that feels like part listening room, part digital storefront' summary: 'Pedro Music centers the release itself as the visual product. The homepage acts as an immersive launch canvas, while WooCommerce handles the deeper product and checkout flows for tracks and album bundles. The result feels more like an artist environment than a generic music shop.' summary: 'A WordPress and WooCommerce release storefront for Pedro Music, combining immersive hero visuals, inline playback, single-track products, and full-album bundle sales.' +cta: + title: 'Selling music directly without losing the artist experience?' + description: 'We can combine listening, release storytelling, and digital commerce so buying feels like part of the release rather than a separate shop.' deliverables: - title: 'Immersive launch landing page' description: 'Built the homepage as a strong visual campaign surface where artwork, title treatment, and playback controls all work together to frame the release.' @@ -93,6 +96,9 @@ services: - 'Artist Brand Translation' he: + cta: + title: 'רוצים למכור מוזיקה ישירות בלי לאבד את חוויית האמן?' + description: 'אפשר לחבר האזנה, סיפור ריליס ומסחר דיגיטלי כך שהרכישה תרגיש חלק מהריליס ולא חנות נפרדת.' title: 'חנות הריליסים הדיגיטלית של Pedro Music' summary: 'חנות ריליסים ב-WordPress ו-WooCommerce עבור Pedro Music, שמחברת בין ויזואל אימרסיבי, נגן מובנה, מוצרים לטרקים בודדים ומכירת אלבום מלא.' industry: 'מוזיקה ומסחר דיגיטלי' From f99378ff6d28683e5e38569349fce02abe94d4c7 Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:40:22 +0200 Subject: [PATCH 21/29] Tighten project notes for i-love-my-honeypot-eco-ecommerce --- .../i-love-my-honeypot-eco-ecommerce.md | 239 +++--------------- 1 file changed, 30 insertions(+), 209 deletions(-) diff --git a/content/case-studies/i-love-my-honeypot-eco-ecommerce.md b/content/case-studies/i-love-my-honeypot-eco-ecommerce.md index 236100b9..bb927dcc 100644 --- a/content/case-studies/i-love-my-honeypot-eco-ecommerce.md +++ b/content/case-studies/i-love-my-honeypot-eco-ecommerce.md @@ -186,223 +186,44 @@ he: role: 'מייסדת, I Love My Honeypot' content: | ## האתגר - - I Love My Honeypot הוא מותג ישראלי חלוצי למוצרי מחזור ידידותיים לסביבה, המתמקד בחלופות בר-קיימא למוצרים חד-פעמיים. כשפנו אלינו, הם התמודדו עם מספר אתגרים מרכזיים: - - - **פער בחינוך מוצרי** – לקוחות רבים לא הכירו מוצרי מחזור רב-פעמיים והזדקקו להכוונה לבחירת האופציה הנכונה - - **מבחר מוצרים מורכב** – עם גביעוני מחזור, דיסקיות, תחתונים לווסת ותחבושות רב-פעמיות, לקוחות הרגישו מוצפים מהאפשרויות - - **בניית אמון** – כמותג D2C שמקדם מוצרים ידידותיים לגוף, הם הזדקקו להוכחות חברתיות חזקות ותוכן חינוכי - - **אופטימיזציה לשוק המקומי** – השוק הישראלי דרש תוכן בעברית, תמחור בשקלים והתאמה תרבותית - - **שילוב מטרה חברתית** – המחויבות שלהם לתרום לעמותות סרטן צוואר הרחם נדרשה להיות משולבת בחוויית המותג - - ## הגישה שלנו - - פיתחנו אסטרטגיה מקיפה שמאזנת בין חינוך, קלות רכישה וערכי המותג. - - ### שלב 1: גילוי ואסטרטגיית מותג - - צלילה עמוקה לשוק מוצרי המחזור הבר-קיימא: - - ניתוח מיצוב מתחרים ופערים בשוק הישראלי - - מיפוי מסע הלקוח מהמודעות ועד לרכישה - - זיהוי חששות ושאלות מרכזיות של לקוחות פוטנציאליים - - פיתוח עמודי תוכן: בריאות, קיימות, העצמה, חינוך - - יצירת פרסונות משתמשים לקטגוריות מוצרים שונות - - תובנה מרכזית: רוב הלקוחות הפוטנציאליים הזדקקו לחינוך לפני שהרגישו בטוחים מספיק לרכוש. - - ### שלב 2: עיצוב UX וארכיטקטורת מוצרים - - בניית חוויית משתמש המתמקדת בהכוונה ואמון: - - **מערכת שאלון מוצרים** - - שאלון אינטראקטיבי להתאמת לקוחות למוצרים האידיאליים - - שאלות על אורח חיים, עוצמת זרימה, העדפות נוחות ורמת ניסיון - - המלצות מותאמות אישית עם הסברים ברורים - - אפשרות לשמור תוצאות ולחזור אליהן מאוחר יותר - - **ארגון מוצרים ברור** - - ניווט מבוסס קטגוריות: גביעונים, דיסקיות, תחתונים, תחבושות, אביזרים - - דפי מוצר מפורטים עם מדריכי מידות והוראות שימוש - - סרטוני הדרכה משולבים בתיאורי המוצרים - - כלי השוואה למוצרים דומים - - **אמון והוכחה חברתית** - - אינטגרציית ביקורות Judge.me עם תמונות לקוחות - - דירוגים ממוצעים מוצגים בבולטות - - עדויות לקוחות עם סיפורים אמיתיים - - הצגת תעודות ברורה: כותנה אורגנית, טבעוני, חומרים ממוחזרים - - ### שלב 3: פיתוח ולוקליזציה - - פיתוח שופיפיי מותאם עם תמיכה מלאה בעברית: - - **יישום טכני** - - תבנית מותאמת עם תמיכה RTL (ימין לשמאל) בכל האתר - - פונקציונליות שאלון עם אינטגרציית Typeform - - סינון מתקדם לפי סוג מוצר, מידה ותכונות - - עיצוב רספונסיבי Mobile-First - - **תוכן וחינוך** - - בלוג מקיף עם מדריכי מוצרים ותוכן לייף סטייל - - מדריכי How-To למשתמשים בפעם הראשונה - - מחשבון השפעה סביבתית - - מדורי שאלות נפוצות לכל קטגוריית מוצרים - - **שילוב המטרה החברתית** - - מעקב תרומות גלוי באתר - - מדור מודעות לסרטן צוואר הרחם - - מסרים על השפעה לאורך תהליך הקנייה - - ### שלב 4: השקה ואופטימיזציה - - בדיקות קפדניות ואופטימיזציה לאחר ההשקה: - - בדיקת תוכן בעברית והתאמה תרבותית - - הגדרת שער תשלום לשוק הישראלי (כרטיסי אשראי, ביט) - - אינטגרציית משלוחים עם חברות שליחויות מקומיות - - אופטימיזציית SEO למונחי חיפוש בעברית - - הגדרת אוטומציית אימיילים לסדרות חינוכיות - - ## התוצאות - - **חוויית לקוח משופרת** - - שאלון מוצרים פעיל שעוזר ללקוחות למצוא את המוצר המתאים - - שיעור החזרות נמוך הודות להתאמה מדויקת - - זמן שהייה ארוך יותר באתר בזכות תוכן חינוכי - - **נוכחות מותג חזקה** - - ביסוס כמותג מוביל במוצרי מחזור בר-קיימא בישראל - - קהילה גדלה של לקוחות נאמנים ושגרירי מותג - - שילוב מוצלח של נתינה צדקתית בזהות המותג - - **יסודות טכניים איתנים** - - אתר מהיר ומותאם מובייל - - תמיכה מלאה בעברית ו-RTL - - תשתית SEO חזקה לצמיחה אורגנית - - ## תובנות מרכזיות - - הפרויקט הזה הדגים איך מסחר אלקטרוני יכול להיות יותר מעסקאות בלבד: - - 1. **חינוך מניע מכירות** – לקוחות שמבינים את המוצרים מבצעים רכישות בביטחון וכמעט לא מחזירים פריטים - 2. **חוויות מונחות ממירות** – שאלוני מוצרים מבטלים שיתוק החלטות ובונים אמון - 3. **ערכים חשובים** – שילוב אותנטי של מטרה חברתית מהדהד עם צרכנים מודעים - 4. **לוקליזציה חיונית** – תמיכה מלאה בעברית והתאמה תרבותית היו קריטיות להצלחה בשוק - - I Love My Honeypot ממשיכים לצמוח כמותג מהימן בשוק הישראלי, ומוכיחים שמוצרים בר-קיימא יכולים להצליח כשמשלבים אותם עם חוויית מסחר אלקטרוני נכונה. + + מוצרי מחזור רב-פעמיים הם קטגוריה שדורשת הרבה ביטחון והסבר לפני רכישה. לקוחות צריכות להבין פורמטים פחות מוכרים, להשוות התאמה ושימוש ולסמוך על המוצר לפני שהן מוכנות לקנות. החנות הישראלית גם הייתה צריכה לעבוד באופן טבעי בעברית וב-RTL, ולא להרגיש כמו גרסה מתורגמת של חנות באנגלית. + + ## הגישה + + ארגנו את החוויה סביב ארבע החלטות מעשיות: + + - **בחירה מונחית:** שאלון מוצרים נותן ללקוחות חדשות מסלול ברור יותר לגביעוניות, דיסקיות, תחתונים, תחבושות ואביזרים. + - **חינוך מוצרי:** מדריכים, שאלות נפוצות, מידע על מידות והסברי שימוש נמצאים קרוב למסע הקנייה. + - **לוקליזציה מלאה:** ניווט, פריסה, תוכן והתנהגות רספונסיבית נבנו לעברית ול-RTL. + - **אמון סמוך לרכישה:** ביקורות, תקנים, יתרונות והכוונה מוצרית מוצגים בנקודות שבהן מתקבלת החלטה. + + ## היישום + + חנות ה-Shopify משלבת תבנית מותאמת ל-RTL, אינטגרציית Typeform לשאלון, גלישה mobile-first, תוכן מקומי ומבנה תוכן שתומך בהדרכה וב-SEO לאורך זמן. + + ## מה השתנה + + החנות עברה מחוויה שמתחילה בקטלוג למסע קנייה מונחה. ללקוחות יש היום דרכים ברורות יותר להבין את הקטגוריה, לצמצם אפשרויות ולהגיע לעמוד מוצר רלוונטי בלי להסתמך על ניחוש. מקרה הבוחן מתמקד בכוונה בשינויים שאפשר לראות במוצר וב-UX, ולא בטענות המרה שאין להן נתונים מוצגים. --- ## The Challenge -I Love My Honeypot is a pioneering Israeli eco-friendly menstrual care brand focused on sustainable alternatives to disposable products. When they approached us, they faced several key challenges: - -- **Product Education Gap** – Many customers were unfamiliar with reusable menstrual products and needed guidance to choose the right option -- **Complex Product Selection** – With menstrual cups, discs, period underwear, and reusable pads, customers felt overwhelmed by choices -- **Trust Building** – As a direct-to-consumer brand promoting body-friendly products, they needed strong social proof and educational content -- **Local Market Optimization** – The Israeli market required Hebrew content, shekel pricing, and culturally appropriate messaging -- **Cause Integration** – Their commitment to donating to cervical cancer charities needed to be woven into the brand experience - -## Our Approach - -We developed a comprehensive strategy that balanced education, ease of purchase, and brand values. - -### Phase 1: Discovery & Brand Strategy - -Deep dive into the sustainable menstrual care market: - -- Analyzed competitor positioning and gaps in the Israeli market -- Mapped the customer journey from awareness to purchase -- Identified key concerns and questions potential customers have -- Developed content pillars: Health, Sustainability, Empowerment, Education -- Created user personas for different product categories - -Key insight: Most potential customers needed education before feeling confident enough to purchase. - -### Phase 2: UX Design & Product Architecture - -Built a user experience centered on guidance and trust: - -**Product Quiz System** - -- Interactive questionnaire to match customers with ideal products -- Questions about lifestyle, flow, comfort preferences, and experience level -- Personalized recommendations with clear explanations -- Option to save results and revisit later - -**Clear Product Organization** - -- Category-based navigation: Cups, Discs, Underwear, Pads, Accessories -- Detailed product pages with size guides and usage instructions -- Video tutorials embedded in product descriptions -- Comparison tools for similar products - -**Trust & Social Proof** - -- Judge.me review integration with photo reviews -- Average ratings prominently displayed -- Customer testimonials with real stories -- Clear certifications: Organic cotton, vegan, recycled materials - -### Phase 3: Development & Localization - -Custom Shopify development with full Hebrew support: - -**Technical Implementation** - -- Custom theme with RTL (right-to-left) support throughout -- Quiz functionality with Typeform integration -- Advanced filtering by product type, size, and features -- Mobile-first responsive design - -**Content & Education** - -- Comprehensive blog with product guides and lifestyle content -- How-to guides for first-time users -- Sustainability impact calculator -- FAQ sections for each product category - -**Cause Integration** - -- Charitable donation tracker visible on site -- Cervical cancer awareness section -- Impact messaging throughout checkout flow - -### Phase 4: Launch & Optimization - -Rigorous testing and post-launch optimization: - -- Hebrew content review and cultural sensitivity check -- Payment gateway setup for Israeli market (credit cards, bit) -- Shipping integration with local carriers -- SEO optimization for Hebrew search terms -- Email automation setup for education sequences - -## The Results - -**Enhanced Customer Experience** - -- Active product quiz helping customers find the right product -- Low return rate thanks to accurate matching -- Longer time on site due to educational content - -**Strong Brand Presence** +Reusable menstrual care is a high-consideration category. Customers need help understanding unfamiliar formats, comparing fit and usage, and trusting the product before they are ready to buy. The Israeli storefront also needed to work naturally in Hebrew and RTL rather than feeling like a translated version of an English store. -- Established as a leading sustainable menstrual care brand in Israel -- Growing community of loyal customers and brand advocates -- Successful integration of charitable giving into brand identity +## The Approach -**Solid Technical Foundation** +We organized the experience around four practical decisions: -- Fast, mobile-optimized website -- Full Hebrew and RTL support -- Strong SEO foundation for organic growth +- **Guided selection:** a product quiz gives first-time shoppers a clearer route into cups, discs, underwear, pads, and accessories. +- **Product education:** guides, FAQs, size information, and usage content sit close to the shopping journey instead of in a separate knowledge layer. +- **Full localization:** navigation, layout, content, and responsive behavior were built for Hebrew and RTL. +- **Trust near purchase:** reviews, certifications, benefits, and product guidance are surfaced where customers are making decisions. -## Key Takeaways +## The Implementation -This project demonstrated how e-commerce can be more than just transactions: +The Shopify storefront combines a custom RTL-aware theme, Typeform quiz integration, mobile-first product browsing, localized content, and a content structure that supports ongoing education and SEO. -1. **Education Drives Sales** – Customers who understand products make confident purchases and rarely return items -2. **Guided Experiences Convert** – Product quizzes eliminate decision paralysis and build trust -3. **Values Matter** – Authentic cause integration resonates with conscious consumers -4. **Localization is Essential** – Full Hebrew support and cultural adaptation were crucial for market success +## What Changed -I Love My Honeypot continues to grow as a trusted brand in the Israeli market, proving that sustainable products can succeed when paired with the right e-commerce experience. +The store moved from a catalog-first experience to a guided buying journey. Customers now have clearer ways to understand the category, narrow their options, and reach a relevant product page without relying on guesswork. The case study intentionally focuses on observable product and UX changes rather than unsupported conversion claims. From e561950ae686d32bd5653a79b171721117a7fe12 Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:40:24 +0200 Subject: [PATCH 22/29] Tighten project notes for alondon-community-portal --- .../case-studies/alondon-community-portal.md | 136 ++++-------------- 1 file changed, 30 insertions(+), 106 deletions(-) diff --git a/content/case-studies/alondon-community-portal.md b/content/case-studies/alondon-community-portal.md index 77c69003..1c658187 100644 --- a/content/case-studies/alondon-community-portal.md +++ b/content/case-studies/alondon-community-portal.md @@ -183,119 +183,43 @@ he: author: "כרמל פרג'י" role: 'מערכת האתר' content: | - ## מי זה Alondon - - Alondon הוא אתר תוכן קהילתי בעברית שמיועד בעיקר לישראלים בלונדון ובבריטניה. זהו פורטל חדשות, מגזין, מדריכים וקהילה שמספק מידע רלוונטי לחיים בלונדון. - - האתר כולל: - - חדשות, תיירות, תרבות - - מדריכים על שכונות ולינה - - אירועים, תעסוקה ועסקים - - נדל״ן ועדכונים קהילתיים - - המותג התחיל כמגזין מודפס כבר בשנת 1994 והפך לאתר אינטרנט ב-2001; מאז 2017 הוא פועל בעיקר כפורטל תוכן דיגיטלי קהילתי. הוא נמצא בבעלות Alondon Communications ופונה לדוברי עברית שחיים או מבקרים בבריטניה. - - ## האתגר והמהות - - חשוב להדגיש מה הפרויקט **אינו**: - - זה לא אתר e-commerce או חנות אונליין - - זה לאו דווקא אתר מכירות - - זה לא מותג של מוצר פיזי - - המטרה הייתה ליצור אתר תוכן ומגזין דיגיטלי מוביל, עם עמודי מדריכים, חדשות וטורים בעברית על החיים בלונדון. האתגר היה ליצור חוויה שמעודדת צריכת תוכן מעמיקה ולא רכישה מהירה. - - ## הפתרון שלנו - - התמקדנו בשיפור התשתית והחוויה הכוללת על ידי התקנת Theme חדש והתאמתו המדויקת לצרכי הלקוח: - - ### עיצוב וחווית משתמש (UI/UX) - - **עיצוב מותאם תוכן**: התאמנו את העיצוב לאופן שבו משתמשים צורכים חדשות ומדריכים, עם דגש על נוחות קריאה (Typography) וריווח נכון. - - **התאמת קלאסים**: שינוי הגישה העיצובית מאתר מכירות (מוצרים/עגלה) לגישה קהילתית של מגזין. - - **חווית גלישה לקהל עברי**: שיפור הניווט, הקריאות וההתמצאות באתר עבור קהל דובר עברית. - - ### ארכיטקטורת מידע - - **ניווט הגיוני**: בנייה מחדש של מבנה הדפים כדי לאפשר מעבר זורם בין קטגוריות שונות כמו "לונדון עכשיו", תרבות, נדל״ן ועוד. - - **קישוריות עסקית**: בניית ניווט שמוביל ישירות לתכנים עסקיים ופרסומיים בהתאם ל-KPI של הלקוח. - - ## המטרה העסקית - - Alondon שואף להיות: - - **בית תוכן מרכזי** לקהילה הישראלית בלונדון. - - **משאב מידע שימושי** לחיים, תעסוקה והשתלבות בעיר. - - **פלטפורמה קהילתית** עם עדכונים שוטפים ואירועים. - - מהפן השיווקי, הנכס משמש כפלטפורמה למודעות, פרסום ושיתופי פעולה עסקיים, ולכן העיצוב תומך בחשיפה מקסימלית לתכנים אלו ללא הפרעה לחוויית המשתמש. - - ## יתרונות ותוצאות - - - **התאמה לאוכלוסייה**: האתר "תפור" לצרכים הספציפיים של ישראלים ודוברי עברית בבריטניה. - - **מוניטין והיסטוריה**: העיצוב החדש שומר על המורשת של המותג הותיק (מ-1994) אך מגיש אותה באריזה רלוונטית להיום. - - **גיוון תכנים**: הפלטפורמה תומכת במגוון עשיר של פורמטים - מחדשות קצרות ועד מדריכי עומק וטיולים. - - ### מבט לעתיד - - כדי להמשיך ולפתח את הפלטפורמה, הוטמעו יסודות ל: - - **מדידת UX**: כלים להבנת התוכן המושך ביותר. - - **Engagement**: תשתיות לניוזלטר ורישום משתמשים ליצירת קהילה פעילה. + ## הקשר + + Alondon הוא מגזין ופורטל ותיק בעברית לישראלים שחיים בלונדון ובבריטניה או מבקרים בהן. הפלטפורמה משלבת חדשות, כתבות מגזין, מדריכים, אירועים, מידע עסקי ומשאבים קהילתיים. + + ## האתגר + + זה לא היה redesign של חנות. הבעיה המרכזית הייתה עריכתית: אתר WordPress עשיר בתוכן היה צריך היררכיה ברורה יותר, ניווט קל יותר, קריאה טובה יותר במובייל והפרדה ברורה בין תוכן עדכני, מדריכים ירוקי-עד ותוכן מסחרי. + + ## היישום + + - התאמת Theme חדש לגלישה וקריאה עריכתית במקום למבנה של מסחר. + - ארגון מחדש של ארכיטקטורת המידע בין המדורים והקטגוריות המרכזיים. + - שיפור טיפוגרפיה בעברית, ריווח, ניווט והתנהגות רספונסיבית. + - יצירת כניסות ברורות יותר לתוכן עסקי ופרסומי בלי לתת לו להשתלט על חוויית הקריאה. + - שמירה על ארכיון הפרסום תוך הצגת התוכן העדכני במערכת מודרנית יותר. + + ## מה השתנה + + הפורטל מתנהג היום יותר כמו מגזין דיגיטלי קוהרנטי. קל יותר לסרוק מדורים, לנוע בין תוכן עריכתי למידע שימושי ולקרוא במסכים קטנים. מאחר שזה בעיקר שיפור של ארכיטקטורת מידע ו-UX עריכתי, מקרה הבוחן מציג את השינוי הזה ישירות ולא כטענת מכירות. --- -## About Alondon +## Context -Alondon is a Hebrew-language community content site designed primarily for Israelis in London and the UK. It serves as a news portal, magazine, guide hub, and community platform providing relevant information for life in London. - -The site covers: - -- News, Tourism, and Culture -- Neighborhood and Accommodation Guides -- Events, Employment, and Business -- Real Estate and Community Updates - -Starting as a printed magazine in 1994 and moving online in 2001, Alondon has operated primarily as a digital community content portal since 2017. Owned by Alondon Communications, it targets Hebrew speakers living in or visiting the UK. +Alondon is a long-running Hebrew publication for Israelis living in or visiting London and the UK. The platform combines news, magazine content, guides, events, business information, and community resources. ## The Challenge -It is crucial to define what this project is **not**: - -- It is not an e-commerce site or online store. -- It is not necessarily a sales site. -- It is not a physical product brand. - -It is a digital content site/magazine with guide pages, news, and columns in Hebrew about life in London. The challenge was to create an experience that encourages deep content consumption rather than quick transactions. - -## Our Solution - -We focused on upgrading the infrastructure and overall experience by installing a new Theme and adapting it precisely to the client's needs: - -### UI/UX Design - -- **Content-First Design**: We adapted the design to how users consume news and guides, emphasizing readability (Typography) and proper spacing. -- **Class Adaptation**: shifted the design approach from a sales site (products/cart) to a community magazine approach. -- **Hebrew User Experience**: Improved navigation, readability, and orientation for the Hebrew-speaking audience. - -### Information Architecture - -- **Logical Navigation**: Reconstructed the page structure to allow logical flow between different categories like "London Now", Culture, Real Estate, and more. -- **Business Connectivity**: Built navigation that leads directly to business and promotional content according to the client's KPIs. - -## Business Goals - -Alondon aims to be: - -- A **central content home** for the Israeli community in London. -- A **useful information resource** for living, working, and integrating into the city. -- A **community platform** with ongoing updates and events. - -From a marketing perspective, the asset serves as a platform for ads, advertising, and business collaborations, so the design supports maximum exposure to these contents without disrupting the user experience. - -## Key Benefits & Results +This was not an e-commerce redesign. The core problem was editorial: a content-heavy WordPress site needed clearer hierarchy, easier navigation, stronger mobile reading, and better separation between current stories, evergreen guides, and commercial content. -- **Audience Fit**: The site is "tailored" to the specific needs of Israelis and Hebrew speakers in the UK. -- **Reputation & History**: The new design preserves the legacy of the veteran brand (since 1994) but presents it in a package relevant to today. -- **Content Diversity**: The platform supports a rich variety of formats - from short news to in-depth guides and travel articles. +## The Implementation -### Future Outlook +- Adapted a new WordPress theme around editorial reading rather than product merchandising. +- Reworked information architecture across major sections and category paths. +- Improved Hebrew typography, spacing, navigation, and responsive behavior. +- Gave business and promotional content clearer entry points without letting it dominate the reading experience. +- Preserved the publication archive while presenting current content in a more modern system. -To continue developing the platform, foundations were laid for: +## What Changed -- **UX Measurement**: Tools to understand the most engaging content. -- **Engagement**: Infrastructures for newsletters and user registration to create an active community. +The portal now behaves more like a coherent digital publication. Readers can scan sections more quickly, move between editorial and practical content with less friction, and read comfortably on smaller screens. The result is primarily an information-architecture and editorial UX improvement, so the case study presents those changes directly rather than framing them as sales outcomes. From ecd51bb70ced500ab724c80bf9540449023bbd76 Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:40:26 +0200 Subject: [PATCH 23/29] Tighten project notes for carmel-faraggi-independent-design-studio --- ...armel-faraggi-independent-design-studio.md | 44 ++++++++----------- 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/content/case-studies/carmel-faraggi-independent-design-studio.md b/content/case-studies/carmel-faraggi-independent-design-studio.md index d707dd2e..2b5e44d6 100644 --- a/content/case-studies/carmel-faraggi-independent-design-studio.md +++ b/content/case-studies/carmel-faraggi-independent-design-studio.md @@ -184,39 +184,31 @@ he: - 'ניווט נגיש' - 'פריסה על Cloudflare' content: | - ## על Carmel Faraggi - - Carmel Faraggi היא מעצבת גרפית וארט דיירקטורית עצמאית בלונדון, שפועלת בזהות מותג, עיצוב גרפי, קמפיינים וויז׳ואלים למוזיקאים. הפרקטיקה שלה מגיעה מאמנות, מוזיקה ואופנה, והאתר היה צריך להרגיש כמו המשך ישיר של נקודת המבט הזו. - ## האתגר - - פורטפוליו של מעצבת נדרש לעשות יותר מלהציג תמונות יפות. הוא צריך להוכיח טווח, לבסס קול מזוהה, לעזור ללקוחות להבין התאמה וליצור נתיב טבעי לפנייה, בלי שהממשק יתחרה בעבודות עצמן. בנוסף, הקהל של סטודיו עצמאי כולל גם מותגים וגם אמנים עם צרכים ושפה שונים. - - ## הפתרון - - בנינו מערכת ויזואלית שמרגישה כמו זהות בפני עצמה: טיפוגרפיה שחורה גדולה, רקע קרם חם ואדום חד שמופיע כשדה גאומטרי וכצבע פעולה. הקומפוזיציות שומרות על מתח עריכתי, אבל מבנה העמודים נשאר פשוט — עבודות, מסלול לאמנים, אודות ויצירת קשר. - - אינדקס העבודות משתמש בתמונות רחבות ובמטא-דאטה תמציתי כדי לתת לכל פרויקט נוכחות ולשמור על סריקה מהירה. המסלול For Artists מדבר ישירות למוזיקאים ומחבר עטיפות, זהויות וויז׳ואלים לריליס להצעת מומחיות ברורה. עמוד האודות וטופס הפנייה משלימים את הסיפור ומעבירים את המבקר מהתרשמות לשיחה. - - ## התוצאה - - ל-Carmel Faraggi יש כעת סטודיו דיגיטלי עם קול שאי אפשר לבלבל: מספיק אקספרסיבי כדי לייצג את העבודה, מספיק מאופק כדי לתת לפרויקטים להוביל, ומספיק ברור כדי להפוך גילוי ויזואלי לפנייה אמיתית. + + Carmel Faraggi הייתה צריכה פורטפוליו שיכול לשאת זהות גרפית חזקה בלי להתחרות בעבודות עצמן. האתר גם היה צריך לדבר לשני קהלים קרובים אך שונים, מותגים שמחפשים עיצוב ומוזיקאים שמחפשים עבודה ויזואלית לאמנים, תוך שמירה על מסלול פשוט לפנייה. + + ## עיצוב ופיתוח + + תרגמנו את זהות הסטודיו למערכת ווב מאופקת שמבוססת על טיפוגרפיה גדולה, שדה קרם חם, גאומטריה אדומה חדה ותמונות פרויקט רחבות. אינדקס העבודות בנוי לסריקה ויזואלית מהירה, בעוד המסלול הייעודי לאמנים מציג הצעה ממוקדת יותר סביב עטיפות, זהויות, ויז׳ואלים לריליס וקמפיינים. + + המימוש ב-Next.js שומר על חוויה מהירה ורספונסיבית, וזרימת יצירת הקשר הופכת את הפורטפוליו מגלריה פסיבית לכלי עסקי שימושי. + + ## מה השתנה + + האתר המוגמר מרגיש כמו Carmel כבר מהמסך הראשון. במקביל, קטגוריות הפרויקטים, המסלולים לקהלים השונים ופעולות הפנייה נשארים ברורים מספיק כדי שהזהות הוויזואלית לא תפריע למציאת העבודה הרלוונטית או לפתיחת שיחה. --- -## About Carmel Faraggi - -Carmel Faraggi is an independent London graphic designer and art director working across brand identity, graphic design, campaigns, and visual worlds for musicians. Her practice comes through art, music, and fashion, and the website needed to feel like a direct extension of that point of view. - ## The Challenge -A designer portfolio has to do more than display polished images. It needs to prove range, establish a recognizable voice, help prospective clients judge fit, and create a natural route into an inquiry without letting the interface compete with the work. An independent studio also speaks to different audiences, including brands and artists with distinct needs and language. +Carmel Faraggi needed a portfolio that could carry a strong graphic identity without competing with the work itself. It also had to speak to two related audiences, brands looking for design and musicians looking for artist-focused visual work, while keeping the path to an inquiry simple. -## The Solution +## Design & Build -We built a visual system that behaves like an identity in its own right: oversized black display typography, a warm cream field, and sharp red used as both geometry and action color. The compositions maintain editorial tension while the site structure stays simple: work, a dedicated artist offer, about, and contact. +We translated the studio identity into a restrained web system built around oversized typography, a warm cream field, sharp red geometry, and large project imagery. The work index is optimized for fast visual scanning, while the dedicated artist route gives music clients a more specific proposition around cover art, identities, release visuals, and campaigns. -The work index uses wide imagery and concise metadata to give each project presence while preserving fast scanning. The For Artists route speaks directly to musicians and connects cover art, identities, and release visuals to a clear specialist proposition. The about page and structured inquiry form complete the story and move visitors from recognition to conversation. +The Next.js implementation keeps the experience fast and responsive, and the contact flow turns the portfolio from a passive gallery into a practical business tool. -## The Result +## What Changed -Carmel Faraggi now has a digital studio with an unmistakable voice: expressive enough to represent the work, restrained enough to let each project lead, and clear enough to turn visual discovery into a real project inquiry. +The finished site feels recognizably Carmel before a visitor reads a paragraph. At the same time, project categories, audience-specific routes, and inquiry actions stay clear enough that the visual identity never gets in the way of finding the right work or starting a conversation. From 7105700e39e5d7f53ba207c3ab8972c7ea027470 Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:40:29 +0200 Subject: [PATCH 24/29] Tighten project notes for hands-and-vision-artist-collective --- .../hands-and-vision-artist-collective.md | 58 +++++++------------ 1 file changed, 21 insertions(+), 37 deletions(-) diff --git a/content/case-studies/hands-and-vision-artist-collective.md b/content/case-studies/hands-and-vision-artist-collective.md index 4676467f..d6147152 100644 --- a/content/case-studies/hands-and-vision-artist-collective.md +++ b/content/case-studies/hands-and-vision-artist-collective.md @@ -188,51 +188,35 @@ he: - 'אינדקס אמנים' - 'חוויית גלריה' content: | - ## על Hands & Vision - - Hands & Vision הוא קולקטיב אמנים רב-תחומי שפועל באובייקטים תעשייתיים, אמנות לייב באירועים, ציורי קיר ומיצבים מרחביים, אמנות דיגיטלית, עיצוב במות, ייצוג אמנים ויצירות לאספנות. - - האתר נדרש לבצע כמה תפקידים במקביל: להציג את הקולקטיב, לאפשר גילוי של אמנים יחידים, להסביר שירותים שניתן להזמין, להוכיח את איכות העבודה בצורה ויזואלית, לתמוך במבקרים בעברית ובאנגלית וליצור מסלול טבעי גם לפניות וגם למסחר. - ## האתגר - - פורטפוליו מגוון כל כך עלול להפוך במהירות לעמוס ולא ברור. לקוח שמחפש שירות צריך בהירות, מבקר שמגיע בגלל האמנות רוצה חוויה, כל אמן צריך ייצוג משמעותי ואספן צריך מסלול מסחרי ישיר. האתגר היה להחזיק את כל הכוונות האלה יחד בלי להפוך את האתר לגריד סוכנות גנרי או לגלריה שאין בה ניווט שימושי. - - ## הפתרון - - החוויה מאורגנת בהיררכיה פשוטה: קודם הזהות הקולקטיבית, אחריה חמישה תחומי שירות, ואז אמנים, עבודות מהגלריה והזמנה ישירה ליצור משהו יחד. הדימויים החזקים נושאים את המשקל הרגשי, בזמן שטיפוגרפיה, צבע וניווט עקביים שומרים על שימושיות. - - מערכת WordPress המותאמת נותנת לכל סוג תוכן תפקיד ברור. עמודי השירות מסבירים מה ניתן להזמין, פרופילי האמנים מציגים את הנבחרת, הגלריה מספקת הוכחה ויזואלית, עמוד יצירת הקשר מטפל בכוונת הפרויקט ו-WooCommerce יוצר תשתית לעבודות לאספנות. - - ## פלטפורמה יצירתית דו-לשונית - - העברית מטופלת כחוויה ראשית ולא כתרגום משני. פריסה לוגית תומכת ב-RTL וב-LTR, ומחליף השפה שומר את הקולקטיב נגיש לקהל מקומי ובינלאומי מאותו ממשק. - - ## התוצאה - - ל-Hands & Vision יש כעת פלטפורמה אחת ובעלת נוכחות לפרקטיקה יצירתית רחבה: חזקה ויזואלית מספיק כדי להרגיש כמו העבודות, מובנית מספיק כדי לתמוך בגילוי שירותים וגמישה מספיק כדי לחבר ייצוג אמנים, הזמנות עבודה, סיפור גלריה ומסחר. + + Hands & Vision מחבר שירותים יצירתיים שניתן להזמין, ייצוג אמנים, עבודות גלריה, תוכן דו-לשוני ומסחר. הסיכון היה לקבל אתר מרשים ויזואלית אך חלש בניווט, או אתר מסודר מדי שמוחק את האופי של הקולקטיב. + + ## מבנה הפלטפורמה + + ארגנו את החוויה בהיררכיה ברורה: זהות הקולקטיב, חמישה תחומי שירות, פרופילי אמנים, עבודות גלריה, יצירת קשר ומסחר. לכל סוג תוכן יש תפקיד מוגדר, כך שלקוחות שירות יכולים להבין מה ניתן להזמין בזמן שמבקרים שמגיעים בגלל האמנות עדיין יכולים לגלוש בעבודות בלי להיכנס למשפך של סוכנות. + + ## מערכת דו-לשונית + + עברית ואנגלית חולקות את אותה ארכיטקטורת תוכן עם התנהגות לוגית ב-RTL וב-LTR. החלפת השפה לא יוצרת אתר שני ומנותק, והמסלולים לאמנים, שירותים ומסחר נשארים עקביים בשני הכיוונים. + + ## מה השתנה + + לקולקטיב יש עכשיו פלטפורמה אחת לכמה כוונות שונות. קל יותר לגלות שירותים, לכל אמן מיוצג יש יעד משלו, הגלריה מספקת הוכחה ויזואלית ו-WooCommerce יכול לתמוך בעבודות לאספנות בלי להפוך את כל האתר לחנות. --- -## About Hands & Vision - -Hands & Vision is a multidisciplinary artist collective working across industrial objects, live event art, murals and spatial installations, digital art, stage design, artist representation, and collectible work. - -The site needed to do several jobs at once: introduce the collective, make individual artists discoverable, explain commissionable services, prove the work visually, support Hebrew and English visitors, and create a natural route into both inquiries and commerce. - ## The Challenge -A portfolio this visually diverse can become chaotic quickly. A service buyer needs clarity, an art-led visitor wants immersion, an artist needs meaningful representation, and a collector needs a direct commercial path. The challenge was to hold those intents together without turning the site into a generic agency grid or a gallery with no useful navigation. - -## The Solution +Hands & Vision combines commissioned creative services, artist representation, gallery work, bilingual content, and commerce. The risk was either a visually impressive site with weak navigation or a highly structured site that flattened the character of the collective. -The experience is organized around a simple hierarchy: collective identity first, five service verticals second, then artists, gallery work, and a direct invitation to create something together. Strong artwork carries the emotional weight while consistent typography, color, and navigation keep the experience usable. +## Platform Structure -The custom WordPress system gives each content type a clear role. Services explain what can be commissioned, artist profiles introduce the roster, the gallery supplies visual proof, contact handles project intent, and WooCommerce provides a foundation for collectible work. +We organized the experience around a clear hierarchy: collective identity, five service verticals, individual artist profiles, gallery work, contact, and commerce. Each content type has a defined role, so service buyers can understand what is commissionable while art-led visitors can still browse the work without being pushed through an agency-style funnel. -## A Bilingual Creative Platform +## Bilingual System -Hebrew is treated as a first-class experience rather than a translated afterthought. Logical layout behavior supports RTL and LTR presentation, while the language switcher keeps the collective accessible to local and international audiences from the same interface. +Hebrew and English share the same content architecture with logical RTL and LTR behavior. The language switch does not create a second, disconnected experience, and artist, service, and commerce routes remain consistent across both directions. -## The Result +## What Changed -Hands & Vision now has one expressive platform for a broad creative practice: visually strong enough to feel like the work, structured enough to support service discovery, and flexible enough to connect artist representation, commissions, gallery storytelling, and commerce. +The collective now has one platform for several different intents. Services are easier to discover, represented artists have dedicated destinations, the gallery provides visual proof, and WooCommerce can support collectible work without turning the whole site into a store. From 847861950b57cb99a73bb04d0a066439919d0375 Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:41:14 +0200 Subject: [PATCH 25/29] Update case study gallery normalization tests --- tests/utils/case-studies.test.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/utils/case-studies.test.ts b/tests/utils/case-studies.test.ts index 651a6520..5bbb07dd 100644 --- a/tests/utils/case-studies.test.ts +++ b/tests/utils/case-studies.test.ts @@ -8,8 +8,8 @@ describe('case studies normalization', () => { expect(study).not.toBeNull(); expect(study?.overview.title).toContain('לרענן פורטל'); expect(study?.hero.alt).toContain('עלונדון'); - expect(study?.gallery[0]?.image).toBe(study?.hero.image); - expect(study?.gallery[1]?.caption).toContain('עמודי כתבה'); + expect(study?.gallery[0]?.image).not.toBe(study?.hero.image); + expect(study?.gallery[0]?.caption).toContain('עמודי כתבה'); expect(study?.siteUrl).toBe('https://alondon.net/'); }); @@ -45,7 +45,7 @@ describe('case studies normalization', () => { expect(study?.siteUrl).toBe('https://atlasirwin.com/'); expect(study?.platform).toBe('Next.js + Vercel'); expect(study?.thumbnail).toBe('/images/case-studies/atlas-irwin-music-identity/hero.jpg'); - expect(study?.gallery[0]?.image).toBe(study?.hero.image); + expect(study?.gallery[0]?.image).not.toBe(study?.hero.image); expect(study?.evidence).toEqual( expect.arrayContaining([ expect.objectContaining({ @@ -63,7 +63,7 @@ describe('case studies normalization', () => { expect(englishStudy).not.toBeNull(); expect(englishStudy?.siteUrl).toBe('https://handsandvision.com/'); expect(englishStudy?.platform).toBe('WordPress + WooCommerce'); - expect(englishStudy?.gallery).toHaveLength(4); + expect(englishStudy?.gallery).toHaveLength(3); expect(englishStudy?.evidence).toEqual( expect.arrayContaining([ expect.objectContaining({ value: '5 Service Verticals', tone: 'qualitative' }), @@ -73,10 +73,10 @@ describe('case studies normalization', () => { expect(hebrewStudy?.title).toContain('Hands & Vision'); expect(hebrewStudy?.hero.supportingCopy).toContain('דו-לשונית'); - expect(hebrewStudy?.content).toContain('## על Hands & Vision'); + expect(hebrewStudy?.content).toContain('## האתגר'); }); - it('keeps the homepage hero image as the first gallery item and default thumbnail', () => { + it('keeps the hero as the thumbnail without repeating it when dedicated gallery screens exist', () => { const normalized = normalizeCaseStudyRecord( { title: 'Homepage First', @@ -110,11 +110,11 @@ describe('case studies normalization', () => { expect(normalized.thumbnail).toBe('/images/homepage-first/hero.jpg'); expect(normalized.gallery[0]).toMatchObject({ - image: '/images/homepage-first/hero.jpg', - alt: 'Homepage screenshot', - caption: 'Homepage first copy', + image: '/images/homepage-first/gallery-02.jpg', + alt: 'Secondary screen', + caption: 'Secondary screen caption', }); - expect(normalized.gallery).toHaveLength(2); + expect(normalized.gallery).toHaveLength(1); }); it('normalizes legacy result rows into evidence entries when evidence is missing', () => { From a2dc8555b85049f77d1f8890194f9eb9f38d0f9b Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:41:22 +0200 Subject: [PATCH 26/29] Avoid synthetic case study sitemap dates --- app/sitemap.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/sitemap.ts b/app/sitemap.ts index 719c7027..ff602220 100644 --- a/app/sitemap.ts +++ b/app/sitemap.ts @@ -22,13 +22,13 @@ function generateAlternates(baseUrl: string, path: string): { languages: Record< function createLocalizedUrls( baseUrl: string, path: string, - lastModified: Date, + lastModified: Date | undefined, changeFrequency: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never', priority: number ) { return locales.map(locale => ({ url: `${baseUrl}/${locale}${path}`, - lastModified, + ...(lastModified && { lastModified }), changeFrequency, priority, alternates: generateAlternates(baseUrl, path), @@ -47,7 +47,7 @@ export default async function sitemap(): Promise { ); const caseStudyUrls = caseStudies.flatMap(study => - createLocalizedUrls(baseUrl, `/work/${study.slug}`, now, 'monthly', 0.7) + createLocalizedUrls(baseUrl, `/work/${study.slug}`, undefined, 'monthly', 0.7) ); const portfolioProjectUrls = portfolioShowcaseSlugs.flatMap(slug => From 1646f1be20779aedf19c4d96ea93e020a08291bd Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:42:38 +0200 Subject: [PATCH 27/29] Make Alondon summary factual and specific --- content/case-studies/alondon-community-portal.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/case-studies/alondon-community-portal.md b/content/case-studies/alondon-community-portal.md index 1c658187..4a9c1191 100644 --- a/content/case-studies/alondon-community-portal.md +++ b/content/case-studies/alondon-community-portal.md @@ -20,7 +20,7 @@ hero: overview: title: 'Refreshing a legacy community portal without losing its voice' summary: 'We approached Alondon as an editorial product rather than a generic website redesign, focusing on hierarchy, readability, navigation, and a stronger structure for the breadth of content the publication carries.' -summary: "Strategic redesign of London's premier Hebrew community portal, transforming a legacy magazine into a modern digital content hub focused on engagement and readability." +summary: "Strategic redesign of a long-running Hebrew community portal, reframing a legacy magazine as a modern digital publication with clearer navigation and reading flow." cta: title: 'Running a content-heavy WordPress platform that needs clearer structure?' description: 'We can reorganize navigation, editorial hierarchy, and mobile reading without flattening the character of the publication.' @@ -102,7 +102,7 @@ he: title: 'מנהלים אתר WordPress עשיר בתוכן שצריך מבנה ברור יותר?' description: 'אפשר לארגן מחדש ניווט, היררכיה עריכתית וקריאה במובייל בלי לאבד את האופי של המגזין.' title: 'Alondon - פורטל קהילה ישראלי בלונדון' - summary: 'עיצוב מחדש אסטרטגי של פורטל הקהילה הישראלית המוביל בלונדון, הפיכת מגזין ותיק למרכז תוכן דיגיטלי מודרני המתמקד במעורבות וקריאות.' + summary: 'עיצוב מחדש אסטרטגי של פורטל קהילה ותיק בעברית, שהפך מגזין ותיק לפרסום דיגיטלי מודרני עם ניווט וזרימת קריאה ברורים יותר.' industry: 'הוצאה לאור ודיגיטל' duration: '8 שבועות' hero: From 9f145c36e3e03d69fbc31ad7d988e852836664c1 Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:43:15 +0200 Subject: [PATCH 28/29] Test evidence labels and contextual case study CTAs --- tests/work/case-study-detail.test.tsx | 35 +++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/tests/work/case-study-detail.test.tsx b/tests/work/case-study-detail.test.tsx index e16e7636..91f0ae94 100644 --- a/tests/work/case-study-detail.test.tsx +++ b/tests/work/case-study-detail.test.tsx @@ -12,6 +12,11 @@ const baseCaseStudy: CaseStudy = { duration: '8 weeks', featured: true, siteUrl: 'https://example.com', + attribution: 'Work completed in an in-house product role.', + cta: { + title: 'Need a clearer Shopify buying journey?', + description: 'We can help connect UX, content, and implementation.', + }, brand: { primary: '#8db43f', accent: '#f6df87', @@ -56,6 +61,7 @@ const baseCaseStudy: CaseStudy = { title: 'Localization completed', value: 'RTL Complete', description: 'The storefront now supports Hebrew and RTL layouts end to end.', + context: 'Observed in the delivered storefront.', before: 'Partial', after: 'Complete', tone: 'qualitative', @@ -77,8 +83,12 @@ describe('CaseStudyDetailContent', () => { expect(screen.getAllByText('Project Overview').length).toBeGreaterThan(0); expect(screen.getAllByText('What We Shipped').length).toBeGreaterThan(0); expect(screen.getAllByText('Selected Screens').length).toBeGreaterThan(0); - expect(screen.getAllByText('Evidence & Outcomes').length).toBeGreaterThan(0); + expect(screen.getByRole('heading', { name: 'What Changed' })).toBeInTheDocument(); expect(screen.getByText('RTL Complete')).toBeInTheDocument(); + expect(screen.getByText('Observed in the delivered storefront.')).toBeInTheDocument(); + expect( + screen.getByRole('heading', { name: 'Need a clearer Shopify buying journey?' }) + ).toBeInTheDocument(); expect(screen.getByRole('link', { name: /Visit Live Site/i })).toHaveAttribute( 'href', 'https://example.com' @@ -98,7 +108,28 @@ describe('CaseStudyDetailContent', () => { expect(screen.getByRole('heading', { name: 'Test Case Study' })).toBeInTheDocument(); expect(screen.queryByText('Client Quote')).not.toBeInTheDocument(); - expect(screen.queryByText('Evidence & Outcomes')).not.toBeInTheDocument(); + expect(screen.queryByText('What Changed')).not.toBeInTheDocument(); + expect(screen.queryByText('Project Evidence')).not.toBeInTheDocument(); + }); + + it('labels quantitative evidence as results', () => { + const measuredCaseStudy: CaseStudy = { + ...baseCaseStudy, + evidence: [ + { + title: 'Integration stability', + value: '85% fewer failures', + description: 'The replacement integration path reduced sync failures.', + context: 'Relative comparison with the legacy sync path.', + tone: 'quantitative', + }, + ], + }; + + render(); + + expect(screen.getByRole('heading', { name: 'Evidence & Results' })).toBeInTheDocument(); + expect(screen.getByText('85% fewer failures')).toBeInTheDocument(); }); it('renders in RTL mode for Hebrew locale', () => { From d7cde3f50e64508261fe1965eba2c90442700aa2 Mon Sep 17 00:00:00 2001 From: Yotam Faraggi Date: Sun, 20 Sep 2026 11:43:49 +0200 Subject: [PATCH 29/29] Test portfolio ordering and CuraLife proof context --- tests/utils/case-studies.test.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/utils/case-studies.test.ts b/tests/utils/case-studies.test.ts index 5bbb07dd..0158c7cc 100644 --- a/tests/utils/case-studies.test.ts +++ b/tests/utils/case-studies.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { getCaseStudyBySlug, normalizeCaseStudyRecord } from '@/lib/case-studies'; +import { getAllCaseStudies, getCaseStudyBySlug, normalizeCaseStudyRecord } from '@/lib/case-studies'; describe('case studies normalization', () => { it('loads localized structured fields from markdown frontmatter', () => { @@ -22,12 +22,26 @@ describe('case studies normalization', () => { expect.arrayContaining([ expect.objectContaining({ value: '99.9% uptime', + context: expect.stringContaining('operational dashboards'), }), expect.objectContaining({ value: '85% fewer failures', + context: expect.stringContaining('legacy Shopify–HubSpot sync path'), }), ]) ); + expect(study?.attribution).toContain('Full Stack Developer & R&D Lead'); + expect(study?.cta?.title).toContain('complex Shopify'); + }); + + it('uses explicit portfolio order for the Work narrative', () => { + const studies = getAllCaseStudies('en'); + + expect(studies.slice(0, 3).map(study => study.slug)).toEqual([ + 'curalife-metabolic-wellness-platform', + 'i-love-my-honeypot-eco-ecommerce', + 'stiletto-piercing-disposable-jewelry-supply', + ]); }); it('supports case studies that omit duration metadata', () => {