feat(home): replace industries grid with Open Source Friday video (#1170)

* feat(home): replace industries grid with Open Source Friday video

Replaces the rotating industries section under the hero search bar with
an embed of the GitHub Open Source Friday episode (starting at 6:12).
Also widens the hero's right column and tightens the left text column
so the video sits comfortably without overflowing on standard laptop
viewports.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore(i18n): remove unused heroIndustries keys

The industries grid was replaced by a YouTube embed; only
'searchPlaceholder' is still referenced. Drop the prefix,
clickToExplore, and 36 industry labels across all 17 locales.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(home): i18n iframe title, lazy load, nocookie, width parity

Addresses PR review feedback on the YouTube embed:
- Translate iframe title via next-intl (new heroIndustries.videoTitle key)
- Add loading="lazy" to defer ~1MB of player JS
- Switch embed to youtube-nocookie.com for better cookie/privacy hygiene
- Restore max-w-lg so the video matches the search bar width

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: stop tracking local .env.docker

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Fatih Kadir Akın
2026-04-25 16:44:47 +03:00
committed by GitHub
parent fee294e35b
commit 887b3f3f3a
20 changed files with 33 additions and 820 deletions
+1
View File
@@ -48,3 +48,4 @@ next-env.d.ts
# Sentry Config File # Sentry Config File
.env.sentry-build-plugin .env.sentry-build-plugin
.env.docker
+1 -38
View File
@@ -1030,45 +1030,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "أو استكشف حسب المجال",
"clickToExplore": "انقر للاستكشاف",
"searchPlaceholder": "ابحث عن برومبتات...", "searchPlaceholder": "ابحث عن برومبتات...",
"teachers": "المعلمون", "videoTitle": "GitHub Open Source Friday"
"developers": "المطورون",
"marketers": "المسوقون",
"designers": "المصممون",
"writers": "الكتّاب",
"analysts": "المحللون",
"entrepreneurs": "رواد الأعمال",
"researchers": "الباحثون",
"students": "الطلاب",
"consultants": "المستشارون",
"engineers": "المهندسون",
"creators": "المبدعون",
"lawyers": "المحامون",
"doctors": "الأطباء",
"nurses": "الممرضون",
"accountants": "المحاسبون",
"salespeople": "المبيعات",
"recruiters": "التوظيف",
"managers": "المدراء",
"executives": "التنفيذيون",
"freelancers": "المستقلون",
"photographers": "المصورون",
"musicians": "الموسيقيون",
"artists": "الفنانون",
"architects": "المعماريون",
"scientists": "العلماء",
"journalists": "الصحفيون",
"editors": "المحررون",
"translators": "المترجمون",
"coaches": "المدربون",
"therapists": "المعالجون",
"trainers": "المدربون",
"chefs": "الطهاة",
"realtors": "العقاريون",
"investors": "المستثمرون",
"traders": "المتداولون"
}, },
"notFound": { "notFound": {
"title": "الصفحة غير موجودة", "title": "الصفحة غير موجودة",
+1 -38
View File
@@ -1025,45 +1025,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "və ya sahəyə görə kəşf edin",
"clickToExplore": "Kəşf etmək üçün klikləyin",
"searchPlaceholder": "Promptları axtar...", "searchPlaceholder": "Promptları axtar...",
"teachers": "Müəllimlər", "videoTitle": "GitHub Open Source Friday"
"developers": "Tərtibatçılar",
"marketers": "Marketoloqlar",
"designers": "Dizaynerlər",
"writers": "Yazıçılar",
"analysts": "Analitiklər",
"entrepreneurs": "Sahibkarlar",
"researchers": "Tədqiqatçılar",
"students": "Tələbələr",
"consultants": "Məsləhətçilər",
"engineers": "Mühəndislər",
"creators": "Yaradıcılar",
"lawyers": "Vəkillər",
"doctors": "Həkimlər",
"nurses": "Tibb bacıları",
"accountants": "Mühasiblər",
"salespeople": "Satıcılar",
"recruiters": "İşə götürənlər",
"managers": "Menecerlər",
"executives": "İcraçılar",
"freelancers": "Frilanslər",
"photographers": "Fotoqraflar",
"musicians": "Musiqiçilər",
"artists": "Rəssamlar",
"architects": "Memarlar",
"scientists": "Alimlər",
"journalists": "Jurnalistlər",
"editors": "Redaktorlar",
"translators": "Tərcüməçilər",
"coaches": "Məşqçilər",
"therapists": "Terapevtlər",
"trainers": "Təlimçilər",
"chefs": "Aşpazlar",
"realtors": "Rieltorlar",
"investors": "İnvestorlar",
"traders": "Treyderlər"
}, },
"promptBuilder": { "promptBuilder": {
"title": "Prompt Qurma Agenti", "title": "Prompt Qurma Agenti",
+1 -38
View File
@@ -1030,45 +1030,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "oder nach Branche erkunden",
"clickToExplore": "Klicke zum Erkunden",
"searchPlaceholder": "Prompts suchen...", "searchPlaceholder": "Prompts suchen...",
"teachers": "Lehrer", "videoTitle": "GitHub Open Source Friday"
"developers": "Entwickler",
"marketers": "Marketer",
"designers": "Designer",
"writers": "Autoren",
"analysts": "Analysten",
"entrepreneurs": "Unternehmer",
"researchers": "Forscher",
"students": "Studenten",
"consultants": "Berater",
"engineers": "Ingenieure",
"creators": "Creator",
"lawyers": "Anwälte",
"doctors": "Ärzte",
"nurses": "Krankenpfleger",
"accountants": "Buchhalter",
"salespeople": "Verkäufer",
"recruiters": "Recruiter",
"managers": "Manager",
"executives": "Führungskräfte",
"freelancers": "Freelancer",
"photographers": "Fotografen",
"musicians": "Musiker",
"artists": "Künstler",
"architects": "Architekten",
"scientists": "Wissenschaftler",
"journalists": "Journalisten",
"editors": "Redakteure",
"translators": "Übersetzer",
"coaches": "Coaches",
"therapists": "Therapeuten",
"trainers": "Trainer",
"chefs": "Köche",
"realtors": "Makler",
"investors": "Investoren",
"traders": "Händler"
}, },
"notFound": { "notFound": {
"title": "Seite nicht gefunden", "title": "Seite nicht gefunden",
+1 -38
View File
@@ -1051,45 +1051,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "ή εξερευνήστε ανά κλάδο",
"clickToExplore": "Κάντε κλικ για εξερεύνηση",
"searchPlaceholder": "Αναζήτηση prompts...", "searchPlaceholder": "Αναζήτηση prompts...",
"teachers": "Εκπαιδευτικούς", "videoTitle": "GitHub Open Source Friday"
"developers": "Προγραμματιστές",
"marketers": "Μάρκετερ",
"designers": "Σχεδιαστές",
"writers": "Συγγραφείς",
"analysts": "Αναλυτές",
"entrepreneurs": "Επιχειρηματίες",
"researchers": "Ερευνητές",
"students": "Φοιτητές",
"consultants": "Συμβούλους",
"engineers": "Μηχανικούς",
"creators": "Δημιουργούς",
"lawyers": "Δικηγόρους",
"doctors": "Γιατρούς",
"nurses": "Νοσηλευτές",
"accountants": "Λογιστές",
"salespeople": "Πωλητές",
"recruiters": "Recruiters",
"managers": "Διευθυντές",
"executives": "Στελέχη",
"freelancers": "Ελεύθερους",
"photographers": "Φωτογράφους",
"musicians": "Μουσικούς",
"artists": "Καλλιτέχνες",
"architects": "Αρχιτέκτονες",
"scientists": "Επιστήμονες",
"journalists": "Δημοσιογράφους",
"editors": "Συντάκτες",
"translators": "Μεταφραστές",
"coaches": "Προπονητές",
"therapists": "Θεραπευτές",
"trainers": "Εκπαιδευτές",
"chefs": "Σεφ",
"realtors": "Μεσίτες",
"investors": "Επενδυτές",
"traders": "Traders"
}, },
"promptBuilder": { "promptBuilder": {
"title": "Prompt Building Agent", "title": "Prompt Building Agent",
+1 -38
View File
@@ -1025,45 +1025,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "or explore by industry",
"clickToExplore": "Click to explore",
"searchPlaceholder": "Search prompts...", "searchPlaceholder": "Search prompts...",
"teachers": "Teachers", "videoTitle": "GitHub Open Source Friday"
"developers": "Developers",
"marketers": "Marketers",
"designers": "Designers",
"writers": "Writers",
"analysts": "Analysts",
"entrepreneurs": "Entrepreneurs",
"researchers": "Researchers",
"students": "Students",
"consultants": "Consultants",
"engineers": "Engineers",
"creators": "Creators",
"lawyers": "Lawyers",
"doctors": "Doctors",
"nurses": "Nurses",
"accountants": "Accountants",
"salespeople": "Salespeople",
"recruiters": "Recruiters",
"managers": "Managers",
"executives": "Executives",
"freelancers": "Freelancers",
"photographers": "Photographers",
"musicians": "Musicians",
"artists": "Artists",
"architects": "Architects",
"scientists": "Scientists",
"journalists": "Journalists",
"editors": "Editors",
"translators": "Translators",
"coaches": "Coaches",
"therapists": "Therapists",
"trainers": "Trainers",
"chefs": "Chefs",
"realtors": "Realtors",
"investors": "Investors",
"traders": "Traders"
}, },
"promptBuilder": { "promptBuilder": {
"title": "Prompt Building Agent", "title": "Prompt Building Agent",
+1 -38
View File
@@ -1030,45 +1030,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "o explora por industria",
"clickToExplore": "Haz clic para explorar",
"searchPlaceholder": "Buscar prompts...", "searchPlaceholder": "Buscar prompts...",
"teachers": "Profesores", "videoTitle": "GitHub Open Source Friday"
"developers": "Desarrolladores",
"marketers": "Marketers",
"designers": "Diseñadores",
"writers": "Escritores",
"analysts": "Analistas",
"entrepreneurs": "Emprendedores",
"researchers": "Investigadores",
"students": "Estudiantes",
"consultants": "Consultores",
"engineers": "Ingenieros",
"creators": "Creadores",
"lawyers": "Abogados",
"doctors": "Médicos",
"nurses": "Enfermeros",
"accountants": "Contadores",
"salespeople": "Vendedores",
"recruiters": "Reclutadores",
"managers": "Gerentes",
"executives": "Ejecutivos",
"freelancers": "Freelancers",
"photographers": "Fotógrafos",
"musicians": "Músicos",
"artists": "Artistas",
"architects": "Arquitectos",
"scientists": "Científicos",
"journalists": "Periodistas",
"editors": "Editores",
"translators": "Traductores",
"coaches": "Coaches",
"therapists": "Terapeutas",
"trainers": "Entrenadores",
"chefs": "Chefs",
"realtors": "Agentes",
"investors": "Inversores",
"traders": "Traders"
}, },
"notFound": { "notFound": {
"title": "Página No Encontrada", "title": "Página No Encontrada",
+1 -38
View File
@@ -1025,45 +1025,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "یا بر اساس صنعت کاوش کنید",
"clickToExplore": "برای کاوش کلیک کنید",
"searchPlaceholder": "جستجوی پرامپت...", "searchPlaceholder": "جستجوی پرامپت...",
"teachers": "معلمان", "videoTitle": "GitHub Open Source Friday"
"developers": "توسعه‌دهندگان",
"marketers": "بازاریابان",
"designers": "طراحان",
"writers": "نویسندگان",
"analysts": "تحلیلگران",
"entrepreneurs": "کارآفرینان",
"researchers": "پژوهشگران",
"students": "دانشجویان",
"consultants": "مشاوران",
"engineers": "مهندسان",
"creators": "خالقان",
"lawyers": "وکلا",
"doctors": "پزشکان",
"nurses": "پرستاران",
"accountants": "حسابداران",
"salespeople": "فروشندگان",
"recruiters": "استخدام‌کنندگان",
"managers": "مدیران",
"executives": "مدیران ارشد",
"freelancers": "فریلنسرها",
"photographers": "عکاسان",
"musicians": "موسیقیدانان",
"artists": "هنرمندان",
"architects": "معماران",
"scientists": "دانشمندان",
"journalists": "روزنامه‌نگاران",
"editors": "ویراستاران",
"translators": "مترجمان",
"coaches": "مربیان",
"therapists": "درمانگران",
"trainers": "آموزش‌دهندگان",
"chefs": "سرآشپزها",
"realtors": "مشاوران املاک",
"investors": "سرمایه‌گذاران",
"traders": "معامله‌گران"
}, },
"promptBuilder": { "promptBuilder": {
"title": "عامل ساخت پرامپت", "title": "عامل ساخت پرامپت",
+1 -38
View File
@@ -1030,45 +1030,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "ou explorez par secteur",
"clickToExplore": "Cliquez pour explorer",
"searchPlaceholder": "Rechercher des prompts...", "searchPlaceholder": "Rechercher des prompts...",
"teachers": "Enseignants", "videoTitle": "GitHub Open Source Friday"
"developers": "Développeurs",
"marketers": "Marketeurs",
"designers": "Designers",
"writers": "Écrivains",
"analysts": "Analystes",
"entrepreneurs": "Entrepreneurs",
"researchers": "Chercheurs",
"students": "Étudiants",
"consultants": "Consultants",
"engineers": "Ingénieurs",
"creators": "Créateurs",
"lawyers": "Avocats",
"doctors": "Médecins",
"nurses": "Infirmiers",
"accountants": "Comptables",
"salespeople": "Commerciaux",
"recruiters": "Recruteurs",
"managers": "Managers",
"executives": "Dirigeants",
"freelancers": "Freelances",
"photographers": "Photographes",
"musicians": "Musiciens",
"artists": "Artistes",
"architects": "Architectes",
"scientists": "Scientifiques",
"journalists": "Journalistes",
"editors": "Rédacteurs",
"translators": "Traducteurs",
"coaches": "Coachs",
"therapists": "Thérapeutes",
"trainers": "Formateurs",
"chefs": "Chefs",
"realtors": "Agents",
"investors": "Investisseurs",
"traders": "Traders"
}, },
"notFound": { "notFound": {
"title": "Page Non Trouvée", "title": "Page Non Trouvée",
+1 -38
View File
@@ -1051,45 +1051,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "או חקור לפי תעשייה",
"clickToExplore": "לחץ לחקירה",
"searchPlaceholder": "חפש פרומפטים...", "searchPlaceholder": "חפש פרומפטים...",
"teachers": "מורים", "videoTitle": "GitHub Open Source Friday"
"developers": "מפתחים",
"marketers": "משווקים",
"designers": "מעצבים",
"writers": "סופרים",
"analysts": "אנליסטים",
"entrepreneurs": "יזמים",
"researchers": "חוקרים",
"students": "סטודנטים",
"consultants": "יועצים",
"engineers": "מהנדסים",
"creators": "יוצרים",
"lawyers": "עורכי דין",
"doctors": "רופאים",
"nurses": "אחיות",
"accountants": "רואי חשבון",
"salespeople": "אנשי מכירות",
"recruiters": "מגייסים",
"managers": "מנהלים",
"executives": "בכירים",
"freelancers": "פרילנסרים",
"photographers": "צלמים",
"musicians": "מוזיקאים",
"artists": "אמנים",
"architects": "אדריכלים",
"scientists": "מדענים",
"journalists": "עיתונאים",
"editors": "עורכים",
"translators": "מתרגמים",
"coaches": "מאמנים",
"therapists": "מטפלים",
"trainers": "מדריכים",
"chefs": "שפים",
"realtors": "סוכני נדל״ן",
"investors": "משקיעים",
"traders": "סוחרים"
}, },
"promptBuilder": { "promptBuilder": {
"title": "סוכן בניית פרומפטים", "title": "סוכן בניית פרומפטים",
+1 -38
View File
@@ -1030,45 +1030,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "o esplora per settore",
"clickToExplore": "Clicca per esplorare",
"searchPlaceholder": "Cerca prompt...", "searchPlaceholder": "Cerca prompt...",
"teachers": "Insegnanti", "videoTitle": "GitHub Open Source Friday"
"developers": "Sviluppatori",
"marketers": "Marketer",
"designers": "Designer",
"writers": "Scrittori",
"analysts": "Analisti",
"entrepreneurs": "Imprenditori",
"researchers": "Ricercatori",
"students": "Studenti",
"consultants": "Consulenti",
"engineers": "Ingegneri",
"creators": "Creatori",
"lawyers": "Avvocati",
"doctors": "Medici",
"nurses": "Infermieri",
"accountants": "Contabili",
"salespeople": "Venditori",
"recruiters": "Recruiter",
"managers": "Manager",
"executives": "Dirigenti",
"freelancers": "Freelancer",
"photographers": "Fotografi",
"musicians": "Musicisti",
"artists": "Artisti",
"architects": "Architetti",
"scientists": "Scienziati",
"journalists": "Giornalisti",
"editors": "Redattori",
"translators": "Traduttori",
"coaches": "Coach",
"therapists": "Terapeuti",
"trainers": "Formatori",
"chefs": "Chef",
"realtors": "Agenti",
"investors": "Investitori",
"traders": "Trader"
}, },
"notFound": { "notFound": {
"title": "Pagina Non Trovata", "title": "Pagina Non Trovata",
+1 -38
View File
@@ -1030,45 +1030,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "または業種で探す",
"clickToExplore": "クリックして探索",
"searchPlaceholder": "プロンプトを検索...", "searchPlaceholder": "プロンプトを検索...",
"teachers": "教師", "videoTitle": "GitHub Open Source Friday"
"developers": "開発者",
"marketers": "マーケター",
"designers": "デザイナー",
"writers": "ライター",
"analysts": "アナリスト",
"entrepreneurs": "起業家",
"researchers": "研究者",
"students": "学生",
"consultants": "コンサルタント",
"engineers": "エンジニア",
"creators": "クリエイター",
"lawyers": "弁護士",
"doctors": "医師",
"nurses": "看護師",
"accountants": "会計士",
"salespeople": "営業",
"recruiters": "採用担当",
"managers": "マネージャー",
"executives": "経営者",
"freelancers": "フリーランス",
"photographers": "写真家",
"musicians": "ミュージシャン",
"artists": "アーティスト",
"architects": "建築家",
"scientists": "科学者",
"journalists": "ジャーナリスト",
"editors": "編集者",
"translators": "翻訳者",
"coaches": "コーチ",
"therapists": "セラピスト",
"trainers": "トレーナー",
"chefs": "シェフ",
"realtors": "不動産業者",
"investors": "投資家",
"traders": "トレーダー"
}, },
"notFound": { "notFound": {
"title": "ページが見つかりません", "title": "ページが見つかりません",
+1 -38
View File
@@ -1030,45 +1030,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "또는 업종별 탐색",
"clickToExplore": "클릭하여 탐색",
"searchPlaceholder": "프롬프트 검색...", "searchPlaceholder": "프롬프트 검색...",
"teachers": "교사", "videoTitle": "GitHub Open Source Friday"
"developers": "개발자",
"marketers": "마케터",
"designers": "디자이너",
"writers": "작가",
"analysts": "분석가",
"entrepreneurs": "창업가",
"researchers": "연구자",
"students": "학생",
"consultants": "컨설턴트",
"engineers": "엔지니어",
"creators": "크리에이터",
"lawyers": "변호사",
"doctors": "의사",
"nurses": "간호사",
"accountants": "회계사",
"salespeople": "영업사원",
"recruiters": "채용담당자",
"managers": "매니저",
"executives": "임원",
"freelancers": "프리랜서",
"photographers": "사진작가",
"musicians": "음악가",
"artists": "아티스트",
"architects": "건축가",
"scientists": "과학자",
"journalists": "기자",
"editors": "편집자",
"translators": "번역가",
"coaches": "코치",
"therapists": "치료사",
"trainers": "트레이너",
"chefs": "셰프",
"realtors": "부동산",
"investors": "투자자",
"traders": "트레이더"
}, },
"notFound": { "notFound": {
"title": "페이지를 찾을 수 없습니다", "title": "페이지를 찾을 수 없습니다",
+1 -38
View File
@@ -1025,45 +1025,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "of verken per industrie",
"clickToExplore": "Klik om te verkennen",
"searchPlaceholder": "Prompts zoeken...", "searchPlaceholder": "Prompts zoeken...",
"teachers": "Docenten", "videoTitle": "GitHub Open Source Friday"
"developers": "Ontwikkelaars",
"marketers": "Marketeers",
"designers": "Ontwerpers",
"writers": "Schrijvers",
"analysts": "Analisten",
"entrepreneurs": "Ondernemers",
"researchers": "Onderzoekers",
"students": "Studenten",
"consultants": "Consultants",
"engineers": "Ingenieurs",
"creators": "Creators",
"lawyers": "Advocaten",
"doctors": "Artsen",
"nurses": "Verpleegkundigen",
"accountants": "Accountants",
"salespeople": "Verkopers",
"recruiters": "Recruiters",
"managers": "Managers",
"executives": "Directeuren",
"freelancers": "Freelancers",
"photographers": "Fotografen",
"musicians": "Muzikanten",
"artists": "Kunstenaars",
"architects": "Architecten",
"scientists": "Wetenschappers",
"journalists": "Journalisten",
"editors": "Redacteuren",
"translators": "Vertalers",
"coaches": "Coaches",
"therapists": "Therapeuten",
"trainers": "Trainers",
"chefs": "Chefs",
"realtors": "Makelaars",
"investors": "Investeerders",
"traders": "Handelaren"
}, },
"promptBuilder": { "promptBuilder": {
"title": "Prompt Building Agent", "title": "Prompt Building Agent",
+1 -38
View File
@@ -1030,45 +1030,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "ou explore por setor",
"clickToExplore": "Clique para explorar",
"searchPlaceholder": "Pesquisar prompts...", "searchPlaceholder": "Pesquisar prompts...",
"teachers": "Professores", "videoTitle": "GitHub Open Source Friday"
"developers": "Desenvolvedores",
"marketers": "Marketers",
"designers": "Designers",
"writers": "Escritores",
"analysts": "Analistas",
"entrepreneurs": "Empreendedores",
"researchers": "Pesquisadores",
"students": "Estudantes",
"consultants": "Consultores",
"engineers": "Engenheiros",
"creators": "Criadores",
"lawyers": "Advogados",
"doctors": "Médicos",
"nurses": "Enfermeiros",
"accountants": "Contadores",
"salespeople": "Vendedores",
"recruiters": "Recrutadores",
"managers": "Gerentes",
"executives": "Executivos",
"freelancers": "Freelancers",
"photographers": "Fotógrafos",
"musicians": "Músicos",
"artists": "Artistas",
"architects": "Arquitetos",
"scientists": "Cientistas",
"journalists": "Jornalistas",
"editors": "Editores",
"translators": "Tradutores",
"coaches": "Coaches",
"therapists": "Terapeutas",
"trainers": "Treinadores",
"chefs": "Chefs",
"realtors": "Corretores",
"investors": "Investidores",
"traders": "Traders"
}, },
"notFound": { "notFound": {
"title": "Página Não Encontrada", "title": "Página Não Encontrada",
+1 -38
View File
@@ -1051,45 +1051,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "или исследуйте по отрасли",
"clickToExplore": "Нажмите для изучения",
"searchPlaceholder": "Поиск промптов...", "searchPlaceholder": "Поиск промптов...",
"teachers": "Учителей", "videoTitle": "GitHub Open Source Friday"
"developers": "Разработчиков",
"marketers": "Маркетологов",
"designers": "Дизайнеров",
"writers": "Писателей",
"analysts": "Аналитиков",
"entrepreneurs": "Предпринимателей",
"researchers": "Исследователей",
"students": "Студентов",
"consultants": "Консультантов",
"engineers": "Инженеров",
"creators": "Создателей",
"lawyers": "Юристов",
"doctors": "Врачей",
"nurses": "Медсестёр",
"accountants": "Бухгалтеров",
"salespeople": "Продавцов",
"recruiters": "Рекрутеров",
"managers": "Менеджеров",
"executives": "Руководителей",
"freelancers": "Фрилансеров",
"photographers": "Фотографов",
"musicians": "Музыкантов",
"artists": "Художников",
"architects": "Архитекторов",
"scientists": "Учёных",
"journalists": "Журналистов",
"editors": "Редакторов",
"translators": "Переводчиков",
"coaches": "Коучей",
"therapists": "Терапевтов",
"trainers": "Тренеров",
"chefs": "Поваров",
"realtors": "Риелторов",
"investors": "Инвесторов",
"traders": "Трейдеров"
}, },
"promptBuilder": { "promptBuilder": {
"title": "Агент создания промптов", "title": "Агент создания промптов",
+1 -38
View File
@@ -1030,45 +1030,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "veya sektöre göre keşfet",
"clickToExplore": "Keşfetmek için tıkla",
"searchPlaceholder": "Prompt ara...", "searchPlaceholder": "Prompt ara...",
"teachers": "Öğretmenler", "videoTitle": "GitHub Open Source Friday"
"developers": "Geliştiriciler",
"marketers": "Pazarlamacılar",
"designers": "Tasarımcılar",
"writers": "Yazarlar",
"analysts": "Analistler",
"entrepreneurs": "Girişimciler",
"researchers": "Araştırmacılar",
"students": "Öğrenciler",
"consultants": "Danışmanlar",
"engineers": "Mühendisler",
"creators": "İçerik Üreticileri",
"lawyers": "Avukatlar",
"doctors": "Doktorlar",
"nurses": "Hemşireler",
"accountants": "Muhasebeciler",
"salespeople": "Satışçılar",
"recruiters": "İK Uzmanları",
"managers": "Yöneticiler",
"executives": "Üst Yöneticiler",
"freelancers": "Serbest Çalışanlar",
"photographers": "Fotoğrafçılar",
"musicians": "Müzisyenler",
"artists": "Sanatçılar",
"architects": "Mimarlar",
"scientists": "Bilim İnsanları",
"journalists": "Gazeteciler",
"editors": "Editörler",
"translators": "Çevirmenler",
"coaches": "Koçlar",
"therapists": "Terapistler",
"trainers": "Eğitmenler",
"chefs": "Şefler",
"realtors": "Emlakçılar",
"investors": "Yatırımcılar",
"traders": "Tüccarlar"
}, },
"notFound": { "notFound": {
"title": "Sayfa Bulunamadı", "title": "Sayfa Bulunamadı",
+1 -38
View File
@@ -1030,45 +1030,8 @@
} }
}, },
"heroIndustries": { "heroIndustries": {
"prefix": "或按行业探索",
"clickToExplore": "点击探索",
"searchPlaceholder": "搜索提示词...", "searchPlaceholder": "搜索提示词...",
"teachers": "教师", "videoTitle": "GitHub Open Source Friday"
"developers": "开发者",
"marketers": "营销人员",
"designers": "设计师",
"writers": "作家",
"analysts": "分析师",
"entrepreneurs": "创业者",
"researchers": "研究员",
"students": "学生",
"consultants": "顾问",
"engineers": "工程师",
"creators": "创作者",
"lawyers": "律师",
"doctors": "医生",
"nurses": "护士",
"accountants": "会计",
"salespeople": "销售",
"recruiters": "招聘官",
"managers": "经理",
"executives": "高管",
"freelancers": "自由职业者",
"photographers": "摄影师",
"musicians": "音乐家",
"artists": "艺术家",
"architects": "建筑师",
"scientists": "科学家",
"journalists": "记者",
"editors": "编辑",
"translators": "翻译",
"coaches": "教练",
"therapists": "治疗师",
"trainers": "培训师",
"chefs": "厨师",
"realtors": "房产经纪",
"investors": "投资者",
"traders": "交易员"
}, },
"notFound": { "notFound": {
"title": "页面未找到", "title": "页面未找到",
+2 -2
View File
@@ -72,7 +72,7 @@ export default async function HomePage() {
/> />
</div> </div>
) : ( ) : (
<div className="absolute top-0 end-0 bottom-0 w-1/3 2xl:w-1/2 hidden md:block pointer-events-none"> <div className="absolute top-0 end-0 bottom-0 w-2/5 xl:w-[45%] 2xl:w-1/2 hidden md:block pointer-events-none overflow-hidden">
{/* Video background */} {/* Video background */}
<div className="absolute inset-0"> <div className="absolute inset-0">
<div className="absolute inset-0 bg-gradient-to-r rtl:bg-gradient-to-l from-background via-background/80 to-transparent z-10" /> <div className="absolute inset-0 bg-gradient-to-r rtl:bg-gradient-to-l from-background via-background/80 to-transparent z-10" />
@@ -126,7 +126,7 @@ export default async function HomePage() {
)} )}
<div className="container relative z-20"> <div className="container relative z-20">
<div className="max-w-2xl"> <div className="max-w-2xl lg:max-w-xl xl:max-w-2xl">
{useCloneBranding ? ( {useCloneBranding ? (
<> <>
<h1 className="text-2xl font-bold tracking-tight sm:text-3xl md:text-4xl lg:text-5xl !text-2xl sm:!text-3xl md:!text-4xl lg:!text-5xl text-primary"> <h1 className="text-2xl font-bold tracking-tight sm:text-3xl md:text-4xl lg:text-5xl !text-2xl sm:!text-3xl md:!text-4xl lg:!text-5xl text-primary">
+13 -172
View File
@@ -1,106 +1,14 @@
"use client"; "use client";
import { useState, useEffect, useCallback } from "react"; import { useState } from "react";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { useTranslations } from "next-intl"; import { useTranslations } from "next-intl";
import { Search } from "lucide-react"; import { Search } from "lucide-react";
import { cn } from "@/lib/utils";
import { Input } from "@/components/ui/input"; import { Input } from "@/components/ui/input";
const INDUSTRIES = [
"teachers",
"developers",
"marketers",
"designers",
"writers",
"analysts",
"entrepreneurs",
"researchers",
"students",
"consultants",
"engineers",
"creators",
"lawyers",
"doctors",
"nurses",
"accountants",
"salespeople",
"recruiters",
"managers",
"executives",
"freelancers",
"photographers",
"musicians",
"artists",
"architects",
"scientists",
"journalists",
"editors",
"translators",
"coaches",
"therapists",
"trainers",
"chefs",
"realtors",
"investors",
"traders",
];
const INDUSTRY_KEYWORDS: Record<string, string> = {
teachers: "teach,learn,education,lesson,classroom",
developers: "code,programming,software,debug,api",
marketers: "marketing,campaign,brand,seo,content",
designers: "design,ui,ux,creative,visual",
writers: "write,content,blog,article,copywriting",
analysts: "data,analysis,report,metrics,insights",
entrepreneurs: "startup,business,pitch,strategy,growth",
researchers: "research,study,academic,paper,hypothesis",
students: "study,homework,essay,exam,learning",
consultants: "consulting,advice,strategy,client,solution",
engineers: "engineering,technical,system,architecture,build",
creators: "content,video,social,creative,audience",
lawyers: "legal,law,contract,compliance,court",
doctors: "medical,health,diagnosis,patient,treatment",
nurses: "nursing,patient,care,health,clinical",
accountants: "accounting,finance,tax,budget,audit",
salespeople: "sales,deal,pitch,customer,negotiation",
recruiters: "hiring,recruitment,interview,candidate,talent",
managers: "management,team,project,leadership,planning",
executives: "executive,leadership,strategy,decision,board",
freelancers: "freelance,client,proposal,contract,invoice",
photographers: "photography,photo,shoot,editing,camera",
musicians: "music,song,composition,audio,production",
artists: "art,creative,illustration,painting,portfolio",
architects: "architecture,design,building,plan,structure",
scientists: "science,experiment,research,hypothesis,data",
journalists: "journalism,news,article,interview,story",
editors: "editing,review,proofread,content,revision",
translators: "translation,language,localization,interpret",
coaches: "coaching,motivation,goals,performance,mindset",
therapists: "therapy,mental,counseling,wellness,support",
trainers: "training,fitness,workout,exercise,program",
chefs: "cooking,recipe,food,kitchen,culinary",
realtors: "real estate,property,listing,home,market",
investors: "investment,portfolio,stocks,returns,market",
traders: "trading,market,stocks,analysis,strategy",
};
function shuffleArray<T>(array: T[]): T[] {
const shuffled = [...array];
for (let i = shuffled.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
}
return shuffled;
}
export function HeroCategories() { export function HeroCategories() {
const t = useTranslations("heroIndustries"); const t = useTranslations("heroIndustries");
const router = useRouter(); const router = useRouter();
const [visibleItems, setVisibleItems] = useState<string[]>([]);
const [changingIdx, setChangingIdx] = useState<number | null>(null);
const [isFlashing, setIsFlashing] = useState(false);
const [lastChangedIdx, setLastChangedIdx] = useState<number | null>(null);
const [searchQuery, setSearchQuery] = useState(""); const [searchQuery, setSearchQuery] = useState("");
const handleSearch = (e: React.FormEvent) => { const handleSearch = (e: React.FormEvent) => {
@@ -110,57 +18,6 @@ export function HeroCategories() {
} }
}; };
const getRandomItems = useCallback(() => {
return shuffleArray(INDUSTRIES).slice(0, 9);
}, []);
useEffect(() => {
setVisibleItems(getRandomItems());
}, [getRandomItems]);
useEffect(() => {
if (visibleItems.length === 0) return;
const interval = setInterval(() => {
// Pick a random position to change (not the same as last time)
let randomPosition = Math.floor(Math.random() * 9);
while (randomPosition === lastChangedIdx) {
randomPosition = Math.floor(Math.random() * 9);
}
setChangingIdx(randomPosition);
setLastChangedIdx(randomPosition);
setTimeout(() => {
setVisibleItems(prev => {
const newItems = [...prev];
// Find an industry not currently visible
const available = INDUSTRIES.filter(ind => !prev.includes(ind));
if (available.length > 0) {
newItems[randomPosition] = available[Math.floor(Math.random() * available.length)];
} else {
// If all are visible, just pick a random one
newItems[randomPosition] = INDUSTRIES[Math.floor(Math.random() * INDUSTRIES.length)];
}
return newItems;
});
// Flash the cell
setIsFlashing(true);
setTimeout(() => {
setIsFlashing(false);
setChangingIdx(null);
}, 400);
}, 200);
}, 1500);
return () => clearInterval(interval);
}, [visibleItems.length, lastChangedIdx]);
const handleClick = (industry: string) => {
const keywords = INDUSTRY_KEYWORDS[industry] || industry;
router.push(`/prompts?q=${encodeURIComponent(keywords)}&ai=1`);
};
return ( return (
<div className="flex flex-col items-center gap-4 w-full"> <div className="flex flex-col items-center gap-4 w-full">
<form onSubmit={handleSearch} className="w-full max-w-lg"> <form onSubmit={handleSearch} className="w-full max-w-lg">
@@ -177,35 +34,19 @@ export function HeroCategories() {
/> />
</div> </div>
</form> </form>
<p className="text-sm text-muted-foreground">{t("prefix")}</p> <div className="w-full max-w-lg aspect-video rounded-xl overflow-hidden border-2 border-primary/30 shadow-md bg-background/80 backdrop-blur-md">
<iframe
<div className="grid grid-cols-3 gap-3 w-full max-w-md"> className="w-full h-full"
{visibleItems.map((industry, idx) => ( src="https://www.youtube-nocookie.com/embed/T1Ay91zvkok?start=372"
<button title={t("videoTitle")}
key={idx} loading="lazy"
onClick={() => handleClick(industry)} frameBorder={0}
style={{ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
animationDelay: `${idx * 0.15}s`, referrerPolicy="strict-origin-when-cross-origin"
}} allowFullScreen
className={cn( />
"px-2 sm:px-4 py-2 sm:py-3 text-xs sm:text-sm font-medium whitespace-nowrap truncate",
"hover:bg-primary hover:text-primary-foreground hover:shadow-lg hover:-translate-y-0.5",
"cursor-pointer transition-all duration-200",
"border border-border/30 rounded-lg backdrop-blur-md",
"shadow-md animate-float",
changingIdx === idx && !isFlashing && "opacity-0 scale-95",
changingIdx === idx && isFlashing
? "bg-primary/40 scale-105"
: "bg-background/80"
)}
>
{t(industry)}
</button>
))}
</div> </div>
<p className="text-sm text-muted-foreground">{t("clickToExplore")}</p>
</div> </div>
); );
} }