From dfca40bb34cee77af8c7d42fb10a3f62145b167a Mon Sep 17 00:00:00 2001 From: emil Date: Thu, 14 May 2026 15:38:04 +0300 Subject: [PATCH] fix(lint): remove unused Props and eslint-disable directive --- .sisyphus/boulder.json | 158 ++++-- .../notepads/fill-blog-content/learnings.md | 11 + .sisyphus/plans/blog-typography-fix.md | 122 ++++ .sisyphus/plans/fill-blog-content.md | 528 ++++++++++++++++++ src/components/AdBanner.astro | 3 - src/layouts/BaseLayout.astro | 1 - 6 files changed, 785 insertions(+), 38 deletions(-) create mode 100644 .sisyphus/notepads/fill-blog-content/learnings.md create mode 100644 .sisyphus/plans/blog-typography-fix.md create mode 100644 .sisyphus/plans/fill-blog-content.md diff --git a/.sisyphus/boulder.json b/.sisyphus/boulder.json index 8ebc9de..1d8d67f 100644 --- a/.sisyphus/boulder.json +++ b/.sisyphus/boulder.json @@ -1,6 +1,6 @@ { "schema_version": 2, - "active_work_id": "seo-blog-categories-9c7476b9", + "active_work_id": "blog-typography-fix-c9cf9be1", "works": { "critical-refactor-f063daf0": { "work_id": "critical-refactor-f063daf0", @@ -195,48 +195,138 @@ }, "ended_at": "2026-05-14T00:35:49.637Z", "elapsed_ms": 3823292 + }, + "fill-blog-content-fb2229ab": { + "work_id": "fill-blog-content-fb2229ab", + "active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/fill-blog-content.md", + "plan_name": "fill-blog-content", + "status": "completed", + "started_at": "2026-05-14T09:06:01.254Z", + "updated_at": "2026-05-14T10:11:10.838Z", + "ended_at": "2026-05-14T10:11:10.838Z", + "elapsed_ms": 7509549, + "session_ids": [ + "ses_1de6ede59ffexUwt5C0sddEWwR", + "ses_1da346c55ffe2yhgC2v7zqrilE" + ], + "session_origins": { + "ses_1de6ede59ffexUwt5C0sddEWwR": "direct", + "ses_1da346c55ffe2yhgC2v7zqrilE": "direct" + }, + "agent": "atlas", + "task_sessions": { + "todo:1": { + "task_key": "todo:1", + "task_label": "1", + "task_title": "EN — What is Cryptographically Secure Randomness", + "session_id": "ses_1da41fec6ffeNQIbWZFz8CVyWF", + "agent": "Sisyphus-Junior", + "category": "writing", + "updated_at": "2026-05-14T09:14:45.203Z", + "started_at": "2026-05-14T09:12:23.181Z", + "status": "completed", + "ended_at": "2026-05-14T09:14:45.203Z", + "elapsed_ms": 142022 + }, + "todo:5": { + "task_key": "todo:5", + "task_label": "5", + "task_title": "EN — RNG in Gaming", + "session_id": "ses_1da24e0f5ffeOF5lOCH6y7ITTz", + "agent": "Sisyphus-Junior", + "category": "writing", + "started_at": "2026-05-14T09:21:18.403Z", + "status": "completed", + "updated_at": "2026-05-14T09:41:37.697Z", + "ended_at": "2026-05-14T09:41:37.696Z", + "elapsed_ms": 1219293 + }, + "todo:9": { + "task_key": "todo:9", + "task_label": "9", + "task_title": "RU — Криптографически стойкая случайность", + "session_id": "ses_1da21f28fffeAnOJVgAFQWldSb", + "agent": "Sisyphus-Junior", + "category": "writing", + "updated_at": "2026-05-14T09:53:48.978Z", + "started_at": "2026-05-14T09:52:28.114Z", + "status": "completed", + "ended_at": "2026-05-14T09:53:48.978Z", + "elapsed_ms": 80864 + }, + "todo:13": { + "task_key": "todo:13", + "task_label": "13", + "task_title": "RU — RNG в играх", + "session_id": "ses_1da16a3cdffe5O9FyZDLUu2SUM", + "agent": "Sisyphus-Junior", + "category": "writing", + "updated_at": "2026-05-14T10:11:10.838Z", + "started_at": "2026-05-14T10:09:51.259Z", + "status": "completed", + "ended_at": "2026-05-14T10:11:10.838Z", + "elapsed_ms": 79579 + } + } + }, + "blog-typography-fix-c9cf9be1": { + "work_id": "blog-typography-fix-c9cf9be1", + "active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/blog-typography-fix.md", + "plan_name": "blog-typography-fix", + "status": "completed", + "started_at": "2026-05-14T10:23:17.171Z", + "updated_at": "2026-05-14T10:25:36.103Z", + "ended_at": "2026-05-14T10:25:36.103Z", + "elapsed_ms": 127932, + "session_ids": [ + "ses_1da346c55ffe2yhgC2v7zqrilE" + ], + "session_origins": { + "ses_1da346c55ffe2yhgC2v7zqrilE": "direct" + }, + "agent": "atlas", + "task_sessions": { + "final-wave:f1": { + "task_key": "final-wave:f1", + "task_label": "F1", + "task_title": "Build + Visual Check", + "session_id": "ses_1d9fc2935ffesVSRCGlGP4wnCU", + "agent": "Sisyphus-Junior", + "category": "quick", + "updated_at": "2026-05-14T10:25:36.103Z", + "started_at": "2026-05-14T10:24:51.820Z", + "status": "completed", + "ended_at": "2026-05-14T10:25:36.103Z", + "elapsed_ms": 44283 + } + } } }, - "active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/seo-blog-categories.md", - "started_at": "2026-05-13T23:32:06.345Z", - "status": "completed", - "updated_at": "2026-05-14T00:35:49.637Z", + "active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/blog-typography-fix.md", + "started_at": "2026-05-14T10:23:17.171Z", + "status": "active", + "updated_at": "2026-05-14T10:25:36.103Z", "session_ids": [ - "ses_1de6ede59ffexUwt5C0sddEWwR" + "ses_1da346c55ffe2yhgC2v7zqrilE" ], "session_origins": { - "ses_1de6ede59ffexUwt5C0sddEWwR": "direct" + "ses_1da346c55ffe2yhgC2v7zqrilE": "direct" }, - "plan_name": "seo-blog-categories", + "plan_name": "blog-typography-fix", "task_sessions": { - "todo:1": { - "task_key": "todo:1", - "task_label": "1", - "task_title": "test-post.md — extra 9th EN blog post (scope creep)", - "session_id": "ses_1dc1d5043ffeFR7r3vy15aTFmv", + "final-wave:f1": { + "task_key": "final-wave:f1", + "task_label": "F1", + "task_title": "Build + Visual Check", + "session_id": "ses_1d9fc2935ffesVSRCGlGP4wnCU", "agent": "Sisyphus-Junior", - "category": "deep", - "started_at": "2026-05-13T23:36:41.704Z", - "ended_at": "2026-05-14T00:33:08.868Z", - "elapsed_ms": 3387164, + "category": "quick", + "updated_at": "2026-05-14T10:25:36.103Z", + "started_at": "2026-05-14T10:24:51.820Z", "status": "completed", - "updated_at": "2026-05-14T00:33:08.868Z" - }, - "todo:7": { - "task_key": "todo:7", - "task_label": "7", - "task_title": "Update generatorSchema.ts with category field", - "session_id": "ses_1dc1d7618ffeRpk0nnIfvvISQH", - "agent": "Sisyphus-Junior", - "category": "unspecified-high", - "started_at": "2026-05-13T23:42:40.563Z", - "status": "completed", - "updated_at": "2026-05-14T00:34:58.498Z", - "ended_at": "2026-05-14T00:34:58.498Z", - "elapsed_ms": 3137935 + "ended_at": "2026-05-14T10:25:36.103Z", + "elapsed_ms": 44283 } }, - "agent": "atlas", - "ended_at": "2026-05-14T00:35:49.637Z", - "elapsed_ms": 3823292 + "agent": "atlas" } \ No newline at end of file diff --git a/.sisyphus/notepads/fill-blog-content/learnings.md b/.sisyphus/notepads/fill-blog-content/learnings.md new file mode 100644 index 0000000..274d53d --- /dev/null +++ b/.sisyphus/notepads/fill-blog-content/learnings.md @@ -0,0 +1,11 @@ +- Task 6 (EN Random Team Picker): Replaced placeholder body with ~1150 words. Used exact h2 headings as specified. Mentioned Team Generator and List Shuffler naturally. Included practical examples: captain-picking bias, Elo-based balancing, youth sports fairness, workshop icebreakers, round-robin scheduling. Verified removal of placeholder phrases via grep. Frontmatter preserved exactly. +- Task 7 (EN Color Theory Palettes): Replaced placeholder body with 1362-word article. Frontmatter preserved. Included required h2 headings, Randify generator mentions, WCAG contrast ratios, hex code examples, and actionable checklist. No placeholder phrases remain. +- Task 8 (EN UUID vs Sequential IDs): Replaced placeholder body with 1310-word article. Frontmatter preserved exactly. Used required h2 headings: What Is a UUID?, Storage and Performance, Collision Probability, Distributed Systems, When to Use What. Included h3 sub-headings: Mitigating Index Bloat, Alternatives Worth Knowing, Quick Decision Checklist. Mentioned UUID v4, ULID, Twitter Snowflake, and MongoDB ObjectId with technical explanations. Referenced Randify's UUID Generator and Hash Generator naturally. Covered practical examples: UUID string length (36 chars), PostgreSQL/MySQL index bloat (30-50% larger), Birthday Problem math (2.7 quintillion square root), Snowflake 64-bit layout, MongoDB ObjectId 12-byte structure. SEO keywords "UUID vs sequential ID", "when to use UUID", and "database ID strategy" placed in first paragraph and h2 headings. Ended with actionable decision checklist. Verified removal of placeholder phrases via grep. No AI-sounding filler used. +- Task 10 (RU Strong Passwords): Replaced placeholder body with 859 words of real Russian content. Frontmatter preserved exactly. Used required h2 headings: Почему длина важнее сложности, Парольные фразы vs пароли, Менеджеры паролей, Двухфакторная аутентификация, Практический чеклист. Referenced NIST SP 800-63B guidelines. Mentioned Randify generators: Генератор паролей, Генератор хешей. Included Russian SEO keywords: надёжные пароли, безопасность паролей, как создать надёжный пароль. Adapted for Russian audience: mentioned Bitwarden/KeePassXC, Russian services supporting 2FA (Яндекс, VK, Сбербанк, Тинькофф). Verified removal of placeholder phrases via grep. +- Task 12 (RU Psychology of Randomness): Replaced placeholder body with ~970 words of real Russian content. Frontmatter preserved exactly. Used required h2 headings: Мозг ищет закономерности, Ошибка горячей руки, Ошибка игрока, Как быть по-настоящему случайным, Инструменты для честности. Referenced classic works of Kahneman and Tversky, the representativeness heuristic, coin-flip randomness generation experiment, basketball hot-hand studies, and roulette gambler's fallacy. Mentioned Randify generators: Подбрасывание монеты, Да/Нет, Случайное число. Included Russian SEO keywords: психология случайности, человеческие предубеждения в восприятии случайности, ошибка игрока. Adapted for Russian audience with local context (friends choosing a movie, sports betting, Sberbank/Tinkoff not mentioned here but general audience adaptation). Verified removal of placeholder phrases via grep and confirmed word count via wc. +- Task 11 (RU Dice Notation Guide): Replaced placeholder body with 1087-word article. Frontmatter preserved exactly. Used required h2 headings: Базовая нотация, Типы кубиков, Модификаторы и преимущество, Взрывающиеся кубики, Цифровые генераторы кубиков. Covered d4 through d20 and percentile dice (d100). Explained advantage/disadvantage (D&D 5e) and exploding dice mechanic. Mentioned Russian RPGs "Тайна" and "Эра Водолея". Referenced Randify Генератор кубиков naturally with internal link. Included Russian SEO keywords: нотация кубиков, кубики для D&D, ролевые игры кубики. Verified placeholder removal via grep (exit code 1 for both phrases). No external links. No AI-sounding filler. +- Task 9 (RU Cryptographically Secure Randomness): Replaced placeholder body with 938 words of real Russian content. Frontmatter preserved exactly. Used required h2 headings: Что такое криптографически стойкая случайность, Почему Math.random недостаточно, Где это важно, Практический чеклист, Выводы. Included practical examples: crypto.getRandomValues(), /dev/urandom, Python secrets module, Go crypto/rand, Linux getrandom() syscall. Mentioned Russian regulatory context: FSTEC/FSB certification for state systems. Referenced Randify generators: Генератор паролей, Генератор хешей, Генератор UUID. SEO keywords placed in h2 and first paragraph. Verified removal of placeholder phrases via grep. No AI-sounding filler used. +- Task 14 (RU Random Team Selection): Replaced placeholder body with 997 words of real Russian content. Frontmatter preserved exactly. Used required h2 headings: Устранение предвзятости, Случайные vs сбалансированные команды, Спортивные лиги, Корпоративные мероприятия, Инструменты и советы. Included h3 sub-headings: Проблема капитанского выбора, Прозрачность создает доверие, Когда работает чистая случайность, Балансировка по уровню навыков, Гибридный подход, Честность в детском спорте, Круговая система турниров, Ледоколы для тренингов, Кросс-функциональные проекты, Использование генератора команд, Объяснение процесса участникам. Mentioned Randify generators: Генератор команд, Перемешивание списка. Included practical examples: captain-picking bias in Russian school context, skill-based tier balancing, youth sports fairness (coaches stacking rosters), workshop icebreakers with cross-department mixing, round-robin scheduling for tournaments. Russian SEO keywords placed: случайный выбор команд, честное формирование команд, генератор команд. Adapted for Russian audience: mentioned schoolyard captain picking, youth sports sections, corporate trainings. Verified removal of placeholder phrases via grep (no matches). Ended with actionable checklist. +- Task 15 (RU Color Theory Guide): Replaced placeholder body with 1166 words of real Russian content. Frontmatter preserved exactly. Used required h2 headings: Цветовой круг, Комплементарные цвета, Аналоговые и триадные схемы, Доступность и контраст, Использование генераторов палитр. Included h3 sub-headings for analogous and triadic sections. Mentioned Randify generators: Генератор цветов, Генератор градиентов, Генератор палитр. Included Russian SEO keywords: теория цвета палитры, гармоничные цветовые палитры, генератор цветовой палитры. Provided practical examples: RGB/CMYK basics, hex codes (#534AB7, #1E3A8A, #F97316, #9CA3AF, #4B5563), WCAG contrast ratios (4.5:1, 3:1, 7:1), color blindness testing (deuteranopia/protanopia), 60-30-10 rule. Adapted for Russian audience with local terminology and phrasing, not a verbatim translation. Verified removal of placeholder phrases via grep (no matches for "stay tuned" or "this article will explore"). Ended with actionable checklist. No AI-sounding filler. No external links. +- Task 16 (RU UUID vs Sequential IDs): Replaced placeholder body with 1121 words of real Russian content. Frontmatter preserved exactly. Used required h2 headings: Что такое UUID?, Хранение и производительность, Вероятность коллизии, Распределённые системы, Когда что использовать. Included h3 sub-headings: Как уменьшить влияние на индексы, Альтернативы, которые стоит знать, Быстрый чек-лист для выбора. Mentioned UUID v4, ULID, Twitter Snowflake IDs, MongoDB ObjectId with technical explanations. Referenced Randify generators: Генератор UUID, Генератор хешей. Included Russian SEO keywords: «UUID vs последовательный ID», «когда использовать UUID», «стратегия идентификаторов базы данных». Provided practical examples: UUID string length (36 chars), PostgreSQL/MySQL index bloat (30-50% larger), Birthday Problem math (2.7 quintillion square root, 85 years at 1M/sec), Snowflake 64-bit layout, MongoDB ObjectId 12-byte structure. Adapted for Russian audience with local terminology and phrasing, not a verbatim translation. Verified removal of placeholder phrases via grep (no matches for "stay tuned" or "this article will explore"). Ended with actionable decision checklist. No AI-sounding filler. No external links. +- Task 13 (RU RNG in Gaming): Replaced placeholder body with 1093 words of real Russian content. Frontmatter preserved exactly. Used required h2 headings: Псевдослучайные и истинные генераторы, Сид и детерминизм, Лутбоксы и регулирование, Аудит честности, Доверие игроков. Included practical examples: Mersenne Twister, xorshift, LCG algorithms, 1999 Cigital poker seed vulnerability, /dev/urandom, CryptGenRandom, pity systems, China/EU/UK loot box regulation, 2023 Roskomnadzor discussions, Malta/Gibraltar licensing, eCOGRA/iTech Labs/GLI auditing, Chi-Square/Kolmogorov-Smirnov/diehard tests, provably fair crypto casinos. Mentioned Randify generators: Генератор кубиков, Лотерея, Колесо фортуны. Included Russian SEO keywords: RNG в играх, генератор случайных чисел в играх, честность в играх. Adapted for Russian audience with local context (Roskomnadzor, CIS studios). Verified removal of placeholder phrases via grep (exit code 1 for both). No external links. No AI-sounding filler. No em/en dashes. diff --git a/.sisyphus/plans/blog-typography-fix.md b/.sisyphus/plans/blog-typography-fix.md new file mode 100644 index 0000000..d445eec --- /dev/null +++ b/.sisyphus/plans/blog-typography-fix.md @@ -0,0 +1,122 @@ +# Plan: Add Typography Styles to Blog Posts + +## TL;DR + +> The `@tailwindcss/typography` plugin is installed but not registered in the CSS. Add `@plugin "@tailwindcss/typography";` to `BaseLayout.astro`, rebuild, verify that blog posts render with proper typography, and commit. +> +> **Deliverables**: 1 modified file (`BaseLayout.astro`), build passes, prettier blog rendering +> **Estimated Effort**: Quick +> **Parallel Execution**: NO — single task + +--- + +## Context + +### Problem Discovered +After filling all 16 blog posts with real content, the user noticed that posts render as plain text without formatting. Investigation revealed: + +- `BlogLayout.astro` already applies `prose prose-invert prose-zinc` to the content container +- The `@tailwindcss/typography` plugin was **not installed** (hence `prose` did nothing) +- Plugin was installed via `npm install -D @tailwindcss/typography` during diagnosis +- The plugin still needs to be **registered in the CSS** with `@plugin "@tailwindcss/typography";` + +### Root Cause +In Tailwind CSS v4, plugins must be explicitly loaded in the CSS file. The `@import "tailwindcss";` in `BaseLayout.astro` is not enough — the typography plugin requires `@plugin "@tailwindcss/typography";`. + +--- + +## Work Objectives + +### Core Objective +Register the typography plugin so that the `prose` class in `BlogLayout.astro` actually styles rendered Markdown. + +### Concrete Deliverables +- `src/layouts/BaseLayout.astro` — add `@plugin "@tailwindcss/typography";` +- Build passes with 0 errors +- Blog posts display styled headings, lists, code blocks, and other Markdown elements + +### Definition of Done +- [ ] `npm run build` produces 92+ pages with 0 errors +- [ ] A rendered blog post shows styled `h2`, `ul`, `code`, and `strong` elements (not plain browser defaults) + +### Must Have +- Plugin registered correctly for Tailwind v4 syntax (`@plugin`) +- No visual regressions on non-blog pages + +### Must NOT Have +- Do NOT install additional unrelated packages +- Do NOT change existing prose classes in `BlogLayout.astro` + +--- + +## Execution Strategy + +### Task 1: Register Typography Plugin + +- [x] 1. Register `@tailwindcss/typography` plugin + + **What to do**: + - Edit `src/layouts/BaseLayout.astro` + - Find the `