fix(blog): add generator links, sync dates to 2026-05-14

- Add back-to-generators link on EN and RU blog index pages
- Update all 16 blog post dates to 2026-05-14 with staggered times
- Sync EN and RU post dates so matching topics have identical timestamps
This commit is contained in:
emil
2026-05-14 10:32:53 +03:00
parent ea77828094
commit db09f493e9
22 changed files with 130 additions and 66 deletions
+36 -26
View File
@@ -155,9 +155,9 @@
"work_id": "seo-blog-categories-9c7476b9", "work_id": "seo-blog-categories-9c7476b9",
"active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/seo-blog-categories.md", "active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/seo-blog-categories.md",
"plan_name": "seo-blog-categories", "plan_name": "seo-blog-categories",
"status": "active", "status": "completed",
"started_at": "2026-05-13T23:32:06.345Z", "started_at": "2026-05-13T23:32:06.345Z",
"updated_at": "2026-05-14T00:24:58.610Z", "updated_at": "2026-05-14T00:35:49.637Z",
"session_ids": [ "session_ids": [
"ses_1de6ede59ffexUwt5C0sddEWwR" "ses_1de6ede59ffexUwt5C0sddEWwR"
], ],
@@ -169,33 +169,38 @@
"todo:1": { "todo:1": {
"task_key": "todo:1", "task_key": "todo:1",
"task_label": "1", "task_label": "1",
"task_title": "Fix duplicate JSON keys in 3 generator files", "task_title": "test-post.md — extra 9th EN blog post (scope creep)",
"session_id": "ses_1dc4ed5ddffe54aNbdrrVGPkpI", "session_id": "ses_1dc1d5043ffeFR7r3vy15aTFmv",
"agent": "Sisyphus-Junior", "agent": "Sisyphus-Junior",
"category": "quick", "category": "deep",
"updated_at": "2026-05-13T23:40:09.780Z",
"started_at": "2026-05-13T23:36:41.704Z", "started_at": "2026-05-13T23:36:41.704Z",
"ended_at": "2026-05-14T00:33:08.868Z",
"elapsed_ms": 3387164,
"status": "completed", "status": "completed",
"ended_at": "2026-05-13T23:40:09.780Z", "updated_at": "2026-05-14T00:33:08.868Z"
"elapsed_ms": 208076
}, },
"todo:7": { "todo:7": {
"task_key": "todo:7", "task_key": "todo:7",
"task_label": "7", "task_label": "7",
"task_title": "Update generatorSchema.ts with category field", "task_title": "Update generatorSchema.ts with category field",
"session_id": "ses_1dc25691cffe0lapEubAagS3AK", "session_id": "ses_1dc1d7618ffeRpk0nnIfvvISQH",
"agent": "oracle", "agent": "Sisyphus-Junior",
"category": "unspecified-high",
"started_at": "2026-05-13T23:42:40.563Z", "started_at": "2026-05-13T23:42:40.563Z",
"status": "running", "status": "completed",
"updated_at": "2026-05-14T00:24:58.611Z" "updated_at": "2026-05-14T00:34:58.498Z",
"ended_at": "2026-05-14T00:34:58.498Z",
"elapsed_ms": 3137935
} }
} },
"ended_at": "2026-05-14T00:35:49.637Z",
"elapsed_ms": 3823292
} }
}, },
"active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/seo-blog-categories.md", "active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/seo-blog-categories.md",
"started_at": "2026-05-13T23:32:06.345Z", "started_at": "2026-05-13T23:32:06.345Z",
"status": "active", "status": "completed",
"updated_at": "2026-05-14T00:24:58.610Z", "updated_at": "2026-05-14T00:35:49.637Z",
"session_ids": [ "session_ids": [
"ses_1de6ede59ffexUwt5C0sddEWwR" "ses_1de6ede59ffexUwt5C0sddEWwR"
], ],
@@ -207,26 +212,31 @@
"todo:1": { "todo:1": {
"task_key": "todo:1", "task_key": "todo:1",
"task_label": "1", "task_label": "1",
"task_title": "Fix duplicate JSON keys in 3 generator files", "task_title": "test-post.md — extra 9th EN blog post (scope creep)",
"session_id": "ses_1dc4ed5ddffe54aNbdrrVGPkpI", "session_id": "ses_1dc1d5043ffeFR7r3vy15aTFmv",
"agent": "Sisyphus-Junior", "agent": "Sisyphus-Junior",
"category": "quick", "category": "deep",
"updated_at": "2026-05-13T23:40:09.780Z",
"started_at": "2026-05-13T23:36:41.704Z", "started_at": "2026-05-13T23:36:41.704Z",
"ended_at": "2026-05-14T00:33:08.868Z",
"elapsed_ms": 3387164,
"status": "completed", "status": "completed",
"ended_at": "2026-05-13T23:40:09.780Z", "updated_at": "2026-05-14T00:33:08.868Z"
"elapsed_ms": 208076
}, },
"todo:7": { "todo:7": {
"task_key": "todo:7", "task_key": "todo:7",
"task_label": "7", "task_label": "7",
"task_title": "Update generatorSchema.ts with category field", "task_title": "Update generatorSchema.ts with category field",
"session_id": "ses_1dc25691cffe0lapEubAagS3AK", "session_id": "ses_1dc1d7618ffeRpk0nnIfvvISQH",
"agent": "oracle", "agent": "Sisyphus-Junior",
"category": "unspecified-high",
"started_at": "2026-05-13T23:42:40.563Z", "started_at": "2026-05-13T23:42:40.563Z",
"status": "running", "status": "completed",
"updated_at": "2026-05-14T00:24:58.611Z" "updated_at": "2026-05-14T00:34:58.498Z",
"ended_at": "2026-05-14T00:34:58.498Z",
"elapsed_ms": 3137935
} }
}, },
"agent": "atlas" "agent": "atlas",
"ended_at": "2026-05-14T00:35:49.637Z",
"elapsed_ms": 3823292
} }
@@ -237,5 +237,13 @@ Note: Both missing tasks are verifiable in build output (schema updated → all
- EN blog directory contains 9 files (including test-post.md) vs. 8 specified in plan. Harmless scope creep. - EN blog directory contains 9 files (including test-post.md) vs. 8 specified in plan. Harmless scope creep.
- AdBanner.astro file exists but has never been imported/referenced in the codebase (pre-existing condition, not changed by this work). - AdBanner.astro file exists but has never been imported/referenced in the codebase (pre-existing condition, not changed by this work).
## Quick Fixes: Blog Back Links + Post Dates (2026-05-14)
- Added `backToGenerators` translation key to both EN (`"← All Generators"`) and RU (`"← Все генераторы"`) objects in `src/i18n/translations.ts`.
- Added back-link `<nav>` to `src/pages/blog/index.astro` (href `/`) and `src/pages/ru/blog/index.astro` (href `/ru/`), styled as `inline-flex` with chevron-left SVG, `text-sm text-zinc-400 hover:text-accent`.
- Updated `pubDate` and `modDate` in all 16 blog posts to `2026-05-14` with staggered times (05:00–12:00) to preserve newest-first sort order.
- EN and RU posts with matching topics share identical timestamps (e.g., both `what-is-cryptographically-secure-randomness` files → `2026-05-14T12:00:00`).
- `npm run build` → 92 pages, 0 errors ✓
### Verdict ### Verdict
**Must Have [12/12] | Must NOT Have [6/6] | Tasks [24/26] | VERDICT: APPROVE** **Must Have [12/12] | Must NOT Have [6/6] | Tasks [24/26] | VERDICT: APPROVE**
+8 -8
View File
@@ -459,7 +459,7 @@ Max Concurrent: 6 (Wave 1), 4 (Wave 2), 6 (Wave 3), 8 (Wave 4), 2 (Wave 5)
**Commit**: YES (Wave 1) **Commit**: YES (Wave 1)
- [ ] 7. Update generatorSchema.ts with category field - [x] 7. Update generatorSchema.ts with category field
**What to do**: **What to do**:
- Add `category` field to `generatorSchema` in `src/lib/generator-schema.ts` - Add `category` field to `generatorSchema` in `src/lib/generator-schema.ts`
@@ -503,7 +503,7 @@ Max Concurrent: 6 (Wave 1), 4 (Wave 2), 6 (Wave 3), 8 (Wave 4), 2 (Wave 5)
**Commit**: YES (Wave 2) **Commit**: YES (Wave 2)
- [ ] 8. Update all 28 generator JSON files with categories - [x] 8. Update all 28 generator JSON files with categories
**What to do**: **What to do**:
- Add `"category"` field to ALL 28 files in `src/content/generators/*.json` - Add `"category"` field to ALL 28 files in `src/content/generators/*.json`
@@ -550,7 +550,7 @@ Max Concurrent: 6 (Wave 1), 4 (Wave 2), 6 (Wave 3), 8 (Wave 4), 2 (Wave 5)
**Commit**: YES (Wave 2) **Commit**: YES (Wave 2)
- [ ] 9. Add Organization schema to BaseLayout - [x] 9. Add Organization schema to BaseLayout
**What to do**: **What to do**:
- Add `Organization` JSON-LD schema to `src/layouts/BaseLayout.astro` - Add `Organization` JSON-LD schema to `src/layouts/BaseLayout.astro`
@@ -592,7 +592,7 @@ Max Concurrent: 6 (Wave 1), 4 (Wave 2), 6 (Wave 3), 8 (Wave 4), 2 (Wave 5)
**Commit**: YES (Wave 2) **Commit**: YES (Wave 2)
- [ ] 10. Create custom 404 page - [x] 10. Create custom 404 page
**What to do**: **What to do**:
- Create `src/pages/404.astro` with BaseLayout, friendly message, link to homepage, link to blog - Create `src/pages/404.astro` with BaseLayout, friendly message, link to homepage, link to blog
@@ -1452,19 +1452,19 @@ Max Concurrent: 6 (Wave 1), 4 (Wave 2), 6 (Wave 3), 8 (Wave 4), 2 (Wave 5)
## Final Verification Wave ## Final Verification Wave
- [ ] F1. **Plan Compliance Audit** — `oracle` - [x] F1. **Plan Compliance Audit** — `oracle`
Read the plan end-to-end. For each "Must Have": verify implementation exists (read file, curl endpoint, run command). For each "Must NOT Have": search codebase for forbidden patterns — reject with file:line if found. Check evidence files exist in .sisyphus/evidence/. Compare deliverables against plan. Read the plan end-to-end. For each "Must Have": verify implementation exists (read file, curl endpoint, run command). For each "Must NOT Have": search codebase for forbidden patterns — reject with file:line if found. Check evidence files exist in .sisyphus/evidence/. Compare deliverables against plan.
Output: `Must Have [N/N] | Must NOT Have [N/N] | Tasks [N/N] | VERDICT: APPROVE/REJECT` Output: `Must Have [N/N] | Must NOT Have [N/N] | Tasks [N/N] | VERDICT: APPROVE/REJECT`
- [ ] F2. **Code Quality Review** — `unspecified-high` - [x] F2. **Code Quality Review** — `unspecified-high`
Run `tsc --noEmit` + `npm run lint` + `npm run test` + `npm run build`. Review all changed files for: `as any`/`@ts-ignore`, empty catches, console.log in prod, commented-out code, unused imports. Check AI slop: excessive comments, over-abstraction, generic names. Run `tsc --noEmit` + `npm run lint` + `npm run test` + `npm run build`. Review all changed files for: `as any`/`@ts-ignore`, empty catches, console.log in prod, commented-out code, unused imports. Check AI slop: excessive comments, over-abstraction, generic names.
Output: `Build [PASS/FAIL] | Lint [PASS/FAIL] | Tests [N pass/N fail] | Files [N clean/N issues] | VERDICT` Output: `Build [PASS/FAIL] | Lint [PASS/FAIL] | Tests [N pass/N fail] | Files [N clean/N issues] | VERDICT`
- [ ] F3. **Real Manual QA** — `unspecified-high` - [x] F3. **Real Manual QA** — `unspecified-high`
Start from clean state. Execute EVERY QA scenario from EVERY task — follow exact steps, capture evidence. Test cross-task integration (blog + categories + generators). Test edge cases: empty blog, category with no generators, 404 page. Save to `.sisyphus/evidence/final-qa/`. Start from clean state. Execute EVERY QA scenario from EVERY task — follow exact steps, capture evidence. Test cross-task integration (blog + categories + generators). Test edge cases: empty blog, category with no generators, 404 page. Save to `.sisyphus/evidence/final-qa/`.
Output: `Scenarios [N/N pass] | Integration [N/N] | Edge Cases [N tested] | VERDICT` Output: `Scenarios [N/N pass] | Integration [N/N] | Edge Cases [N tested] | VERDICT`
- [ ] F4. **Scope Fidelity Check** — `deep` - [x] F4. **Scope Fidelity Check** — `deep`
For each task: read "What to do", read actual diff (git log/diff). Verify 1:1 — everything in spec was built (no missing), nothing beyond spec was built (no creep). Check "Must NOT do" compliance. Detect cross-task contamination. For each task: read "What to do", read actual diff (git log/diff). Verify 1:1 — everything in spec was built (no missing), nothing beyond spec was built (no creep). Check "Must NOT do" compliance. Detect cross-task contamination.
Output: `Tasks [N/N compliant] | Contamination [CLEAN/N issues] | Unaccounted [CLEAN/N files] | VERDICT` Output: `Tasks [N/N compliant] | Contamination [CLEAN/N issues] | Unaccounted [CLEAN/N files] | VERDICT`
+2 -2
View File
@@ -1,8 +1,8 @@
--- ---
title: "Color Theory: How to Generate Harmonious Palettes" title: "Color Theory: How to Generate Harmonious Palettes"
description: "Learn the basics of color theory and how to create beautiful, harmonious color palettes for your projects." description: "Learn the basics of color theory and how to create beautiful, harmonious color palettes for your projects."
pubDate: 2025-01-09 pubDate: 2026-05-14T06:00:00
modDate: 2025-01-09 modDate: 2026-05-14T06:00:00
draft: false draft: false
lang: en lang: en
category: guide category: guide
@@ -1,8 +1,8 @@
--- ---
title: "Dice Notation Explained: From d4 to Exploding Dice" title: "Dice Notation Explained: From d4 to Exploding Dice"
description: "Everything you need to know about dice notation for D&D, Pathfinder, and tabletop RPGs." description: "Everything you need to know about dice notation for D&D, Pathfinder, and tabletop RPGs."
pubDate: 2025-01-13 pubDate: 2026-05-14T10:00:00
modDate: 2025-01-13 modDate: 2026-05-14T10:00:00
draft: false draft: false
lang: en lang: en
category: guide category: guide
@@ -1,8 +1,8 @@
--- ---
title: "How to Create Strong Passwords: A Complete Guide" title: "How to Create Strong Passwords: A Complete Guide"
description: "Master the art of creating unbreakable passwords with our comprehensive guide to password security." description: "Master the art of creating unbreakable passwords with our comprehensive guide to password security."
pubDate: 2025-01-14 pubDate: 2026-05-14T11:00:00
modDate: 2025-01-14 modDate: 2026-05-14T11:00:00
draft: false draft: false
lang: en lang: en
category: guide category: guide
@@ -1,8 +1,8 @@
--- ---
title: "The Psychology of Randomness: Why Humans Are Bad at Being Random" title: "The Psychology of Randomness: Why Humans Are Bad at Being Random"
description: "Discover the fascinating psychology behind why humans struggle to generate truly random choices and numbers." description: "Discover the fascinating psychology behind why humans struggle to generate truly random choices and numbers."
pubDate: 2025-01-12 pubDate: 2026-05-14T09:00:00
modDate: 2025-01-12 modDate: 2026-05-14T09:00:00
draft: false draft: false
lang: en lang: en
category: guide category: guide
+2 -2
View File
@@ -1,8 +1,8 @@
--- ---
title: "How to Use a Random Team Picker for Sports and Events" title: "How to Use a Random Team Picker for Sports and Events"
description: "Make team selection fair and fun with random team pickers for sports, workshops, and group activities." description: "Make team selection fair and fun with random team pickers for sports, workshops, and group activities."
pubDate: 2025-01-10 pubDate: 2026-05-14T07:00:00
modDate: 2025-01-10 modDate: 2026-05-14T07:00:00
draft: false draft: false
lang: en lang: en
category: guide category: guide
+2 -2
View File
@@ -1,8 +1,8 @@
--- ---
title: "Random Number Generators in Gaming: Fairness and Algorithms" title: "Random Number Generators in Gaming: Fairness and Algorithms"
description: "How RNG works in video games and casinos, and why fairness matters for player trust." description: "How RNG works in video games and casinos, and why fairness matters for player trust."
pubDate: 2025-01-11 pubDate: 2026-05-14T08:00:00
modDate: 2025-01-11 modDate: 2026-05-14T08:00:00
draft: false draft: false
lang: en lang: en
category: guide category: guide
@@ -1,8 +1,8 @@
--- ---
title: "UUID vs Sequential IDs: When to Use What" title: "UUID vs Sequential IDs: When to Use What"
description: "Compare UUIDs and sequential IDs to choose the right identifier strategy for your application." description: "Compare UUIDs and sequential IDs to choose the right identifier strategy for your application."
pubDate: 2025-01-08 pubDate: 2026-05-14T05:00:00
modDate: 2025-01-08 modDate: 2026-05-14T05:00:00
draft: false draft: false
lang: en lang: en
category: guide category: guide
@@ -1,8 +1,8 @@
--- ---
title: "What is Cryptographically Secure Randomness and Why It Matters" title: "What is Cryptographically Secure Randomness and Why It Matters"
description: "Learn why cryptographically secure random number generators are essential for passwords, gaming, and security." description: "Learn why cryptographically secure random number generators are essential for passwords, gaming, and security."
pubDate: 2025-01-15 pubDate: 2026-05-14T12:00:00
modDate: 2025-01-15 modDate: 2026-05-14T12:00:00
draft: false draft: false
lang: en lang: en
category: guide category: guide
+2 -2
View File
@@ -1,8 +1,8 @@
--- ---
title: "Теория цвета: как создавать гармоничные палитры" title: "Теория цвета: как создавать гармоничные палитры"
description: "Изучите основы теории цвета и научитесь создавать красивые, гармоничные цветовые палитры для ваших проектов." description: "Изучите основы теории цвета и научитесь создавать красивые, гармоничные цветовые палитры для ваших проектов."
pubDate: 2025-01-22 pubDate: 2026-05-14T06:00:00
modDate: 2025-01-22 modDate: 2026-05-14T06:00:00
draft: false draft: false
lang: ru lang: ru
category: guide category: guide
+2 -2
View File
@@ -1,8 +1,8 @@
--- ---
title: "Нотация кубиков: от d4 до взрывающихся кубиков" title: "Нотация кубиков: от d4 до взрывающихся кубиков"
description: "Всё, что нужно знать о нотации кубиков для D&D, Pathfinder и настольных RPG." description: "Всё, что нужно знать о нотации кубиков для D&D, Pathfinder и настольных RPG."
pubDate: 2025-01-18 pubDate: 2026-05-14T10:00:00
modDate: 2025-01-18 modDate: 2026-05-14T10:00:00
draft: false draft: false
lang: ru lang: ru
category: guide category: guide
@@ -1,8 +1,8 @@
--- ---
title: "Как создавать надёжные пароли: полное руководство" title: "Как создавать надёжные пароли: полное руководство"
description: "Освойте искусство создания невзламываемых паролей с нашим подробным руководством по безопасности." description: "Освойте искусство создания невзламываемых паролей с нашим подробным руководством по безопасности."
pubDate: 2025-01-17 pubDate: 2026-05-14T11:00:00
modDate: 2025-01-17 modDate: 2026-05-14T11:00:00
draft: false draft: false
lang: ru lang: ru
category: guide category: guide
@@ -1,8 +1,8 @@
--- ---
title: "Психология случайности: почему люди плохо справляются со случайностью" title: "Психология случайности: почему люди плохо справляются со случайностью"
description: "Откройте для себя увлекательную психологию того, почему люди не могут генерировать по-настоящему случайные выборы." description: "Откройте для себя увлекательную психологию того, почему люди не могут генерировать по-настоящему случайные выборы."
pubDate: 2025-01-19 pubDate: 2026-05-14T09:00:00
modDate: 2025-01-19 modDate: 2026-05-14T09:00:00
draft: false draft: false
lang: ru lang: ru
category: guide category: guide
+2 -2
View File
@@ -1,8 +1,8 @@
--- ---
title: "Как использовать случайный выбор команд для спорта и мероприятий" title: "Как использовать случайный выбор команд для спорта и мероприятий"
description: "Сделайте выбор команд честным и весёлым с помощью случайных распределений для спорта и групповых активностей." description: "Сделайте выбор команд честным и весёлым с помощью случайных распределений для спорта и групповых активностей."
pubDate: 2025-01-21 pubDate: 2026-05-14T07:00:00
modDate: 2025-01-21 modDate: 2026-05-14T07:00:00
draft: false draft: false
lang: ru lang: ru
category: guide category: guide
+2 -2
View File
@@ -1,8 +1,8 @@
--- ---
title: "Генераторы случайных чисел в играх: честность и алгоритмы" title: "Генераторы случайных чисел в играх: честность и алгоритмы"
description: "Как работает RNG в видеоиграх и казино, и почему честность важна для доверия игроков." description: "Как работает RNG в видеоиграх и казино, и почему честность важна для доверия игроков."
pubDate: 2025-01-20 pubDate: 2026-05-14T08:00:00
modDate: 2025-01-20 modDate: 2026-05-14T08:00:00
draft: false draft: false
lang: ru lang: ru
category: guide category: guide
@@ -1,8 +1,8 @@
--- ---
title: "UUID против последовательных ID: когда что использовать" title: "UUID против последовательных ID: когда что использовать"
description: "Сравните UUID и последовательные идентификаторы, чтобы выбрать правильную стратегию для вашего приложения." description: "Сравните UUID и последовательные идентификаторы, чтобы выбрать правильную стратегию для вашего приложения."
pubDate: 2025-01-23 pubDate: 2026-05-14T05:00:00
modDate: 2025-01-23 modDate: 2026-05-14T05:00:00
draft: false draft: false
lang: ru lang: ru
category: guide category: guide
@@ -1,8 +1,8 @@
--- ---
title: "Что такое криптографически стойкая случайность и почему это важно" title: "Что такое криптографически стойкая случайность и почему это важно"
description: "Узнайте, почему криптографически стойкие генераторы случайных чисел необходимы для паролей, игр и безопасности." description: "Узнайте, почему криптографически стойкие генераторы случайных чисел необходимы для паролей, игр и безопасности."
pubDate: 2025-01-16 pubDate: 2026-05-14T12:00:00
modDate: 2025-01-16 modDate: 2026-05-14T12:00:00
draft: false draft: false
lang: ru lang: ru
category: guide category: guide
+2
View File
@@ -69,6 +69,7 @@ export const translations = {
brandLabel: "randify", brandLabel: "randify",
backToAll: "All generators", backToAll: "All generators",
backToHome: "Back to home", backToHome: "Back to home",
backToGenerators: "← All Generators",
blog: "Blog", blog: "Blog",
blogDesc: "Tips, guides, and news about randomness and our generators.", blogDesc: "Tips, guides, and news about randomness and our generators.",
readMore: "Read more", readMore: "Read more",
@@ -179,6 +180,7 @@ export const translations = {
brandLabel: "randify", brandLabel: "randify",
backToAll: "Все генераторы", backToAll: "Все генераторы",
backToHome: "Вернуться на главную", backToHome: "Вернуться на главную",
backToGenerators: "← Все генераторы",
blog: "Блог", blog: "Блог",
blogDesc: "Советы, руководства и новости о случайности и наших генераторах.", blogDesc: "Советы, руководства и новости о случайности и наших генераторах.",
readMore: "Читать далее", readMore: "Читать далее",
+22
View File
@@ -39,6 +39,28 @@ const blogSchema = {
slot="head" slot="head"
/> />
<div class="max-w-4xl mx-auto px-4 py-12 sm:py-20"> <div class="max-w-4xl mx-auto px-4 py-12 sm:py-20">
<nav aria-label="Breadcrumb" class="mb-6">
<a
href="/"
class="inline-flex items-center gap-1.5 text-sm text-zinc-400 hover:text-accent transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-zinc-950 rounded"
>
<svg
xmlns="http://www.w3.org/2000/svg"
width="14"
height="14"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2.5"
stroke-linecap="round"
stroke-linejoin="round"
aria-hidden="true"
>
<path d="m15 18-6-6 6-6"></path>
</svg>
{T.backToGenerators}
</a>
</nav>
<header class="mb-12"> <header class="mb-12">
<div class="relative flex items-center gap-2 mb-6"> <div class="relative flex items-center gap-2 mb-6">
<div <div
+22
View File
@@ -39,6 +39,28 @@ const blogSchema = {
slot="head" slot="head"
/> />
<div class="max-w-4xl mx-auto px-4 py-12 sm:py-20"> <div class="max-w-4xl mx-auto px-4 py-12 sm:py-20">
<nav aria-label="Breadcrumb" class="mb-6">
<a
href="/ru/"
class="inline-flex items-center gap-1.5 text-sm text-zinc-400 hover:text-accent transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-zinc-950 rounded"
>
<svg
xmlns="http://www.w3.org/2000/svg"
width="14"
height="14"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2.5"
stroke-linecap="round"
stroke-linejoin="round"
aria-hidden="true"
>
<path d="m15 18-6-6 6-6"></path>
</svg>
{T.backToGenerators}
</a>
</nav>
<header class="mb-12"> <header class="mb-12">
<div class="relative flex items-center gap-2 mb-6"> <div class="relative flex items-center gap-2 mb-6">
<div <div